Re: sony-laptop crash (Sony VPC SE 1V9E) for 3.8.0+

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux