Commit 765a1077 authored by Frank Praznik's avatar Frank Praznik Committed by Jiri Kosina
Browse files

HID: sony: Use LED_CORE_SUSPENDRESUME



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: default avatarFrank Praznik <frank.praznik@gmail.com>
Signed-off-by: default avatarJiri Kosina <jkosina@suse.cz>
parent 81bbef23
Loading
Loading
Loading
Loading
+15 −30
Original line number Diff line number Diff line
@@ -1095,7 +1095,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;
@@ -1964,6 +1963,7 @@ static int sony_leds_init(struct sony_sc *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;

@@ -2734,36 +2734,24 @@ static void sony_remove(struct hid_device *hdev)

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.
@@ -2774,9 +2762,6 @@ static int sony_resume(struct hid_device *hdev)
		sc->defer_initialization = 1;
	}

		sony_set_leds(sc);
	}

	return 0;
}