aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabio Estevam <fabio.estevam@nxp.com>2018-06-27 09:07:45 -0400
committerLucas Stach <l.stach@pengutronix.de>2018-06-27 09:26:39 -0400
commit45a0faaba9c8c5ba1e31a08a391aed0bad327167 (patch)
tree881c0d7261cd99208607197574453591afb5dd0e
parentce397d215ccd07b8ae3f71db689aedb85d56ab40 (diff)
drm/etnaviv: Check for platform_device_register_simple() failure
platform_device_register_simple() may fail, so we should better check its return value and propagate it in the case of error. Cc: <stable@vger.kernel.org> Fixes: 246774d17fc0 ("drm/etnaviv: remove the need for a gpu-subsystem DT node") Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
-rw-r--r--drivers/gpu/drm/etnaviv/etnaviv_drv.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index e5013a999147..19abd3ca6618 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -631,8 +631,11 @@ static struct platform_driver etnaviv_platform_driver = {
631 }, 631 },
632}; 632};
633 633
634static struct platform_device *etnaviv_drm;
635
634static int __init etnaviv_init(void) 636static int __init etnaviv_init(void)
635{ 637{
638 struct platform_device *pdev;
636 int ret; 639 int ret;
637 struct device_node *np; 640 struct device_node *np;
638 641
@@ -644,7 +647,7 @@ static int __init etnaviv_init(void)
644 647
645 ret = platform_driver_register(&etnaviv_platform_driver); 648 ret = platform_driver_register(&etnaviv_platform_driver);
646 if (ret != 0) 649 if (ret != 0)
647 platform_driver_unregister(&etnaviv_gpu_driver); 650 goto unregister_gpu_driver;
648 651
649 /* 652 /*
650 * If the DT contains at least one available GPU device, instantiate 653 * If the DT contains at least one available GPU device, instantiate
@@ -653,12 +656,24 @@ static int __init etnaviv_init(void)
653 for_each_compatible_node(np, NULL, "vivante,gc") { 656 for_each_compatible_node(np, NULL, "vivante,gc") {
654 if (!of_device_is_available(np)) 657 if (!of_device_is_available(np))
655 continue; 658 continue;
656 659 pdev = platform_device_register_simple("etnaviv", -1,
657 platform_device_register_simple("etnaviv", -1, NULL, 0); 660 NULL, 0);
661 if (IS_ERR(pdev)) {
662 ret = PTR_ERR(pdev);
663 of_node_put(np);
664 goto unregister_platform_driver;
665 }
666 etnaviv_drm = pdev;
658 of_node_put(np); 667 of_node_put(np);
659 break; 668 break;
660 } 669 }
661 670
671 return 0;
672
673unregister_platform_driver:
674 platform_driver_unregister(&etnaviv_platform_driver);
675unregister_gpu_driver:
676 platform_driver_unregister(&etnaviv_gpu_driver);
662 return ret; 677 return ret;
663} 678}
664module_init(etnaviv_init); 679module_init(etnaviv_init);