From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758807AbdKOVBI (ORCPT ); Wed, 15 Nov 2017 16:01:08 -0500 Received: from mail-pg0-f68.google.com ([74.125.83.68]:47623 "EHLO mail-pg0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932890AbdKOVAw (ORCPT ); Wed, 15 Nov 2017 16:00:52 -0500 X-Google-Smtp-Source: AGs4zMaAiU647HmOnL7fMwC3QItJiOUplQi7JyZBXL6NSI1Ob2frGIYoUv4fu64HcI7sYnlbSpYadA== From: Guenter Roeck To: Greg Kroah-Hartman Cc: Dmitry Torokhov , linux-kernel@vger.kernel.org, Randy Dunlap , Wei-Ning Huang , Guenter Roeck Subject: [PATCH 3/3] firmware: vpd: Fix platform driver and device registration/unregistration Date: Wed, 15 Nov 2017 13:00:45 -0800 Message-Id: <1510779645-13052-3-git-send-email-linux@roeck-us.net> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510779645-13052-1-git-send-email-linux@roeck-us.net> References: <1510779645-13052-1-git-send-email-linux@roeck-us.net> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The driver exit function needs to unregister both platform device and driver. Also, during registration, register driver first and perform error checks. Fixes: 049a59db34eb ("firmware: Google VPD sysfs driver") Signed-off-by: Guenter Roeck --- drivers/firmware/google/vpd.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/firmware/google/vpd.c b/drivers/firmware/google/vpd.c index 942e358efa60..e4b40f2b4627 100644 --- a/drivers/firmware/google/vpd.c +++ b/drivers/firmware/google/vpd.c @@ -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); -- 2.7.4