lkml.org 
[lkml]   [2018]   [Apr]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 027/102] HID: sony: Use LED_CORE_SUSPENDRESUME
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Frank Praznik <frank.praznik@gmail.com>

    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.

    Signed-off-by: Frank Praznik <frank.praznik@gmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Cc: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/hid/hid-sony.c | 45 +++++++++++++++------------------------------
    1 file changed, 15 insertions(+), 30 deletions(-)

    --- a/drivers/hid/hid-sony.c
    +++ b/drivers/hid/hid-sony.c
    @@ -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_devic

    static 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;

    \
     
     \ /
      Last update: 2018-04-06 16:48    [W:4.456 / U:0.400 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site