From: Michael Trimarchi <michael@amarulasolutions.com>
To: Peter Ujfalusi <peter.ujfalusi@ti.com>
Cc: alsa-devel@alsa-project.org, Mark Brown <broonie@kernel.org>,
Liam Girdwood <lgirdwood@gmail.com>,
Jarkko Nikula <jarkko.nikula@bitmer.com>
Subject: Re: [RFC PATCH] ASoC: omap-mcbsp: Add support for highter rate up to 384000
Date: Sat, 10 Aug 2013 09:53:25 +0200 [thread overview]
Message-ID: <20130810075325.GA12316@panicking> (raw)
In-Reply-To: <52047B9F.7040607@ti.com>
Hi Peter
On Fri, Aug 09, 2013 at 08:18:23AM +0300, Peter Ujfalusi wrote:
> On 08/08/2013 02:04 PM, Michael Trimarchi wrote:
> > On Thu, Aug 08, 2013 at 01:51:25PM +0300, Peter Ujfalusi wrote:
> >> On 08/07/2013 09:28 PM, Michael Trimarchi wrote:
> >>> Add support for highter rate up to 384000Khz. There are codecs in the
> >>> market that can play up to this frequency.
> >>> Test was done just with:
> >>>
> >>> #define OMAP_MCBSP_RATES (SNDRV_PCM_RATE_8000_192000)
> >>>
> >>> playing wav file 32bit/192000Khz stereo. Some glitch has observed
> >>> but this should depend on the selected min buffer bytes that was
> >>> left untouched in aplay and in the omap-pcm driver.
> >>>
> >>> Signed-off-by: Michael Trimarchi <michael@amarulasolutions.com>
> >>> ---
> >>> sound/soc/omap/omap-mcbsp.c | 8 +++++++-
> >>> 1 file changed, 7 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/sound/soc/omap/omap-mcbsp.c b/sound/soc/omap/omap-mcbsp.c
> >>> index 7483efb..1e95f6a 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_RATES (SNDRV_PCM_RATE_8000_192000 | \
> >>
> >> I think only this change is enough for what you want to achieve.
> >>
> >>> + SNDRV_PCM_RATE_CONTINUOUS | \
> >>> + SNDRV_PCM_RATE_KNOT)
> >>
> >> The _KNOT is for sure not needed and I would not set the CONTINUOUS either.
> >
> > pcm5102pw is a codec that support 384000 rate so I think that PCM_RATE_KNOT
> > is requested for such rate. Correct?
>
> Yes, looks that way. I had overlooked the 384000 KHz...
>
> >>
> >>>
> >>> #define OMAP_MCBSP_SOC_SINGLE_S16_EXT(xname, xmin, xmax, \
> >>> xhandler_get, xhandler_put) \
> >>> @@ -574,11 +576,15 @@ static struct snd_soc_dai_driver omap_mcbsp_dai = {
> >>> .channels_max = 16,
> >>> .rates = OMAP_MCBSP_RATES,
> >>> .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE,
> >>> + .rate_min = 8000,
> >>> + .rate_max = 384000,
> >>
> >> Why you want to limit the rates here?
> >>
> >
> > I didn't find in the market somenthing up to 384000.
>
> Sure, but it is not correct to say that McBSP supports rates up to 384000.
> McBSP have constraint on the BCLK speed up to 48MHz. So while
> 32bit/stereo/384000 is OK, 32bit/4channel/384000 is not, but
> 16bit/4channel/384000 is again good.
> When McBSP is master we have a check for the clock speed. We might need to
> have similar for McBSP slave mode, but I don't think we are going to hit the
> 48MHz limit anyways.
>
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?
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
next prev parent reply other threads:[~2013-08-10 7:53 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-07 18:28 [RFC PATCH] ASoC: omap-mcbsp: Add support for highter rate up to 384000 Michael Trimarchi
2013-08-08 10:51 ` Peter Ujfalusi
2013-08-08 11:04 ` Michael Trimarchi
2013-08-09 5:18 ` Peter Ujfalusi
2013-08-09 7:43 ` Michael Trimarchi
2013-08-10 7:53 ` Michael Trimarchi [this message]
2013-08-12 15:36 ` Peter Ujfalusi
2013-08-12 15:57 ` Michael Trimarchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20130810075325.GA12316@panicking \
--to=michael@amarulasolutions.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=jarkko.nikula@bitmer.com \
--cc=lgirdwood@gmail.com \
--cc=peter.ujfalusi@ti.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox