]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - drivers/gpu/drm/bridge/analogix/analogix_dp_core.c
drm/bridge: analogix_dp: Split bind() into probe() and real bind()
[mirror_ubuntu-jammy-kernel.git] / drivers / gpu / drm / bridge / analogix / analogix_dp_core.c
index 9ded2cef57dd32d20d9a3b634929e266e0fb8d7e..76736fb8ed949053fd96051d9f36160d31d27db6 100644 (file)
@@ -1652,8 +1652,7 @@ static ssize_t analogix_dpaux_transfer(struct drm_dp_aux *aux,
 }
 
 struct analogix_dp_device *
-analogix_dp_bind(struct device *dev, struct drm_device *drm_dev,
-                struct analogix_dp_plat_data *plat_data)
+analogix_dp_probe(struct device *dev, struct analogix_dp_plat_data *plat_data)
 {
        struct platform_device *pdev = to_platform_device(dev);
        struct analogix_dp_device *dp;
@@ -1756,22 +1755,30 @@ analogix_dp_bind(struct device *dev, struct drm_device *drm_dev,
                                        irq_flags, "analogix-dp", dp);
        if (ret) {
                dev_err(&pdev->dev, "failed to request irq\n");
-               goto err_disable_pm_runtime;
+               return ERR_PTR(ret);
        }
        disable_irq(dp->irq);
 
+       return dp;
+}
+EXPORT_SYMBOL_GPL(analogix_dp_probe);
+
+int analogix_dp_bind(struct analogix_dp_device *dp, struct drm_device *drm_dev)
+{
+       int ret;
+
        dp->drm_dev = drm_dev;
        dp->encoder = dp->plat_data->encoder;
 
        dp->aux.name = "DP-AUX";
        dp->aux.transfer = analogix_dpaux_transfer;
-       dp->aux.dev = &pdev->dev;
+       dp->aux.dev = dp->dev;
 
        ret = drm_dp_aux_register(&dp->aux);
        if (ret)
-               return ERR_PTR(ret);
+               return ret;
 
-       pm_runtime_enable(dev);
+       pm_runtime_enable(dp->dev);
 
        ret = analogix_dp_create_bridge(drm_dev, dp);
        if (ret) {
@@ -1779,13 +1786,12 @@ analogix_dp_bind(struct device *dev, struct drm_device *drm_dev,
                goto err_disable_pm_runtime;
        }
 
-       return dp;
+       return 0;
 
 err_disable_pm_runtime:
+       pm_runtime_disable(dp->dev);
 
-       pm_runtime_disable(dev);
-
-       return ERR_PTR(ret);
+       return ret;
 }
 EXPORT_SYMBOL_GPL(analogix_dp_bind);
 
@@ -1802,10 +1808,15 @@ void analogix_dp_unbind(struct analogix_dp_device *dp)
 
        drm_dp_aux_unregister(&dp->aux);
        pm_runtime_disable(dp->dev);
-       clk_disable_unprepare(dp->clock);
 }
 EXPORT_SYMBOL_GPL(analogix_dp_unbind);
 
+void analogix_dp_remove(struct analogix_dp_device *dp)
+{
+       clk_disable_unprepare(dp->clock);
+}
+EXPORT_SYMBOL_GPL(analogix_dp_remove);
+
 #ifdef CONFIG_PM
 int analogix_dp_suspend(struct analogix_dp_device *dp)
 {