From patchwork Fri Jun 15 17:46:27 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Azael Avalos X-Patchwork-Id: 10467177 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 32237601C2 for ; Fri, 15 Jun 2018 17:46:34 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2134428DEE for ; Fri, 15 Jun 2018 17:46:34 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 15A9D28E18; Fri, 15 Jun 2018 17:46:34 +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=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI 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 9E4C028DEE for ; Fri, 15 Jun 2018 17:46:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S966101AbeFORqd (ORCPT ); Fri, 15 Jun 2018 13:46:33 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:39010 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S966067AbeFORqc (ORCPT ); Fri, 15 Jun 2018 13:46:32 -0400 Received: by mail-pf0-f195.google.com with SMTP id r11-v6so5200365pfl.6 for ; Fri, 15 Jun 2018 10:46:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=AZFXZK6XWp4WVOQFoHZEZ84Dn+NANzCq7EnqSeFdTcc=; b=XIDm2lO8Yz1ksyGDGMYZ8IVv0SjnmyUXFESAjBPBxZux/SOx2EqTOsQ/gYUl2NJtwt sdf+wusW+1PzdDMxDdjgUJHE1rwh2mEgFhfkTaltGRxBLPVKX4dVaSffzGlIpme7+j+/ Sc2oK88QFTVTslF2AtWFLzzlXt6oJBZOUT+J5RUWTBSYZTQliMqMcc3877akPX9w9sOQ WdrpqUR/xf2BaB6lFmbvGbohNhgosDrTzKa9Ep5gBTLsZF5ROLD034U5p9zxa+uhNqZG 0FXNhJ/Xoo0sROaIYZfazIROVFnRGkoBrrJnK6+kikedjmi/QVsA5B3lTwnrewDGxOlD oHOg== 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; bh=AZFXZK6XWp4WVOQFoHZEZ84Dn+NANzCq7EnqSeFdTcc=; b=iF77q7HLld5FaG5d0bgmqBQZUORV4+N0GcCwiIIbKzkvxEDNm6EWecv9mwqANjMuVe HAmrtDTKz36aWohU3COFAl82ruA3wQ1HEFdybHBZ3tA3vuDk+vLuqWZ08agHay8Ev4oX zjuICM3qqVz0PYGrUWK+EC97d9Q0ePAE6JGRGHy3YrFL9aa/rpIC7dQzZys1cceB+hDG 5WQT0MbI0aTWx8jCbqRUpqqj6+nN00Jgz5z4wyjIqbrljnjWOkDFeKdOGHk8uhx5dJ+U CmUXPojB+dOb/1R2dbZ8MK8IZOVQA1FtqLwVUlh6fGKnz3GvptkDFy54asV1iHEZGuoR p8tQ== X-Gm-Message-State: APt69E2UXwq6+i+b2VMoWUhlvbPPvgaZgXF5X45ozu3eg31sASpX0GBh 0mU/c76kaKathqIUUnJb0dfSdQ== X-Google-Smtp-Source: ADUXVKKxqV+W9iYIxna2PgKqLxYS9BNAPFBg8yAAqsDHt+w9bGonSmOLKnm08qZMZN+/lFfSG4D9fw== X-Received: by 2002:a62:a21b:: with SMTP id m27-v6mr2976862pff.248.1529084791418; Fri, 15 Jun 2018 10:46:31 -0700 (PDT) Received: from linux-cig.uacj.mx ([148.210.118.90]) by smtp.gmail.com with ESMTPSA id u90-v6sm23309405pfa.101.2018.06.15.10.46.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Jun 2018 10:46:30 -0700 (PDT) From: Azael Avalos To: platform-driver-x86@vger.kernel.org Cc: Darren Hart , Andy Shevchenko Subject: [PATCH v2] platform/x86: toshiba_acpi: Update KBD backlight LED on second gen laptops Date: Fri, 15 Jun 2018 11:46:27 -0600 Message-Id: <20180615174627.3439-1-coproscefalo@gmail.com> X-Mailer: git-send-email 2.16.4 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 Second generation keyboard backlight (type 2) laptops can switch on the keyboard LED on their own via hardware/firmware, but the LED subsystem is unaware of such change since the LED interface was only being created on first generation keyboard backlight (type 1) laptops. This patch creates the LED interface for second gen keyboards and calls the *_hw_changed API whenever userspace changes the state of the keyboard backlight LED. While we are at it, remove an unneeded asignment to the acpi_dev struct under *_kbd_bl_work, and also update the kbd_event_generated variable in the main toshiba struct instead of the global struct. Signed-off-by: Azael Avalos --- Changes since v1: - Added notes to message commit about changes to variables inside the main toshiba struct and the removal of an unneeded acpi_dev variable - Corrected small typo beign->being drivers/platform/x86/toshiba_acpi.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c index eef76bfa5d73..f8b5fc4ad16c 100644 --- a/drivers/platform/x86/toshiba_acpi.c +++ b/drivers/platform/x86/toshiba_acpi.c @@ -1836,6 +1836,7 @@ static ssize_t kbd_backlight_mode_store(struct device *dev, return ret; toshiba->kbd_mode = mode; + toshiba_acpi->kbd_mode = mode; /* * Some laptop models with the second generation backlit @@ -1852,7 +1853,7 @@ static ssize_t kbd_backlight_mode_store(struct device *dev, * event via genetlink. */ if (toshiba->kbd_type == 2 && - !toshiba_acpi->kbd_event_generated) + !toshiba->kbd_event_generated) schedule_work(&kbd_bl_work); } @@ -2413,16 +2414,21 @@ static const struct attribute_group toshiba_attr_group = { static void toshiba_acpi_kbd_bl_work(struct work_struct *work) { - struct acpi_device *acpi_dev = toshiba_acpi->acpi_dev; - /* Update the sysfs entries */ - if (sysfs_update_group(&acpi_dev->dev.kobj, + if (sysfs_update_group(&toshiba_acpi->acpi_dev->dev.kobj, &toshiba_attr_group)) pr_err("Unable to update sysfs entries\n"); + /* Notify LED subsystem about keyboard backlight change */ + if (toshiba_acpi->kbd_type == 2 && + toshiba_acpi->kbd_mode != SCI_KBD_MODE_AUTO) + led_classdev_notify_brightness_hw_changed(&toshiba_acpi->kbd_led, + (toshiba_acpi->kbd_mode == SCI_KBD_MODE_ON) ? + LED_FULL : LED_OFF); + /* Emulate the keyboard backlight event */ - acpi_bus_generate_netlink_event(acpi_dev->pnp.device_class, - dev_name(&acpi_dev->dev), + acpi_bus_generate_netlink_event(toshiba_acpi->acpi_dev->pnp.device_class, + dev_name(&toshiba_acpi->acpi_dev->dev), 0x92, 0); } @@ -3119,9 +3125,12 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev) /* * Only register the LED if KBD illumination is supported * and the keyboard backlight operation mode is set to FN-Z + * or we detect a second gen keyboard backlight */ - if (dev->kbd_illum_supported && dev->kbd_mode == SCI_KBD_MODE_FNZ) { + if (dev->kbd_illum_supported && + (dev->kbd_mode == SCI_KBD_MODE_FNZ || dev->kbd_type == 2)) { dev->kbd_led.name = "toshiba::kbd_backlight"; + dev->kbd_led.flags = LED_BRIGHT_HW_CHANGED; dev->kbd_led.max_brightness = 1; dev->kbd_led.brightness_set = toshiba_kbd_backlight_set; dev->kbd_led.brightness_get = toshiba_kbd_backlight_get; @@ -3237,11 +3246,16 @@ static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event) pr_info("SATA power event received %x\n", event); break; case 0x92: /* Keyboard backlight mode changed */ - toshiba_acpi->kbd_event_generated = true; + dev->kbd_event_generated = true; /* Update sysfs entries */ if (sysfs_update_group(&acpi_dev->dev.kobj, &toshiba_attr_group)) pr_err("Unable to update sysfs entries\n"); + /* Notify LED subsystem about keyboard backlight change */ + if (dev->kbd_type == 2 && dev->kbd_mode != SCI_KBD_MODE_AUTO) + led_classdev_notify_brightness_hw_changed(&dev->kbd_led, + (&dev->kbd_mode == SCI_KBD_MODE_ON) ? + LED_FULL : LED_OFF); break; case 0x85: /* Unknown */ case 0x8d: /* Unknown */