[PATCH] drm/stm: ltdc: Silence -EPROBE_DEFER till bridge attached
yannick Fertre
yannick.fertre at foss.st.com
Wed Jul 7 09:18:16 PDT 2021
Hi Jagan,
thanks for the patch.
Tested-by: Yannick Fertre <yannick.fertre at foss.st.com>
On 7/4/21 3:59 PM, Jagan Teki wrote:
> 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 at amarulasolutions.com>
> ---
> drivers/gpu/drm/stm/ltdc.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/stm/ltdc.c b/drivers/gpu/drm/stm/ltdc.c
> index 08b71248044d..95e983d3ffb5 100644
> --- a/drivers/gpu/drm/stm/ltdc.c
> +++ b/drivers/gpu/drm/stm/ltdc.c
> @@ -1122,8 +1122,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);
> @@ -1266,7 +1267,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;
> }
> }
>
More information about the linux-arm-kernel
mailing list