| From af15540bd72987268066a9c6b2984ece326548e4 Mon Sep 17 00:00:00 2001 |
| From: Cameron Gutman <aicommander@gmail.com> |
| Date: Mon, 6 Feb 2017 17:03:03 -0800 |
| Subject: Input: xpad - restore LED state after device resume |
| |
| [ Upstream commit a1fbf5bbef025b4844162b3b8868888003a7ee9c ] |
| |
| Set the LED_CORE_SUSPENDRESUME flag on our LED device so the |
| LED state will be automatically restored by LED core on resume. |
| |
| Since Xbox One pads stop flashing only when reinitialized, we'll |
| send them the initialization packet so they calm down too. |
| |
| Signed-off-by: Cameron Gutman <aicommander@gmail.com> |
| Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/input/joystick/xpad.c | 11 ++++++++++- |
| 1 file changed, 10 insertions(+), 1 deletion(-) |
| |
| diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c |
| index 14da79ead653..153b1ee13e03 100644 |
| --- a/drivers/input/joystick/xpad.c |
| +++ b/drivers/input/joystick/xpad.c |
| @@ -1213,6 +1213,7 @@ static int xpad_led_probe(struct usb_xpad *xpad) |
| led_cdev = &led->led_cdev; |
| led_cdev->name = led->name; |
| led_cdev->brightness_set = xpad_led_set; |
| + led_cdev->flags = LED_CORE_SUSPENDRESUME; |
| |
| error = led_classdev_register(&xpad->udev->dev, led_cdev); |
| if (error) |
| @@ -1689,8 +1690,16 @@ static int xpad_resume(struct usb_interface *intf) |
| retval = xpad360w_start_input(xpad); |
| } else { |
| mutex_lock(&input->mutex); |
| - if (input->users) |
| + if (input->users) { |
| retval = xpad_start_input(xpad); |
| + } else if (xpad->xtype == XTYPE_XBOXONE) { |
| + /* |
| + * Even if there are no users, we'll send Xbox One pads |
| + * the startup sequence so they don't sit there and |
| + * blink until somebody opens the input device again. |
| + */ |
| + retval = xpad_start_xbox_one(xpad); |
| + } |
| mutex_unlock(&input->mutex); |
| } |
| |
| -- |
| 2.17.1 |
| |