From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S938842AbeBURAm (ORCPT ); Wed, 21 Feb 2018 12:00:42 -0500 Received: from mail-wr0-f196.google.com ([209.85.128.196]:35194 "EHLO mail-wr0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S938827AbeBURAj (ORCPT ); Wed, 21 Feb 2018 12:00:39 -0500 X-Google-Smtp-Source: AH8x227LdpEjUEGV0zSCdj/WBRogIZR68mGZXufhYFvyIE5L4/YTPF3iFVePI1Y0hkbM3d6Hs/3lHg== Date: Wed, 21 Feb 2018 18:00:35 +0100 From: Guillaume =?utf-8?Q?Dou=C3=A9zan-Grard?= To: Andy Shevchenko Cc: Darren Hart , platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v5 4/7] platform/x86: topstar-laptop: add platform device Message-ID: <7386f81172590d4bf9234369de93688d2a588fc7.1519231939.git.gdouezangrard@gmail.com> References: MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org * add a platform device to support further addition of a led subsystem, * register the existing input device to this platform device. Signed-off-by: Guillaume Douézan-Grard --- drivers/platform/x86/topstar-laptop.c | 61 +++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/drivers/platform/x86/topstar-laptop.c b/drivers/platform/x86/topstar-laptop.c index fbf020e8a0e1..e82f57e893c8 100644 --- a/drivers/platform/x86/topstar-laptop.c +++ b/drivers/platform/x86/topstar-laptop.c @@ -1,5 +1,5 @@ /* - * ACPI driver for Topstar notebooks (hotkeys support only) + * Topstar Laptop ACPI Extras driver * * Copyright (c) 2009 Herton Ronaldo Krzesinski * @@ -20,11 +20,13 @@ #include #include #include +#include #define TOPSTAR_LAPTOP_CLASS "topstar" struct topstar_laptop { struct acpi_device *device; + struct platform_device *platform; struct input_dev *input; }; @@ -80,6 +82,7 @@ static int topstar_input_init(struct topstar_laptop *topstar) input->name = "Topstar Laptop extra buttons"; input->phys = TOPSTAR_LAPTOP_CLASS "/input0"; input->id.bustype = BUS_HOST; + input->dev.parent = &topstar->platform->dev; err = sparse_keymap_setup(input, topstar_keymap, NULL); if (err) { @@ -106,6 +109,42 @@ static void topstar_input_exit(struct topstar_laptop *topstar) input_unregister_device(topstar->input); } +/* + * Platform + */ + +static struct platform_driver topstar_platform_driver = { + .driver = { + .name = TOPSTAR_LAPTOP_CLASS, + }, +}; + +static int topstar_platform_init(struct topstar_laptop *topstar) +{ + int err; + + topstar->platform = platform_device_alloc(TOPSTAR_LAPTOP_CLASS, -1); + if (!topstar->platform) + return -ENOMEM; + + platform_set_drvdata(topstar->platform, topstar); + + err = platform_device_add(topstar->platform); + if (err) + goto err_device_put; + + return 0; + +err_device_put: + platform_device_put(topstar->platform); + return err; +} + +static void topstar_platform_exit(struct topstar_laptop *topstar) +{ + platform_device_unregister(topstar->platform); +} + /* * ACPI */ @@ -171,12 +210,18 @@ static int topstar_acpi_add(struct acpi_device *device) if (err) goto err_free; - err = topstar_input_init(topstar); + err = topstar_platform_init(topstar); if (err) goto err_acpi_exit; + err = topstar_input_init(topstar); + if (err) + goto err_platform_exit; + return 0; +err_platform_exit: + topstar_platform_exit(topstar); err_acpi_exit: topstar_acpi_exit(topstar); err_free: @@ -189,6 +234,7 @@ static int topstar_acpi_remove(struct acpi_device *device) struct topstar_laptop *topstar = acpi_driver_data(device); topstar_input_exit(topstar); + topstar_platform_exit(topstar); topstar_acpi_exit(topstar); kfree(topstar); @@ -217,17 +263,26 @@ static int __init topstar_laptop_init(void) { int ret; - ret = acpi_bus_register_driver(&topstar_acpi_driver); + ret = platform_driver_register(&topstar_platform_driver); if (ret < 0) return ret; + ret = acpi_bus_register_driver(&topstar_acpi_driver); + if (ret < 0) + goto err_driver_unreg; + pr_info("ACPI extras driver loaded\n"); return 0; + +err_driver_unreg: + platform_driver_unregister(&topstar_platform_driver); + return ret; } static void __exit topstar_laptop_exit(void) { acpi_bus_unregister_driver(&topstar_acpi_driver); + platform_driver_unregister(&topstar_platform_driver); } module_init(topstar_laptop_init); -- 2.16.1