diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/codec-jz4760.c | 32 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/xduoo_x3/sadc-xduoo_x3.c | 11 |
2 files changed, 36 insertions, 7 deletions
diff --git a/firmware/target/mips/ingenic_jz47xx/codec-jz4760.c b/firmware/target/mips/ingenic_jz47xx/codec-jz4760.c index 09d4858b34..a2de80a914 100644 --- a/firmware/target/mips/ingenic_jz47xx/codec-jz4760.c +++ b/firmware/target/mips/ingenic_jz47xx/codec-jz4760.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include "pcm_sw_volume.h" | 26 | #include "pcm_sw_volume.h" |
27 | #include "cs4398.h" | 27 | #include "cs4398.h" |
28 | #include "kernel.h" | 28 | #include "kernel.h" |
29 | #include "button.h" | ||
29 | 30 | ||
30 | #define PIN_CS_RST (32*1+10) | 31 | #define PIN_CS_RST (32*1+10) |
31 | #define PIN_CODEC_PWRON (32*1+13) | 32 | #define PIN_CODEC_PWRON (32*1+13) |
@@ -140,7 +141,11 @@ static int vol_tenthdb2hw(const int tdb) | |||
140 | } | 141 | } |
141 | } | 142 | } |
142 | 143 | ||
143 | void audiohw_set_volume(int vol_l, int vol_r) | 144 | #ifdef HAVE_LINEOUT_DETECTION |
145 | static int real_vol_l, real_vol_r; | ||
146 | #endif | ||
147 | |||
148 | static void jz4760_set_vol(int vol_l, int vol_r) | ||
144 | { | 149 | { |
145 | uint8_t val = cs4398_read_reg(CS4398_REG_MISC) &~ CS4398_FREEZE; | 150 | uint8_t val = cs4398_read_reg(CS4398_REG_MISC) &~ CS4398_FREEZE; |
146 | cs4398_write_reg(CS4398_REG_MISC, val | CS4398_FREEZE); | 151 | cs4398_write_reg(CS4398_REG_MISC, val | CS4398_FREEZE); |
@@ -149,14 +154,31 @@ void audiohw_set_volume(int vol_l, int vol_r) | |||
149 | cs4398_write_reg(CS4398_REG_MISC, val); | 154 | cs4398_write_reg(CS4398_REG_MISC, val); |
150 | } | 155 | } |
151 | 156 | ||
157 | void audiohw_set_volume(int vol_l, int vol_r) | ||
158 | { | ||
159 | #ifdef HAVE_LINEOUT_DETECTION | ||
160 | real_vol_l = vol_l; | ||
161 | real_vol_r = vol_r; | ||
162 | |||
163 | if (lineout_inserted()) { | ||
164 | vol_l = 0; | ||
165 | vol_r = 0; | ||
166 | } | ||
167 | #endif | ||
168 | jz4760_set_vol(vol_l, vol_r); | ||
169 | } | ||
170 | |||
152 | void audiohw_set_lineout_volume(int vol_l, int vol_r) | 171 | void audiohw_set_lineout_volume(int vol_l, int vol_r) |
153 | { | 172 | { |
154 | #if 0 /* unused */ | ||
155 | cs4398_write_reg(CS4398_REG_VOL_A, vol_tenthdb2hw(vol_l)); | ||
156 | cs4398_write_reg(CS4398_REG_VOL_B, vol_tenthdb2hw(vol_r)); | ||
157 | #else | ||
158 | (void)vol_l; | 173 | (void)vol_l; |
159 | (void)vol_r; | 174 | (void)vol_r; |
175 | |||
176 | #ifdef HAVE_LINEOUT_DETECTION | ||
177 | if (lineout_inserted()) { | ||
178 | jz4760_set_vol(0, 0); | ||
179 | } else { | ||
180 | jz4760_set_vol(real_vol_l, real_vol_r); | ||
181 | } | ||
160 | #endif | 182 | #endif |
161 | } | 183 | } |
162 | 184 | ||
diff --git a/firmware/target/mips/ingenic_jz47xx/xduoo_x3/sadc-xduoo_x3.c b/firmware/target/mips/ingenic_jz47xx/xduoo_x3/sadc-xduoo_x3.c index be02167a5d..d227255b8a 100644 --- a/firmware/target/mips/ingenic_jz47xx/xduoo_x3/sadc-xduoo_x3.c +++ b/firmware/target/mips/ingenic_jz47xx/xduoo_x3/sadc-xduoo_x3.c | |||
@@ -53,6 +53,13 @@ bool headphones_inserted(void) | |||
53 | return (__gpio_get_pin(PIN_PH_DECT) != 0); | 53 | return (__gpio_get_pin(PIN_PH_DECT) != 0); |
54 | } | 54 | } |
55 | 55 | ||
56 | bool lineout_inserted(void) | ||
57 | { | ||
58 | /* We want to prevent LO being "enabled" if HP is attached | ||
59 | to avoid potential eardrum damage */ | ||
60 | return (__gpio_get_pin(PIN_LO_DECT) == 0) && !headphones_inserted(); | ||
61 | } | ||
62 | |||
56 | void button_init_device(void) | 63 | void button_init_device(void) |
57 | { | 64 | { |
58 | key_val = 0xfff; | 65 | key_val = 0xfff; |
@@ -72,11 +79,11 @@ void button_init_device(void) | |||
72 | __gpio_set_pin(PIN_CHARGE_CON); /* 0.7 A */ | 79 | __gpio_set_pin(PIN_CHARGE_CON); /* 0.7 A */ |
73 | __gpio_as_output(PIN_CHARGE_CON); | 80 | __gpio_as_output(PIN_CHARGE_CON); |
74 | 81 | ||
75 | __gpio_as_input(PIN_LO_DECT); | ||
76 | __gpio_as_input(PIN_PH_DECT); | 82 | __gpio_as_input(PIN_PH_DECT); |
83 | __gpio_disable_pull(PIN_PH_DECT); | ||
77 | 84 | ||
85 | __gpio_as_input(PIN_LO_DECT); | ||
78 | __gpio_disable_pull(PIN_LO_DECT); | 86 | __gpio_disable_pull(PIN_LO_DECT); |
79 | __gpio_disable_pull(PIN_PH_DECT); | ||
80 | } | 87 | } |
81 | 88 | ||
82 | bool button_hold(void) | 89 | bool button_hold(void) |