diff options
author | Fabio Estevam <fabio.estevam@nxp.com> | 2018-06-27 09:07:45 -0400 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2018-06-27 09:26:39 -0400 |
commit | 45a0faaba9c8c5ba1e31a08a391aed0bad327167 (patch) | |
tree | 881c0d7261cd99208607197574453591afb5dd0e | |
parent | ce397d215ccd07b8ae3f71db689aedb85d56ab40 (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.c | 21 |
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 | ||
634 | static struct platform_device *etnaviv_drm; | ||
635 | |||
634 | static int __init etnaviv_init(void) | 636 | static 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 | |||
673 | unregister_platform_driver: | ||
674 | platform_driver_unregister(&etnaviv_platform_driver); | ||
675 | unregister_gpu_driver: | ||
676 | platform_driver_unregister(&etnaviv_gpu_driver); | ||
662 | return ret; | 677 | return ret; |
663 | } | 678 | } |
664 | module_init(etnaviv_init); | 679 | module_init(etnaviv_init); |