diff options
Diffstat (limited to 'drivers/hid/hid-asus.c')
| -rw-r--r-- | drivers/hid/hid-asus.c | 27 | 
1 files changed, 23 insertions, 4 deletions
diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c index fd61dba88233..78cdfb8b9a7a 100644 --- a/drivers/hid/hid-asus.c +++ b/drivers/hid/hid-asus.c @@ -381,7 +381,7 @@ static int asus_raw_event(struct hid_device *hdev,  	return 0;  } -static int asus_kbd_set_report(struct hid_device *hdev, u8 *buf, size_t buf_size) +static int asus_kbd_set_report(struct hid_device *hdev, const u8 *buf, size_t buf_size)  {  	unsigned char *dmabuf;  	int ret; @@ -404,7 +404,7 @@ static int asus_kbd_set_report(struct hid_device *hdev, u8 *buf, size_t buf_size  static int asus_kbd_init(struct hid_device *hdev)  { -	u8 buf[] = { FEATURE_KBD_REPORT_ID, 0x41, 0x53, 0x55, 0x53, 0x20, 0x54, +	const u8 buf[] = { FEATURE_KBD_REPORT_ID, 0x41, 0x53, 0x55, 0x53, 0x20, 0x54,  		     0x65, 0x63, 0x68, 0x2e, 0x49, 0x6e, 0x63, 0x2e, 0x00 };  	int ret; @@ -418,7 +418,7 @@ static int asus_kbd_init(struct hid_device *hdev)  static int asus_kbd_get_functions(struct hid_device *hdev,  				  unsigned char *kbd_func)  { -	u8 buf[] = { FEATURE_KBD_REPORT_ID, 0x05, 0x20, 0x31, 0x00, 0x08 }; +	const u8 buf[] = { FEATURE_KBD_REPORT_ID, 0x05, 0x20, 0x31, 0x00, 0x08 };  	u8 *readbuf;  	int ret; @@ -449,7 +449,7 @@ static int asus_kbd_get_functions(struct hid_device *hdev,  static int rog_nkey_led_init(struct hid_device *hdev)  { -	u8 buf_init_start[] = { FEATURE_KBD_LED_REPORT_ID1, 0xB9 }; +	const u8 buf_init_start[] = { FEATURE_KBD_LED_REPORT_ID1, 0xB9 };  	u8 buf_init2[] = { FEATURE_KBD_LED_REPORT_ID1, 0x41, 0x53, 0x55, 0x53, 0x20,  				0x54, 0x65, 0x63, 0x68, 0x2e, 0x49, 0x6e, 0x63, 0x2e, 0x00 };  	u8 buf_init3[] = { FEATURE_KBD_LED_REPORT_ID1, @@ -1000,6 +1000,24 @@ static int asus_start_multitouch(struct hid_device *hdev)  	return 0;  } +static int __maybe_unused asus_resume(struct hid_device *hdev) { +	struct asus_drvdata *drvdata = hid_get_drvdata(hdev); +	int ret = 0; + +	if (drvdata->kbd_backlight) { +		const u8 buf[] = { FEATURE_KBD_REPORT_ID, 0xba, 0xc5, 0xc4, +				drvdata->kbd_backlight->cdev.brightness }; +		ret = asus_kbd_set_report(hdev, buf, sizeof(buf)); +		if (ret < 0) { +			hid_err(hdev, "Asus failed to set keyboard backlight: %d\n", ret); +			goto asus_resume_err; +		} +	} + +asus_resume_err: +	return ret; +} +  static int __maybe_unused asus_reset_resume(struct hid_device *hdev)  {  	struct asus_drvdata *drvdata = hid_get_drvdata(hdev); @@ -1294,6 +1312,7 @@ static struct hid_driver asus_driver = {  	.input_configured       = asus_input_configured,  #ifdef CONFIG_PM  	.reset_resume           = asus_reset_resume, +	.resume					= asus_resume,  #endif  	.event			= asus_event,  	.raw_event		= asus_raw_event  | 
