drm/tilcdc: Add support for drm panels
Add support for drm panels to tilcdc. Adding the support on top of the existing bridge support needs only couple of lines of code when using using the drm panel bridge helpers. Signed-off-by: Jyri Sarha <jsarha@ti.com> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Этот коммит содержится в:
@@ -188,18 +188,16 @@ int tilcdc_attach_bridge(struct drm_device *ddev, struct drm_bridge *bridge)
|
||||
int tilcdc_attach_external_device(struct drm_device *ddev)
|
||||
{
|
||||
struct tilcdc_drm_private *priv = ddev->dev_private;
|
||||
struct device_node *remote_node;
|
||||
struct drm_bridge *bridge;
|
||||
struct drm_panel *panel;
|
||||
int ret;
|
||||
|
||||
remote_node = of_graph_get_remote_node(ddev->dev->of_node, 0, 0);
|
||||
if (!remote_node)
|
||||
ret = drm_of_find_panel_or_bridge(ddev->dev->of_node, 0, 0,
|
||||
&panel, &bridge);
|
||||
if (ret == -ENODEV)
|
||||
return 0;
|
||||
|
||||
bridge = of_drm_find_bridge(remote_node);
|
||||
of_node_put(remote_node);
|
||||
if (!bridge)
|
||||
return -EPROBE_DEFER;
|
||||
else if (ret)
|
||||
return ret;
|
||||
|
||||
priv->external_encoder = devm_kzalloc(ddev->dev,
|
||||
sizeof(*priv->external_encoder),
|
||||
@@ -215,10 +213,23 @@ int tilcdc_attach_external_device(struct drm_device *ddev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (panel) {
|
||||
bridge = devm_drm_panel_bridge_add(ddev->dev, panel,
|
||||
DRM_MODE_CONNECTOR_DPI);
|
||||
if (IS_ERR(bridge)) {
|
||||
ret = PTR_ERR(bridge);
|
||||
goto err_encoder_cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
ret = tilcdc_attach_bridge(ddev, bridge);
|
||||
if (ret)
|
||||
drm_encoder_cleanup(priv->external_encoder);
|
||||
goto err_encoder_cleanup;
|
||||
|
||||
return 0;
|
||||
|
||||
err_encoder_cleanup:
|
||||
drm_encoder_cleanup(priv->external_encoder);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Ссылка в новой задаче
Block a user