[alsa-devel] [PATCH] ASoC: mcasp: don't override bclk divider if it was provided by the machine
Peter Ujfalusi
peter.ujfalusi at ti.com
Wed Jul 16 14:13:29 CEST 2014
On 07/16/2014 03:04 PM, Daniel Mack wrote:
> If a machine driver provides an BCLK divider to the McASP driver, skip the
> automatic calculation.
>
> This fixes machines on which the physical sample transport always works
> in 32 bits, even though not all of them are actually used.
> snd_soc_params_to_bclk() will fail to address such cases properly.
Acked-by: Peter Ujfalusi <peter.ujfalusi at ti.com>
>
> Signed-off-by: Daniel Mack <zonque at gmail.com>
> ---
> sound/soc/davinci/davinci-mcasp.c | 9 +++++++--
> 1 file changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/sound/soc/davinci/davinci-mcasp.c b/sound/soc/davinci/davinci-mcasp.c
> index 0518f27..dbeb4fd 100644
> --- a/sound/soc/davinci/davinci-mcasp.c
> +++ b/sound/soc/davinci/davinci-mcasp.c
> @@ -64,6 +64,7 @@ struct davinci_mcasp {
> u8 num_serializer;
> u8 *serial_dir;
> u8 version;
> + u8 bclk_div;
> u16 bclk_lrclk_ratio;
> int streams;
>
> @@ -420,6 +421,7 @@ static int davinci_mcasp_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div
> ACLKXDIV(div - 1), ACLKXDIV_MASK);
> mcasp_mod_bits(mcasp, DAVINCI_MCASP_ACLKRCTL_REG,
> ACLKRDIV(div - 1), ACLKRDIV_MASK);
> + mcasp->bclk_div = div;
> break;
>
> case 2: /* BCLK/LRCLK ratio */
> @@ -722,8 +724,11 @@ static int davinci_mcasp_hw_params(struct snd_pcm_substream *substream,
> int period_size = params_period_size(params);
> int ret;
>
> - /* If mcasp is BCLK master we need to set BCLK divider */
> - if (mcasp->bclk_master) {
> + /*
> + * If mcasp is BCLK master, and a BCLK divider was not provided by
> + * the machine driver, we need to calculate the ratio.
> + */
> + if (mcasp->bclk_master && mcasp->bclk_div == 0) {
> unsigned int bclk_freq = snd_soc_params_to_bclk(params);
> if (mcasp->sysclk_freq % bclk_freq != 0) {
> dev_err(mcasp->dev, "Can't produce required BCLK\n");
>
--
Péter
More information about the Alsa-devel
mailing list