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 <[email protected]>
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 <[email protected]>
     Signed-off-by: Mattia Dongili <[email protected]>

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 [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to