Skip to content

Commit

Permalink
firmware: vpd: Fix platform driver and device registration/unregistra…
Browse files Browse the repository at this point in the history
…tion

The driver exit function needs to unregister both platform device and
driver. Also, during registration, register driver first and perform
error checks.

Fixes: 049a59d ("firmware: Google VPD sysfs driver")
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Cc: stable <stable@vger.kernel.org>
Tested-by: Randy Dunlap <rdunlap@infradead.org>
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Guenter Roeck authored and Greg Kroah-Hartman committed Nov 28, 2017
1 parent e4b28b3 commit 0631fb8
Showing 1 changed file with 13 additions and 5 deletions.
18 changes: 13 additions & 5 deletions drivers/firmware/google/vpd.c
Original file line number Diff line number Diff line change
Expand Up @@ -326,21 +326,29 @@ static struct platform_driver vpd_driver = {
},
};

static struct platform_device *vpd_pdev;

static int __init vpd_platform_init(void)
{
struct platform_device *pdev;
int ret;

pdev = platform_device_register_simple("vpd", -1, NULL, 0);
if (IS_ERR(pdev))
return PTR_ERR(pdev);
ret = platform_driver_register(&vpd_driver);
if (ret)
return ret;

platform_driver_register(&vpd_driver);
vpd_pdev = platform_device_register_simple("vpd", -1, NULL, 0);
if (IS_ERR(vpd_pdev)) {
platform_driver_unregister(&vpd_driver);
return PTR_ERR(vpd_pdev);
}

return 0;
}

static void __exit vpd_platform_exit(void)
{
platform_device_unregister(vpd_pdev);
platform_driver_unregister(&vpd_driver);
}

module_init(vpd_platform_init);
Expand Down

0 comments on commit 0631fb8

Please sign in to comment.