diff options
Diffstat (limited to 'drivers/gpu/drm/msm/dsi/dsi_manager.c')
-rw-r--r-- | drivers/gpu/drm/msm/dsi/dsi_manager.c | 27 |
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 | ||
199 | static void dsi_mgr_connector_destroy(struct drm_connector *connector) | 199 | static 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 | ||
206 | static void dsi_dual_connector_fix_modes(struct drm_connector *connector) | 210 | static 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 | |||
578 | fail: | ||
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 */ |