|
@@ -1836,6 +1836,7 @@ static ssize_t kbd_backlight_mode_store(struct device *dev,
|
|
|
return ret;
|
|
|
|
|
|
toshiba->kbd_mode = mode;
|
|
|
+ toshiba_acpi->kbd_mode = mode;
|
|
|
|
|
|
/*
|
|
|
* Some laptop models with the second generation backlit
|
|
@@ -1852,7 +1853,7 @@ static ssize_t kbd_backlight_mode_store(struct device *dev,
|
|
|
* event via genetlink.
|
|
|
*/
|
|
|
if (toshiba->kbd_type == 2 &&
|
|
|
- !toshiba_acpi->kbd_event_generated)
|
|
|
+ !toshiba->kbd_event_generated)
|
|
|
schedule_work(&kbd_bl_work);
|
|
|
}
|
|
|
|
|
@@ -2413,16 +2414,21 @@ static const struct attribute_group toshiba_attr_group = {
|
|
|
|
|
|
static void toshiba_acpi_kbd_bl_work(struct work_struct *work)
|
|
|
{
|
|
|
- struct acpi_device *acpi_dev = toshiba_acpi->acpi_dev;
|
|
|
-
|
|
|
/* Update the sysfs entries */
|
|
|
- if (sysfs_update_group(&acpi_dev->dev.kobj,
|
|
|
+ if (sysfs_update_group(&toshiba_acpi->acpi_dev->dev.kobj,
|
|
|
&toshiba_attr_group))
|
|
|
pr_err("Unable to update sysfs entries\n");
|
|
|
|
|
|
+ /* Notify LED subsystem about keyboard backlight change */
|
|
|
+ if (toshiba_acpi->kbd_type == 2 &&
|
|
|
+ toshiba_acpi->kbd_mode != SCI_KBD_MODE_AUTO)
|
|
|
+ led_classdev_notify_brightness_hw_changed(&toshiba_acpi->kbd_led,
|
|
|
+ (toshiba_acpi->kbd_mode == SCI_KBD_MODE_ON) ?
|
|
|
+ LED_FULL : LED_OFF);
|
|
|
+
|
|
|
/* Emulate the keyboard backlight event */
|
|
|
- acpi_bus_generate_netlink_event(acpi_dev->pnp.device_class,
|
|
|
- dev_name(&acpi_dev->dev),
|
|
|
+ acpi_bus_generate_netlink_event(toshiba_acpi->acpi_dev->pnp.device_class,
|
|
|
+ dev_name(&toshiba_acpi->acpi_dev->dev),
|
|
|
0x92, 0);
|
|
|
}
|
|
|
|
|
@@ -3119,9 +3125,12 @@ static int toshiba_acpi_add(struct acpi_device *acpi_dev)
|
|
|
/*
|
|
|
* Only register the LED if KBD illumination is supported
|
|
|
* and the keyboard backlight operation mode is set to FN-Z
|
|
|
+ * or we detect a second gen keyboard backlight
|
|
|
*/
|
|
|
- if (dev->kbd_illum_supported && dev->kbd_mode == SCI_KBD_MODE_FNZ) {
|
|
|
+ if (dev->kbd_illum_supported &&
|
|
|
+ (dev->kbd_mode == SCI_KBD_MODE_FNZ || dev->kbd_type == 2)) {
|
|
|
dev->kbd_led.name = "toshiba::kbd_backlight";
|
|
|
+ dev->kbd_led.flags = LED_BRIGHT_HW_CHANGED;
|
|
|
dev->kbd_led.max_brightness = 1;
|
|
|
dev->kbd_led.brightness_set = toshiba_kbd_backlight_set;
|
|
|
dev->kbd_led.brightness_get = toshiba_kbd_backlight_get;
|
|
@@ -3237,11 +3246,16 @@ static void toshiba_acpi_notify(struct acpi_device *acpi_dev, u32 event)
|
|
|
pr_info("SATA power event received %x\n", event);
|
|
|
break;
|
|
|
case 0x92: /* Keyboard backlight mode changed */
|
|
|
- toshiba_acpi->kbd_event_generated = true;
|
|
|
+ dev->kbd_event_generated = true;
|
|
|
/* Update sysfs entries */
|
|
|
if (sysfs_update_group(&acpi_dev->dev.kobj,
|
|
|
&toshiba_attr_group))
|
|
|
pr_err("Unable to update sysfs entries\n");
|
|
|
+ /* Notify LED subsystem about keyboard backlight change */
|
|
|
+ if (dev->kbd_type == 2 && dev->kbd_mode != SCI_KBD_MODE_AUTO)
|
|
|
+ led_classdev_notify_brightness_hw_changed(&dev->kbd_led,
|
|
|
+ (dev->kbd_mode == SCI_KBD_MODE_ON) ?
|
|
|
+ LED_FULL : LED_OFF);
|
|
|
break;
|
|
|
case 0x85: /* Unknown */
|
|
|
case 0x8d: /* Unknown */
|