From patchwork Fri Apr 7 13:07:09 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?TWljaGHFgiBLxJlwaWXFhA==?= X-Patchwork-Id: 9669487 X-Patchwork-Delegate: dvhart@infradead.org Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 99B21602B3 for ; Fri, 7 Apr 2017 13:08:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8BEE4285EB for ; Fri, 7 Apr 2017 13:08:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 80F9C285F2; Fri, 7 Apr 2017 13:08:12 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D9A82285EE for ; Fri, 7 Apr 2017 13:08:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756159AbdDGNIL (ORCPT ); Fri, 7 Apr 2017 09:08:11 -0400 Received: from mail-lf0-f66.google.com ([209.85.215.66]:36475 "EHLO mail-lf0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756108AbdDGNHT (ORCPT ); Fri, 7 Apr 2017 09:07:19 -0400 Received: by mail-lf0-f66.google.com with SMTP id n78so6094770lfi.3 for ; Fri, 07 Apr 2017 06:07:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kempniu.pl; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Ascyh2mAVw7U8UJiVtANfXdAWQnxu/KvqW4w3UeoE1k=; b=H1Z+45J+rtDUxwgpaFT68dqgUS0UVW740iGbPisc8bBhomL5YezrJv5Cr+daf72/R8 AmkFbhzm0tQ1iAWRY3yki8QexPHQjWHrSeNeUPdzxGLQqNMgrP+u9j3wH58VdJKuGTcs EmQ8T8Xxuh7uvGPj/cmEXYQ7Fbkv6+EsEVS/E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Ascyh2mAVw7U8UJiVtANfXdAWQnxu/KvqW4w3UeoE1k=; b=SqmuEGkeYhDQo74Nif3Lmf76o2gyGnE11sEWY/t2vYxjGA2KysyNaA59jmS562Ne6t ABqeOwknHXmeioEKPjykOQXb6PGnDVcx8YbBzGVjlDOoPiKFhm0rh7S/2s86g/99Mp71 tQMduemgs2Il4sZVoMxNr52mSN7S/jy5hBdETqOthFt+SPvksf9l2xFVunoOinC8AL+Q tKVMWMqmtgbClBXR9OzFfoq6YT3n0dbO4/IM/N4CapQ2HAHfpkeOMH+oRIKTgS0GVUUC xMGfzPVxxjnqAl2dWVuWm2JJ9QBw8/sSZ8rYzxwgcc54BIwu6NzbzhD094P/KBGGVKLl nkmQ== X-Gm-Message-State: AFeK/H21wg763eX3Gw9XnCAf7SKK/xoq6a5yj8Ki80UEodAoiOSbq3b0ZJj2oF0MHsWkzA== X-Received: by 10.25.219.18 with SMTP id s18mr12081695lfg.174.1491570437937; Fri, 07 Apr 2017 06:07:17 -0700 (PDT) Received: from ozzy.nask.waw.pl ([2001:a10:160:3::3]) by smtp.googlemail.com with ESMTPSA id 17sm961440ljp.58.2017.04.07.06.07.17 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 07 Apr 2017 06:07:17 -0700 (PDT) From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= To: Jonathan Woithe , Darren Hart , Andy Shevchenko Cc: platform-driver-x86@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/6] platform/x86: fujitsu-laptop: refactor LED registration Date: Fri, 7 Apr 2017 15:07:09 +0200 Message-Id: <20170407130713.8417-3-kernel@kempniu.pl> X-Mailer: git-send-email 2.12.2 In-Reply-To: <20170407130713.8417-1-kernel@kempniu.pl> References: <20170407130713.8417-1-kernel@kempniu.pl> MIME-Version: 1.0 Sender: platform-driver-x86-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: platform-driver-x86@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Move a long section of code responsible for registering LEDs out of acpi_fujitsu_laptop_add() to improve readability and ensure proper cleanup of platform device and kfifo e.g. when two supported LEDs are detected, the first one gets registered successfully but the second one does not. This makes the result variable in acpi_fujitsu_laptop_add() redundant, so remove it. Adjust whitespace to make checkpatch happy. Signed-off-by: Michał Kępień --- drivers/platform/x86/fujitsu-laptop.c | 128 +++++++++++++++++++--------------- 1 file changed, 70 insertions(+), 58 deletions(-) diff --git a/drivers/platform/x86/fujitsu-laptop.c b/drivers/platform/x86/fujitsu-laptop.c index 555de246b994..4d13cc03d3b1 100644 --- a/drivers/platform/x86/fujitsu-laptop.c +++ b/drivers/platform/x86/fujitsu-laptop.c @@ -754,9 +754,72 @@ static void fujitsu_laptop_platform_remove(void) platform_device_unregister(fujitsu_laptop->pf_device); } -static int acpi_fujitsu_laptop_add(struct acpi_device *device) +static int acpi_fujitsu_laptop_leds_register(void) { int result = 0; + + if (call_fext_func(FUNC_LEDS, 0x0, 0x0, 0x0) & LOGOLAMP_POWERON) { + result = led_classdev_register(&fujitsu_laptop->pf_device->dev, + &logolamp_led); + if (result == 0) { + fujitsu_laptop->logolamp_registered = 1; + } else { + pr_err("Could not register LED handler for logo lamp, error %i\n", + result); + } + } + + if ((call_fext_func(FUNC_LEDS, 0x0, 0x0, 0x0) & KEYBOARD_LAMPS) && + (call_fext_func(FUNC_BUTTONS, 0x0, 0x0, 0x0) == 0x0)) { + result = led_classdev_register(&fujitsu_laptop->pf_device->dev, + &kblamps_led); + if (result == 0) { + fujitsu_laptop->kblamps_registered = 1; + } else { + pr_err("Could not register LED handler for keyboard lamps, error %i\n", + result); + } + } + + /* + * BTNI bit 24 seems to indicate the presence of a radio toggle + * button in place of a slide switch, and all such machines appear + * to also have an RF LED. Therefore use bit 24 as an indicator + * that an RF LED is present. + */ + if (call_fext_func(FUNC_BUTTONS, 0x0, 0x0, 0x0) & BIT(24)) { + result = led_classdev_register(&fujitsu_laptop->pf_device->dev, + &radio_led); + if (result == 0) { + fujitsu_laptop->radio_led_registered = 1; + } else { + pr_err("Could not register LED handler for radio LED, error %i\n", + result); + } + } + + /* Support for eco led is not always signaled in bit corresponding + * to the bit used to control the led. According to the DSDT table, + * bit 14 seems to indicate presence of said led as well. + * Confirm by testing the status. + */ + if ((call_fext_func(FUNC_LEDS, 0x0, 0x0, 0x0) & BIT(14)) && + (call_fext_func(FUNC_LEDS, 0x2, ECO_LED, 0x0) != UNSUPPORTED_CMD)) { + result = led_classdev_register(&fujitsu_laptop->pf_device->dev, + &eco_led); + if (result == 0) { + fujitsu_laptop->eco_led_registered = 1; + } else { + pr_err("Could not register LED handler for eco LED, error %i\n", + result); + } + } + + return result; +} + +static int acpi_fujitsu_laptop_add(struct acpi_device *device) +{ int state = 0; int error; int i; @@ -837,65 +900,14 @@ static int acpi_fujitsu_laptop_add(struct acpi_device *device) if (error) goto err_free_fifo; - if (call_fext_func(FUNC_LEDS, 0x0, 0x0, 0x0) & LOGOLAMP_POWERON) { - result = led_classdev_register(&fujitsu_laptop->pf_device->dev, - &logolamp_led); - if (result == 0) { - fujitsu_laptop->logolamp_registered = 1; - } else { - pr_err("Could not register LED handler for logo lamp, error %i\n", - result); - } - } - - if ((call_fext_func(FUNC_LEDS, 0x0, 0x0, 0x0) & KEYBOARD_LAMPS) && - (call_fext_func(FUNC_BUTTONS, 0x0, 0x0, 0x0) == 0x0)) { - result = led_classdev_register(&fujitsu_laptop->pf_device->dev, - &kblamps_led); - if (result == 0) { - fujitsu_laptop->kblamps_registered = 1; - } else { - pr_err("Could not register LED handler for keyboard lamps, error %i\n", - result); - } - } - - /* - * BTNI bit 24 seems to indicate the presence of a radio toggle - * button in place of a slide switch, and all such machines appear - * to also have an RF LED. Therefore use bit 24 as an indicator - * that an RF LED is present. - */ - if (call_fext_func(FUNC_BUTTONS, 0x0, 0x0, 0x0) & BIT(24)) { - result = led_classdev_register(&fujitsu_laptop->pf_device->dev, - &radio_led); - if (result == 0) { - fujitsu_laptop->radio_led_registered = 1; - } else { - pr_err("Could not register LED handler for radio LED, error %i\n", - result); - } - } - - /* Support for eco led is not always signaled in bit corresponding - * to the bit used to control the led. According to the DSDT table, - * bit 14 seems to indicate presence of said led as well. - * Confirm by testing the status. - */ - if ((call_fext_func(FUNC_LEDS, 0x0, 0x0, 0x0) & BIT(14)) && - (call_fext_func(FUNC_LEDS, 0x2, ECO_LED, 0x0) != UNSUPPORTED_CMD)) { - result = led_classdev_register(&fujitsu_laptop->pf_device->dev, - &eco_led); - if (result == 0) { - fujitsu_laptop->eco_led_registered = 1; - } else { - pr_err("Could not register LED handler for eco LED, error %i\n", - result); - } - } + error = acpi_fujitsu_laptop_leds_register(); + if (error) + goto err_remove_platform_device; - return result; + return 0; +err_remove_platform_device: + fujitsu_laptop_platform_remove(); err_free_fifo: kfifo_free(&fujitsu_laptop->fifo); err_stop: