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

drm/msm/dp: switch to devm_drm_bridge_add()

Make MSM DP driver use devm_drm_bridge_add() instead of plain
drm_bridge_add(). As the driver doesn't require any additional cleanup,
stop adding created bridge to the priv->bridges array.

Reviewed-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Patchwork: https://patchwork.freedesktop.org/patch/561639/
Signed-off-by: Rob Clark <robdclark@chromium.org>

authored by

Dmitry Baryshkov and committed by
Rob Clark
61a72d5e b8ec1e7f

+16 -16
+2 -7
drivers/gpu/drm/msm/dp/dp_display.c
··· 1532 1532 int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev, 1533 1533 struct drm_encoder *encoder) 1534 1534 { 1535 - struct msm_drm_private *priv = dev->dev_private; 1536 1535 struct dp_display_private *dp_priv; 1537 1536 int ret; 1538 1537 ··· 1549 1550 if (ret) 1550 1551 return ret; 1551 1552 1552 - dp_display->bridge = dp_bridge_init(dp_display, dev, encoder); 1553 - if (IS_ERR(dp_display->bridge)) { 1554 - ret = PTR_ERR(dp_display->bridge); 1553 + ret = dp_bridge_init(dp_display, dev, encoder); 1554 + if (ret) { 1555 1555 DRM_DEV_ERROR(dev->dev, 1556 1556 "failed to create dp bridge: %d\n", ret); 1557 - dp_display->bridge = NULL; 1558 1557 return ret; 1559 1558 } 1560 - 1561 - priv->bridges[priv->num_bridges++] = dp_display->bridge; 1562 1559 1563 1560 dp_display->connector = dp_drm_connector_init(dp_display, encoder); 1564 1561 if (IS_ERR(dp_display->connector)) {
+13 -8
drivers/gpu/drm/msm/dp/dp_drm.c
··· 272 272 .atomic_check = edp_bridge_atomic_check, 273 273 }; 274 274 275 - struct drm_bridge *dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev, 275 + int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev, 276 276 struct drm_encoder *encoder) 277 277 { 278 278 int rc; ··· 281 281 282 282 dp_bridge = devm_kzalloc(dev->dev, sizeof(*dp_bridge), GFP_KERNEL); 283 283 if (!dp_bridge) 284 - return ERR_PTR(-ENOMEM); 284 + return -ENOMEM; 285 285 286 286 dp_bridge->dp_display = dp_display; 287 287 ··· 307 307 DRM_BRIDGE_OP_MODES; 308 308 } 309 309 310 - drm_bridge_add(bridge); 310 + rc = devm_drm_bridge_add(&dp_display->pdev->dev, bridge); 311 + if (rc) { 312 + DRM_ERROR("failed to add bridge, rc=%d\n", rc); 313 + 314 + return rc; 315 + } 311 316 312 317 rc = drm_bridge_attach(encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR); 313 318 if (rc) { 314 319 DRM_ERROR("failed to attach bridge, rc=%d\n", rc); 315 - drm_bridge_remove(bridge); 316 320 317 - return ERR_PTR(rc); 321 + return rc; 318 322 } 319 323 320 324 if (dp_display->next_bridge) { ··· 327 323 DRM_BRIDGE_ATTACH_NO_CONNECTOR); 328 324 if (rc < 0) { 329 325 DRM_ERROR("failed to attach panel bridge: %d\n", rc); 330 - drm_bridge_remove(bridge); 331 - return ERR_PTR(rc); 326 + return rc; 332 327 } 333 328 } 334 329 335 - return bridge; 330 + dp_display->bridge = bridge; 331 + 332 + return 0; 336 333 } 337 334 338 335 /* connector initialization */
+1 -1
drivers/gpu/drm/msm/dp/dp_drm.h
··· 20 20 #define to_dp_bridge(x) container_of((x), struct msm_dp_bridge, bridge) 21 21 22 22 struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display, struct drm_encoder *encoder); 23 - struct drm_bridge *dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev, 23 + int dp_bridge_init(struct msm_dp *dp_display, struct drm_device *dev, 24 24 struct drm_encoder *encoder); 25 25 26 26 void dp_bridge_atomic_enable(struct drm_bridge *drm_bridge,