diff options
Diffstat (limited to 'firmware/drivers/audio')
-rw-r--r-- | firmware/drivers/audio/ak4376.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/firmware/drivers/audio/ak4376.c b/firmware/drivers/audio/ak4376.c index 2e772ace84..8d2b9f44f3 100644 --- a/firmware/drivers/audio/ak4376.c +++ b/firmware/drivers/audio/ak4376.c | |||
@@ -245,8 +245,26 @@ void ak4376_set_freqmode(int fsel, int mult, int power_mode) | |||
245 | if(power_mode == SOUND_LOW_POWER || hw_freq_sampr[fsel] <= SAMPR_12) | 245 | if(power_mode == SOUND_LOW_POWER || hw_freq_sampr[fsel] <= SAMPR_12) |
246 | mode_ctrl |= 0x40; | 246 | mode_ctrl |= 0x40; |
247 | 247 | ||
248 | /* Handle the LPMODE bit */ | ||
249 | int pwr3 = power_mode == SOUND_LOW_POWER ? 0x11 : 0x01; | ||
250 | |||
251 | /* The datasheet says the HP amp must be powered down before changing | ||
252 | * the operating mode of the DAC or HP amp. I'm assuming this means | ||
253 | * the amp must be shut down when changing DSMLP or LPMODE. */ | ||
254 | int cur_mode_ctrl = ak4376_read(AK4376_REG_MODE_CTRL); | ||
255 | int cur_pwr3 = ak4376_read(AK4376_REG_PWR3); | ||
256 | bool disable_amp = mode_ctrl != cur_mode_ctrl || pwr3 != cur_pwr3; | ||
257 | |||
248 | /* Program the new settings */ | 258 | /* Program the new settings */ |
259 | if(disable_amp) | ||
260 | ak4376_write(AK4376_REG_PWR4, 0x00); | ||
261 | |||
249 | ak4376_write(AK4376_REG_CLOCK_MODE, clock_mode); | 262 | ak4376_write(AK4376_REG_CLOCK_MODE, clock_mode); |
250 | ak4376_write(AK4376_REG_MODE_CTRL, mode_ctrl); | 263 | ak4376_write(AK4376_REG_MODE_CTRL, mode_ctrl); |
251 | ak4376_write(AK4376_REG_PWR3, power_mode == SOUND_LOW_POWER ? 0x11 : 0x01); | 264 | ak4376_write(AK4376_REG_PWR3, pwr3); |
265 | |||
266 | if(disable_amp) { | ||
267 | ak4376_write(AK4376_REG_PWR4, 0x03); | ||
268 | mdelay(26); | ||
269 | } | ||
252 | } | 270 | } |