]> git.baikalelectronics.ru Git - kernel.git/commitdiff
drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
authorJagan Teki <jagan@amarulasolutions.com>
Sun, 4 Jul 2021 13:59:14 +0000 (19:29 +0530)
committerPhilippe Cornu <philippe.cornu@foss.st.com>
Mon, 19 Jul 2021 13:31:56 +0000 (15:31 +0200)
As dw-mipi-dsi supported all possible ways to find the DSI
devices. It can take multiple iterations for ltdc to find
all components attached to the DSI bridge.

The current ltdc driver failed to find the endpoint as
it returned -EINVAL for the first iteration itself. This leads
to following error:

[    3.099289] [drm:ltdc_load] *ERROR* init encoder endpoint 0

So, check the return value and cleanup the encoder only if it's
not -EPROBE_DEFER. This make all components in the attached DSI
bridge found properly.

Signed-off-by: Jagan Teki <jagan@amarulasolutions.com>
Tested-by: Yannick Fertre <yannick.fertre@foss.st.com>
Acked-by: Philippe Cornu <philippe.cornu@foss.st.com>
Signed-off-by: Philippe Cornu <philippe.cornu@foss.st.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210704135914.268308-1-jagan@amarulasolutions.com
drivers/gpu/drm/stm/ltdc.c

index 1f9392fb58e1651ed4159c330d9abc4298391382..195de30eb90c7adf843f5a1cb9658fea3e873cd9 100644 (file)
@@ -1121,8 +1121,9 @@ static int ltdc_encoder_init(struct drm_device *ddev, struct drm_bridge *bridge)
 
        ret = drm_bridge_attach(encoder, bridge, NULL, 0);
        if (ret) {
-               drm_encoder_cleanup(encoder);
-               return -EINVAL;
+               if (ret != -EPROBE_DEFER)
+                       drm_encoder_cleanup(encoder);
+               return ret;
        }
 
        DRM_DEBUG_DRIVER("Bridge encoder:%d created\n", encoder->base.id);
@@ -1265,7 +1266,8 @@ int ltdc_load(struct drm_device *ddev)
                if (bridge) {
                        ret = ltdc_encoder_init(ddev, bridge);
                        if (ret) {
-                               DRM_ERROR("init encoder endpoint %d\n", i);
+                               if (ret != -EPROBE_DEFER)
+                                       DRM_ERROR("init encoder endpoint %d\n", i);
                                goto err;
                        }
                }