From patchwork Tue Jun 12 18:49:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Azael Avalos X-Patchwork-Id: 10460893 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 B67F4603B4 for ; Tue, 12 Jun 2018 18:49:41 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A7F5C28A31 for ; Tue, 12 Jun 2018 18:49:41 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9CAED28A2E; Tue, 12 Jun 2018 18:49:41 +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 8B22B28A31 for ; Tue, 12 Jun 2018 18:49:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932463AbeFLStk (ORCPT ); Tue, 12 Jun 2018 14:49:40 -0400 Received: from mail-pg0-f66.google.com ([74.125.83.66]:38655 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932343AbeFLSti (ORCPT ); Tue, 12 Jun 2018 14:49:38 -0400 Received: by mail-pg0-f66.google.com with SMTP id c9-v6so1108pgf.5 for ; Tue, 12 Jun 2018 11:49:38 -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=ASFRu9mUK+e1uY2zJDFE2LgQPMg83VWtrnWdNP696OU=; b=Q0jOqG1M4b2KsSa5WQCi+O95s16fR8nsOS0y0pvQZbw2rOFZCEaeUW1tpICN3zm1Qt k6QfGAw7igwLCJp4wVyW4KnUBEWvAuCI1ViLGzauHzT5a9OlopOIZ+yynZAIZ1U3a580 QLj+NGQep4ugr83zdj+76mA2Lnkty4YkWEEnSOXW3B88ctfBMaARelfehKcO6yJswwB+ p8vMBsFIwgIUknhcP71uDT0xhYm1NSTgm3qk8X4R2bt9FqQIsjt+Bq378z5bslgvE8IR GCmcvlNs7yEEM0t8+z+aVgUmj/K3i3Yg+rBsngUHv7+uEWiCaj/3DUoRJFoYmS+k29Ol Wmzw== 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=ASFRu9mUK+e1uY2zJDFE2LgQPMg83VWtrnWdNP696OU=; b=HQcelrwwvDhKbyJdtDC4B+UROVKmkNysC35f2YkPcrTRD6OZ6uu0oFbtRATmpkK2RS AR0XliO/r8avI8KRRj8HBeYcNE6oed1nmmpQSLmtKufEt5AI56yk3Vak883w1N6c1xvz cT6rvFDhLQ0pLBJlFGzqel6U4iN89vNFXEskl1sgHuHkZtFQFXo9Lq9Ci6gOFpmSBTBA yv+/MCQ5+kDLBj3CthcltrhYYsoBvI/ObjhqXwxp19/iIXA2tLdaCN1xBZxuukxI1cDz Bnhx5sC4TX7KeeCvAdUWhMziiPYkxK4Fqdk0Tu312DaD5bWOIUmTaZ1DuV6+PyETmuuk dByA== X-Gm-Message-State: APt69E3xLRP0CwIyqXj2J3JDJ0oG95nymjjVyG3494/RQmSbYwXo3LuT FGcOkvb/IjTQhqnx7NU6Fzv5PQ== X-Google-Smtp-Source: ADUXVKI54A/ZPJCxgDeqZcagXYwfYNrtQG3XAonmZp0i1DaaFqasOFW6iz8xmy8tYn/exdd8fsk2VQ== X-Received: by 2002:a65:528c:: with SMTP id y12-v6mr1321398pgp.157.1528829378081; Tue, 12 Jun 2018 11:49:38 -0700 (PDT) Received: from linux-cig.uacj.mx ([148.210.118.90]) by smtp.gmail.com with ESMTPSA id e68-v6sm1210024pfl.65.2018.06.12.11.49.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 12 Jun 2018 11:49:37 -0700 (PDT) From: Azael Avalos To: platform-driver-x86@vger.kernel.org Cc: Darren Hart , Andy Shevchenko Subject: [PATCH] platform/x86: toshiba_acpi: Update KBD backlight LED on second gen laptops Date: Tue, 12 Jun 2018 12:49:35 -0600 Message-Id: <20180612184935.4274-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 beign 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. Signed-off-by: Azael Avalos --- drivers/platform/x86/toshiba_acpi.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/drivers/platform/x86/toshiba_acpi.c b/drivers/platform/x86/toshiba_acpi.c index eef76bfa5d73..0b645b19865f 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); } @@ -2420,6 +2421,13 @@ static void toshiba_acpi_kbd_bl_work(struct work_struct *work) &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), @@ -3119,9 +3127,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 +3248,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 */