Fix resume from suspend keyboard backlight

This commit is contained in:
Jeremy Soller 2018-03-09 16:45:55 -07:00
parent 2d2341e993
commit 7994d6ab1f
2 changed files with 39 additions and 8 deletions

View File

@ -102,7 +102,7 @@ static void kb_led_color_set(enum kb_led_region region, union kb_led_color color
}
static struct led_classdev kb_led = {
.name = "system76::kbd_backlight",
.name = "system76::k_backlight",
.flags = LED_BRIGHT_HW_CHANGED,
.brightness_get = kb_led_get,
.brightness_set_blocking = kb_led_set,
@ -197,19 +197,37 @@ static struct device_attribute kb_led_color_extra_dev_attr = {
.store = kb_led_color_extra_store,
};
static void kb_led_suspend(void) {
S76_INFO("kb_led_suspend\n");
// Disable keyboard backlight
s76_wmbb(SET_KB_LED, 0xE0003001, NULL);
}
static void kb_led_resume(void) {
enum kb_led_region region;
// Enable keyboard backlight
s76_wmbb(SET_KB_LED, 0xE007F001, NULL);
S76_INFO("kb_led_resume\n");
// Reset current brightness
kb_led_set(&kb_led, kb_led_brightness);
// Disable keyboard backlight
s76_wmbb(SET_KB_LED, 0xE0003001, NULL);
msleep(1000);
// Reset current color
for (region = 0; region < sizeof(kb_led_regions)/sizeof(union kb_led_color); region++) {
kb_led_color_set(region, kb_led_regions[region]);
}
msleep(1000);
// Reset current brightness
kb_led_set(&kb_led, kb_led_brightness);
msleep(1000);
// Enable keyboard backlight
s76_wmbb(SET_KB_LED, 0xE007F001, NULL);
}
static int __init kb_led_init(struct device *dev) {

View File

@ -91,11 +91,9 @@ static int s76_wmbb(u32 method_id, u32 arg, u32 *retval) {
return 0;
}
//#include "ec.c"
#include "ap_led.c"
#include "input.c"
#include "kb_led.c"
//#include "kb.c"
#include "hwmon.c"
static void s76_debug_wmi(void) {
@ -169,8 +167,12 @@ static void s76_wmi_notify(u32 value, void *context) {
case 0x83:
kb_wmi_color();
break;
case 0x7b:
kb_led_suspend();
break;
case 0x95:
s76_debug_wmi();
//s76_debug_wmi();
kb_led_resume();
break;
case 0x9F:
kb_wmi_toggle();
@ -243,7 +245,17 @@ static int s76_remove(struct platform_device *dev) {
return 0;
}
static int s76_suspend(struct platform_device *dev, pm_message_t status) {
S76_INFO("s76_suspend\n");
kb_led_suspend();
return 0;
}
static int s76_resume(struct platform_device *dev) {
S76_INFO("s76_resume\n");
// Enable hotkey support
s76_wmbb(0x46, 0, NULL);
@ -255,6 +267,7 @@ static int s76_resume(struct platform_device *dev) {
static struct platform_driver s76_platform_driver = {
.remove = s76_remove,
.suspend = s76_suspend,
.resume = s76_resume,
.driver = {
.name = S76_DRIVER_NAME,