summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: cf34b78)
raw | patch | inline | side by side (parent: cf34b78)
author | Muralidhar Dixit <murali.dixit@ti.com> | |
Tue, 9 Apr 2013 23:41:35 +0000 (16:41 -0700) | ||
committer | Praneeth Bajjuri <praneeth@ti.com> | |
Fri, 12 Jul 2013 22:28:58 +0000 (17:28 -0500) |
Select correct VSYNC IRQ for asynchronous vsync notification
based on the DSS channel.
Current VSYNC notification supports only primary LCD panel.
To support VSYNC notification for default HDMI display this
patch adds the VSYNC IRQ selection based on the DSS channel
for default display.
Change-Id: I0594e80d4b4850c278e6bdd3b07c0cb63488be39
Signed-off-by: Muralidhar Dixit <murali.dixit@ti.com>
Signed-off-by: Dandawate Saket <dsaket@ti.com>
based on the DSS channel.
Current VSYNC notification supports only primary LCD panel.
To support VSYNC notification for default HDMI display this
patch adds the VSYNC IRQ selection based on the DSS channel
for default display.
Change-Id: I0594e80d4b4850c278e6bdd3b07c0cb63488be39
Signed-off-by: Muralidhar Dixit <murali.dixit@ti.com>
Signed-off-by: Dandawate Saket <dsaket@ti.com>
drivers/video/omap2/omapfb/omapfb-ioctl.c | patch | blob | history | |
drivers/video/omap2/omapfb/omapfb-main.c | patch | blob | history | |
drivers/video/omap2/omapfb/omapfb.h | patch | blob | history |
index dc9da240713fc2c2b4dbd638f402906f7211b716..87d61811e4b65fc2ae5926ebdd11399430e2f5b9 100644 (file)
if (display->state == OMAP_DSS_DISPLAY_ACTIVE) {
if (p.crt)
- omapfb_enable_vsync(fbdev);
+ omapfb_enable_vsync(fbdev, display->channel,
+ true);
else
- omapfb_disable_vsync(fbdev);
+ omapfb_enable_vsync(fbdev, display->channel,
+ false);
}
omapfb_unlock(fbdev);
break;
index 87805861faaad52c785cfe3669d8e089b8d15a8f..061a133b36a46d43e7bba7df6d81b58f5b7ee482 100644 (file)
{
struct omapfb_info *ofbi = FB2OFB(fbi);
struct omapfb2_device *fbdev = ofbi->fbdev;
+ struct omap_dss_device *display = fb2display(fbi);
- omapfb_disable_vsync(fbdev);
+ if (!display)
+ return -ENODEV;
+
+ omapfb_enable_vsync(fbdev, display->channel, false);
return 0;
}
!d->auto_update_work_enabled)
omapfb_start_auto_update(fbdev, display);
- if (fbdev->vsync_active)
- omapfb_enable_vsync(fbdev);
+ if (fbdev->vsync_active &&
+ (display->state == OMAP_DSS_DISPLAY_ACTIVE))
+ omapfb_enable_vsync(fbdev, display->channel, true);
break;
case FB_BLANK_HSYNC_SUSPEND:
case FB_BLANK_POWERDOWN:
if (fbdev->vsync_active)
- omapfb_disable_vsync(fbdev);
+ omapfb_enable_vsync(fbdev, display->channel, false);
if (display->state != OMAP_DSS_DISPLAY_ACTIVE)
goto exit;
schedule_work(&fbdev->vsync_work);
}
-int omapfb_enable_vsync(struct omapfb2_device *fbdev)
+int omapfb_enable_vsync(struct omapfb2_device *fbdev, enum omap_channel ch,
+ bool enable)
{
- int r;
- /* TODO: should determine correct IRQ like dss_mgr_wait_for_vsync does*/
- r = omap_dispc_register_isr(omapfb_vsync_isr, fbdev, DISPC_IRQ_VSYNC);
- return r;
-}
+ int r = 0;
+ const u32 masks[] = {
+ DISPC_IRQ_VSYNC,
+ DISPC_IRQ_EVSYNC_EVEN,
+ DISPC_IRQ_VSYNC2
+ };
-void omapfb_disable_vsync(struct omapfb2_device *fbdev)
-{
- omap_dispc_unregister_isr(omapfb_vsync_isr, fbdev, DISPC_IRQ_VSYNC);
+ if (ch > OMAP_DSS_CHANNEL_LCD2) {
+ pr_warn("%s wrong channel number\n", __func__);
+ return -ENODEV;
+ }
+
+ if (enable)
+ r = omap_dispc_register_isr(omapfb_vsync_isr, fbdev,
+ masks[ch]);
+ else
+ r = omap_dispc_unregister_isr(omapfb_vsync_isr, fbdev,
+ masks[ch]);
+
+ return r;
}
static int __init omapfb_probe(struct platform_device *pdev)
index a5f305fad23f25ad9c46ec98bffa6bed66bf6903..b41188d06e8454136988008f9c507d010fcd1433 100644 (file)
struct omap_dss_device *display);
int omapfb_get_update_mode(struct fb_info *fbi, enum omapfb_update_mode *mode);
int omapfb_set_update_mode(struct fb_info *fbi, enum omapfb_update_mode mode);
-int omapfb_enable_vsync(struct omapfb2_device *fbdev);
-void omapfb_disable_vsync(struct omapfb2_device *fbdev);
+int omapfb_enable_vsync(struct omapfb2_device *fbdev, enum omap_channel ch,
+ bool enable);
void get_fb_resolution(struct omap_dss_device *dssdev,
u16 *xres, u16 *yres);