Skip to content

Commit

Permalink
HID: google: Enable PM Full On mode when adjusting backlight
Browse files Browse the repository at this point in the history
hammer LED backlight brightness is not getting set when USB
device is in suspend state.

This patch fixes the issue by requesting USB HID device to be
in FULLON mode, so that sending hardware output report and
hardware raw request won't fail to set brightness, and set
device back to NORMAL mode once this call returns.

Signed-off-by: Haridhar Kalvala <haridhar.kalvala@intel.com>
Reviewed-by: Dmitry Torokhov <dtor@chromium.org>
Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Haridhar Kalvala authored and Jiri Kosina committed Mar 28, 2018
1 parent bc774b8 commit 7d3d884
Showing 1 changed file with 14 additions and 0 deletions.
14 changes: 14 additions & 0 deletions drivers/hid/hid-google-hammer.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,16 @@ static int hammer_kbd_brightness_set_blocking(struct led_classdev *cdev,
led->buf[0] = 0;
led->buf[1] = br;

/*
* Request USB HID device to be in Full On mode, so that sending
* hardware output report and hardware raw request won't fail.
*/
ret = hid_hw_power(led->hdev, PM_HINT_FULLON);
if (ret < 0) {
hid_err(led->hdev, "failed: device not resumed %d\n", ret);
return ret;
}

ret = hid_hw_output_report(led->hdev, led->buf, sizeof(led->buf));
if (ret == -ENOSYS)
ret = hid_hw_raw_request(led->hdev, 0, led->buf,
Expand All @@ -50,6 +60,10 @@ static int hammer_kbd_brightness_set_blocking(struct led_classdev *cdev,
if (ret < 0)
hid_err(led->hdev, "failed to set keyboard backlight: %d\n",
ret);

/* Request USB HID device back to Normal Mode. */
hid_hw_power(led->hdev, PM_HINT_NORMAL);

return ret;
}

Expand Down

0 comments on commit 7d3d884

Please sign in to comment.