Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+22 -9
+2
drivers/gpu/drm/tilcdc/Kconfig
··· 4 4 select DRM_KMS_HELPER 5 5 select DRM_KMS_CMA_HELPER 6 6 select DRM_GEM_CMA_HELPER 7 + select DRM_BRIDGE 8 + select DRM_PANEL_BRIDGE 7 9 select VIDEOMODE_HELPERS 8 10 select BACKLIGHT_CLASS_DEVICE 9 11 select BACKLIGHT_LCD_SUPPORT
+20 -9
drivers/gpu/drm/tilcdc/tilcdc_external.c
··· 188 188 int tilcdc_attach_external_device(struct drm_device *ddev) 189 189 { 190 190 struct tilcdc_drm_private *priv = ddev->dev_private; 191 - struct device_node *remote_node; 192 191 struct drm_bridge *bridge; 192 + struct drm_panel *panel; 193 193 int ret; 194 194 195 - remote_node = of_graph_get_remote_node(ddev->dev->of_node, 0, 0); 196 - if (!remote_node) 195 + ret = drm_of_find_panel_or_bridge(ddev->dev->of_node, 0, 0, 196 + &panel, &bridge); 197 + if (ret == -ENODEV) 197 198 return 0; 198 - 199 - bridge = of_drm_find_bridge(remote_node); 200 - of_node_put(remote_node); 201 - if (!bridge) 202 - return -EPROBE_DEFER; 199 + else if (ret) 200 + return ret; 203 201 204 202 priv->external_encoder = devm_kzalloc(ddev->dev, 205 203 sizeof(*priv->external_encoder), ··· 213 215 return ret; 214 216 } 215 217 218 + if (panel) { 219 + bridge = devm_drm_panel_bridge_add(ddev->dev, panel, 220 + DRM_MODE_CONNECTOR_DPI); 221 + if (IS_ERR(bridge)) { 222 + ret = PTR_ERR(bridge); 223 + goto err_encoder_cleanup; 224 + } 225 + } 226 + 216 227 ret = tilcdc_attach_bridge(ddev, bridge); 217 228 if (ret) 218 - drm_encoder_cleanup(priv->external_encoder); 229 + goto err_encoder_cleanup; 219 230 231 + return 0; 232 + 233 + err_encoder_cleanup: 234 + drm_encoder_cleanup(priv->external_encoder); 220 235 return ret; 221 236 } 222 237