mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-12 01:28:35 +00:00
asus-wmi: restore kbd led level after resume
Afters suspend/resume cycle with closed lid the kbd backlight level is lost. This patch will will restore this value to last known level. Signed-off-by: Oleksij Rempel <linux@rempel-privat.de> Signed-off-by: Darren Hart <dvhart@linux.intel.com>
This commit is contained in:
parent
10e6aaabc3
commit
307340493f
1 changed files with 17 additions and 2 deletions
|
@ -582,7 +582,7 @@ static void asus_wmi_led_exit(struct asus_wmi *asus)
|
||||||
|
|
||||||
static int asus_wmi_led_init(struct asus_wmi *asus)
|
static int asus_wmi_led_init(struct asus_wmi *asus)
|
||||||
{
|
{
|
||||||
int rv = 0;
|
int rv = 0, led_val;
|
||||||
|
|
||||||
asus->led_workqueue = create_singlethread_workqueue("led_workqueue");
|
asus->led_workqueue = create_singlethread_workqueue("led_workqueue");
|
||||||
if (!asus->led_workqueue)
|
if (!asus->led_workqueue)
|
||||||
|
@ -602,9 +602,11 @@ static int asus_wmi_led_init(struct asus_wmi *asus)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (kbd_led_read(asus, NULL, NULL) >= 0) {
|
led_val = kbd_led_read(asus, NULL, NULL);
|
||||||
|
if (led_val >= 0) {
|
||||||
INIT_WORK(&asus->kbd_led_work, kbd_led_update);
|
INIT_WORK(&asus->kbd_led_work, kbd_led_update);
|
||||||
|
|
||||||
|
asus->kbd_led_wk = led_val;
|
||||||
asus->kbd_led.name = "asus::kbd_backlight";
|
asus->kbd_led.name = "asus::kbd_backlight";
|
||||||
asus->kbd_led.brightness_set = kbd_led_set;
|
asus->kbd_led.brightness_set = kbd_led_set;
|
||||||
asus->kbd_led.brightness_get = kbd_led_get;
|
asus->kbd_led.brightness_get = kbd_led_get;
|
||||||
|
@ -2160,6 +2162,16 @@ static int asus_hotk_thaw(struct device *device)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int asus_hotk_resume(struct device *device)
|
||||||
|
{
|
||||||
|
struct asus_wmi *asus = dev_get_drvdata(device);
|
||||||
|
|
||||||
|
if (!IS_ERR_OR_NULL(asus->kbd_led.dev))
|
||||||
|
queue_work(asus->led_workqueue, &asus->kbd_led_work);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int asus_hotk_restore(struct device *device)
|
static int asus_hotk_restore(struct device *device)
|
||||||
{
|
{
|
||||||
struct asus_wmi *asus = dev_get_drvdata(device);
|
struct asus_wmi *asus = dev_get_drvdata(device);
|
||||||
|
@ -2190,6 +2202,8 @@ static int asus_hotk_restore(struct device *device)
|
||||||
bl = !asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_UWB);
|
bl = !asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_UWB);
|
||||||
rfkill_set_sw_state(asus->uwb.rfkill, bl);
|
rfkill_set_sw_state(asus->uwb.rfkill, bl);
|
||||||
}
|
}
|
||||||
|
if (!IS_ERR_OR_NULL(asus->kbd_led.dev))
|
||||||
|
queue_work(asus->led_workqueue, &asus->kbd_led_work);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2197,6 +2211,7 @@ static int asus_hotk_restore(struct device *device)
|
||||||
static const struct dev_pm_ops asus_pm_ops = {
|
static const struct dev_pm_ops asus_pm_ops = {
|
||||||
.thaw = asus_hotk_thaw,
|
.thaw = asus_hotk_thaw,
|
||||||
.restore = asus_hotk_restore,
|
.restore = asus_hotk_restore,
|
||||||
|
.resume = asus_hotk_resume,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int asus_wmi_probe(struct platform_device *pdev)
|
static int asus_wmi_probe(struct platform_device *pdev)
|
||||||
|
|
Loading…
Add table
Reference in a new issue