aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/msm/dsi/dsi_manager.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/msm/dsi/dsi_manager.c')
-rw-r--r--drivers/gpu/drm/msm/dsi/dsi_manager.c27
1 files changed, 9 insertions, 18 deletions
diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c
index 58ba7ec17f51..c8d1f19c9a6d 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
@@ -198,9 +198,13 @@ static enum drm_connector_status dsi_mgr_connector_detect(
198 198
199static void dsi_mgr_connector_destroy(struct drm_connector *connector) 199static void dsi_mgr_connector_destroy(struct drm_connector *connector)
200{ 200{
201 struct dsi_connector *dsi_connector = to_dsi_connector(connector);
202
201 DBG(""); 203 DBG("");
202 drm_connector_unregister(connector); 204
203 drm_connector_cleanup(connector); 205 drm_connector_cleanup(connector);
206
207 kfree(dsi_connector);
204} 208}
205 209
206static void dsi_dual_connector_fix_modes(struct drm_connector *connector) 210static void dsi_dual_connector_fix_modes(struct drm_connector *connector)
@@ -538,12 +542,9 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id)
538 struct dsi_connector *dsi_connector; 542 struct dsi_connector *dsi_connector;
539 int ret, i; 543 int ret, i;
540 544
541 dsi_connector = devm_kzalloc(msm_dsi->dev->dev, 545 dsi_connector = kzalloc(sizeof(*dsi_connector), GFP_KERNEL);
542 sizeof(*dsi_connector), GFP_KERNEL); 546 if (!dsi_connector)
543 if (!dsi_connector) { 547 return ERR_PTR(-ENOMEM);
544 ret = -ENOMEM;
545 goto fail;
546 }
547 548
548 dsi_connector->id = id; 549 dsi_connector->id = id;
549 550
@@ -552,7 +553,7 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id)
552 ret = drm_connector_init(msm_dsi->dev, connector, 553 ret = drm_connector_init(msm_dsi->dev, connector,
553 &dsi_mgr_connector_funcs, DRM_MODE_CONNECTOR_DSI); 554 &dsi_mgr_connector_funcs, DRM_MODE_CONNECTOR_DSI);
554 if (ret) 555 if (ret)
555 goto fail; 556 return ERR_PTR(ret);
556 557
557 drm_connector_helper_add(connector, &dsi_mgr_conn_helper_funcs); 558 drm_connector_helper_add(connector, &dsi_mgr_conn_helper_funcs);
558 559
@@ -565,21 +566,11 @@ struct drm_connector *msm_dsi_manager_connector_init(u8 id)
565 connector->interlace_allowed = 0; 566 connector->interlace_allowed = 0;
566 connector->doublescan_allowed = 0; 567 connector->doublescan_allowed = 0;
567 568
568 ret = drm_connector_register(connector);
569 if (ret)
570 goto fail;
571
572 for (i = 0; i < MSM_DSI_ENCODER_NUM; i++) 569 for (i = 0; i < MSM_DSI_ENCODER_NUM; i++)
573 drm_mode_connector_attach_encoder(connector, 570 drm_mode_connector_attach_encoder(connector,
574 msm_dsi->encoders[i]); 571 msm_dsi->encoders[i]);
575 572
576 return connector; 573 return connector;
577
578fail:
579 if (connector)
580 dsi_mgr_connector_destroy(connector);
581
582 return ERR_PTR(ret);
583} 574}
584 575
585/* initialize bridge */ 576/* initialize bridge */