2009-12-08 07:37:11

by Ike Panhc

[permalink] [raw]
Subject: [Resend] [PATCH] asus-laptop: add Lenovo SL LenovoCare LED support

Resend because the email address of signed-off is wrong in prior mail

This patch is to enable the LenovoCare LED support on Lenovo SL laptop. Based
on the found of the control interface by Alexandre Rostovtsev

Turn on the LenovoCare LED:
(As root privileges) echo 1 > /sys/class/leds/asus\:\:LenovoCare/brightness
Trun off the LenovoCare LED:
(As root privileges) echo 0 > /sys/class/leds/asus\:\:LenovoCare/brightness

The patch against current checkout of acpi4asus is below.

Signed-off-by: Ike Panhc <[email protected]>
---
drivers/platform/x86/asus-laptop.c | 21 ++++++++++++++++++---
1 files changed, 18 insertions(+), 3 deletions(-)

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:
--
1.6.3.3


2009-12-08 07:43:09

by Corentin Chary

[permalink] [raw]
Subject: Re: [Resend] [PATCH] asus-laptop: add Lenovo SL LenovoCare LED support

On Tue, Dec 8, 2009 at 8:37 AM, Ike Panhc <[email protected]> wrote:
> Resend because the email address of signed-off is wrong in prior mail
>
> This patch is to enable the LenovoCare LED support on Lenovo SL laptop. Based
> on the found of the control interface by Alexandre Rostovtsev
>
> Turn on the LenovoCare LED:
> ?(As root privileges) echo 1 > /sys/class/leds/asus\:\:LenovoCare/brightness
> Trun off the LenovoCare LED:
> ?(As root privileges) echo 0 > /sys/class/leds/asus\:\:LenovoCare/brightness
>
> The patch against current checkout of acpi4asus is below.
>
> Signed-off-by: Ike Panhc <[email protected]>

Hi,
Is there another method to control that led in _SB.ATKD ?
Could you re-send me some Leveno dsdt (if possible, more than one) ?
Thanks,


--
Corentin Chary
http://xf.iksaif.net

2009-12-08 07:51:14

by Ike Panhc

[permalink] [raw]
Subject: Re: [Resend] [PATCH] asus-laptop: add Lenovo SL LenovoCare LED support

Corentin Chary wrote:
> On Tue, Dec 8, 2009 at 8:37 AM, Ike Panhc <[email protected]> wrote:
>> Resend because the email address of signed-off is wrong in prior mail
>>
>> This patch is to enable the LenovoCare LED support on Lenovo SL laptop. Based
>> on the found of the control interface by Alexandre Rostovtsev
>>
>> Turn on the LenovoCare LED:
>> (As root privileges) echo 1 > /sys/class/leds/asus\:\:LenovoCare/brightness
>> Trun off the LenovoCare LED:
>> (As root privileges) echo 0 > /sys/class/leds/asus\:\:LenovoCare/brightness
>>
>> The patch against current checkout of acpi4asus is below.
>>
>> Signed-off-by: Ike Panhc <[email protected]>
>
> Hi,
> Is there another method to control that led in _SB.ATKD ?
> Could you re-send me some Leveno dsdt (if possible, more than one) ?
> Thanks,
>
>
Hi,

The attachment is the dsdt I have, I will ask me friend to send me from his
laptop.

I look the dsdt, only WLED and BLED. I have not tried them, it looks like
the LED for wireless and bluetooth.

--
Ike Panhc <[email protected]>


Attachments:
dsdt.dsl.gz (33.34 kB)

2009-12-08 15:42:02

by Matthew Garrett

[permalink] [raw]
Subject: Re: [Resend] [PATCH] asus-laptop: add Lenovo SL LenovoCare LED support

On Tue, Dec 08, 2009 at 03:37:09PM +0800, Ike Panhc wrote:

> 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) */

The driver is controlling the ATKD device, which has a HID of ATK0101.
These devices are all underneath it...

> +ASUS_HANDLE(lled_set, "\\_SB_.PCI0.SBRG.EC0_.HKEY.TVLS"); /* LenovoCare */

And this one isn't, which is a bit jarring. Looking closer, it's under
the LEN0014 device, which means that you're trying to touch a method
that belongs to a device other than the one this driver is bound to.
That's wrong. You want a separate ACPI driver for the LEN0014 device,
and this should be called for there. Looking at it, you seem to get
rfkill as well (the GWAN/SWAN, GBDC/SBDF and GUWB/SUWB methods) and
maybe some other stuff.

So this shouldn't go in asus-laptop. You'll need to add another separate
driver for the SL-specific functionality.

--
Matthew Garrett | [email protected]

2009-12-08 17:32:18

by Corentin Chary

[permalink] [raw]
Subject: Re: [Resend] [PATCH] asus-laptop: add Lenovo SL LenovoCare LED support

On Tue, Dec 8, 2009 at 4:41 PM, Matthew Garrett <[email protected]> wrote:
> On Tue, Dec 08, 2009 at 03:37:09PM +0800, Ike Panhc wrote:
>
>> ?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) */
>
> The driver is controlling the ATKD device, which has a HID of ATK0101.
> These devices are all underneath it...
>
>> +ASUS_HANDLE(lled_set, "\\_SB_.PCI0.SBRG.EC0_.HKEY.TVLS"); /* LenovoCare */
>
> And this one isn't, which is a bit jarring. Looking closer, it's under
> the LEN0014 device, which means that you're trying to touch a method
> that belongs to a device other than the one this driver is bound to.
> That's wrong. You want a separate ACPI driver for the LEN0014 device,
> and this should be called for there. Looking at it, you seem to get
> rfkill as well (the GWAN/SWAN, GBDC/SBDF and GUWB/SUWB methods) and
> maybe some other stuff.
>
> So this shouldn't go in asus-laptop. You'll need to add another separate
> driver for the SL-specific functionality.

That means asus-laptop and sl-laptop will be both needed for a SL
laptop, but I don't think this is a problem.



--
Corentin Chary
http://xf.iksaif.net

2009-12-09 06:53:29

by Ike Panhc

[permalink] [raw]
Subject: Re: [Resend] [PATCH] asus-laptop: add Lenovo SL LenovoCare LED support

Corentin Chary wrote:
> On Tue, Dec 8, 2009 at 4:41 PM, Matthew Garrett <[email protected]> wrote:
>> On Tue, Dec 08, 2009 at 03:37:09PM +0800, Ike Panhc wrote:
>>
>>> 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) */
>> The driver is controlling the ATKD device, which has a HID of ATK0101.
>> These devices are all underneath it...
>>
>>> +ASUS_HANDLE(lled_set, "\\_SB_.PCI0.SBRG.EC0_.HKEY.TVLS"); /* LenovoCare */
>> And this one isn't, which is a bit jarring. Looking closer, it's under
>> the LEN0014 device, which means that you're trying to touch a method
>> that belongs to a device other than the one this driver is bound to.
>> That's wrong. You want a separate ACPI driver for the LEN0014 device,
>> and this should be called for there. Looking at it, you seem to get
>> rfkill as well (the GWAN/SWAN, GBDC/SBDF and GUWB/SUWB methods) and
>> maybe some other stuff.
>>
>> So this shouldn't go in asus-laptop. You'll need to add another separate
>> driver for the SL-specific functionality.
>
> That means asus-laptop and sl-laptop will be both needed for a SL
> laptop, but I don't think this is a problem.
>
I think your suggestion is that one acpi driver for one acpi device.
It makes sense to me. I will build a new driver.

2009-12-09 07:47:38

by Corentin Chary

[permalink] [raw]
Subject: Re: [Resend] [PATCH] asus-laptop: add Lenovo SL LenovoCare LED support

On Wed, Dec 9, 2009 at 7:53 AM, Ike Panhc <[email protected]> wrote:
> Corentin Chary wrote:
>> On Tue, Dec 8, 2009 at 4:41 PM, Matthew Garrett <[email protected]> wrote:
>>> On Tue, Dec 08, 2009 at 03:37:09PM +0800, Ike Panhc wrote:
>>>
>>>> ?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) */
>>> The driver is controlling the ATKD device, which has a HID of ATK0101.
>>> These devices are all underneath it...
>>>
>>>> +ASUS_HANDLE(lled_set, "\\_SB_.PCI0.SBRG.EC0_.HKEY.TVLS"); /* LenovoCare */
>>> And this one isn't, which is a bit jarring. Looking closer, it's under
>>> the LEN0014 device, which means that you're trying to touch a method
>>> that belongs to a device other than the one this driver is bound to.
>>> That's wrong. You want a separate ACPI driver for the LEN0014 device,
>>> and this should be called for there. Looking at it, you seem to get
>>> rfkill as well (the GWAN/SWAN, GBDC/SBDF and GUWB/SUWB methods) and
>>> maybe some other stuff.
>>>
>>> So this shouldn't go in asus-laptop. You'll need to add another separate
>>> driver for the SL-specific functionality.
>>
>> That means asus-laptop and sl-laptop will be both needed for a SL
>> laptop, but I don't think this is a problem.
>>
> I think your suggestion is that one acpi driver for one acpi device.
> It makes sense to me. I will build a new driver.
>
>

You should take a look at the new eeepc-laptop driver in
http://git.iksaif.net/?p=acpi4asus.git;a=summary
Alan Jenkins cleaned it a lot so it can be an example for new drivers :)

--
Corentin Chary
http://xf.iksaif.net