drm/tegra: dpaux: Disable interrupt when detached
authorThierry Reding <treding@nvidia.com>
Fri, 3 Jul 2015 12:56:46 +0000 (14:56 +0200)
committerThierry Reding <treding@nvidia.com>
Thu, 13 Aug 2015 11:47:49 +0000 (13:47 +0200)
When the DPAUX isn't attached to an SOR the interrupts are not useful.
This also prevents a race that could potentially cause a crash on driver
removal.

Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/tegra/dpaux.c

index 909072d950774a2d24dde87b8ad0cfe46e999d5f..224a7dc8e4ed683a40bd0456045ca6e02fbaaa18 100644 (file)
@@ -352,6 +352,8 @@ static int tegra_dpaux_probe(struct platform_device *pdev)
                return err;
        }
 
+       disable_irq(dpaux->irq);
+
        dpaux->aux.transfer = tegra_dpaux_transfer;
        dpaux->aux.dev = &pdev->dev;
 
@@ -468,8 +470,10 @@ int tegra_dpaux_attach(struct tegra_dpaux *dpaux, struct tegra_output *output)
                enum drm_connector_status status;
 
                status = tegra_dpaux_detect(dpaux);
-               if (status == connector_status_connected)
+               if (status == connector_status_connected) {
+                       enable_irq(dpaux->irq);
                        return 0;
+               }
 
                usleep_range(1000, 2000);
        }
@@ -482,6 +486,8 @@ int tegra_dpaux_detach(struct tegra_dpaux *dpaux)
        unsigned long timeout;
        int err;
 
+       disable_irq(dpaux->irq);
+
        err = regulator_disable(dpaux->vdd);
        if (err < 0)
                return err;