|
@@ -282,21 +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);
|
|
|
-
|
|
|
- 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,
|
|
|
};
|
|
|
|
|
|
/*
|
|
@@ -372,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);
|
|
|
|
|
@@ -379,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;
|
|
@@ -400,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;
|
|
|
}
|
|
|
|