[alsa-devel] Audio capture not working with AIC23/McBSP1 on OMAP3517

Aggarwal, Anuj anuj.aggarwal at ti.com
Thu Aug 27 11:37:32 CEST 2009


Thanks Jarkko, the patch works for me.

I will be submitting my ASoC omap*.c file soon after making all 
the necessary changes.

Regards,
Anuj Aggarwal


> -----Original Message-----
> From: Jarkko Nikula [mailto:jhnikula at gmail.com]
> Sent: Wednesday, August 26, 2009 8:32 PM
> To: Aggarwal, Anuj
> Cc: Mark Brown; alsa-devel at alsa-project.org; linux-omap at vger.kernel.org
> Subject: Re: [alsa-devel] Audio capture not working with AIC23/McBSP1 on
> OMAP3517
> 
> On Wed, 26 Aug 2009 16:42:39 +0300
> Jarkko Nikula <jhnikula at gmail.com> wrote:
> 
> > Those recent patches should not any effect into this since they are
> > mostly playing with the McBSP and DMA interfacing. What comes to my
> > mind if muxing is correct and if codec is master, this might be related
> > to those McBSP1 FSR and CLKR setup.
> >
> Anuj: I think the issue is here that by default McBSP1 receiver is
> using the CLKR and FSR pins and if those are not connected, then the
> capture doesn't work. Can you try a patch below and add following lines
> into your machine driver?
> 
> snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_CLKR_SRC_CLKX, 0,
> SND_SOC_CLOCK_IN);
> snd_soc_dai_set_sysclk(cpu_dai, OMAP_MCBSP_FSR_SRC_FSX, 0,
> SND_SOC_CLOCK_IN);
> 
> Patch is compile tested only, generated against mainline 2.6.31-rc7 but
> should
> apply to ALSA tree as well.
> 
> 
> --
> Jarkko
> 
> ==================== CUT HERE ====================
> From: Jarkko Nikula <jhnikula at gmail.com>
> Subject: [PATCH] ASoC: OMAP: Add functionality to set CLKR and FSR sources
> in McBSP DAI
> 
> The McBSP1 port in OMAP3 processors (I believe OMAP2 too but I don't have
> specifications to check it) have additional CLKR and FSR pins for McBSP1
> receiver. Reset default is that receiver is using bit clock and frame
> sync signal from those pins but it is possible to configure to use
> also CLKX and FSX pins as well. In fact, other McBSP ports are doing that
> internally that transmitter and receiver share the CLKX and FSX.
> 
> Add functionaly that machine drivers can set the CLKR and FSR sources by
> using the snd_soc_dai_set_sysclk.
> 
> Thanks to "Aggarwal, Anuj" <anuj.aggarwal at ti.com> for reporting the issue.
> 
> Signed-off-by: Jarkko Nikula <jhnikula at gmail.com>
> ---
>  sound/soc/omap/omap-mcbsp.c |   41
> +++++++++++++++++++++++++++++++++++++++++
>  sound/soc/omap/omap-mcbsp.h |    4 ++++
>  2 files changed, 45 insertions(+), 0 deletions(-)
> 
> diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
> index a5d46a7..2ea2136 100644
> --- a/sound/soc/omap/omap-mcbsp.c
> +++ b/sound/soc/omap/omap-mcbsp.c
> @@ -462,6 +462,40 @@ static int omap_mcbsp_dai_set_clks_src(struct
> omap_mcbsp_data *mcbsp_data,
>  	return 0;
>  }
> 
> +static int omap_mcbsp_dai_set_rcvr_src(struct omap_mcbsp_data
> *mcbsp_data,
> +				       int clk_id)
> +{
> +	int sel_bit, set = 0;
> +	u16 reg = OMAP2_CONTROL_DEVCONF0;
> +
> +	if (cpu_class_is_omap1())
> +		return -EINVAL; /* TODO: Can this be implemented for OMAP1? */
> +	if (mcbsp_data->bus_id != 0)
> +		return -EINVAL;
> +
> +	switch (clk_id) {
> +	case OMAP_MCBSP_CLKR_SRC_CLKX:
> +		set = 1;
> +	case OMAP_MCBSP_CLKR_SRC_CLKR:
> +		sel_bit = 3;
> +		break;
> +	case OMAP_MCBSP_FSR_SRC_FSX:
> +		set = 1;
> +	case OMAP_MCBSP_FSR_SRC_FSR:
> +		sel_bit = 4;
> +		break;
> +	default:
> +		return -EINVAL;
> +	}
> +
> +	if (set)
> +		omap_ctrl_writel(omap_ctrl_readl(reg) | (1 << sel_bit), reg);
> +	else
> +		omap_ctrl_writel(omap_ctrl_readl(reg) & ~(1 << sel_bit), reg);
> +
> +	return 0;
> +}
> +
>  static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
>  					 int clk_id, unsigned int freq,
>  					 int dir)
> @@ -484,6 +518,13 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct
> snd_soc_dai *cpu_dai,
>  	case OMAP_MCBSP_SYSCLK_CLKR_EXT:
>  		regs->pcr0	|= SCLKME;
>  		break;
> +
> +	case OMAP_MCBSP_CLKR_SRC_CLKR:
> +	case OMAP_MCBSP_CLKR_SRC_CLKX:
> +	case OMAP_MCBSP_FSR_SRC_FSR:
> +	case OMAP_MCBSP_FSR_SRC_FSX:
> +		err = omap_mcbsp_dai_set_rcvr_src(mcbsp_data, clk_id);
> +		break;
>  	default:
>  		err = -ENODEV;
>  	}
> diff --git a/sound/soc/omap/omap-mcbsp.h b/sound/soc/omap/omap-mcbsp.h
> index c8147aa..647d2f9 100644
> --- a/sound/soc/omap/omap-mcbsp.h
> +++ b/sound/soc/omap/omap-mcbsp.h
> @@ -32,6 +32,10 @@ enum omap_mcbsp_clksrg_clk {
>  	OMAP_MCBSP_SYSCLK_CLK,		/* Internal ICLK */
>  	OMAP_MCBSP_SYSCLK_CLKX_EXT,	/* External CLKX pin */
>  	OMAP_MCBSP_SYSCLK_CLKR_EXT,	/* External CLKR pin */
> +	OMAP_MCBSP_CLKR_SRC_CLKR,	/* CLKR from CLKR pin */
> +	OMAP_MCBSP_CLKR_SRC_CLKX,	/* CLKR from CLKX pin */
> +	OMAP_MCBSP_FSR_SRC_FSR,		/* FSR from FSR pin */
> +	OMAP_MCBSP_FSR_SRC_FSX,		/* FSR from FSX pin */
>  };
> 
>  /* McBSP dividers */
> --
> 1.6.3.3
> 



More information about the Alsa-devel mailing list