From patchwork Tue Dec 8 07:26:09 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ike Panhc X-Patchwork-Id: 65640 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id nB87QJar008761 for ; Tue, 8 Dec 2009 07:26:19 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751832AbZLHH0L (ORCPT ); Tue, 8 Dec 2009 02:26:11 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1753348AbZLHH0L (ORCPT ); Tue, 8 Dec 2009 02:26:11 -0500 Received: from adelie.canonical.com ([91.189.90.139]:34704 "EHLO adelie.canonical.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751832AbZLHH0J (ORCPT ); Tue, 8 Dec 2009 02:26:09 -0500 Received: from hutte.canonical.com ([91.189.90.181]) by adelie.canonical.com with esmtp (Exim 4.69 #1 (Debian)) id 1NHuSd-0007Ut-6i; Tue, 08 Dec 2009 07:26:15 +0000 Received: from [210.242.151.101] (helo=canonical.com) by hutte.canonical.com with esmtpsa (TLS-1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.69) (envelope-from ) id 1NHuSb-0003rX-Kk; Tue, 08 Dec 2009 07:26:15 +0000 From: Ike Panhc To: linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, acpi4asus-user@lists.sourceforge.net Cc: Corentin Chary , Alexandre Rostovtsev Subject: [PATCH] asus-laptop: add Lenovo SL LenovoCare LED support Date: Tue, 8 Dec 2009 15:26:09 +0800 Message-Id: <1260257169-7227-1-git-send-email-ike.pan@canonical.com> X-Mailer: git-send-email 1.6.3.3 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org diff --git a/drivers/platform/x86/asus-laptop.c b/drivers/platform/x86/asus-laptop.c index 3348cc6..f3c52b6 100644 --- a/drivers/platform/x86/asus-laptop.c +++ b/drivers/platform/x86/asus-laptop.c @@ -87,6 +87,7 @@ #define LCD_ON 0x80 /* LCD backlight */ #define GPS_ON 0x100 /* GPS */ #define KEY_ON 0x200 /* Keyboard backlight */ +#define LLED_ON 0x400 /* Lenovo SL: LenovoCare LED */ #define ASUS_LOG ASUS_HOTK_FILE ": " #define ASUS_ERR KERN_ERR ASUS_LOG @@ -123,6 +124,7 @@ ASUS_HANDLE(tled_set, ASUS_HOTK_PREFIX "TLED"); ASUS_HANDLE(rled_set, ASUS_HOTK_PREFIX "RLED"); /* W1JC */ ASUS_HANDLE(pled_set, ASUS_HOTK_PREFIX "PLED"); /* A7J */ ASUS_HANDLE(gled_set, ASUS_HOTK_PREFIX "GLED"); /* G1, G2 (probably) */ +ASUS_HANDLE(lled_set, "\\_SB_.PCI0.SBRG.EC0_.HKEY.TVLS"); /* LenovoCare */ /* LEDD */ ASUS_HANDLE(ledd_set, ASUS_HOTK_PREFIX "SLCM"); @@ -285,6 +287,7 @@ ASUS_LED(rled, "record", 1); ASUS_LED(pled, "phone", 1); ASUS_LED(gled, "gaming", 1); ASUS_LED(kled, "kbd_backlight", 3); +ASUS_LED(lled, "LenovoCare", 1); struct key_entry { char type; @@ -419,6 +422,9 @@ static void write_status(acpi_handle handle, int out, int mask) handle = (out) ? gps_on_handle : gps_off_handle; out = 0x02; break; + case LLED_ON: + out = (out & 0x1) * 0xFF; + break; default: out &= 0x1; break; @@ -452,6 +458,7 @@ ASUS_LED_HANDLER(pled, PLED_ON); ASUS_LED_HANDLER(rled, RLED_ON); ASUS_LED_HANDLER(tled, TLED_ON); ASUS_LED_HANDLER(gled, GLED_ON); +ASUS_LED_HANDLER(lled, LLED_ON); /* * Keyboard backlight @@ -1146,6 +1153,7 @@ static int asus_hotk_get_info(void) ASUS_HANDLE_INIT(rled_set); ASUS_HANDLE_INIT(pled_set); ASUS_HANDLE_INIT(gled_set); + ASUS_HANDLE_INIT(lled_set); ASUS_HANDLE_INIT(ledd_set); @@ -1338,6 +1346,7 @@ static void asus_led_exit(void) ASUS_LED_UNREGISTER(rled); ASUS_LED_UNREGISTER(gled); ASUS_LED_UNREGISTER(kled); + ASUS_LED_UNREGISTER(lled); } static void asus_input_exit(void) @@ -1417,19 +1426,25 @@ static int asus_led_init(struct device *dev) if (rv) goto out4; + rv = ASUS_LED_REGISTER(lled, dev); + if (rv) + goto out5; + if (kled_set_handle && kled_get_handle) rv = ASUS_LED_REGISTER(kled, dev); if (rv) - goto out5; + goto out6; led_workqueue = create_singlethread_workqueue("led_workqueue"); if (!led_workqueue) - goto out6; + goto out7; return 0; -out6: +out7: rv = -ENOMEM; ASUS_LED_UNREGISTER(kled); +out6: + ASUS_LED_UNREGISTER(lled); out5: ASUS_LED_UNREGISTER(gled); out4: