Skip to content

Commit 5f403fd

Browse files
lumagrobclark
authored andcommitted
drm/msm/dsi: switch to devm_drm_bridge_add()
Make MSM DSI 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/561636/ Signed-off-by: Rob Clark <robdclark@chromium.org>
1 parent 1f50db2 commit 5f403fd

3 files changed

Lines changed: 16 additions & 45 deletions

File tree

drivers/gpu/drm/msm/dsi/dsi.c

Lines changed: 5 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -217,20 +217,14 @@ void __exit msm_dsi_unregister(void)
217217
int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev,
218218
struct drm_encoder *encoder)
219219
{
220-
struct msm_drm_private *priv = dev->dev_private;
221220
int ret;
222221

223-
if (priv->num_bridges == ARRAY_SIZE(priv->bridges)) {
224-
DRM_DEV_ERROR(dev->dev, "too many bridges\n");
225-
return -ENOSPC;
226-
}
227-
228222
msm_dsi->dev = dev;
229223

230224
ret = msm_dsi_host_modeset_init(msm_dsi->host, dev);
231225
if (ret) {
232226
DRM_DEV_ERROR(dev->dev, "failed to modeset init host: %d\n", ret);
233-
goto fail;
227+
return ret;
234228
}
235229

236230
if (msm_dsi_is_bonded_dsi(msm_dsi) &&
@@ -244,32 +238,20 @@ int msm_dsi_modeset_init(struct msm_dsi *msm_dsi, struct drm_device *dev,
244238

245239
msm_dsi->encoder = encoder;
246240

247-
msm_dsi->bridge = msm_dsi_manager_bridge_init(msm_dsi->id);
248-
if (IS_ERR(msm_dsi->bridge)) {
249-
ret = PTR_ERR(msm_dsi->bridge);
241+
ret = msm_dsi_manager_bridge_init(msm_dsi);
242+
if (ret) {
250243
DRM_DEV_ERROR(dev->dev, "failed to create dsi bridge: %d\n", ret);
251-
msm_dsi->bridge = NULL;
252-
goto fail;
244+
return ret;
253245
}
254246

255247
ret = msm_dsi_manager_ext_bridge_init(msm_dsi->id);
256248
if (ret) {
257249
DRM_DEV_ERROR(dev->dev,
258250
"failed to create dsi connector: %d\n", ret);
259-
goto fail;
251+
return ret;
260252
}
261253

262-
priv->bridges[priv->num_bridges++] = msm_dsi->bridge;
263-
264254
return 0;
265-
fail:
266-
/* bridge/connector are normally destroyed by drm: */
267-
if (msm_dsi->bridge) {
268-
msm_dsi_manager_bridge_destroy(msm_dsi->bridge);
269-
msm_dsi->bridge = NULL;
270-
}
271-
272-
return ret;
273255
}
274256

275257
void msm_dsi_snapshot(struct msm_disp_state *disp_state, struct msm_dsi *msm_dsi)

drivers/gpu/drm/msm/dsi/dsi.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,7 @@ struct msm_dsi {
5656
};
5757

5858
/* dsi manager */
59-
struct drm_bridge *msm_dsi_manager_bridge_init(u8 id);
60-
void msm_dsi_manager_bridge_destroy(struct drm_bridge *bridge);
59+
int msm_dsi_manager_bridge_init(struct msm_dsi *msm_dsi);
6160
int msm_dsi_manager_ext_bridge_init(u8 id);
6261
int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg);
6362
bool msm_dsi_manager_cmd_xfer_trigger(int id, u32 dma_base, u32 len);

drivers/gpu/drm/msm/dsi/dsi_manager.c

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -466,41 +466,36 @@ static const struct drm_bridge_funcs dsi_mgr_bridge_funcs = {
466466
};
467467

468468
/* initialize bridge */
469-
struct drm_bridge *msm_dsi_manager_bridge_init(u8 id)
469+
int msm_dsi_manager_bridge_init(struct msm_dsi *msm_dsi)
470470
{
471-
struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);
472471
struct drm_bridge *bridge = NULL;
473472
struct dsi_bridge *dsi_bridge;
474473
struct drm_encoder *encoder;
475474
int ret;
476475

477476
dsi_bridge = devm_kzalloc(msm_dsi->dev->dev,
478477
sizeof(*dsi_bridge), GFP_KERNEL);
479-
if (!dsi_bridge) {
480-
ret = -ENOMEM;
481-
goto fail;
482-
}
478+
if (!dsi_bridge)
479+
return -ENOMEM;
483480

484-
dsi_bridge->id = id;
481+
dsi_bridge->id = msm_dsi->id;
485482

486483
encoder = msm_dsi->encoder;
487484

488485
bridge = &dsi_bridge->base;
489486
bridge->funcs = &dsi_mgr_bridge_funcs;
490487

491-
drm_bridge_add(bridge);
488+
ret = devm_drm_bridge_add(&msm_dsi->pdev->dev, bridge);
489+
if (ret)
490+
return ret;
492491

493492
ret = drm_bridge_attach(encoder, bridge, NULL, 0);
494493
if (ret)
495-
goto fail;
494+
return ret;
496495

497-
return bridge;
496+
msm_dsi->bridge = bridge;
498497

499-
fail:
500-
if (bridge)
501-
msm_dsi_manager_bridge_destroy(bridge);
502-
503-
return ERR_PTR(ret);
498+
return 0;
504499
}
505500

506501
int msm_dsi_manager_ext_bridge_init(u8 id)
@@ -557,11 +552,6 @@ int msm_dsi_manager_ext_bridge_init(u8 id)
557552
return 0;
558553
}
559554

560-
void msm_dsi_manager_bridge_destroy(struct drm_bridge *bridge)
561-
{
562-
drm_bridge_remove(bridge);
563-
}
564-
565555
int msm_dsi_manager_cmd_xfer(int id, const struct mipi_dsi_msg *msg)
566556
{
567557
struct msm_dsi *msm_dsi = dsi_mgr_get_dsi(id);

0 commit comments

Comments
 (0)