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 = {
},
};
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 int __init etnaviv_init(void)
{
struct platform_device *pdev;
int ret;
struct device_node *np;
......@@ -680,23 +712,12 @@ static int __init etnaviv_init(void)
for_each_compatible_node(np, NULL, "vivante,gc") {
if (!of_device_is_available(np))
continue;
of_node_put(np);
pdev = platform_device_alloc("etnaviv", PLATFORM_DEVID_NONE);
if (!pdev) {
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);
ret = etnaviv_create_platform_device("etnaviv", &etnaviv_drm);
if (ret)
goto unregister_platform_driver;
}
etnaviv_drm = pdev;
of_node_put(np);
break;
}
......@@ -712,7 +733,7 @@ module_init(etnaviv_init);
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_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