summaryrefslogtreecommitdiff
path: root/firmware/drivers/audio/eros_qn_codec.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/audio/eros_qn_codec.c')
-rw-r--r--firmware/drivers/audio/eros_qn_codec.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/firmware/drivers/audio/eros_qn_codec.c b/firmware/drivers/audio/eros_qn_codec.c
index 21347f5fca..fdf21d2f9d 100644
--- a/firmware/drivers/audio/eros_qn_codec.c
+++ b/firmware/drivers/audio/eros_qn_codec.c
@@ -26,10 +26,14 @@
26#include "audiohw.h" 26#include "audiohw.h"
27#include "settings.h" 27#include "settings.h"
28#include "pcm_sw_volume.h" 28#include "pcm_sw_volume.h"
29#include "gpio-x1000.h"
29 30
30static long int vol_l_hw = 0; 31static long int vol_l_hw = 0;
31static long int vol_r_hw = 0; 32static long int vol_r_hw = 0;
32 33
34/* internal: mute the headphone amp. 0 - unmuted, 1 - muted */
35void audiohw_mute_hp(int mute);
36
33void pcm5102_set_outputs(void) 37void pcm5102_set_outputs(void)
34{ 38{
35 audiohw_set_volume(vol_l_hw, vol_r_hw); 39 audiohw_set_volume(vol_l_hw, vol_r_hw);
@@ -53,13 +57,33 @@ void audiohw_set_volume(int vol_l, int vol_r)
53 if (lineout_inserted() && !headphones_inserted()) 57 if (lineout_inserted() && !headphones_inserted())
54 { 58 {
55 l = r = global_settings.volume_limit * 10; 59 l = r = global_settings.volume_limit * 10;
60
61 /* mute the headphone amp if not plugged in */
62 audiohw_mute_hp(1);
56 } 63 }
57 else 64 else
58 { 65 {
66 /* unmute the headphone amp when plugged in */
67 audiohw_mute_hp(0);
59 l = vol_l; 68 l = vol_l;
60 r = vol_r; 69 r = vol_r;
61 } 70 }
62#endif 71#endif
63 72
73 l = l <= PCM5102A_VOLUME_MIN ? PCM_MUTE_LEVEL : l;
74 r = r <= PCM5102A_VOLUME_MIN ? PCM_MUTE_LEVEL : r;
75
64 pcm_set_master_volume(l, r); 76 pcm_set_master_volume(l, r);
65} 77}
78
79void audiohw_mute_hp(int mute)
80{
81 if (mute == 0)
82 {
83 gpio_set_level(GPIO_MAX97220_SHDN, 1);
84 }
85 else
86 {
87 gpio_set_level(GPIO_MAX97220_SHDN, 0);
88 }
89}