[alsa-devel] [PATCH V2] ASoC - Add support for upto 16 channels on OMAP MCBSP

Grazvydas Ignotas notasas at gmail.com
Sat Nov 7 21:11:38 CET 2009


On Fri, Nov 6, 2009 at 8:24 PM, Jarkko Nikula <jhnikula at gmail.com> wrote:
> On Thu, 05 Nov 2009 21:00:08 +0000
> Liam Girdwood <lrg at slimlogic.co.uk> wrote:
>
>> From: Graeme Gregory <gg at slimlogic.co.uk>
>>
>> This patch increases the number of supported audio channels from 4
>> to 16 and has been sponsored by Shotspotter Inc. It also fixes a
>> FSYNC rate calculation bug when McBSP is FSYNC master.
>>
> I would not call it as bug but more like an implementation
> restriction :-)
>
> But as the patch now requires that machine driver using OMAP as a
> master must provide the sample rate generator input clock frequency, I
> would like to hear how it will work on Pandora.
>
> Grazvydas: are you able to test is the Pandora still playing after applying
> patch [1] to omap-mcbsp.c and my patch below to omap3pandora.c?
>
> I made an assumption that input clock frequency on Pandora is
> 8 * 32 * sample_rate.

Seems to be working fine, tried playing several different sample rates
and also recording path. FYI pandora has TWL4030 256FS clock connected
to OMAP's CLKS pin.

Tested-by: Grazvydas Ignotas <notasas at gmail.com>

>
> --
> Jarkko
>
> 1.
> http://mailman.alsa-project.org/pipermail/alsa-devel/2009-November/022797.html
>
> ---
> diff --git a/sound/soc/omap/omap3pandora.c b/sound/soc/omap/omap3pandora.c
> index ad219aa..d0949fe 100644
> --- a/sound/soc/omap/omap3pandora.c
> +++ b/sound/soc/omap/omap3pandora.c
> @@ -40,9 +40,12 @@
>
>  #define PREFIX "ASoC omap3pandora: "
>
> -static int omap3pandora_cmn_hw_params(struct snd_soc_dai *codec_dai,
> -       struct snd_soc_dai *cpu_dai, unsigned int fmt)
> +static int omap3pandora_cmn_hw_params(struct snd_pcm_substream *substream,
> +       struct snd_pcm_hw_params *params, unsigned int fmt)
>  {
> +       struct snd_soc_pcm_runtime *rtd = substream->private_data;
> +       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
> +       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
>        int ret;
>
>        /* Set codec DAI configuration */
> @@ -68,8 +71,9 @@ static int omap3pandora_cmn_hw_params(struct snd_soc_dai *codec_dai,
>        }
>
>        /* Set McBSP clock to external */
> -       ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT, 0,
> -                                           SND_SOC_CLOCK_IN);
> +       ret = snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_SYSCLK_CLKS_EXT,
> +                                    8 * 32 * params_rate(params),
> +                                    SND_SOC_CLOCK_IN);
>        if (ret < 0) {
>                pr_err(PREFIX "can't set cpu system clock\n");
>                return ret;
> @@ -87,11 +91,7 @@ static int omap3pandora_cmn_hw_params(struct snd_soc_dai *codec_dai,
>  static int omap3pandora_out_hw_params(struct snd_pcm_substream *substream,
>        struct snd_pcm_hw_params *params)
>  {
> -       struct snd_soc_pcm_runtime *rtd = substream->private_data;
> -       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
> -       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
> -
> -       return omap3pandora_cmn_hw_params(codec_dai, cpu_dai,
> +       return omap3pandora_cmn_hw_params(substream, params,
>                                          SND_SOC_DAIFMT_I2S |
>                                          SND_SOC_DAIFMT_IB_NF |
>                                          SND_SOC_DAIFMT_CBS_CFS);
> @@ -100,11 +100,7 @@ static int omap3pandora_out_hw_params(struct snd_pcm_substream *substream,
>  static int omap3pandora_in_hw_params(struct snd_pcm_substream *substream,
>        struct snd_pcm_hw_params *params)
>  {
> -       struct snd_soc_pcm_runtime *rtd = substream->private_data;
> -       struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
> -       struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
> -
> -       return omap3pandora_cmn_hw_params(codec_dai, cpu_dai,
> +       return omap3pandora_cmn_hw_params(substream, params,
>                                          SND_SOC_DAIFMT_I2S |
>                                          SND_SOC_DAIFMT_NB_NF |
>                                          SND_SOC_DAIFMT_CBS_CFS);
>


More information about the Alsa-devel mailing list