diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/codecs/nau8825.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/sound/soc/codecs/nau8825.c b/sound/soc/codecs/nau8825.c index 4576f987a4a5..97fbeba9498f 100644 --- a/sound/soc/codecs/nau8825.c +++ b/sound/soc/codecs/nau8825.c | |||
@@ -1231,7 +1231,7 @@ static int nau8825_hw_params(struct snd_pcm_substream *substream, | |||
1231 | { | 1231 | { |
1232 | struct snd_soc_codec *codec = dai->codec; | 1232 | struct snd_soc_codec *codec = dai->codec; |
1233 | struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec); | 1233 | struct nau8825 *nau8825 = snd_soc_codec_get_drvdata(codec); |
1234 | unsigned int val_len = 0, osr; | 1234 | unsigned int val_len = 0, osr, ctrl_val, bclk_fs, bclk_div; |
1235 | 1235 | ||
1236 | nau8825_sema_acquire(nau8825, 3 * HZ); | 1236 | nau8825_sema_acquire(nau8825, 3 * HZ); |
1237 | 1237 | ||
@@ -1261,6 +1261,24 @@ static int nau8825_hw_params(struct snd_pcm_substream *substream, | |||
1261 | osr_adc_sel[osr].clk_src << NAU8825_CLK_ADC_SRC_SFT); | 1261 | osr_adc_sel[osr].clk_src << NAU8825_CLK_ADC_SRC_SFT); |
1262 | } | 1262 | } |
1263 | 1263 | ||
1264 | /* make BCLK and LRC divde configuration if the codec as master. */ | ||
1265 | regmap_read(nau8825->regmap, NAU8825_REG_I2S_PCM_CTRL2, &ctrl_val); | ||
1266 | if (ctrl_val & NAU8825_I2S_MS_MASTER) { | ||
1267 | /* get the bclk and fs ratio */ | ||
1268 | bclk_fs = snd_soc_params_to_bclk(params) / params_rate(params); | ||
1269 | if (bclk_fs <= 32) | ||
1270 | bclk_div = 2; | ||
1271 | else if (bclk_fs <= 64) | ||
1272 | bclk_div = 1; | ||
1273 | else if (bclk_fs <= 128) | ||
1274 | bclk_div = 0; | ||
1275 | else | ||
1276 | return -EINVAL; | ||
1277 | regmap_update_bits(nau8825->regmap, NAU8825_REG_I2S_PCM_CTRL2, | ||
1278 | NAU8825_I2S_LRC_DIV_MASK | NAU8825_I2S_BLK_DIV_MASK, | ||
1279 | ((bclk_div + 1) << NAU8825_I2S_LRC_DIV_SFT) | bclk_div); | ||
1280 | } | ||
1281 | |||
1264 | switch (params_width(params)) { | 1282 | switch (params_width(params)) { |
1265 | case 16: | 1283 | case 16: |
1266 | val_len |= NAU8825_I2S_DL_16; | 1284 | val_len |= NAU8825_I2S_DL_16; |