summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/bridge/panel.c
diff options
context:
space:
mode:
authorMarek Szyprowski <m.szyprowski@samsung.com>2022-04-19 11:14:22 +0200
committerRobert Foss <robert.foss@linaro.org>2022-04-19 18:11:27 +0200
commit34263c1b1593e44a3963dcfd6ed9af70c3002686 (patch)
tree093232c32014ac7e30a2c44e42e2e62046ef1e9d /drivers/gpu/drm/bridge/panel.c
parent04b19d32213654e54ec819b6ac033360f1551902 (diff)
downloadlinux-stable-34263c1b1593e44a3963dcfd6ed9af70c3002686.tar.gz
linux-stable-34263c1b1593e44a3963dcfd6ed9af70c3002686.tar.bz2
linux-stable-34263c1b1593e44a3963dcfd6ed9af70c3002686.zip
drm: bridge: panel: Register connector if DRM device is already registered
If panel_bridge_attach() happens after DRM device registration, the created connector will not be registered by the DRM core anymore. Fix this by registering it explicitly in such case. This fixes the following issue observed on Samsung Exynos4210-based Trats board with a DSI panel (the panel driver is registered after the Exynos DRM component device is bound): $ ./modetest -c -Mexynos could not get connector 56: No such file or directory Segmentation fault While touching this, move the connector reset() call also under the DRM device registered check, because otherwise it is not really needed. Fixes: 934aef885f9d ("drm: bridge: panel: Reset the connector state pointer") Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Reviewed-by: Jagan Teki <jagan@amarulasolutions.com> Signed-off-by: Robert Foss <robert.foss@linaro.org> Link: https://patchwork.freedesktop.org/patch/msgid/20220419091422.4255-1-m.szyprowski@samsung.com
Diffstat (limited to 'drivers/gpu/drm/bridge/panel.c')
-rw-r--r--drivers/gpu/drm/bridge/panel.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c
index ff1c37b2e6e5..0ee563eb2b6f 100644
--- a/drivers/gpu/drm/bridge/panel.c
+++ b/drivers/gpu/drm/bridge/panel.c
@@ -83,8 +83,11 @@ static int panel_bridge_attach(struct drm_bridge *bridge,
drm_connector_attach_encoder(&panel_bridge->connector,
bridge->encoder);
- if (connector->funcs->reset)
- connector->funcs->reset(connector);
+ if (bridge->dev->registered) {
+ if (connector->funcs->reset)
+ connector->funcs->reset(connector);
+ drm_connector_register(connector);
+ }
return 0;
}