From 1245c5fe61f6ca8e1980a33a8b8f7ea4322829fd Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sat, 14 Jan 2017 01:40:12 +0100 Subject: Implement speaker enable/disable on jack (un)plug The implementation is not very complicated but there are a few things worth noting. There was a previous "speaker enable" setting but it was a boolean. I decided to replace it with a choice setting that has 2 options (on, off) if headphones cannot be detect on this target, or 3 options (on, off, auto) if we can detect headphones. This will break the old setting on target that cannot detect jack but it makes the code more uniform and avoid maintaining two settings with more #ifdef. The third option (auto) uses the LANG_AUTO text, which I think is clear enough (disable speaker on jack plug). In order to avoid code duplication (both in apps and firmware), I decided to keep the audiohw_enable_speaker function as-is: it takes a boolean and doesn't care about the speaker policy. I introduced a new audio_enable_speaker that takes directly the mode (which follows the setting encoding): 0=off, 1=on and 2=auto. This way one calls audio_enable_speaker and it changes the speaker once to reflect the request mode. The apps code then uses this function in the places where it makes sense: on setting load, setting change and jack (un)plug event. Change-Id: I027873f698eb4bc365d7c02b515297806355d9e2 --- firmware/export/audio.h | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'firmware/export') diff --git a/firmware/export/audio.h b/firmware/export/audio.h index 08a88d6325..5710f9f653 100644 --- a/firmware/export/audio.h +++ b/firmware/export/audio.h @@ -232,6 +232,15 @@ int audio_get_spdif_sample_rate(void); void audio_spdif_set_monitor(int monitor_spdif); #endif /* HAVE_SPDIF_IN */ +#ifdef HAVE_SPEAKER +/* enable/disable the speaker: 0=off, 1=on, 2=on if jack unpluged, off otherwise + * NOTE this is a one time thing, this function doesn't implement the logic to + * check for jack events, it merely changes the speaker state to the expected + * state based on the requested mode. + */ +void audio_enable_speaker(int mode); +#endif + /***********************************************************************/ /* audio event handling */ enum track_event_flags -- cgit v1.2.3