diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c | 11 | ||||
-rw-r--r-- | firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c | 1 |
2 files changed, 10 insertions, 2 deletions
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c index a4efe0962a..a8e0d5eb5e 100644 --- a/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c +++ b/firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c | |||
@@ -110,6 +110,7 @@ static struct mutex avr_mtx; | |||
110 | /* AVR thread events */ | 110 | /* AVR thread events */ |
111 | #define INPUT_INTERRUPT 1 | 111 | #define INPUT_INTERRUPT 1 |
112 | #define MONOTIME_OFFSET_UPDATE 2 | 112 | #define MONOTIME_OFFSET_UPDATE 2 |
113 | #define POWER_OFF_REQUEST 3 | ||
113 | static int btn = 0; | 114 | static int btn = 0; |
114 | static bool hold_switch; | 115 | static bool hold_switch; |
115 | static bool input_interrupt_pending; | 116 | static bool input_interrupt_pending; |
@@ -584,7 +585,10 @@ static void avr_hid_sys_ctrl(uint8_t parameter) | |||
584 | 585 | ||
585 | void avr_hid_power_off(void) | 586 | void avr_hid_power_off(void) |
586 | { | 587 | { |
587 | avr_hid_sys_ctrl(SYS_CTRL_POWEROFF); | 588 | /* Do not execute command directly here because we can get called inside |
589 | * tick task context that must not acquire mutex. | ||
590 | */ | ||
591 | queue_post(&avr_queue, POWER_OFF_REQUEST, 0); | ||
588 | } | 592 | } |
589 | 593 | ||
590 | static bool avr_state_changed(void) | 594 | static bool avr_state_changed(void) |
@@ -747,6 +751,11 @@ void avr_thread(void) | |||
747 | { | 751 | { |
748 | monotime_offset_update_pending = true; | 752 | monotime_offset_update_pending = true; |
749 | } | 753 | } |
754 | else if (ev.id == POWER_OFF_REQUEST) | ||
755 | { | ||
756 | avr_hid_reset_codec(); | ||
757 | avr_hid_sys_ctrl(SYS_CTRL_POWEROFF); | ||
758 | } | ||
750 | 759 | ||
751 | input_interrupt_pending = false; | 760 | input_interrupt_pending = false; |
752 | if (avr_state_changed()) | 761 | if (avr_state_changed()) |
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c index b139572605..ccd91c6d2f 100644 --- a/firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c +++ b/firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c | |||
@@ -70,7 +70,6 @@ void power_off(void) | |||
70 | /* Disable GIO0 and GIO2 interrupts */ | 70 | /* Disable GIO0 and GIO2 interrupts */ |
71 | IO_INTC_EINT1 &= ~(INTR_EINT1_EXT2 | INTR_EINT1_EXT0); | 71 | IO_INTC_EINT1 &= ~(INTR_EINT1_EXT2 | INTR_EINT1_EXT0); |
72 | 72 | ||
73 | avr_hid_reset_codec(); | ||
74 | avr_hid_power_off(); | 73 | avr_hid_power_off(); |
75 | } | 74 | } |
76 | 75 | ||