Skip to content

Commit

Permalink
drm/tilcdc: Add support for drm panels
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jyri Sarha committed Feb 28, 2018
1 parent b225e74 commit 544f737
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 9 deletions.
2 changes: 2 additions & 0 deletions drivers/gpu/drm/tilcdc/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ config DRM_TILCDC
select DRM_KMS_HELPER
select DRM_KMS_CMA_HELPER
select DRM_GEM_CMA_HELPER
select DRM_BRIDGE
select DRM_PANEL_BRIDGE
select VIDEOMODE_HELPERS
select BACKLIGHT_CLASS_DEVICE
select BACKLIGHT_LCD_SUPPORT
Expand Down
29 changes: 20 additions & 9 deletions drivers/gpu/drm/tilcdc/tilcdc_external.c
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand All @@ -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;
}

Expand Down

0 comments on commit 544f737

Please sign in to comment.