drm: omapdrm: Register omapdrm platform device in omapdss driver
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Fri, 11 Aug 2017 13:49:08 +0000 (16:49 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Wed, 16 Aug 2017 12:38:39 +0000 (15:38 +0300)
The omapdrm platform device is a virtual device created for the sole
purpose of handling the omapdss/omapdrm driver split. It should
eventually be removed. As a first step to ease refactoring move its
registration from platform code to driver code.

The omapdrm driver name must be changed internally to avoid probing both
the device registered in platform code and the device registered in the
omapdss driver, as that would otherwise break bisection.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/dss/core.c
drivers/gpu/drm/omapdrm/omap_drv.c

index 4dabe32c7098a73ccc2866259dae1aea93d98186..6b3247c4f8573b301d96aed0585ec88c1ff83dde 100644 (file)
@@ -103,6 +103,8 @@ static void (*dss_output_drv_unreg_funcs[])(void) = {
        dss_uninit_platform_driver,
 };
 
+static struct platform_device *omap_drm_device;
+
 static int __init omap_dss_init(void)
 {
        int r;
@@ -118,6 +120,12 @@ static int __init omap_dss_init(void)
                        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:
@@ -135,6 +143,8 @@ static void __exit omap_dss_exit(void)
 {
        int i;
 
+       platform_device_unregister(omap_drm_device);
+
        for (i = 0; i < ARRAY_SIZE(dss_output_drv_unreg_funcs); ++i)
                dss_output_drv_unreg_funcs[i]();
 
index 10e24ca928f2a06f6151e2b9a3380a94c18d0666..2b990daf005235524e69c5609a2fd0923afbeca8 100644 (file)
@@ -575,6 +575,12 @@ static int pdev_probe(struct platform_device *pdev)
        if (omapdss_is_initialized() == false)
                return -EPROBE_DEFER;
 
+       ret = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(32));
+       if (ret) {
+               dev_err(&pdev->dev, "Failed to set the DMA mask\n");
+               return ret;
+       }
+
        omap_crtc_pre_init();
 
        ret = omap_connect_dssdevs();
@@ -762,7 +768,7 @@ static SIMPLE_DEV_PM_OPS(omapdrm_pm_ops, omap_drm_suspend, omap_drm_resume);
 
 static struct platform_driver pdev = {
        .driver = {
-               .name = DRIVER_NAME,
+               .name = "omapdrm_",
                .pm = &omapdrm_pm_ops,
        },
        .probe = pdev_probe,