The patch works as expected.
...
[ 49.590035] sony_laptop: Sony Notebook Control Driver v0.6
[ 49.590104] input: Sony Vaio Keys as
/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:01/SNY5001:00/input/input8
[ 49.590162] input: Sony Vaio Jogdial as
/devices/LNXSYSTM:00/device:00/PNP0A08:00/device:01/SNY5001:00/input/input9
[ 49.595169] sony_laptop: handle 0x014b: keyboard backlight setup
already done for 0x0143
[ 49.595174] sony_laptop: couldn't set up keyboard backlight function
(-16)
[ 49.595255] sony_laptop: brightness ignored, must be controlled by
ACPI video driver
...
Issues left:
a) The wrong gfx switch reading as mentioned in my last mail.
b) Different mapping for timeout settings:
Modinfo gives me:
"parm: kbd_backlight_timeout:set this to 0 to set the default 10 seconds
timeout, 1 for 30 seconds, 2 for 60 seconds and 3 to disable timeout
(default: 0) (int)"
My mapping is: 0 -> disabled, 1-> 10 seconds, 2-> 30 seconds, 3 -> 60
seconds
thx
Am 22.09.2013 05:10, schrieb Mattia Dongili:
On Sat, Sep 21, 2013 at 11:39:18PM +0200, Marco Krüger wrote:
Hi Mattia,
you are right!
If I comment out either one case (0x0143/0x014b) no crash occurs. I
also recognized that the gfx switch value is wrong. Using the gfx
switch toggles the value, but it is the opposite to the actual
switch position. What can I do to help you solving this bug?
apologies, this issue flew off my radar and I essentially forgot about
it.
I had prepared this patch back then, could you see if it also works?
I think these checks should be extended to all handles not just the
keyboard backlight one but that's a bigger patch.
---
commit 0fcf192e1bdd396cb510bed918ee6c450396c8e4
Author: Mattia Dongili <malattia@xxxxxxxx>
Date: Sun Aug 18 19:32:08 2013 +0900
sony-laptop: warn on multiple KBD backlight handles
Some BIOS versions/Vaio models apparently ship with two nearly identical
functions to handle backlight related controls.
The only difference seems to be:
If (LEqual (BUF1, 0x40))
{
Store (0x40, P80H)
Store (BUF2, Local0)
- And (Local0, One, Local0)
+ And (Local0, 0x03, Local0)
Store (Local0, ^^H_EC.KLPC)
}
Avoid erroring out on initialization and messing things up on cleanup
for now since we never call into those methods with anything different
than 1 or 0.
This issue was found on a Sony VPCSE1V9E/BIOS R2087H4.
Cc: Marco Krüger <krgsch@xxxxxxxxx>
Signed-off-by: Mattia Dongili <malattia@xxxxxxxx>
diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index 3a1b6bf..b5a7f3c 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -146,7 +146,8 @@ static void sony_nc_thermal_resume(void);
#endif
static int sony_nc_kbd_backlight_setup(struct platform_device *pd,
unsigned int handle);
-static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd);
+static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd,
+ unsigned int handle);
static int sony_nc_battery_care_setup(struct platform_device *pd,
unsigned int handle);
@@ -1448,7 +1449,7 @@ static void sony_nc_function_cleanup(struct platform_device *pd)
case 0x014b:
case 0x014c:
case 0x0163:
- sony_nc_kbd_backlight_cleanup(pd);
+ sony_nc_kbd_backlight_cleanup(pd, handle);
break;
default:
continue;
@@ -1829,6 +1830,12 @@ static int sony_nc_kbd_backlight_setup(struct platform_device *pd,
int result;
int ret = 0;
+ if (kbdbl_ctl) {
+ pr_warn("handle 0x%.4x: keyboard backlight setup already done for 0x%.4x\n",
+ handle, kbdbl_ctl->handle);
+ return -EBUSY;
+ }
+
/* verify the kbd backlight presence, these handles are not used for
* keyboard backlight only
*/
@@ -1886,9 +1893,10 @@ outkzalloc:
return ret;
}
-static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd)
+static void sony_nc_kbd_backlight_cleanup(struct platform_device *pd,
+ unsigned int handle)
{
- if (kbdbl_ctl) {
+ if (kbdbl_ctl && handle == kbdbl_ctl->handle) {
int result;
device_remove_file(&pd->dev, &kbdbl_ctl->mode_attr);
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html