diff options
Diffstat (limited to 'sound/soc/davinci/davinci-mcasp.c')
-rw-r--r-- | sound/soc/davinci/davinci-mcasp.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c index 02421d4275f5..c28508da34cf 100644 --- a/sound/soc/davinci/davinci-mcasp.c +++ b/sound/soc/davinci/davinci-mcasp.c | |||
@@ -65,6 +65,7 @@ struct davinci_mcasp { | |||
65 | u8 num_serializer; | 65 | u8 num_serializer; |
66 | u8 *serial_dir; | 66 | u8 *serial_dir; |
67 | u8 version; | 67 | u8 version; |
68 | u8 bclk_div; | ||
68 | u16 bclk_lrclk_ratio; | 69 | u16 bclk_lrclk_ratio; |
69 | int streams; | 70 | int streams; |
70 | 71 | ||
@@ -419,6 +420,7 @@ static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div | |||
419 | ACLKXDIV(div - 1), ACLKXDIV_MASK); | 420 | ACLKXDIV(div - 1), ACLKXDIV_MASK); |
420 | mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, | 421 | mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG, |
421 | ACLKRDIV(div - 1), ACLKRDIV_MASK); | 422 | ACLKRDIV(div - 1), ACLKRDIV_MASK); |
423 | mcasp->bclk_div = div; | ||
422 | break; | 424 | break; |
423 | 425 | ||
424 | case 2: /* BCLK/LRCLK ratio */ | 426 | case 2: /* BCLK/LRCLK ratio */ |
@@ -721,8 +723,11 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream, | |||
721 | int period_size = params_period_size(params); | 723 | int period_size = params_period_size(params); |
722 | int ret; | 724 | int ret; |
723 | 725 | ||
724 | /* If mcasp is BCLK master we need to set BCLK divider */ | 726 | /* |
725 | if (mcasp->bclk_master && mcasp->sysclk_freq) { | 727 | * If mcasp is BCLK master, and a BCLK divider was not provided by |
728 | * the machine driver, we need to calculate the ratio. | ||
729 | */ | ||
730 | if (mcasp->bclk_master && mcasp->bclk_div == 0 && mcasp->sysclk_freq) { | ||
726 | unsigned int bclk_freq = snd_soc_params_to_bclk(params); | 731 | unsigned int bclk_freq = snd_soc_params_to_bclk(params); |
727 | unsigned int div = mcasp->sysclk_freq / bclk_freq; | 732 | unsigned int div = mcasp->sysclk_freq / bclk_freq; |
728 | if (mcasp->sysclk_freq % bclk_freq != 0) { | 733 | if (mcasp->sysclk_freq % bclk_freq != 0) { |