mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-15 08:44:14 +08:00
drm: Add devm_drm_dev_init()
This adds a resource managed (devres) version of drm_dev_init(). v2: Remove devm_drm_dev_register() since we can't touch hw in devm release functions and drivers want to disable hw on driver module unload (Daniel Vetter, Greg KH) Cc: Daniel Vetter <daniel@ffwll.ch> Cc: Greg KH <gregkh@linuxfoundation.org> Signed-off-by: Noralf Trønnes <noralf@tronnes.org> Acked-by: Gerd Hoffmann <kraxel@redhat.com> Link: https://patchwork.freedesktop.org/patch/msgid/20190225144232.20761-3-noralf@tronnes.org
This commit is contained in:
parent
56be6503aa
commit
9b1f1b6b78
@ -254,6 +254,9 @@ DMA
|
||||
dmam_pool_create()
|
||||
dmam_pool_destroy()
|
||||
|
||||
DRM
|
||||
devm_drm_dev_init()
|
||||
|
||||
GPIO
|
||||
devm_gpiod_get()
|
||||
devm_gpiod_get_index()
|
||||
|
@ -601,6 +601,45 @@ err_free:
|
||||
}
|
||||
EXPORT_SYMBOL(drm_dev_init);
|
||||
|
||||
static void devm_drm_dev_init_release(void *data)
|
||||
{
|
||||
drm_dev_put(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_drm_dev_init - Resource managed drm_dev_init()
|
||||
* @parent: Parent device object
|
||||
* @dev: DRM device
|
||||
* @driver: DRM driver
|
||||
*
|
||||
* Managed drm_dev_init(). The DRM device initialized with this function is
|
||||
* automatically put on driver detach using drm_dev_put(). You must supply a
|
||||
* &drm_driver.release callback to control the finalization explicitly.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success, or error code on failure.
|
||||
*/
|
||||
int devm_drm_dev_init(struct device *parent,
|
||||
struct drm_device *dev,
|
||||
struct drm_driver *driver)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (WARN_ON(!parent || !driver->release))
|
||||
return -EINVAL;
|
||||
|
||||
ret = drm_dev_init(dev, driver, parent);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = devm_add_action(parent, devm_drm_dev_init_release, dev);
|
||||
if (ret)
|
||||
devm_drm_dev_init_release(dev);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(devm_drm_dev_init);
|
||||
|
||||
/**
|
||||
* drm_dev_fini - Finalize a dead DRM device
|
||||
* @dev: DRM device
|
||||
|
@ -718,6 +718,9 @@ extern unsigned int drm_debug;
|
||||
int drm_dev_init(struct drm_device *dev,
|
||||
struct drm_driver *driver,
|
||||
struct device *parent);
|
||||
int devm_drm_dev_init(struct device *parent,
|
||||
struct drm_device *dev,
|
||||
struct drm_driver *driver);
|
||||
void drm_dev_fini(struct drm_device *dev);
|
||||
|
||||
struct drm_device *drm_dev_alloc(struct drm_driver *driver,
|
||||
|
Loading…
Reference in New Issue
Block a user