diff options
author | Andrew Dodd <atd7@cornell.edu> | 2012-12-01 10:50:03 +0100 |
---|---|---|
committer | codeworkx <codeworkx@cyanogenmod.org> | 2013-01-09 22:35:42 +0100 |
commit | c1713e6a8fc8c346fb90581e815a5298ecc0595d (patch) | |
tree | 317195d806618f9a640322170d57d0f01138f42c /drivers/video | |
parent | 49017aa9e80dbdb44cbfe8f4aa3b5edd9466705c (diff) | |
download | kernel_samsung_smdk4412-c1713e6a8fc8c346fb90581e815a5298ecc0595d.zip kernel_samsung_smdk4412-c1713e6a8fc8c346fb90581e815a5298ecc0595d.tar.gz kernel_samsung_smdk4412-c1713e6a8fc8c346fb90581e815a5298ecc0595d.tar.bz2 |
s3cfb: Notify userspace of vsync using sysfs, make uevents optional
Change-Id: I6fe8de47961d5c0ba73eb45543a675b6fd4344a4
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/samsung/Kconfig | 18 | ||||
-rw-r--r-- | drivers/video/samsung/s3cfb_main.c | 23 |
2 files changed, 41 insertions, 0 deletions
diff --git a/drivers/video/samsung/Kconfig b/drivers/video/samsung/Kconfig index 09711d3..0234465 100644 --- a/drivers/video/samsung/Kconfig +++ b/drivers/video/samsung/Kconfig @@ -38,6 +38,24 @@ config FB_S5P_VSYNC_THREAD bool "S5P Framebuffer vsync thread" depends on FB_S5P +config FB_S5P_VSYNC_SEND_UEVENTS + bool "S5P Framebuffer vsync uevents" + depends on FB_S5P_VSYNC_THREAD + default n + help + Some hwcomposer implementations support vsync hinting via uevents to userspace + However this also wakes up many other parts of Android, draining battery. + ICS hwcomposer does not support any form of sync, so these uevents should be + optional and only sent to HWC implementations that expect uevents to be sent + +config FB_S5P_VSYNC_SYSFS + bool "S5P Framebuffer vsync via sysfs" + depends on FB_S5P_VSYNC_THREAD + default n + help + A more efficient method of passing vsync to userspace that doesn't + broadcast uevents. + config FB_S5P_TRACE_UNDERRUN bool "S5P Framebuffer FIFO underrun trace" depends on FB_S5P diff --git a/drivers/video/samsung/s3cfb_main.c b/drivers/video/samsung/s3cfb_main.c index a723306..fadea40 100644 --- a/drivers/video/samsung/s3cfb_main.c +++ b/drivers/video/samsung/s3cfb_main.c @@ -387,6 +387,18 @@ static ssize_t fimd_dump_show(struct device *dev, } static DEVICE_ATTR(fimd_dump, 0444, fimd_dump_show, NULL); +#ifdef CONFIG_FB_S5P_VSYNC_SYSFS +static ssize_t s3c_fb_vsync_time(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct s3cfb_global *fbdev = fbfimd->fbdev[0]; + + return snprintf(buf, PAGE_SIZE, "%llu", ktime_to_ns(fbdev->vsync_info.timestamp)); +} + +static DEVICE_ATTR(vsync_time, S_IRUGO, s3c_fb_vsync_time, NULL); +#endif + #if 0 /* def CONFIG_FB_S5P_MIPI_DSIM */ void s3cfb_display_on_remote(void) { @@ -430,6 +442,7 @@ static int s3cfb_wait_for_vsync_thread(void *data) msecs_to_jiffies(VSYNC_TIMEOUT_MSEC)); if (ret > 0) { +#if defined(CONFIG_FB_S5P_VSYNC_SEND_UEVENTS) char *envp[2]; char buf[64]; snprintf(buf, sizeof(buf), "VSYNC=%llu", @@ -438,6 +451,10 @@ static int s3cfb_wait_for_vsync_thread(void *data) envp[1] = NULL; kobject_uevent_env(&fbdev->dev->kobj, KOBJ_CHANGE, envp); +#endif +#if defined(CONFIG_FB_S5P_VSYNC_SYSFS) + sysfs_notify(&fbdev->dev->kobj, NULL, "vsync_time"); +#endif } } @@ -667,6 +684,12 @@ static int s3cfb_probe(struct platform_device *pdev) if (ret < 0) dev_err(fbdev[0]->dev, "failed to add sysfs entries\n"); +#ifdef CONFIG_FB_S5P_VSYNC_SYSFS + ret = device_create_file(fbdev[i]->dev, &dev_attr_vsync_time); + if (ret < 0) + dev_err(fbdev[0]->dev, "failed to add sysfs entries\n"); +#endif + ret = device_create_file(fbdev[i]->dev, &dev_attr_ielcd_dump); if (ret < 0) dev_err(fbdev[0]->dev, "failed to add sysfs entries\n"); |