drm/rockchip: mipi: return probe defer if attach panel failed
authorMark Yao <mark.yao@rock-chips.com>
Fri, 1 Jul 2016 07:25:06 +0000 (15:25 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Fri, 1 Jul 2016 11:30:13 +0000 (19:30 +0800)
Return -EINVAL would cause mipi dsi bad behavior, probe defer
to ensure mipi find the correct mode,

Change-Id: I0bb8e97dd6bd19f66052b4e985e95d8d82faf29b
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
drivers/gpu/drm/rockchip/dw-mipi-dsi.c

index 4e1cb20a6741b7bcbc817464322f77c1c33b0710..7ae5d16bda1536166192c1f76d3a38cd39809b28 100644 (file)
@@ -549,10 +549,14 @@ static int dw_mipi_dsi_host_attach(struct mipi_dsi_host *host,
        dsi->channel = device->channel;
        dsi->format = device->format;
        dsi->panel = of_drm_find_panel(device->dev.of_node);
-       if (dsi->panel)
-               return drm_panel_attach(dsi->panel, &dsi->connector);
+       if (!dsi->panel) {
+               DRM_ERROR("failed to find panel\n");
+               return -EPROBE_DEFER;
+       }
 
-       return -EINVAL;
+       drm_panel_attach(dsi->panel, &dsi->connector);
+
+       return 0;
 }
 
 static int dw_mipi_dsi_host_detach(struct mipi_dsi_host *host,
@@ -560,7 +564,8 @@ static int dw_mipi_dsi_host_detach(struct mipi_dsi_host *host,
 {
        struct dw_mipi_dsi *dsi = host_to_dsi(host);
 
-       drm_panel_detach(dsi->panel);
+       if (dsi->panel)
+               drm_panel_detach(dsi->panel);
 
        return 0;
 }