summaryrefslogtreecommitdiff
path: root/firmware/drivers/audio/wm8731.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/audio/wm8731.c')
-rw-r--r--firmware/drivers/audio/wm8731.c39
1 files changed, 14 insertions, 25 deletions
diff --git a/firmware/drivers/audio/wm8731.c b/firmware/drivers/audio/wm8731.c
index c065de620a..2b74d718b0 100644
--- a/firmware/drivers/audio/wm8731.c
+++ b/firmware/drivers/audio/wm8731.c
@@ -224,35 +224,24 @@ void audiohw_close(void)
224 /* 2) Remove the WM codec supplies. */ 224 /* 2) Remove the WM codec supplies. */
225} 225}
226 226
227void audiohw_set_sample_rate(int sampling_control) 227void audiohw_set_frequency(int fsel)
228{ 228{
229 int rate; 229 /* For 24MHz MCLK */
230 230 static const unsigned char srctrl_table[HW_NUM_FREQ] =
231 switch(sampling_control)
232 { 231 {
233 case SAMPR_96: 232 [HW_FREQ_8] = WMC_USB24_8000HZ,
234 rate = WMC_USB24_96000HZ; 233 [HW_FREQ_32] = WMC_USB24_32000HZ,
235 break; 234 [HW_FREQ_44] = WMC_USB24_44100HZ,
236 case SAMPR_88: 235 [HW_FREQ_48] = WMC_USB24_48000HZ,
237 rate = WMC_USB24_88200HZ; 236 [HW_FREQ_88] = WMC_USB24_88200HZ,
238 break; 237 [HW_FREQ_96] = WMC_USB24_96000HZ,
239 case SAMPR_48: 238 };
240 rate = WMC_USB24_48000HZ; 239
241 break; 240 if ((unsigned)fsel >= HW_NUM_FREQ)
242 default: 241 fsel = HW_FREQ_DEFAULT;
243 case SAMPR_44:
244 rate = WMC_USB24_44100HZ;
245 break;
246 case SAMPR_32:
247 rate = WMC_USB24_32000HZ;
248 break;
249 case SAMPR_8:
250 rate = WMC_USB24_8000HZ;
251 break;
252 }
253 242
254 codec_set_active(false); 243 codec_set_active(false);
255 wmc_write(SAMPCTRL, rate); 244 wmc_write(SAMPCTRL, srctrl_table[fsel]);
256 codec_set_active(true); 245 codec_set_active(true);
257} 246}
258 247