tegra: dc: don't call tegra_dc_hpd in atomic context
authorAlexandre Courbot <acourbot@nvidia.com>
Thu, 4 Apr 2013 18:37:16 +0000 (11:37 -0700)
committerSimone Willett <swillett@nvidia.com>
Fri, 26 Apr 2013 00:46:22 +0000 (17:46 -0700)
tegra_dc_hpd(), which uses gpio_get_value_cansleep(), is called from
tegra_dc_hdmi_resume() in atomic context. Move this call outside of the
atomic context to avoid potential lockup.

Change-Id: I983e58724727803c67a4145e11630746aff86a52
Signed-off-by: Alexandre Courbot <acourbot@nvidia.com>
Reviewed-on: http://git-master/r/216593
Reviewed-by: Simone Willett <swillett@nvidia.com>
Tested-by: Simone Willett <swillett@nvidia.com>
drivers/video/tegra/dc/hdmi.c

index 98ee16c170a49df5898726b449d911def2d4b11c..07b2296682e9b187bb121b3699ddac33397d776c 100644 (file)
@@ -973,17 +973,14 @@ static void tegra_dc_hdmi_suspend(struct tegra_dc *dc)
 static void tegra_dc_hdmi_resume(struct tegra_dc *dc)
 {
        struct tegra_dc_hdmi_data *hdmi = tegra_dc_get_outdata(dc);
+       bool hpd = tegra_dc_hdmi_hpd(dc);
        unsigned long flags;
 
        spin_lock_irqsave(&hdmi->suspend_lock, flags);
        hdmi->suspended = false;
 
-       if (tegra_dc_hdmi_hpd(dc))
-               queue_delayed_work(system_nrt_wq, &hdmi->work,
-                                  msecs_to_jiffies(100));
-       else
-               queue_delayed_work(system_nrt_wq, &hdmi->work,
-                                  msecs_to_jiffies(30));
+       queue_delayed_work(system_nrt_wq, &hdmi->work,
+                          msecs_to_jiffies(hpd ? 100 : 30));
 
        spin_unlock_irqrestore(&hdmi->suspend_lock, flags);
        tegra_nvhdcp_resume(hdmi->nvhdcp);