aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcodeworkx <codeworkx@cyanogenmod.org>2012-12-01 13:01:44 +0100
committercodeworkx <codeworkx@cyanogenmod.org>2012-12-09 18:01:47 +0100
commitc4efacda550bb44fcbb99ef6c8e89ca95f08fcf4 (patch)
tree320f5c8e74a6505c68626a36606dde50bdc1e9d2
parent6c611f280204d02454594ab8ba5a82b9c75909c9 (diff)
downloadkernel_samsung_espresso10-c4efacda550bb44fcbb99ef6c8e89ca95f08fcf4.tar.gz
kernel_samsung_espresso10-c4efacda550bb44fcbb99ef6c8e89ca95f08fcf4.tar.bz2
kernel_samsung_espresso10-c4efacda550bb44fcbb99ef6c8e89ca95f08fcf4.zip
omapfb: implement vsync sysfs, make uevents optional
Change-Id: I0e5ee71131dde198b5995f12e9f6a38205744237
-rw-r--r--arch/arm/configs/cyanogenmod_p3100_defconfig2
-rw-r--r--arch/arm/configs/cyanogenmod_p3110_defconfig2
-rw-r--r--arch/arm/configs/cyanogenmod_p3113_defconfig2
-rw-r--r--arch/arm/configs/cyanogenmod_p5100_defconfig2
-rw-r--r--arch/arm/configs/cyanogenmod_p5110_defconfig2
-rw-r--r--arch/arm/configs/cyanogenmod_p5113_defconfig2
-rw-r--r--drivers/video/omap2/omapfb/Kconfig14
-rw-r--r--drivers/video/omap2/omapfb/omapfb-main.c26
8 files changed, 52 insertions, 0 deletions
diff --git a/arch/arm/configs/cyanogenmod_p3100_defconfig b/arch/arm/configs/cyanogenmod_p3100_defconfig
index 91c90c89c95..2ce7db87639 100644
--- a/arch/arm/configs/cyanogenmod_p3100_defconfig
+++ b/arch/arm/configs/cyanogenmod_p3100_defconfig
@@ -1707,6 +1707,8 @@ CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
CONFIG_FB_OMAP2=y
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=2
+# CONFIG_FB_OMAP2_VSYNC_SEND_UEVENTS is not set
+CONFIG_FB_OMAP2_VSYNC_SYSFS=y
#
# OMAP2/3 Display Device Drivers
diff --git a/arch/arm/configs/cyanogenmod_p3110_defconfig b/arch/arm/configs/cyanogenmod_p3110_defconfig
index 91c90c89c95..2ce7db87639 100644
--- a/arch/arm/configs/cyanogenmod_p3110_defconfig
+++ b/arch/arm/configs/cyanogenmod_p3110_defconfig
@@ -1707,6 +1707,8 @@ CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
CONFIG_FB_OMAP2=y
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=2
+# CONFIG_FB_OMAP2_VSYNC_SEND_UEVENTS is not set
+CONFIG_FB_OMAP2_VSYNC_SYSFS=y
#
# OMAP2/3 Display Device Drivers
diff --git a/arch/arm/configs/cyanogenmod_p3113_defconfig b/arch/arm/configs/cyanogenmod_p3113_defconfig
index 91c90c89c95..2ce7db87639 100644
--- a/arch/arm/configs/cyanogenmod_p3113_defconfig
+++ b/arch/arm/configs/cyanogenmod_p3113_defconfig
@@ -1707,6 +1707,8 @@ CONFIG_OMAP2_DSS_SLEEP_AFTER_VENC_RESET=y
CONFIG_FB_OMAP2=y
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=2
+# CONFIG_FB_OMAP2_VSYNC_SEND_UEVENTS is not set
+CONFIG_FB_OMAP2_VSYNC_SYSFS=y
#
# OMAP2/3 Display Device Drivers
diff --git a/arch/arm/configs/cyanogenmod_p5100_defconfig b/arch/arm/configs/cyanogenmod_p5100_defconfig
index dfb62c0f7c1..5feb2217d6d 100644
--- a/arch/arm/configs/cyanogenmod_p5100_defconfig
+++ b/arch/arm/configs/cyanogenmod_p5100_defconfig
@@ -1710,6 +1710,8 @@ CONFIG_OMAP_HDMI_AUDIO_CH_EVENT=y
CONFIG_FB_OMAP2=y
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=2
+# CONFIG_FB_OMAP2_VSYNC_SEND_UEVENTS is not set
+CONFIG_FB_OMAP2_VSYNC_SYSFS=y
#
# OMAP2/3 Display Device Drivers
diff --git a/arch/arm/configs/cyanogenmod_p5110_defconfig b/arch/arm/configs/cyanogenmod_p5110_defconfig
index dfb62c0f7c1..5feb2217d6d 100644
--- a/arch/arm/configs/cyanogenmod_p5110_defconfig
+++ b/arch/arm/configs/cyanogenmod_p5110_defconfig
@@ -1710,6 +1710,8 @@ CONFIG_OMAP_HDMI_AUDIO_CH_EVENT=y
CONFIG_FB_OMAP2=y
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=2
+# CONFIG_FB_OMAP2_VSYNC_SEND_UEVENTS is not set
+CONFIG_FB_OMAP2_VSYNC_SYSFS=y
#
# OMAP2/3 Display Device Drivers
diff --git a/arch/arm/configs/cyanogenmod_p5113_defconfig b/arch/arm/configs/cyanogenmod_p5113_defconfig
index dfb62c0f7c1..5feb2217d6d 100644
--- a/arch/arm/configs/cyanogenmod_p5113_defconfig
+++ b/arch/arm/configs/cyanogenmod_p5113_defconfig
@@ -1710,6 +1710,8 @@ CONFIG_OMAP_HDMI_AUDIO_CH_EVENT=y
CONFIG_FB_OMAP2=y
CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
CONFIG_FB_OMAP2_NUM_FBS=2
+# CONFIG_FB_OMAP2_VSYNC_SEND_UEVENTS is not set
+CONFIG_FB_OMAP2_VSYNC_SYSFS=y
#
# OMAP2/3 Display Device Drivers
diff --git a/drivers/video/omap2/omapfb/Kconfig b/drivers/video/omap2/omapfb/Kconfig
index d15486e1cba..369e85fd046 100644
--- a/drivers/video/omap2/omapfb/Kconfig
+++ b/drivers/video/omap2/omapfb/Kconfig
@@ -27,3 +27,17 @@ config FB_OMAP2_NUM_FBS
help
Select the number of framebuffers created. OMAP2/3 has 3 overlays
so normally this would be 3.
+
+config FB_OMAP2_VSYNC_SEND_UEVENTS
+ bool "OMAPFB vsync uevents"
+ default y
+ depends on FB_OMAP2
+ help
+ Pass vsync via uevent to userspace.
+
+config FB_OMAP2_VSYNC_SYSFS
+ bool "OMAPFB vsync sysfs"
+ default n
+ depends on FB_OMAP2
+ help
+ Pass vsync via sysfs to userspace.
diff --git a/drivers/video/omap2/omapfb/omapfb-main.c b/drivers/video/omap2/omapfb/omapfb-main.c
index 3562773b3a0..befd6c2a375 100644
--- a/drivers/video/omap2/omapfb/omapfb-main.c
+++ b/drivers/video/omap2/omapfb/omapfb-main.c
@@ -2291,10 +2291,23 @@ static int omapfb_init_display(struct omapfb2_device *fbdev,
return 0;
}
+#ifdef CONFIG_FB_OMAP2_VSYNC_SYSFS
+static ssize_t omapfb_vsync_time(struct device *dev,
+ struct device_attribute *attr, char *buf)
+{
+ struct omapfb2_device *fbdev = dev_get_drvdata(dev);
+
+ return snprintf(buf, PAGE_SIZE, "%llu", ktime_to_ns(fbdev->vsync_timestamp));
+}
+static DEVICE_ATTR(vsync_time, S_IRUGO, omapfb_vsync_time, NULL);
+#endif
+
static void omapfb_send_vsync_work(struct work_struct *work)
{
struct omapfb2_device *fbdev =
container_of(work, typeof(*fbdev), vsync_work);
+
+#ifdef CONFIG_FB_OMAP2_VSYNC_SEND_UEVENTS
char buf[64];
char *envp[2];
@@ -2303,6 +2316,11 @@ static void omapfb_send_vsync_work(struct work_struct *work)
envp[0] = buf;
envp[1] = NULL;
kobject_uevent_env(&fbdev->dev->kobj, KOBJ_CHANGE, envp);
+#endif
+
+#ifdef CONFIG_FB_OMAP2_VSYNC_SYSFS
+ sysfs_notify(&fbdev->dev->kobj, NULL, "vsync_time");
+#endif
}
static void omapfb_vsync_isr(void *data, u32 mask)
{
@@ -2442,6 +2460,14 @@ static int omapfb_probe(struct platform_device *pdev)
goto cleanup;
}
+#ifdef CONFIG_FB_OMAP2_VSYNC_SYSFS
+ r = device_create_file(fbdev->dev, &dev_attr_vsync_time);
+ if (r) {
+ dev_err(fbdev->dev, "failed to add sysfs entries\n");
+ goto cleanup;
+ }
+#endif
+
INIT_WORK(&fbdev->vsync_work, omapfb_send_vsync_work);
return 0;