Commit a10a43ee authored by Sui Jingfeng's avatar Sui Jingfeng Committed by Lucas Stach

drm/etnaviv: Add helper functions to create and destroy platform device

The newly introduced functions are etnaviv_create_platform_device() and
etnaviv_destroy_platform_device(). Those two function are pure function
and can be shared for other use case. Currently, the benefit is that we
no longer need to call of_node_put() for three different cases, we only
need to call it once in the etnaviv_init() function.
Signed-off-by: default avatarSui Jingfeng <suijingfeng@loongson.cn>
Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
parent 4cb91cc2
...@@ -655,11 +655,43 @@ static struct platform_driver etnaviv_platform_driver = { ...@@ -655,11 +655,43 @@ static struct platform_driver etnaviv_platform_driver = {
}, },
}; };
static int etnaviv_create_platform_device(const char *name,
struct platform_device **ppdev)
{
struct platform_device *pdev;
int ret;
pdev = platform_device_alloc(name, PLATFORM_DEVID_NONE);
if (!pdev)
return -ENOMEM;
ret = platform_device_add(pdev);
if (ret) {
platform_device_put(pdev);
return ret;
}
*ppdev = pdev;
return 0;
}
static void etnaviv_destroy_platform_device(struct platform_device **ppdev)
{
struct platform_device *pdev = *ppdev;
if (!pdev)
return;
platform_device_unregister(pdev);
*ppdev = NULL;
}
static struct platform_device *etnaviv_drm; static struct platform_device *etnaviv_drm;
static int __init etnaviv_init(void) static int __init etnaviv_init(void)
{ {
struct platform_device *pdev;
int ret; int ret;
struct device_node *np; struct device_node *np;
...@@ -680,23 +712,12 @@ static int __init etnaviv_init(void) ...@@ -680,23 +712,12 @@ static int __init etnaviv_init(void)
for_each_compatible_node(np, NULL, "vivante,gc") { for_each_compatible_node(np, NULL, "vivante,gc") {
if (!of_device_is_available(np)) if (!of_device_is_available(np))
continue; continue;
of_node_put(np);
pdev = platform_device_alloc("etnaviv", PLATFORM_DEVID_NONE); ret = etnaviv_create_platform_device("etnaviv", &etnaviv_drm);
if (!pdev) { if (ret)
ret = -ENOMEM;
of_node_put(np);
goto unregister_platform_driver;
}
ret = platform_device_add(pdev);
if (ret) {
platform_device_put(pdev);
of_node_put(np);
goto unregister_platform_driver; goto unregister_platform_driver;
}
etnaviv_drm = pdev;
of_node_put(np);
break; break;
} }
...@@ -712,7 +733,7 @@ module_init(etnaviv_init); ...@@ -712,7 +733,7 @@ module_init(etnaviv_init);
static void __exit etnaviv_exit(void) static void __exit etnaviv_exit(void)
{ {
platform_device_unregister(etnaviv_drm); etnaviv_destroy_platform_device(&etnaviv_drm);
platform_driver_unregister(&etnaviv_platform_driver); platform_driver_unregister(&etnaviv_platform_driver);
platform_driver_unregister(&etnaviv_gpu_driver); platform_driver_unregister(&etnaviv_gpu_driver);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment