drm_platform_init is modelled after the legacy pci probe support. It initializes a device_list, but this list will only ever have a single entry as it is specific to a single platform device instance. Simplify this by calling drm_get_platform_dev directly from the driver. Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- drivers/gpu/drm/drm_platform.c | 39 +++--------------------------- drivers/gpu/drm/exynos/exynos_drm_drv.c | 6 +++- include/drm/drmP.h | 3 -- 3 files changed, 8 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/drm_platform.c b/drivers/gpu/drm/drm_platform.c index 453da2d..7153508 100644 --- a/drivers/gpu/drm/drm_platform.c +++ b/drivers/gpu/drm/drm_platform.c @@ -28,6 +28,8 @@ #include <linux/export.h> #include "drmP.h" +static struct drm_bus drm_platform_bus; + /** * Register. * @@ -53,6 +55,8 @@ int drm_get_platform_dev(struct platform_device *platdev, dev->dev = &platdev->dev; + driver->bus = &drm_platform_bus; + mutex_lock(&drm_global_mutex); ret = drm_fill_in_dev(dev, NULL, driver); @@ -87,8 +91,6 @@ int drm_get_platform_dev(struct platform_device *platdev, goto err_g3; } - list_add_tail(&dev->driver_item, &driver->device_list); - mutex_unlock(&drm_global_mutex); DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n", @@ -165,36 +167,3 @@ static struct drm_bus drm_platform_bus = { .get_name = drm_platform_get_name, .set_busid = drm_platform_set_busid, }; - -/** - * Platform device initialization. Called direct from modules. - * - * \return zero on success or a negative number on failure. - * - * Initializes a drm_device structures,registering the - * stubs - * - * Expands the \c DRIVER_PREINIT and \c DRIVER_POST_INIT macros before and - * after the initialization for driver customization. - */ - -int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device) -{ - DRM_DEBUG("\n"); - - driver->bus = &drm_platform_bus; - INIT_LIST_HEAD(&driver->device_list); - return drm_get_platform_dev(platform_device, driver); -} -EXPORT_SYMBOL(drm_platform_init); - -void drm_platform_exit(struct drm_driver *driver, struct platform_device *platform_device) -{ - struct drm_device *dev, *tmp; - DRM_DEBUG("\n"); - - list_for_each_entry_safe(dev, tmp, &driver->device_list, driver_item) - drm_put_dev(dev); - DRM_INFO("Module unloaded\n"); -} -EXPORT_SYMBOL(drm_platform_exit); diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index 35889ca..17a100c 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c @@ -219,14 +219,16 @@ static int exynos_drm_platform_probe(struct platform_device *pdev) exynos_drm_driver.num_ioctls = DRM_ARRAY_SIZE(exynos_ioctls); - return drm_platform_init(&exynos_drm_driver, pdev); + return drm_get_platform_dev(pdev, &exynos_drm_driver); } static int exynos_drm_platform_remove(struct platform_device *pdev) { + struct drm_device *dev = platform_get_drvdata(pdev); + DRM_DEBUG_DRIVER("%s\n", __FILE__); - drm_platform_exit(&exynos_drm_driver, pdev); + drm_put_dev(dev); return 0; } diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 3d1ce03..d14c23a 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h @@ -1678,9 +1678,6 @@ extern int drm_get_pci_dev(struct pci_dev *pdev, /* platform section */ -extern int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device); -extern void drm_platform_exit(struct drm_driver *driver, struct platform_device *platform_device); - extern int drm_get_platform_dev(struct platform_device *pdev, struct drm_driver *driver); -- 1.7.8.3 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel