video: rockchip: hdmi: skip operation when suspend or disabled
authorZheng Yang <zhengyang@rock-chips.com>
Tue, 1 Mar 2016 06:25:47 +0000 (14:25 +0800)
committerZheng Yang <zhengyang@rock-chips.com>
Tue, 1 Mar 2016 10:03:17 +0000 (18:03 +0800)
Change-Id: I294d338416a04d751ec5a5771e6b623ba7b69c02
Signed-off-by: Zheng Yang <zhengyang@rock-chips.com>
(cherry picked from commit 0fdde42e0c459c9cc1b315cf2fbb0894d57ec0e4)

drivers/video/rockchip/hdmi/rockchip-hdmi-core.c

index 344f23691e3723fc4aa6fa4c2cf0d9a46e4629da..0a88285cc84ca211e580e6f0b75fdd1abeb09c22 100644 (file)
@@ -307,6 +307,13 @@ static void hdmi_work_queue(struct work_struct *work)
            (event & 0xFF00) >> 8,
            event & 0xFF);
 
+       if ((!hdmi->enable || hdmi->sleep) &&
+           (event != HDMI_ENABLE_CTL) &&
+           (event != HDMI_RESUME_CTL) &&
+           (event != HDMI_DISABLE_CTL) &&
+           (event != HDMI_SUSPEND_CTL))
+               goto exit;
+
        switch (event) {
        case HDMI_ENABLE_CTL:
                if (!hdmi->enable) {
@@ -369,24 +376,21 @@ static void hdmi_work_queue(struct work_struct *work)
                }
                break;
        case HDMI_SET_VIDEO:
-               if (hdmi->enable && !hdmi->sleep) {
-                       hdmi_wq_set_output(hdmi,
-                                          HDMI_VIDEO_MUTE | HDMI_AUDIO_MUTE);
-                       if (rk_fb_get_display_policy() == DISPLAY_POLICY_BOX)
-                               msleep(2000);
-                       else
-                               msleep(1000);
-                       hdmi_wq_set_video(hdmi);
-                       hdmi_send_uevent(hdmi, KOBJ_CHANGE);
-                       hdmi_wq_set_audio(hdmi);
-                       hdmi_wq_set_output(hdmi, hdmi->mute);
-                       if (hdmi->ops->hdcp_cb)
-                               hdmi->ops->hdcp_cb(hdmi);
-               }
+               hdmi_wq_set_output(hdmi,
+                                  HDMI_VIDEO_MUTE | HDMI_AUDIO_MUTE);
+               if (rk_fb_get_display_policy() == DISPLAY_POLICY_BOX)
+                       msleep(2000);
+               else
+                       msleep(1000);
+               hdmi_wq_set_video(hdmi);
+               hdmi_send_uevent(hdmi, KOBJ_CHANGE);
+               hdmi_wq_set_audio(hdmi);
+               hdmi_wq_set_output(hdmi, hdmi->mute);
+               if (hdmi->ops->hdcp_cb)
+                       hdmi->ops->hdcp_cb(hdmi);
                break;
        case HDMI_SET_AUDIO:
-               if ((hdmi->mute & HDMI_AUDIO_MUTE) == 0 &&
-                   hdmi->enable && !hdmi->sleep) {
+               if ((hdmi->mute & HDMI_AUDIO_MUTE) == 0) {
                        hdmi_wq_set_output(hdmi, HDMI_AUDIO_MUTE);
                        hdmi_wq_set_audio(hdmi);
                        hdmi_wq_set_output(hdmi, hdmi->mute);
@@ -395,7 +399,6 @@ static void hdmi_work_queue(struct work_struct *work)
        case HDMI_MUTE_AUDIO:
        case HDMI_UNMUTE_AUDIO:
                if (hdmi->mute & HDMI_AUDIO_MUTE ||
-                   !hdmi->enable || hdmi->sleep ||
                    hdmi->hotplug != HDMI_HPD_ACTIVED)
                        break;
                if (event == HDMI_MUTE_AUDIO)
@@ -445,7 +448,7 @@ static void hdmi_work_queue(struct work_struct *work)
        default:
                break;
        }
-
+exit:
        kfree(hdmi_w->data);
        if (!hdmi_w->sync)
                kfree(hdmi_w);