[alsa-devel] [PATCH] ASoC: mcbsp: Add McBSP support for OMAP4
From: Jorge Eduardo Candelaria jorge.candelaria@ti.com
This patch adds McBSP support for the OMAP4 CPU
Signed-off-by: Jorge Eduardo Candelaria jorge.candelaria@ti.com Signed-off-by: Margarita Olaya Cabrera magi.olaya@ti.com --- sound/soc/omap/omap-mcbsp.c | 38 +++++++++++++++++++++++++++++++++++--- sound/soc/omap/omap-mcbsp.h | 4 ++++ 2 files changed, 39 insertions(+), 3 deletions(-)
diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c index 7e84f24..69cb4d1 100644 --- a/sound/soc/omap/omap-mcbsp.c +++ b/sound/soc/omap/omap-mcbsp.c @@ -102,6 +102,17 @@ static const int omap24xx_dma_reqs[][2] = { static const int omap24xx_dma_reqs[][2] = {}; #endif
+#if defined(CONFIG_ARCH_OMAP4) +static const int omap44xx_dma_reqs[][2] = { + { OMAP44XX_DMA_MCBSP1_TX, OMAP44XX_DMA_MCBSP1_RX }, + { OMAP44XX_DMA_MCBSP2_TX, OMAP44XX_DMA_MCBSP2_RX }, + { OMAP44XX_DMA_MCBSP3_TX, OMAP44XX_DMA_MCBSP3_RX }, + { OMAP44XX_DMA_MCBSP4_TX, OMAP44XX_DMA_MCBSP4_RX }, +}; +#else +static const int omap44xx_dma_reqs[][2] = {}; +#endif + #if defined(CONFIG_ARCH_OMAP2420) static const unsigned long omap2420_mcbsp_port[][2] = { { OMAP24XX_MCBSP1_BASE + OMAP_MCBSP_REG_DXR1, @@ -147,6 +158,21 @@ static const unsigned long omap34xx_mcbsp_port[][2] = { static const unsigned long omap34xx_mcbsp_port[][2] = {}; #endif
+#if defined(CONFIG_ARCH_OMAP4) +static const unsigned long omap44xx_mcbsp_port[][2] = { + { OMAP44XX_MCBSP1_BASE + OMAP_MCBSP_REG_DXR, + OMAP44XX_MCBSP1_BASE + OMAP_MCBSP_REG_DRR }, + { OMAP44XX_MCBSP2_BASE + OMAP_MCBSP_REG_DXR, + OMAP44XX_MCBSP2_BASE + OMAP_MCBSP_REG_DRR }, + { OMAP44XX_MCBSP3_BASE + OMAP_MCBSP_REG_DXR, + OMAP44XX_MCBSP3_BASE + OMAP_MCBSP_REG_DRR }, + { OMAP44XX_MCBSP4_BASE + OMAP_MCBSP_REG_DXR, + OMAP44XX_MCBSP4_BASE + OMAP_MCBSP_REG_DRR }, +}; +#else +static const unsigned long omap44xx_mcbsp_port[][2] = {}; +#endif + static void omap_mcbsp_set_threshold(struct snd_pcm_substream *substream) { struct snd_soc_pcm_runtime *rtd = substream->private_data; @@ -224,7 +250,7 @@ static int omap_mcbsp_dai_startup(struct snd_pcm_substream *substream, * 2 channels (stereo): size is 128 / 2 = 64 frames (2 * 64 words) * 4 channels: size is 128 / 4 = 32 frames (4 * 32 words) */ - if (cpu_is_omap343x()) { + if (cpu_is_omap343x() || cpu_is_omap44xx()) { /* * Rule for the buffer size. We should not allow * smaller buffer than the FIFO size to avoid underruns @@ -332,6 +358,9 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream, } else if (cpu_is_omap343x()) { dma = omap24xx_dma_reqs[bus_id][substream->stream]; port = omap34xx_mcbsp_port[bus_id][substream->stream]; + } else if (cpu_is_omap44xx()) { + dma = omap44xx_dma_reqs[bus_id][substream->stream]; + port = omap44xx_mcbsp_port[bus_id][substream->stream]; } else { return -ENODEV; } @@ -498,11 +527,11 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, regs->spcr2 |= XINTM(3) | FREE; regs->spcr1 |= RINTM(3); /* RFIG and XFIG are not defined in 34xx */ - if (!cpu_is_omap34xx()) { + if (!cpu_is_omap34xx() && !cpu_is_omap44xx()) { regs->rcr2 |= RFIG; regs->xcr2 |= XFIG; } - if (cpu_is_omap2430() || cpu_is_omap34xx()) { + if (cpu_is_omap2430() || cpu_is_omap34xx() || cpu_is_omap44xx()) { regs->xccr = DXENDLY(1) | XDMAEN | XDISABLE; regs->rccr = RFULL_CYCLE | RDMAEN | RDISABLE; } @@ -623,6 +652,9 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai, if (cpu_class_is_omap1()) { err = -EINVAL; break; + } else if (cpu_is_omap44xx()) { + regs->srgr2 &= ~CLKSM; + break; } err = omap2_mcbsp_set_clks_src(mcbsp_data->bus_id, MCBSP_CLKS_PRCM_SRC); diff --git a/sound/soc/omap/omap-mcbsp.h b/sound/soc/omap/omap-mcbsp.h index ffdcc5a..110c106 100644 --- a/sound/soc/omap/omap-mcbsp.h +++ b/sound/soc/omap/omap-mcbsp.h @@ -50,6 +50,10 @@ enum omap_mcbsp_div { #undef NUM_LINKS #define NUM_LINKS 3 #endif +#if defined(CONFIG_ARCH_OMAP4) +#undef NUM_LINKS +#define NUM_LINKS 4 +#endif #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3) #undef NUM_LINKS #define NUM_LINKS 5
On Mon, Dec 20, 2010 at 11:32:47AM -0600, Olaya, Margarita wrote:
From: Jorge Eduardo Candelaria jorge.candelaria@ti.com
This patch adds McBSP support for the OMAP4 CPU
Acked-by: Mark Brown broonie@opensource.wolfsonmicro.com
On Mon, 20 Dec 2010 17:36:13 +0000 Mark Brown broonie@opensource.wolfsonmicro.com wrote:
On Mon, Dec 20, 2010 at 11:32:47AM -0600, Olaya, Margarita wrote:
From: Jorge Eduardo Candelaria jorge.candelaria@ti.com
This patch adds McBSP support for the OMAP4 CPU
Acked-by: Mark Brown broonie@opensource.wolfsonmicro.com
Have my ack too Acked-by: Jarkko Nikula jhnikula@gmail.com
Out of curiosity: can the McBSP interface to be used as a simple alternative to OMAP4 ABE centric audio on existing platfroms like Panda?
On Tue, 2010-12-21 at 11:48 +0200, Jarkko Nikula wrote:
On Mon, 20 Dec 2010 17:36:13 +0000 Mark Brown broonie@opensource.wolfsonmicro.com wrote:
On Mon, Dec 20, 2010 at 11:32:47AM -0600, Olaya, Margarita wrote:
From: Jorge Eduardo Candelaria jorge.candelaria@ti.com
This patch adds McBSP support for the OMAP4 CPU
Acked-by: Mark Brown broonie@opensource.wolfsonmicro.com
Have my ack too Acked-by: Jarkko Nikula jhnikula@gmail.com
Out of curiosity: can the McBSP interface to be used as a simple alternative to OMAP4 ABE centric audio on existing platfroms like Panda?
McBSP, McPDM and DMIC can all be used without the ABE in legacy mode on OMAP4.
Liam
Hi,
It seams that I have really bad mail issues.. I just received the RE mails to the patch, but not the original, so I picked this mail to reply. And going to top post :(
In the patch: @@ -623,6 +652,9 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai, if (cpu_class_is_omap1()) { err = -EINVAL; break; + } else if (cpu_is_omap44xx()) { + regs->srgr2 &= ~CLKSM;
There's no need to clear the CLKSM, since it is by default not set. IMHO you shall handle the OMAP4 in a same way as we handle OMAP3. By doing nothing here.
+ break; } err = omap2_mcbsp_set_clks_src(mcbsp_data->bus_id, MCBSP_CLKS_PRCM_SRC);
Otherwise: Acked-by: Peter Ujfalusi peter.ujfalusi@nokia.com
______________________________________ From: alsa-devel-bounces@alsa-project.org [alsa-devel-bounces@alsa-project.org] on behalf of ext Liam Girdwood [lrg@slimlogic.co.uk] Sent: Tuesday, December 21, 2010 12:17 To: Jarkko Nikula Cc: Olaya, Margarita; alsa-devel@alsa-project.org; Mark Brown Subject: Re: [alsa-devel] [PATCH] ASoC: mcbsp: Add McBSP support for OMAP4
On Tue, 2010-12-21 at 11:48 +0200, Jarkko Nikula wrote:
On Mon, 20 Dec 2010 17:36:13 +0000 Mark Brown broonie@opensource.wolfsonmicro.com wrote:
On Mon, Dec 20, 2010 at 11:32:47AM -0600, Olaya, Margarita wrote:
From: Jorge Eduardo Candelaria jorge.candelaria@ti.com
This patch adds McBSP support for the OMAP4 CPU
Acked-by: Mark Brown broonie@opensource.wolfsonmicro.com
Have my ack too Acked-by: Jarkko Nikula jhnikula@gmail.com
Out of curiosity: can the McBSP interface to be used as a simple alternative to OMAP4 ABE centric audio on existing platfroms like Panda?
McBSP, McPDM and DMIC can all be used without the ABE in legacy mode on OMAP4.
Liam
-- Freelance Developer, SlimLogic Ltd ASoC and Voltage Regulator Maintainer. http://www.slimlogic.co.uk
Hi,
From: alsa-devel-bounces@alsa-project.org [alsa-devel-bounces@alsa-project.org] on behalf of Ujfalusi Peter (Nokia-MS/Tampere) Sent: Thursday, December 23, 2010 08:42 To: lrg@slimlogic.co.uk; jhnikula@gmail.com Cc: magi.olaya@ti.com; alsa-devel@alsa-project.org; broonie@opensource.wolfsonmicro.com Subject: Re: [alsa-devel] [PATCH] ASoC: mcbsp: Add McBSP support for OMAP4
In the patch: @@ -623,6 +652,9 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai, if (cpu_class_is_omap1()) { err = -EINVAL; break;
} else if (cpu_is_omap44xx()) {
regs->srgr2 &= ~CLKSM;
There's no need to clear the CLKSM, since it is by default not set. IMHO you shall handle the OMAP4 in a same way as we handle OMAP3. By doing nothing here.
break;
I think you should not break here, since you might want to select the CLKS/PRCM with the next call...
} err = omap2_mcbsp_set_clks_src(mcbsp_data->bus_id, MCBSP_CLKS_PRCM_SRC);
Otherwise: Acked-by: Peter Ujfalusi peter.ujfalusi@nokia.com
Just noticed that, this patch is already in, but the issues, I have commented has to be fixed in order to have proper support for OMAP4.
Peter
On Thu, 2010-12-23 at 07:32 +0000, peter.ujfalusi@nokia.com wrote:
Hi,
From: alsa-devel-bounces@alsa-project.org [alsa-devel-bounces@alsa-project.org] on behalf of Ujfalusi Peter (Nokia-MS/Tampere) Sent: Thursday, December 23, 2010 08:42 To: lrg@slimlogic.co.uk; jhnikula@gmail.com Cc: magi.olaya@ti.com; alsa-devel@alsa-project.org; broonie@opensource.wolfsonmicro.com Subject: Re: [alsa-devel] [PATCH] ASoC: mcbsp: Add McBSP support for OMAP4
In the patch: @@ -623,6 +652,9 @@ static int omap_mcbsp_dai_set_dai_sysclk(struct snd_soc_dai *cpu_dai, if (cpu_class_is_omap1()) { err = -EINVAL; break;
} else if (cpu_is_omap44xx()) {
regs->srgr2 &= ~CLKSM;
There's no need to clear the CLKSM, since it is by default not set. IMHO you shall handle the OMAP4 in a same way as we handle OMAP3. By doing nothing here.
break;
I think you should not break here, since you might want to select the CLKS/PRCM with the next call...
} err = omap2_mcbsp_set_clks_src(mcbsp_data->bus_id, MCBSP_CLKS_PRCM_SRC);
Otherwise: Acked-by: Peter Ujfalusi peter.ujfalusi@nokia.com
Just noticed that, this patch is already in, but the issues, I have commented has to be fixed in order to have proper support for OMAP4.
Now fixed and added your Ack.
Thanks
Liam
On Tue, 2010-12-21 at 11:48 +0200, Jarkko Nikula wrote:
On Mon, 20 Dec 2010 17:36:13 +0000 Mark Brown broonie@opensource.wolfsonmicro.com wrote:
On Mon, Dec 20, 2010 at 11:32:47AM -0600, Olaya, Margarita wrote:
From: Jorge Eduardo Candelaria jorge.candelaria@ti.com
This patch adds McBSP support for the OMAP4 CPU
Acked-by: Mark Brown broonie@opensource.wolfsonmicro.com
Have my ack too Acked-by: Jarkko Nikula jhnikula@gmail.com
Applied
Thanks
Liam
participants (5)
-
Jarkko Nikula
-
Liam Girdwood
-
Mark Brown
-
Olaya, Margarita
-
peter.ujfalusi@nokia.com