aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/tilcdc/tilcdc_external.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2018-03-01 14:04:30 +1000
committerDave Airlie <airlied@redhat.com>2018-03-01 14:04:30 +1000
commit0feeb106c79532074b370c3cb45f742ef4302cc6 (patch)
tree3dd62a1b2d1424b7dd7d17bc7fb4a2305d3ca772 /drivers/gpu/drm/tilcdc/tilcdc_external.c
parent8bb5b22255dac09cd74eae9f86333b474d69fbbe (diff)
parent7f78c3d69df03674644b724cdf4f01d67962beb4 (diff)
downloadkernel_replicant_linux-0feeb106c79532074b370c3cb45f742ef4302cc6.tar.gz
kernel_replicant_linux-0feeb106c79532074b370c3cb45f742ef4302cc6.tar.bz2
kernel_replicant_linux-0feeb106c79532074b370c3cb45f742ef4302cc6.zip
Merge tag 'tilcdc-4.17' of https://github.com/jsarha/linux into drm-next
drm/tilcdc changes to v4.17 * tag 'tilcdc-4.17' of https://github.com/jsarha/linux: drm/tilcdc: tilcdc_panel: Rename device from "panel" to "tilcdc-panel" drm/tilcdc: Add support for drm panels drm/tilcdc: panel: Use common error handling code in of_get_panel_info() drm/tilcdc: Delete an error message for a failed memory allocation in seven functions
Diffstat (limited to 'drivers/gpu/drm/tilcdc/tilcdc_external.c')
-rw-r--r--drivers/gpu/drm/tilcdc/tilcdc_external.c29
1 files changed, 20 insertions, 9 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_external.c b/drivers/gpu/drm/tilcdc/tilcdc_external.c
index 711c7b3289d3..d651bdd6597e 100644
--- a/drivers/gpu/drm/tilcdc/tilcdc_external.c
+++ b/drivers/gpu/drm/tilcdc/tilcdc_external.c
@@ -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;
}