Patch "HID: sony: Use LED_CORE_SUSPENDRESUME" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
HID: sony: Use LED_CORE_SUSPENDRESUME
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
hid-sony-use-led_core_suspendresume.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
765a1077c85e5f2efcc43582f80caf43a052e903Mon Sep 17 00:00:00 2001
From: Frank Praznik <[email protected]>
Date: Wed, 8 Feb 2017 13:58:43 -0500
Subject: HID: sony: Use LED_CORE_SUSPENDRESUME
From: Frank Praznik <[email protected]>
commit 765a1077c85e5f2efcc43582f80caf43a052e903 upstream.
The LED subsystem provides the LED_CORE_SUSPENDRESUME flag to handle automatically turning off and restoring the state of device LEDs during suspend/resume. Use this flag instead of saving and restoring the state locally.
--- drivers/hid/hid-sony.c | 45 +++++++++++++++------------------------------ 1 file changed, 15 insertions(+), 30 deletions(-)
drivers/hid/hid-sony.c +15 -30
@@ -1056,7 +1056,6 @@ struct sony_sc {u8 battery_charging;u8 battery_capacity;u8 led_state[MAX_LEDS ]; -u8 resume_led_state[MAX_LEDS ];u8 led_delay_on[MAX_LEDS ];u8 led_delay_off[MAX_LEDS ];u8 led_count;
@@ -1793,6 +1792,7 @@ static int sony_leds_init(struct sony_sc led->name = name; led->brightness = sc->led_state[n]; led->max_brightness = max_brightness[n]; + led->flags =LED_CORE_SUSPENDRESUME ; led->brightness_get = sony_led_get_brightness; led->brightness_set = sony_led_set_brightness;
@@ -2509,47 +2509,32 @@ static void sony_remove(struct hid_devicstatic int sony_suspend (struct hid_device *hdev,pm_message_t message) { -/* -* On suspend save the current LED state, -* stop running force-feedback and blank the LEDS. -*/ -if (SONY_LED_SUPPORT ||SONY_FF_SUPPORT ) { -struct sony_sc *sc =hid_get_drvdata (hdev); -#ifdef CONFIG_SONY_FF - sc->left = sc->right =0 ; -#endif -memcpy (sc->resume_led_state, sc->led_state, -sizeof (sc->resume_led_state)); -memset (sc->led_state,0 ,sizeof (sc->led_state)); +/* On suspend stop any running force-feedback events */ +if (SONY_FF_SUPPORT ) { +struct sony_sc *sc =hid_get_drvdata (hdev); + sc->left = sc->right =0 ;sony_send_output_report (sc); } +#endif return 0 ; }static int sony_resume (struct hid_device *hdev) { -/* Restore the state of controller LEDs on resume */ -if (SONY_LED_SUPPORT ) { -struct sony_sc *sc =hid_get_drvdata (hdev); - -memcpy (sc->led_state, sc->resume_led_state, -sizeof (sc->led_state)); - -/* -* The Sixaxis and navigation controllers on USB need to be -* reinitialized on resume or they won't behave properly. -*/ -if ((sc->quirks &SIXAXIS_CONTROLLER_USB ) || - (sc->quirks &NAVIGATION_CONTROLLER_USB )) { -sixaxis_set_operational_usb (sc->hdev); - sc->defer_initialization =1 ; - } +struct sony_sc *sc =hid_get_drvdata (hdev); -sony_set_leds (sc); +/* +* The Sixaxis and navigation controllers on USB need to be +* reinitialized on resume or they won't behave properly. +*/ +if ((sc->quirks &SIXAXIS_CONTROLLER_USB ) || + (sc->quirks &NAVIGATION_CONTROLLER_USB )) { +sixaxis_set_operational_usb (sc->hdev); + sc->defer_initialization =1 ; }return 0 ;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/hid-sony-use-led_core_suspendresume.patch