OMAP: DSS2: OMAPFB: Implement auto-update mode
Implement auto-update mode for manual-update displays. omapfb driver uses a delayed work to update the display with a constant rate. The update mode can be changed via OMAPFB_SET_UPDATE_MODE ioctl, which previously called omapdss but is now handled inside omapfb, and a new sysfs file, "update_mode". The update interval is by default 20 times per second, but can be changed via "auto_update_freq" module parameter. There is also a new module parameter "auto_update", which will make omapfb start manual update displays in auto-update mode. This auto-update mode can be used for testing if the userspace does not support manual update displays properly. However, it is a very inefficient solution, and should be considered more as a hack for testing than something that could be used as a long term solution. Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
@@ -518,6 +518,39 @@ static ssize_t show_virt(struct device *dev,
|
||||
return snprintf(buf, PAGE_SIZE, "%p\n", ofbi->region->vaddr);
|
||||
}
|
||||
|
||||
static ssize_t show_upd_mode(struct device *dev,
|
||||
struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct fb_info *fbi = dev_get_drvdata(dev);
|
||||
enum omapfb_update_mode mode;
|
||||
int r;
|
||||
|
||||
r = omapfb_get_update_mode(fbi, &mode);
|
||||
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
return snprintf(buf, PAGE_SIZE, "%u\n", (unsigned)mode);
|
||||
}
|
||||
|
||||
static ssize_t store_upd_mode(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
struct fb_info *fbi = dev_get_drvdata(dev);
|
||||
unsigned mode;
|
||||
int r;
|
||||
|
||||
r = kstrtouint(buf, 0, &mode);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
r = omapfb_set_update_mode(fbi, mode);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
static struct device_attribute omapfb_attrs[] = {
|
||||
__ATTR(rotate_type, S_IRUGO | S_IWUSR, show_rotate_type,
|
||||
store_rotate_type),
|
||||
@@ -528,6 +561,7 @@ static struct device_attribute omapfb_attrs[] = {
|
||||
store_overlays_rotate),
|
||||
__ATTR(phys_addr, S_IRUGO, show_phys, NULL),
|
||||
__ATTR(virt_addr, S_IRUGO, show_virt, NULL),
|
||||
__ATTR(update_mode, S_IRUGO | S_IWUSR, show_upd_mode, store_upd_mode),
|
||||
};
|
||||
|
||||
int omapfb_create_sysfs(struct omapfb2_device *fbdev)
|
||||
|
Reference in New Issue
Block a user