* [PATCH 0/2] ASoC: DSP mode corrections for omap-mcbsp
@ 2009-04-14 7:45 Peter Ujfalusi
2009-04-14 7:45 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Peter Ujfalusi
0 siblings, 1 reply; 17+ messages in thread
From: Peter Ujfalusi @ 2009-04-14 7:45 UTC (permalink / raw)
To: alsa-devel; +Cc: broonie, jarkko.nikula
Hello,
As a follow-up for the before easter mail thread on the omap DSP_A/_B mode
support...
This series should fix the current DSP_B mode and also introduces support for
DSP_A mode in omap-mcbsp.
Since omap's mcbsp module is quite flexible, one who is writing a board file for
the omap platform has to check both the modes (DSP_A/_B) and the clock polarity
settings against the codec requirements and pick the correct pair.
For example in osk5912 board file:
To use DSP_B mode (as it is now, no changes needed):
snd_soc_dai_set_fmt(codec_dai,
SND_SOC_DAIFMT_DSP_B |
SND_SOC_DAIFMT_NB_IF |
SND_SOC_DAIFMT_CBM_CFM);
To use the DSP_A mode for the same board, codec:
snd_soc_dai_set_fmt(codec_dai,
SND_SOC_DAIFMT_DSP_A |
SND_SOC_DAIFMT_IB_IF |
SND_SOC_DAIFMT_CBM_CFM);
---
Peter Ujfalusi (2):
ASoC: omap-mcbsp: Correct the DSP_B mode
ASoC: omap-mcbsp: Add DSP_A support
sound/soc/omap/omap-mcbsp.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
^ permalink raw reply [flat|nested] 17+ messages in thread* [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 7:45 [PATCH 0/2] ASoC: DSP mode corrections for omap-mcbsp Peter Ujfalusi @ 2009-04-14 7:45 ` Peter Ujfalusi 2009-04-14 7:45 ` [PATCH 2/2] ASoC: omap-mcbsp: Add DSP_A support Peter Ujfalusi 2009-04-14 8:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula 0 siblings, 2 replies; 17+ messages in thread From: Peter Ujfalusi @ 2009-04-14 7:45 UTC (permalink / raw) To: alsa-devel; +Cc: broonie, jarkko.nikula Use correct DSP_B mode configuration for omap-mcbsp. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> --- sound/soc/omap/omap-mcbsp.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c index 9c09b94..4440bab 100644 --- a/sound/soc/omap/omap-mcbsp.c +++ b/sound/soc/omap/omap-mcbsp.c @@ -283,7 +283,7 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream, break; case SND_SOC_DAIFMT_DSP_B: regs->srgr2 |= FPER(wlen * channels - 1); - regs->srgr1 |= FWID(wlen * channels - 2); + regs->srgr1 |= FWID(0); break; } -- 1.6.2.2 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH 2/2] ASoC: omap-mcbsp: Add DSP_A support 2009-04-14 7:45 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Peter Ujfalusi @ 2009-04-14 7:45 ` Peter Ujfalusi 2009-04-14 8:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula 1 sibling, 0 replies; 17+ messages in thread From: Peter Ujfalusi @ 2009-04-14 7:45 UTC (permalink / raw) To: alsa-devel; +Cc: broonie, jarkko.nikula Add support for DSP_A in omap-mcbsp. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> --- sound/soc/omap/omap-mcbsp.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-) diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c index 4440bab..1576e70 100644 --- a/sound/soc/omap/omap-mcbsp.c +++ b/sound/soc/omap/omap-mcbsp.c @@ -281,6 +281,10 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream, regs->srgr2 |= FPER(wlen * 2 - 1); regs->srgr1 |= FWID(wlen - 1); break; + case SND_SOC_DAIFMT_DSP_A: + regs->srgr2 |= FPER(wlen * channels - 1); + regs->srgr1 |= FWID(wlen * channels - 2); + break; case SND_SOC_DAIFMT_DSP_B: regs->srgr2 |= FPER(wlen * channels - 1); regs->srgr1 |= FWID(0); @@ -324,6 +328,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, regs->rcr2 |= RDATDLY(1); regs->xcr2 |= XDATDLY(1); break; + case SND_SOC_DAIFMT_DSP_A: case SND_SOC_DAIFMT_DSP_B: /* 0-bit data delay */ regs->rcr2 |= RDATDLY(0); -- 1.6.2.2 ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 7:45 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Peter Ujfalusi 2009-04-14 7:45 ` [PATCH 2/2] ASoC: omap-mcbsp: Add DSP_A support Peter Ujfalusi @ 2009-04-14 8:20 ` Jarkko Nikula 2009-04-14 8:40 ` Peter Ujfalusi 1 sibling, 1 reply; 17+ messages in thread From: Jarkko Nikula @ 2009-04-14 8:20 UTC (permalink / raw) To: Ujfalusi Peter (Nokia-D/Tampere) Cc: alsa-devel@alsa-project.org, broonie@opensource.wolfsonmicro.com On Tue, 14 Apr 2009 09:45:30 +0200 "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi@nokia.com> wrote: > Use correct DSP_B mode configuration for omap-mcbsp. > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> > --- > sound/soc/omap/omap-mcbsp.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c > index 9c09b94..4440bab 100644 > --- a/sound/soc/omap/omap-mcbsp.c > +++ b/sound/soc/omap/omap-mcbsp.c > @@ -283,7 +283,7 @@ static int omap_mcbsp_dai_hw_params(struct > snd_pcm_substream *substream, break; > case SND_SOC_DAIFMT_DSP_B: > regs->srgr2 |= FPER(wlen * channels - 1); > - regs->srgr1 |= FWID(wlen * channels - 2); > + regs->srgr1 |= FWID(0); > break; > } Grr, I have some practical problems with my Beagle refusing to mount my SD card root but I give a test when I get it working. But I fear this change makes it into DSP_B with inverted FS polarity. Register srgr1 defines the FS length and it's active low. I think this will be correct if you switch the polarity in omap_mcbsp_dai_set_dai_fmt. At least defining pulse witdth with FWID(0) is more clear than FWID (wlen * channels - 2) :-) Jarkko ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 8:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula @ 2009-04-14 8:40 ` Peter Ujfalusi 2009-04-14 9:02 ` Jarkko Nikula 0 siblings, 1 reply; 17+ messages in thread From: Peter Ujfalusi @ 2009-04-14 8:40 UTC (permalink / raw) To: Nikula Jarkko (Nokia-D/Helsinki) Cc: alsa-devel@alsa-project.org, broonie@opensource.wolfsonmicro.com On Tuesday 14 April 2009 11:20:16 Nikula Jarkko (Nokia-D/Helsinki) wrote: > On Tue, 14 Apr 2009 09:45:30 +0200 > > "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi@nokia.com> wrote: > > Use correct DSP_B mode configuration for omap-mcbsp. > > > > Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com> > > --- > > sound/soc/omap/omap-mcbsp.c | 2 +- > > 1 files changed, 1 insertions(+), 1 deletions(-) > > > > diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c > > index 9c09b94..4440bab 100644 > > --- a/sound/soc/omap/omap-mcbsp.c > > +++ b/sound/soc/omap/omap-mcbsp.c > > @@ -283,7 +283,7 @@ static int omap_mcbsp_dai_hw_params(struct > > snd_pcm_substream *substream, break; > > case SND_SOC_DAIFMT_DSP_B: > > regs->srgr2 |= FPER(wlen * channels - 1); > > - regs->srgr1 |= FWID(wlen * channels - 2); > > + regs->srgr1 |= FWID(0); > > break; > > } > > Grr, I have some practical problems with my Beagle refusing to mount my > SD card root but I give a test when I get it working. If you want to use the TWL codec to verify the DSP mode, than you will need to have the 4 channel support also. I'm planning to resend those as soon as this DSP_A/_B mode is settled. > > But I fear this change makes it into DSP_B with inverted FS polarity. > Register srgr1 defines the FS length and it's active low. I think this > will be correct if you switch the polarity in > omap_mcbsp_dai_set_dai_fmt. As I written in the introduction mail, one has to verify and pick the correct pair of DSP_A/_B mode and FS/clock polarity in order to have correct config... I think it is acceptable to assume, that whoever writes such a board file should have at least this level of understanding of the FS/bitclock and how the data is driven and how the data is sampled. Also I have provided sample configurations for the osk5912 board file - which is the only one at the moment using DSP mode on omap platform. > > At least defining pulse witdth with FWID(0) is more clear than FWID > (wlen * channels - 2) :-) I think this is the only way to implement the DSP_B mode correctly in omap- mcbsp. Again, you need to pick the correct FS/clock polarity, but that is kind of simple. > > > Jarkko -- Péter ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 8:40 ` Peter Ujfalusi @ 2009-04-14 9:02 ` Jarkko Nikula 2009-04-14 9:31 ` Mark Brown 0 siblings, 1 reply; 17+ messages in thread From: Jarkko Nikula @ 2009-04-14 9:02 UTC (permalink / raw) To: Ujfalusi Peter (Nokia-D/Tampere) Cc: alsa-devel@alsa-project.org, broonie@opensource.wolfsonmicro.com On Tue, 14 Apr 2009 10:40:16 +0200 "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi@nokia.com> wrote: > > But I fear this change makes it into DSP_B with inverted FS > > polarity. Register srgr1 defines the FS length and it's active low. > > I think this will be correct if you switch the polarity in > > omap_mcbsp_dai_set_dai_fmt. > > As I written in the introduction mail, one has to verify and pick the > correct pair of DSP_A/_B mode and FS/clock polarity in order to have > correct config... I think it is acceptable to assume, that whoever > writes such a board file should have at least this level of > understanding of the FS/bitclock and how the data is driven and how > the data is sampled. > The pairs must mach. It's clearly a bug if another end is have to set different polarity than another. Those polarity defines are with respect to the mode, not e.g. what's the McBSP default. Jarkko ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 9:02 ` Jarkko Nikula @ 2009-04-14 9:31 ` Mark Brown 2009-04-14 10:34 ` Peter Ujfalusi 0 siblings, 1 reply; 17+ messages in thread From: Mark Brown @ 2009-04-14 9:31 UTC (permalink / raw) To: Jarkko Nikula Cc: alsa-devel@alsa-project.org, Ujfalusi Peter (Nokia-D/Tampere) On Tue, Apr 14, 2009 at 12:02:21PM +0300, Jarkko Nikula wrote: > The pairs must mach. It's clearly a bug if another end is have to set > different polarity than another. Those polarity defines are with > respect to the mode, not e.g. what's the McBSP default. Indeed. However, the osk5912 board file that Peter pointed at as not needing any modifications for DSP_B already uses inverted frame clock for both CODEC and CPU. In that case either both are wrong or it's just that the driver is limited in what it supports which is not a problem. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 9:31 ` Mark Brown @ 2009-04-14 10:34 ` Peter Ujfalusi 2009-04-14 10:47 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the?DSP_B mode Mark Brown 2009-04-14 11:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula 0 siblings, 2 replies; 17+ messages in thread From: Peter Ujfalusi @ 2009-04-14 10:34 UTC (permalink / raw) To: alsa-devel; +Cc: Nikula Jarkko (Nokia-D/Helsinki), ext Mark Brown On Tuesday 14 April 2009 12:31:33 ext Mark Brown wrote: > On Tue, Apr 14, 2009 at 12:02:21PM +0300, Jarkko Nikula wrote: > > The pairs must mach. It's clearly a bug if another end is have to set > > different polarity than another. Those polarity defines are with > > respect to the mode, not e.g. what's the McBSP default. > > Indeed. However, the osk5912 board file that Peter pointed at as not > needing any modifications for DSP_B already uses inverted frame clock > for both CODEC and CPU. In that case either both are wrong or it's just > that the driver is limited in what it supports which is not a problem. Well, I think the mcbsp module is quite - maybe too - flexible... To have the DSP_B mode correctly (for the tvl320aic32 codec used in osk5912 board) the FS polarity has to be handled by the mcbsp as it has been inverted. If we don't do this, there is no way to have the MSB at the correct place (it has to be available when the FS is high). The DSP_A mode can use the FS polarity 'correctly' - as it is. Or we can also consider to require to invert the FS polarity, than add 1 bit delay for DSP_A mode. So: a) The proposal in the series DSP_B mode (the MSB is transmitted when the FS is high, the length for the pulse is 1): case SND_SOC_DAIFMT_DSP_B: regs->srgr2 |= FPER(wlen * channels - 1); regs->srgr1 |= FWID(0); break; case SND_SOC_DAIFMT_DSP_B: /* 0-bit data delay */ regs->rcr2 |= RDATDLY(0); regs->xcr2 |= XDATDLY(0); break; case SND_SOC_DAIFMT_NB_IF: regs->pcr0 |= CLKXP | CLKRP; break; DSP_A mode (the MSB is transmitted when the FS went low, the length for the pulse is still 1, but the FS stays low for (wlen * channels - 1) cycles): case SND_SOC_DAIFMT_DSP_A: regs->srgr2 |= FPER(wlen * channels - 1); regs->srgr1 |= FWID(wlen * channels - 2); break; case SND_SOC_DAIFMT_DSP_A: /* 0-bit data delay */ regs->rcr2 |= RDATDLY(0); regs->xcr2 |= XDATDLY(0); break; case SND_SOC_DAIFMT_IB_IF: break; b) twist in DSP_A mode. The DSP_B mode is the same as it is in a) DSP_A mode (the MSB is transmitted when the FS went low, the length for the pulse is still 1, but the FS stays low for (wlen * channels - 1) cycles): case SND_SOC_DAIFMT_DSP_A: regs->srgr2 |= FPER(wlen * channels - 1); regs->srgr1 |= FWID(0); break; case SND_SOC_DAIFMT_DSP_A: /* 0-bit data delay */ regs->rcr2 |= RDATDLY(1); regs->xcr2 |= XDATDLY(1); break; case SND_SOC_DAIFMT_NB_IF: regs->pcr0 |= CLKXP | CLKRP; break; Both a) and b) would be OK for the DSP_A mode... c) Remove the SND_SOC_DAIFMT_* (DSP_A, DSP_B, I2S and NB_NF, NB_IF, IB_NF, IB_IF) configuration from the omap_mcbsp_dai_set_dai_fmt, move it to the omap_mcbsp_dai_hw_params function and have something like these there: switch (mcbsp_data->fmt & (SND_SOC_DAIFMT_FORMAT_MASK | SND_SOC_DAIFMT_INV_MASK)) { case SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF: ... break; case SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF: ... break; case SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_IF: ... break; case SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_IB_NF: ... break; case SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_IB_IF: ... break; case SND_SOC_DAIFMT_DSP_A | SND_SOC_DAIFMT_NB_NF: ... break; ... } and so on. I'm not sure if all of the combinations are valid, but it can be done like this also. It is another thing how actually the mcbsp would be configured for these modes - for DSP_B the FS polarity has to be inverted to get the MSB in a correct place, but it would be correct from the snd_soc_dai_set_fmt point of view, or something........ -- Péter ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the?DSP_B mode 2009-04-14 10:34 ` Peter Ujfalusi @ 2009-04-14 10:47 ` Mark Brown 2009-04-14 11:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula 1 sibling, 0 replies; 17+ messages in thread From: Mark Brown @ 2009-04-14 10:47 UTC (permalink / raw) To: Peter Ujfalusi; +Cc: alsa-devel, Nikula Jarkko (Nokia-D/Helsinki) On Tue, Apr 14, 2009 at 01:34:33PM +0300, Peter Ujfalusi wrote: > To have the DSP_B mode correctly (for the tvl320aic32 codec used in osk5912 > board) the FS polarity has to be handled by the mcbsp as it has been inverted. > If we don't do this, there is no way to have the MSB at the correct place (it > has to be available when the FS is high). > The DSP_A mode can use the FS polarity 'correctly' - as it is. Or we can also > consider to require to invert the FS polarity, than add 1 bit delay for DSP_A > mode. As Jarkko says the driver should be hiding all this from users - it should just set the port up as best it can, refusing to do anything that can't be supported by the hardware. The default polarity the hardware uses shouldn't be visible outside the driver. > a) The proposal in the series > DSP_B mode (the MSB is transmitted when the FS is high, the length for the > pulse is 1): > DSP_A mode (the MSB is transmitted when the FS went low, the length for the > pulse is still 1, but the FS stays low for (wlen * channels - 1) cycles): The difference between the two modes shouldn't be edge of FS used, it should be a clock cycle, though with a 1 BCLK pulse on FS the effect will probably line up. The MSB data needs to be available for sampling on the appropriate rising edge of BCLK. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 10:34 ` Peter Ujfalusi 2009-04-14 10:47 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the?DSP_B mode Mark Brown @ 2009-04-14 11:20 ` Jarkko Nikula 2009-04-14 11:32 ` Arun KS ` (2 more replies) 1 sibling, 3 replies; 17+ messages in thread From: Jarkko Nikula @ 2009-04-14 11:20 UTC (permalink / raw) To: Ujfalusi Peter (Nokia-D/Tampere); +Cc: alsa-devel@alsa-project.org, ext, Brown On Tue, 14 Apr 2009 12:34:33 +0200 "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi@nokia.com> wrote: > Well, I think the mcbsp module is quite - maybe too - flexible... > To have the DSP_B mode correctly (for the tvl320aic32 codec used in osk5912 board) the FS polarity has to be handled by the mcbsp as it has been inverted. If we don't do this, there is no way to have the MSB at the correct place (it has to be available when the FS is high). > > > The DSP_A mode can use the FS polarity 'correctly' - as it is. Or we can also consider to require to invert the FS polarity, than add 1 bit delay for DSP_A mode. > I meant something like this below integrating your FWID(0) and temp_fmt from my earlier commit da6320becf31c40b60d4b1dc6b339c9a766b671c so that SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF will produce correct format. I tested this only with Beagle McBSP3 and oscilloscope but I like to verify it with real codecs as well :-) Jarkko diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c index d6882be..c40ea21 100644 --- a/sound/soc/omap/omap-mcbsp.c +++ b/sound/soc/omap/omap-mcbsp.c @@ -272,7 +272,7 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream, break; case SND_SOC_DAIFMT_DSP_B: regs->srgr2 |= FPER(wlen * channels - 1); - regs->srgr1 |= FWID(wlen * channels - 2); + regs->srgr1 |= FWID(0); break; } @@ -291,6 +291,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, { struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data); struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs; + unsigned int temp_fmt = fmt; if (mcbsp_data->configured) return 0; @@ -317,6 +318,8 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, /* 0-bit data delay */ regs->rcr2 |= RDATDLY(0); regs->xcr2 |= XDATDLY(0); + /* Invert bit clock and FS polarity configuration */ + temp_fmt ^= SND_SOC_DAIFMT_IB_IF; break; default: /* Unsupported data format */ @@ -340,7 +343,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, } /* Set bit clock (CLKX/CLKR) and FS polarities */ - switch (fmt & SND_SOC_DAIFMT_INV_MASK) { + switch (temp_fmt & SND_SOC_DAIFMT_INV_MASK) { case SND_SOC_DAIFMT_NB_NF: /* * Normal BCLK + FS. ^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 11:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula @ 2009-04-14 11:32 ` Arun KS 2009-04-14 12:58 ` Jarkko Nikula 2009-04-14 11:56 ` Peter Ujfalusi 2009-04-14 12:32 ` Peter Ujfalusi 2 siblings, 1 reply; 17+ messages in thread From: Arun KS @ 2009-04-14 11:32 UTC (permalink / raw) To: Jarkko Nikula Cc: ext, alsa-devel@alsa-project.org, Ujfalusi Peter (Nokia-D/Tampere), Brown Hi, I m not able to use my osk5912 to test this. When i do an aplay with the latest kernel (linux-2.6.30-rc1) i am getting an me i/o error. Thanks, Arun On Tue, Apr 14, 2009 at 4:50 PM, Jarkko Nikula <jarkko.nikula@nokia.com> wrote: > On Tue, 14 Apr 2009 12:34:33 +0200 > "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi@nokia.com> wrote: > >> Well, I think the mcbsp module is quite - maybe too - flexible... >> To have the DSP_B mode correctly (for the tvl320aic32 codec used in osk5912 board) the FS polarity has to be handled by the mcbsp as it has been inverted. If we don't do this, there is no way to have the MSB at the correct place (it has to be available when the FS is high). >> >> >> The DSP_A mode can use the FS polarity 'correctly' - as it is. Or we can also consider to require to invert the FS polarity, than add 1 bit delay for DSP_A mode. >> > I meant something like this below integrating your FWID(0) and temp_fmt from my earlier commit da6320becf31c40b60d4b1dc6b339c9a766b671c so that SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF will produce correct format. > > I tested this only with Beagle McBSP3 and oscilloscope but I like to verify it with real codecs as well :-) > > > Jarkko > > diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c > index d6882be..c40ea21 100644 > --- a/sound/soc/omap/omap-mcbsp.c > +++ b/sound/soc/omap/omap-mcbsp.c > @@ -272,7 +272,7 @@ static int omap_mcbsp_dai_hw_params(struct snd_pcm_substream *substream, > break; > case SND_SOC_DAIFMT_DSP_B: > regs->srgr2 |= FPER(wlen * channels - 1); > - regs->srgr1 |= FWID(wlen * channels - 2); > + regs->srgr1 |= FWID(0); > break; > } > > @@ -291,6 +291,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, > { > struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data); > struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs; > + unsigned int temp_fmt = fmt; > > if (mcbsp_data->configured) > return 0; > @@ -317,6 +318,8 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, > /* 0-bit data delay */ > regs->rcr2 |= RDATDLY(0); > regs->xcr2 |= XDATDLY(0); > + /* Invert bit clock and FS polarity configuration */ > + temp_fmt ^= SND_SOC_DAIFMT_IB_IF; > break; > default: > /* Unsupported data format */ > @@ -340,7 +343,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct snd_soc_dai *cpu_dai, > } > > /* Set bit clock (CLKX/CLKR) and FS polarities */ > - switch (fmt & SND_SOC_DAIFMT_INV_MASK) { > + switch (temp_fmt & SND_SOC_DAIFMT_INV_MASK) { > case SND_SOC_DAIFMT_NB_NF: > /* > * Normal BCLK + FS. > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel > ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 11:32 ` Arun KS @ 2009-04-14 12:58 ` Jarkko Nikula 0 siblings, 0 replies; 17+ messages in thread From: Jarkko Nikula @ 2009-04-14 12:58 UTC (permalink / raw) To: ext Arun KS Cc: ext@alsa-project.org, alsa-devel@alsa-project.org, Ujfalusi Peter (Nokia-D/Tampere), Brown On Tue, 14 Apr 2009 13:32:45 +0200 ext Arun KS <getarunks@gmail.com> wrote: > Hi, > > I m not able to use my osk5912 to test this. > When i do an aplay with the latest kernel (linux-2.6.30-rc1) i am > getting an me i/o error. > Are you using mainline or linux-omap? It seems that linux-omap is somewhat broken at the moment. I got Beagle working by going back into commit 823de921c923cc753a6746183e9c513a3452dec7 but not yet figured out one for N810... Jarkko ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 11:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula 2009-04-14 11:32 ` Arun KS @ 2009-04-14 11:56 ` Peter Ujfalusi 2009-04-14 12:01 ` Mark Brown 2009-04-14 12:32 ` Peter Ujfalusi 2 siblings, 1 reply; 17+ messages in thread From: Peter Ujfalusi @ 2009-04-14 11:56 UTC (permalink / raw) To: Nikula Jarkko (Nokia-D/Helsinki) Cc: alsa-devel@alsa-project.org, ext Mark Brown On Tuesday 14 April 2009 14:20:04 Nikula Jarkko (Nokia-D/Helsinki) wrote: > On Tue, 14 Apr 2009 12:34:33 +0200 > > I meant something like this below integrating your FWID(0) and temp_fmt > from my earlier commit da6320becf31c40b60d4b1dc6b339c9a766b671c so that > SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF will produce correct format. > > I tested this only with Beagle McBSP3 and oscilloscope but I like to verify > it with real codecs as well :-) > > > Jarkko > > diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c > index d6882be..c40ea21 100644 > --- a/sound/soc/omap/omap-mcbsp.c > +++ b/sound/soc/omap/omap-mcbsp.c > @@ -272,7 +272,7 @@ static int omap_mcbsp_dai_hw_params(struct > snd_pcm_substream *substream, break; > case SND_SOC_DAIFMT_DSP_B: > regs->srgr2 |= FPER(wlen * channels - 1); > - regs->srgr1 |= FWID(wlen * channels - 2); > + regs->srgr1 |= FWID(0); > break; > } > > @@ -291,6 +291,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct > snd_soc_dai *cpu_dai, { > struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data); > struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs; > + unsigned int temp_fmt = fmt; > > if (mcbsp_data->configured) > return 0; > @@ -317,6 +318,8 @@ static int omap_mcbsp_dai_set_dai_fmt(struct > snd_soc_dai *cpu_dai, /* 0-bit data delay */ > regs->rcr2 |= RDATDLY(0); > regs->xcr2 |= XDATDLY(0); > + /* Invert bit clock and FS polarity configuration */ > + temp_fmt ^= SND_SOC_DAIFMT_IB_IF; > break; > default: > /* Unsupported data format */ > @@ -340,7 +343,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct > snd_soc_dai *cpu_dai, } > > /* Set bit clock (CLKX/CLKR) and FS polarities */ > - switch (fmt & SND_SOC_DAIFMT_INV_MASK) { > + switch (temp_fmt & SND_SOC_DAIFMT_INV_MASK) { > case SND_SOC_DAIFMT_NB_NF: > /* > * Normal BCLK + FS. In case of the osk5912 board with tlv320aic32 codec, than you need to configure it like this? snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_IB_NF | /* invert bclk + nor frm */ SND_SOC_DAIFMT_CBM_CFM); Btw, what does: inverted bclk normal bclk inverted frm normal frm actually means? Is it so that it is: inverted bclk: sample is driven on the rising edge, sampled on the falling edge normal bclk: sample is driven on the falling edge, sampled on the rising edge inverted frm: FS is active high normal frm: FS is active low -- Péter ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 11:56 ` Peter Ujfalusi @ 2009-04-14 12:01 ` Mark Brown 0 siblings, 0 replies; 17+ messages in thread From: Mark Brown @ 2009-04-14 12:01 UTC (permalink / raw) To: Peter Ujfalusi Cc: alsa-devel@alsa-project.org, Nikula Jarkko (Nokia-D/Helsinki) On Tue, Apr 14, 2009 at 02:56:49PM +0300, Peter Ujfalusi wrote: > Is it so that it is: > inverted bclk: > sample is driven on the rising edge, sampled on the falling edge > normal bclk: > sample is driven on the falling edge, sampled on the rising edge Yes. > inverted frm: > FS is active high > normal frm: > FS is active low Ish. For DSP mode normal frame means that things are synced of the rising edge of the frame clock so inverted frame should mean the falling edge. Frame clock is allowed to be longer than one BCLK cycle, though it is not normally and some things may need the low limit. ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 11:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula 2009-04-14 11:32 ` Arun KS 2009-04-14 11:56 ` Peter Ujfalusi @ 2009-04-14 12:32 ` Peter Ujfalusi 2009-04-14 12:49 ` Jarkko Nikula 2 siblings, 1 reply; 17+ messages in thread From: Peter Ujfalusi @ 2009-04-14 12:32 UTC (permalink / raw) To: Nikula Jarkko (Nokia-D/Helsinki) Cc: alsa-devel@alsa-project.org, ext Mark Brown On Tuesday 14 April 2009 14:20:04 Nikula Jarkko (Nokia-D/Helsinki) wrote: > On Tue, 14 Apr 2009 12:34:33 +0200 > > "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi@nokia.com> wrote: > > Well, I think the mcbsp module is quite - maybe too - flexible... > > To have the DSP_B mode correctly (for the tvl320aic32 codec used in > > osk5912 board) the FS polarity has to be handled by the mcbsp as it has > > been inverted. If we don't do this, there is no way to have the MSB at > > the correct place (it has to be available when the FS is high). > > > > > > The DSP_A mode can use the FS polarity 'correctly' - as it is. Or we can > > also consider to require to invert the FS polarity, than add 1 bit delay > > for DSP_A mode. > > I meant something like this below integrating your FWID(0) and temp_fmt > from my earlier commit da6320becf31c40b60d4b1dc6b339c9a766b671c so that > SND_SOC_DAIFMT_DSP_B | SND_SOC_DAIFMT_NB_NF will produce correct format. > > I tested this only with Beagle McBSP3 and oscilloscope but I like to verify > it with real codecs as well :-) > > > Jarkko > > diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c > index d6882be..c40ea21 100644 > --- a/sound/soc/omap/omap-mcbsp.c > +++ b/sound/soc/omap/omap-mcbsp.c > @@ -272,7 +272,7 @@ static int omap_mcbsp_dai_hw_params(struct > snd_pcm_substream *substream, break; > case SND_SOC_DAIFMT_DSP_B: > regs->srgr2 |= FPER(wlen * channels - 1); > - regs->srgr1 |= FWID(wlen * channels - 2); > + regs->srgr1 |= FWID(0); > break; > } > > @@ -291,6 +291,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct > snd_soc_dai *cpu_dai, { > struct omap_mcbsp_data *mcbsp_data = to_mcbsp(cpu_dai->private_data); > struct omap_mcbsp_reg_cfg *regs = &mcbsp_data->regs; > + unsigned int temp_fmt = fmt; > > if (mcbsp_data->configured) > return 0; > @@ -317,6 +318,8 @@ static int omap_mcbsp_dai_set_dai_fmt(struct > snd_soc_dai *cpu_dai, /* 0-bit data delay */ > regs->rcr2 |= RDATDLY(0); > regs->xcr2 |= XDATDLY(0); > + /* Invert bit clock and FS polarity configuration */ > + temp_fmt ^= SND_SOC_DAIFMT_IB_IF; Should it be like this instead: + temp_fmt ^= SND_SOC_DAIFMT_NB_IF; We only need to invert the FS polarity and the bclk should stay as it is.. Also should than this modified fmt stored to mcbsp_data->fmt later? > break; > default: > /* Unsupported data format */ > @@ -340,7 +343,7 @@ static int omap_mcbsp_dai_set_dai_fmt(struct > snd_soc_dai *cpu_dai, } > > /* Set bit clock (CLKX/CLKR) and FS polarities */ > - switch (fmt & SND_SOC_DAIFMT_INV_MASK) { > + switch (temp_fmt & SND_SOC_DAIFMT_INV_MASK) { > case SND_SOC_DAIFMT_NB_NF: > /* > * Normal BCLK + FS. -- Péter ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 12:32 ` Peter Ujfalusi @ 2009-04-14 12:49 ` Jarkko Nikula 2009-04-14 13:00 ` Peter Ujfalusi 0 siblings, 1 reply; 17+ messages in thread From: Jarkko Nikula @ 2009-04-14 12:49 UTC (permalink / raw) To: Ujfalusi Peter (Nokia-D/Tampere); +Cc: alsa-devel@alsa-project.org, ext, Brown On Tue, 14 Apr 2009 14:32:30 +0200 "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi@nokia.com> wrote: > Should it be like this instead: > + temp_fmt ^= SND_SOC_DAIFMT_NB_IF; > Absolutely yes, good catch :-) > > We only need to invert the FS polarity and the bclk should stay as it is.. > Also should than this modified fmt stored to mcbsp_data->fmt later? > No since it's used only inside omap_mcbsp_dai_set_dai_fmt to tune polarity for the mode default. That's why there is this temp_fmt variable. Jarkko ^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode 2009-04-14 12:49 ` Jarkko Nikula @ 2009-04-14 13:00 ` Peter Ujfalusi 0 siblings, 0 replies; 17+ messages in thread From: Peter Ujfalusi @ 2009-04-14 13:00 UTC (permalink / raw) To: Nikula Jarkko (Nokia-D/Helsinki) Cc: alsa-devel@alsa-project.org, ext Mark Brown On Tuesday 14 April 2009 15:49:00 Nikula Jarkko (Nokia-D/Helsinki) wrote: > On Tue, 14 Apr 2009 14:32:30 +0200 > > "Ujfalusi Peter (Nokia-D/Tampere)" <peter.ujfalusi@nokia.com> wrote: > > Should it be like this instead: > > + temp_fmt ^= SND_SOC_DAIFMT_NB_IF; > > Absolutely yes, good catch :-) > > > We only need to invert the FS polarity and the bclk should stay as it > > is.. Also should than this modified fmt stored to mcbsp_data->fmt later? > > No since it's used only inside omap_mcbsp_dai_set_dai_fmt to tune polarity > for the mode default. That's why there is this temp_fmt variable. Fair enough. Could you resend the patch? I think this is a good starting point for getting this DSP_A/_B mode right, finally... I'll can than send the DSP_A patch on top of your DSP_B... Than I can resend the TWL4030 four channel patches on top of these ;) > > > Jarkko -- Péter ^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2009-04-14 13:01 UTC | newest] Thread overview: 17+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-04-14 7:45 [PATCH 0/2] ASoC: DSP mode corrections for omap-mcbsp Peter Ujfalusi 2009-04-14 7:45 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Peter Ujfalusi 2009-04-14 7:45 ` [PATCH 2/2] ASoC: omap-mcbsp: Add DSP_A support Peter Ujfalusi 2009-04-14 8:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula 2009-04-14 8:40 ` Peter Ujfalusi 2009-04-14 9:02 ` Jarkko Nikula 2009-04-14 9:31 ` Mark Brown 2009-04-14 10:34 ` Peter Ujfalusi 2009-04-14 10:47 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the?DSP_B mode Mark Brown 2009-04-14 11:20 ` [PATCH 1/2] ASoC: omap-mcbsp: Correct the DSP_B mode Jarkko Nikula 2009-04-14 11:32 ` Arun KS 2009-04-14 12:58 ` Jarkko Nikula 2009-04-14 11:56 ` Peter Ujfalusi 2009-04-14 12:01 ` Mark Brown 2009-04-14 12:32 ` Peter Ujfalusi 2009-04-14 12:49 ` Jarkko Nikula 2009-04-14 13:00 ` Peter Ujfalusi
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.