diff options
Diffstat (limited to 'drivers/gpu/drm/tilcdc/tilcdc_panel.c')
| -rw-r--r-- | drivers/gpu/drm/tilcdc/tilcdc_panel.c | 41 | 
1 files changed, 20 insertions, 21 deletions
diff --git a/drivers/gpu/drm/tilcdc/tilcdc_panel.c b/drivers/gpu/drm/tilcdc/tilcdc_panel.c index 86c67329b605..4c7aa1d8134f 100644 --- a/drivers/gpu/drm/tilcdc/tilcdc_panel.c +++ b/drivers/gpu/drm/tilcdc/tilcdc_panel.c @@ -151,6 +151,7 @@ struct panel_connector {  static void panel_connector_destroy(struct drm_connector *connector)  {  	struct panel_connector *panel_connector = to_panel_connector(connector); +	drm_connector_unregister(connector);  	drm_connector_cleanup(connector);  	kfree(panel_connector);  } @@ -247,7 +248,7 @@ static struct drm_connector *panel_connector_create(struct drm_device *dev,  	if (ret)  		goto fail; -	drm_sysfs_connector_add(connector); +	drm_connector_register(connector);  	return connector; @@ -281,23 +282,8 @@ static int panel_modeset_init(struct tilcdc_module *mod, struct drm_device *dev)  	return 0;  } -static void panel_destroy(struct tilcdc_module *mod) -{ -	struct panel_module *panel_mod = to_panel_module(mod); - -	if (panel_mod->timings) { -		display_timings_release(panel_mod->timings); -		kfree(panel_mod->timings); -	} - -	tilcdc_module_cleanup(mod); -	kfree(panel_mod->info); -	kfree(panel_mod); -} -  static const struct tilcdc_module_ops panel_module_ops = {  		.modeset_init = panel_modeset_init, -		.destroy = panel_destroy,  };  /* @@ -373,6 +359,7 @@ static int panel_probe(struct platform_device *pdev)  		return -ENOMEM;  	mod = &panel_mod->base; +	pdev->dev.platform_data = mod;  	tilcdc_module_init(mod, "panel", &panel_module_ops); @@ -380,17 +367,16 @@ static int panel_probe(struct platform_device *pdev)  	if (IS_ERR(pinctrl))  		dev_warn(&pdev->dev, "pins are not configured\n"); -  	panel_mod->timings = of_get_display_timings(node);  	if (!panel_mod->timings) {  		dev_err(&pdev->dev, "could not get panel timings\n"); -		goto fail; +		goto fail_free;  	}  	panel_mod->info = of_get_panel_info(node);  	if (!panel_mod->info) {  		dev_err(&pdev->dev, "could not get panel info\n"); -		goto fail; +		goto fail_timings;  	}  	mod->preferred_bpp = panel_mod->info->bpp; @@ -401,13 +387,26 @@ static int panel_probe(struct platform_device *pdev)  	return 0; -fail: -	panel_destroy(mod); +fail_timings: +	display_timings_release(panel_mod->timings); + +fail_free: +	kfree(panel_mod); +	tilcdc_module_cleanup(mod);  	return ret;  }  static int panel_remove(struct platform_device *pdev)  { +	struct tilcdc_module *mod = dev_get_platdata(&pdev->dev); +	struct panel_module *panel_mod = to_panel_module(mod); + +	display_timings_release(panel_mod->timings); + +	tilcdc_module_cleanup(mod); +	kfree(panel_mod->info); +	kfree(panel_mod); +  	return 0;  }  |