drm/omap: dss: Move platform_device_register from core.c to dss.c probe
Register the omapdrm device when we know that dss device probe going to succeed. This avoids DSS6 and DSS2 omapdrm device registration from colliding with each other. Signed-off-by: Jyri Sarha <jsarha@ti.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
This commit is contained in:
Родитель
f13e97cf3e
Коммит
cc1876ce57
|
@ -45,36 +45,14 @@ static struct platform_driver * const omap_dss_drivers[] = {
|
|||
#endif
|
||||
};
|
||||
|
||||
static struct platform_device *omap_drm_device;
|
||||
|
||||
static int __init omap_dss_init(void)
|
||||
{
|
||||
int r;
|
||||
|
||||
r = platform_register_drivers(omap_dss_drivers,
|
||||
ARRAY_SIZE(omap_dss_drivers));
|
||||
if (r)
|
||||
goto err_reg;
|
||||
|
||||
omap_drm_device = platform_device_register_simple("omapdrm", 0, NULL, 0);
|
||||
if (IS_ERR(omap_drm_device)) {
|
||||
r = PTR_ERR(omap_drm_device);
|
||||
goto err_reg;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_reg:
|
||||
platform_unregister_drivers(omap_dss_drivers,
|
||||
ARRAY_SIZE(omap_dss_drivers));
|
||||
|
||||
return r;
|
||||
return platform_register_drivers(omap_dss_drivers,
|
||||
ARRAY_SIZE(omap_dss_drivers));
|
||||
}
|
||||
|
||||
static void __exit omap_dss_exit(void)
|
||||
{
|
||||
platform_device_unregister(omap_drm_device);
|
||||
|
||||
platform_unregister_drivers(omap_dss_drivers,
|
||||
ARRAY_SIZE(omap_dss_drivers));
|
||||
}
|
||||
|
|
|
@ -1315,6 +1315,7 @@ static const struct soc_device_attribute dss_soc_devices[] = {
|
|||
static int dss_bind(struct device *dev)
|
||||
{
|
||||
struct dss_device *dss = dev_get_drvdata(dev);
|
||||
struct platform_device *drm_pdev;
|
||||
int r;
|
||||
|
||||
r = component_bind_all(dev, NULL);
|
||||
|
@ -1325,11 +1326,23 @@ static int dss_bind(struct device *dev)
|
|||
|
||||
omapdss_set_dss(dss);
|
||||
|
||||
drm_pdev = platform_device_register_simple("omapdrm", 0, NULL, 0);
|
||||
if (IS_ERR(drm_pdev)) {
|
||||
component_unbind_all(dev, NULL);
|
||||
return PTR_ERR(drm_pdev);
|
||||
}
|
||||
|
||||
dss->drm_pdev = drm_pdev;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void dss_unbind(struct device *dev)
|
||||
{
|
||||
struct dss_device *dss = dev_get_drvdata(dev);
|
||||
|
||||
platform_device_unregister(dss->drm_pdev);
|
||||
|
||||
omapdss_set_dss(NULL);
|
||||
|
||||
component_unbind_all(dev, NULL);
|
||||
|
|
|
@ -238,6 +238,8 @@ struct dss_device {
|
|||
struct regmap *syscon_pll_ctrl;
|
||||
u32 syscon_pll_ctrl_offset;
|
||||
|
||||
struct platform_device *drm_pdev;
|
||||
|
||||
struct clk *parent_clk;
|
||||
struct clk *dss_clk;
|
||||
unsigned long dss_clk_rate;
|
||||
|
|
Загрузка…
Ссылка в новой задаче