OMAPDSS: HDMI: wait for framedone when stopping video
authorTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 24 Mar 2015 13:46:34 +0000 (15:46 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 17 Jun 2015 12:53:40 +0000 (15:53 +0300)
At the moment when HDMI video output is stopped, we just clear the
enable bit and return. While it's unclear if this can cause any issues,
I think it's still better to wait for FRAMEDONE interrupt after clearing
the enable bit so that we're sure the HDMI IP has finished.

As we don't have any ready-made irq handling for HDMI, and this only
needs to be done when disabling the HDMI output, this patch implements a
simple loop with sleep, polling the FRAMEDONE bit.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/video/fbdev/omap2/dss/hdmi_wp.c

index c15377e242cc44244b90f517c63c78fcf9412c62..7c544bc56fb5d4400b4d7c32a96809ce6a2dd2a1 100644 (file)
@@ -110,7 +110,23 @@ int hdmi_wp_video_start(struct hdmi_wp_data *wp)
 
 void hdmi_wp_video_stop(struct hdmi_wp_data *wp)
 {
+       int i;
+
+       hdmi_write_reg(wp->base, HDMI_WP_IRQSTATUS, HDMI_IRQ_VIDEO_FRAME_DONE);
+
        REG_FLD_MOD(wp->base, HDMI_WP_VIDEO_CFG, false, 31, 31);
+
+       for (i = 0; i < 50; ++i) {
+               u32 v;
+
+               msleep(20);
+
+               v = hdmi_read_reg(wp->base, HDMI_WP_IRQSTATUS_RAW);
+               if (v & HDMI_IRQ_VIDEO_FRAME_DONE)
+                       return;
+       }
+
+       DSSERR("no HDMI FRAMEDONE when disabling output\n");
 }
 
 void hdmi_wp_video_config_format(struct hdmi_wp_data *wp,