[alsa-devel] [RFC PATCH] ASoC: omap-mcbsp: Add support for highter rate up to 384000
Peter Ujfalusi
peter.ujfalusi at ti.com
Mon Aug 12 17:36:16 CEST 2013
On 08/10/2013 10:53 AM, Michael Trimarchi wrote:
> I found some time but I can't not test this patch now ;) too far from
> my office. The idea is to check with MAX_BCLK. There are two points
> that should cover slave and master mode. Is it the right direction?
> BTW Do you think that is better to have at soc level as a new constraint?
I would not bother with the bclk check for now. We did not had issues so far
and 48MHz is quite high anyways for our users so far.
>
> Michael
>
> diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
> index 7483efb..ea95ad2 100644
> --- a/sound/soc/omap/omap-mcbsp.c
> +++ b/sound/soc/omap/omap-mcbsp.c
> @@ -39,7 +39,9 @@
> #include "mcbsp.h"
> #include "omap-mcbsp.h"
>
> -#define OMAP_MCBSP_RATES (SNDRV_PCM_RATE_8000_96000)
> +#define OMAP_MCBSP_MAX_BCLK 48000000
> +#define OMAP_MCBSP_RATES (SNDRV_PCM_RATE_8000_192000 | \
> + SNDRV_PCM_RATE_KNOT)
>
> #define OMAP_MCBSP_SOC_SINGLE_S16_EXT(xname, xmin, xmax, \
> xhandler_get, xhandler_put) \
> @@ -225,10 +227,14 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
> struct omap_mcbsp *mcbsp = snd_soc_dai_get_drvdata(cpu_dai);
> struct omap_mcbsp_reg_cfg *regs = &mcbsp->cfg_regs;
> struct snd_dmaengine_dai_dma_data *dma_data;
> - int wlen, channels, wpf;
> + int wlen, channels, wpf, bclk;
> int pkt_size = 0;
> unsigned int format, div, framesize, master;
>
> + bclk = snd_soc_params_to_bclk(params);
> + if (bclk < 0 || bclk > OMAP_MCBSP_MAX_BCLK)
> + return -EINVAL;
> +
> dma_data = snd_soc_dai_get_dma_data(cpu_dai, substream);
> channels = params_channels(params);
>
> @@ -326,7 +332,7 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream,
> /* In McBSP master modes, FRAME (i.e. sample rate) is generated
> * by _counting_ BCLKs. Calculate frame size in BCLKs */
> master = mcbsp->fmt & SND_SOC_DAIFMT_MASTER_MASK;
> - if (master == SND_SOC_DAIFMT_CBS_CFS) {
> + if (master == SND_SOC_DAIFMT_CBS_CFS) {
> div = mcbsp->clk_div ? mcbsp->clk_div : 1;
> framesize = (mcbsp->in_freq / div) / params_rate(params);
>
> @@ -500,6 +506,9 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
> return -EBUSY;
> }
>
> + if (freq > OMAP_MCBSP_MAX_BCLK)
> + return -EINVAL;
> +
> mcbsp->in_freq = freq;
> regs->srgr2 &= ~CLKSM;
> regs->pcr0 &= ~SCLKME;
>>
>>>
>>> Michael
>>>
>>>>> },
>>>>> .capture = {
>>>>> .channels_min = 1,
>>>>> .channels_max = 16,
>>>>> .rates = OMAP_MCBSP_RATES,
>>>>> + .rate_min = 8000,
>>>>> + .rate_max = 384000,
>>>>
>>>> Same here, do not set these.
>>>>
>>>>> .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE,
>>>>> },
>>>>> .ops = &mcbsp_dai_ops,
>>>>>
>>>>
>>>>
>>>> --
>>>> Péter
>>>
>>
>>
>> --
>> Péter
--
Péter
More information about the Alsa-devel
mailing list