Commit cc1876ce authored by Jyri Sarha's avatar Jyri Sarha Committed by Tomi Valkeinen
Browse files

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: default avatarJyri Sarha <jsarha@ti.com>
Signed-off-by: default avatarLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: default avatarSebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: default avatarTomi Valkeinen <tomi.valkeinen@ti.com>
parent f13e97cf
Loading
Loading
Loading
Loading
+2 −24
Original line number Diff line number Diff line
@@ -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,
	return platform_register_drivers(omap_dss_drivers,
					 ARRAY_SIZE(omap_dss_drivers));

	return r;
}

static void __exit omap_dss_exit(void)
{
	platform_device_unregister(omap_drm_device);

	platform_unregister_drivers(omap_dss_drivers,
				    ARRAY_SIZE(omap_dss_drivers));
}
+13 −0
Original line number Diff line number Diff line
@@ -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);
+2 −0
Original line number Diff line number Diff line
@@ -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;