diff options
Diffstat (limited to 'drivers/gpu/drm/drm_platform.c')
| -rw-r--r-- | drivers/gpu/drm/drm_platform.c | 111 | 
1 files changed, 12 insertions, 99 deletions
diff --git a/drivers/gpu/drm/drm_platform.c b/drivers/gpu/drm/drm_platform.c index f7a18c6ba4c..d5b76f148c1 100644 --- a/drivers/gpu/drm/drm_platform.c +++ b/drivers/gpu/drm/drm_platform.c @@ -47,55 +47,15 @@ static int drm_get_platform_dev(struct platform_device *platdev,  	DRM_DEBUG("\n"); -	dev = kzalloc(sizeof(*dev), GFP_KERNEL); +	dev = drm_dev_alloc(driver, &platdev->dev);  	if (!dev)  		return -ENOMEM;  	dev->platformdev = platdev; -	dev->dev = &platdev->dev; -	mutex_lock(&drm_global_mutex); - -	ret = drm_fill_in_dev(dev, NULL, driver); - -	if (ret) { -		printk(KERN_ERR "DRM: Fill_in_dev failed.\n"); -		goto err_g1; -	} - -	if (drm_core_check_feature(dev, DRIVER_MODESET)) { -		ret = drm_get_minor(dev, &dev->control, DRM_MINOR_CONTROL); -		if (ret) -			goto err_g1; -	} - -	if (drm_core_check_feature(dev, DRIVER_RENDER) && drm_rnodes) { -		ret = drm_get_minor(dev, &dev->render, DRM_MINOR_RENDER); -		if (ret) -			goto err_g11; -	} - -	ret = drm_get_minor(dev, &dev->primary, DRM_MINOR_LEGACY); +	ret = drm_dev_register(dev, 0);  	if (ret) -		goto err_g2; - -	if (dev->driver->load) { -		ret = dev->driver->load(dev, 0); -		if (ret) -			goto err_g3; -	} - -	/* setup the grouping for the legacy output */ -	if (drm_core_check_feature(dev, DRIVER_MODESET)) { -		ret = drm_mode_group_init_legacy_group(dev, -				&dev->primary->mode_group); -		if (ret) -			goto err_g3; -	} - -	list_add_tail(&dev->driver_item, &driver->device_list); - -	mutex_unlock(&drm_global_mutex); +		goto err_free;  	DRM_INFO("Initialized %s %d.%d.%d %s on minor %d\n",  		 driver->name, driver->major, driver->minor, driver->patchlevel, @@ -103,30 +63,11 @@ static int drm_get_platform_dev(struct platform_device *platdev,  	return 0; -err_g3: -	drm_put_minor(&dev->primary); -err_g2: -	if (dev->render) -		drm_put_minor(&dev->render); -err_g11: -	if (drm_core_check_feature(dev, DRIVER_MODESET)) -		drm_put_minor(&dev->control); -err_g1: -	kfree(dev); -	mutex_unlock(&drm_global_mutex); +err_free: +	drm_dev_unref(dev);  	return ret;  } -static int drm_platform_get_irq(struct drm_device *dev) -{ -	return platform_get_irq(dev->platformdev, 0); -} - -static const char *drm_platform_get_name(struct drm_device *dev) -{ -	return dev->platformdev->name; -} -  static int drm_platform_set_busid(struct drm_device *dev, struct drm_master *master)  {  	int len, ret, id; @@ -155,59 +96,31 @@ static int drm_platform_set_busid(struct drm_device *dev, struct drm_master *mas  		goto err;  	} -	dev->devname = -		kmalloc(strlen(dev->platformdev->name) + -			master->unique_len + 2, GFP_KERNEL); - -	if (dev->devname == NULL) { -		ret = -ENOMEM; -		goto err; -	} - -	sprintf(dev->devname, "%s@%s", dev->platformdev->name, -		master->unique);  	return 0;  err:  	return ret;  }  static struct drm_bus drm_platform_bus = { -	.bus_type = DRIVER_BUS_PLATFORM, -	.get_irq = drm_platform_get_irq, -	.get_name = drm_platform_get_name,  	.set_busid = drm_platform_set_busid,  };  /** - * Platform device initialization. Called direct from modules. + * drm_platform_init - Register a platform device with the DRM subsystem + * @driver: DRM device driver + * @platform_device: platform device to register   * - * \return zero on success or a negative number on failure. - * - * Initializes a drm_device structures,registering the - * stubs + * Registers the specified DRM device driver and platform device with the DRM + * subsystem, initializing a drm_device structure and calling the driver's + * .load() function.   * - * Expands the \c DRIVER_PREINIT and \c DRIVER_POST_INIT macros before and - * after the initialization for driver customization. + * Return: 0 on success or a negative error code on failure.   */ -  int drm_platform_init(struct drm_driver *driver, struct platform_device *platform_device)  {  	DRM_DEBUG("\n"); -	driver->kdriver.platform_device = platform_device;  	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);  | 
