|
@@ -631,8 +631,11 @@ static struct platform_driver etnaviv_platform_driver = {
|
|
},
|
|
},
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+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;
|
|
|
|
|
|
@@ -644,7 +647,7 @@ static int __init etnaviv_init(void)
|
|
|
|
|
|
ret = platform_driver_register(&etnaviv_platform_driver);
|
|
ret = platform_driver_register(&etnaviv_platform_driver);
|
|
if (ret != 0)
|
|
if (ret != 0)
|
|
- platform_driver_unregister(&etnaviv_gpu_driver);
|
|
|
|
|
|
+ goto unregister_gpu_driver;
|
|
|
|
|
|
/*
|
|
/*
|
|
* If the DT contains at least one available GPU device, instantiate
|
|
* If the DT contains at least one available GPU device, instantiate
|
|
@@ -653,20 +656,33 @@ 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;
|
|
-
|
|
|
|
- platform_device_register_simple("etnaviv", -1, NULL, 0);
|
|
|
|
|
|
+ pdev = platform_device_register_simple("etnaviv", -1,
|
|
|
|
+ NULL, 0);
|
|
|
|
+ if (IS_ERR(pdev)) {
|
|
|
|
+ ret = PTR_ERR(pdev);
|
|
|
|
+ of_node_put(np);
|
|
|
|
+ goto unregister_platform_driver;
|
|
|
|
+ }
|
|
|
|
+ etnaviv_drm = pdev;
|
|
of_node_put(np);
|
|
of_node_put(np);
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ return 0;
|
|
|
|
+
|
|
|
|
+unregister_platform_driver:
|
|
|
|
+ platform_driver_unregister(&etnaviv_platform_driver);
|
|
|
|
+unregister_gpu_driver:
|
|
|
|
+ platform_driver_unregister(&etnaviv_gpu_driver);
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
module_init(etnaviv_init);
|
|
module_init(etnaviv_init);
|
|
|
|
|
|
static void __exit etnaviv_exit(void)
|
|
static void __exit etnaviv_exit(void)
|
|
{
|
|
{
|
|
- platform_driver_unregister(&etnaviv_gpu_driver);
|
|
|
|
|
|
+ platform_device_unregister(etnaviv_drm);
|
|
platform_driver_unregister(&etnaviv_platform_driver);
|
|
platform_driver_unregister(&etnaviv_platform_driver);
|
|
|
|
+ platform_driver_unregister(&etnaviv_gpu_driver);
|
|
}
|
|
}
|
|
module_exit(etnaviv_exit);
|
|
module_exit(etnaviv_exit);
|
|
|
|
|