On Thu, Apr 28, 2011 2:01 PM, Jassi Brar <jassisinghbrar@xxxxxxxxx> wrote: > Subject: Re: [alsa-devel] [PATCH V2] ASoC: SAMSUNG: Add quirk to support > Exynos4 PCM audio > > On Thu, Apr 28, 2011 at 6:53 AM, Sangbeom Kim <sbkim73@xxxxxxxxxxx> wrote: > > Exynos4 pcm block is different from previous one. > > Unlike previous one, Exynos4 doesn't have SCLK divider in the pcm block. > > For this reason, This patch added quirk handling for Exynos4 pcm cpu > driver. > > > > Signed-off-by: Sangbeom Kim <sbkim73@xxxxxxxxxxx> > > --- > > sound/soc/samsung/pcm.c | 46 +++++++++++++++++++++++++++++----------- > ------ > > 1 files changed, 29 insertions(+), 17 deletions(-) > > > > diff --git a/sound/soc/samsung/pcm.c b/sound/soc/samsung/pcm.c > > index 9c7e8b4..adfb251 100644 > > --- a/sound/soc/samsung/pcm.c > > +++ b/sound/soc/samsung/pcm.c > > @@ -10,7 +10,6 @@ > > * it under the terms of the GNU General Public License version 2 as > > * published by the Free Software Foundation. > > */ > > - > > #include <linux/clk.h> > > #include <linux/io.h> > > > > @@ -128,6 +127,7 @@ struct s3c_pcm_info { > > > > struct s3c_dma_params *dma_playback; > > struct s3c_dma_params *dma_capture; > > + u32 quirks; > > }; > > > > static struct s3c2410_dma_client s3c_pcm_dma_client_out = { > > @@ -278,7 +278,7 @@ static int s3c_pcm_hw_params(struct > snd_pcm_substream *substream, > > struct clk *clk; > > int sclk_div, sync_div; > > unsigned long flags; > > - u32 clkctl; > > + u32 clkctl = 0; > > > > dev_dbg(pcm->dev, "Entered %s\n", __func__); > > > > @@ -299,25 +299,34 @@ static int s3c_pcm_hw_params(struct > snd_pcm_substream *substream, > > > > spin_lock_irqsave(&pcm->lock, flags); > > > > - /* Get hold of the PCMSOURCE_CLK */ > > - clkctl = readl(regs + S3C_PCM_CLKCTL); > > - if (clkctl & S3C_PCM_CLKCTL_SERCLKSEL_PCLK) > > - clk = pcm->pclk; > > - else > > + if (pcm->quirks == QUIRK_NO_DIV) { > > clk = pcm->cclk; > > + if (clk_get_rate(clk) != (pcm- > >sclk_per_fs*params_rate(params))) { > > + clk_set_rate(clk, pcm- > >sclk_per_fs*params_rate(params)); > > + } > > + sync_div = clk_get_rate(clk)/(params_rate(params))-1; > > + } > > + else { > > + /* Get hold of the PCMSOURCE_CLK */ > > + clkctl = readl(regs + S3C_PCM_CLKCTL); > > + if (clkctl & S3C_PCM_CLKCTL_SERCLKSEL_PCLK) > > + clk = pcm->pclk; > > + else > > + clk = pcm->cclk; > > > > - /* Set the SCLK divider */ > > - sclk_div = clk_get_rate(clk) / pcm->sclk_per_fs / > > - params_rate(params) / 2 - 1; > > + /* Set the SCLK divider */ > > + sclk_div = clk_get_rate(clk) / pcm->sclk_per_fs / > > + params_rate(params) / 2 - 1; > > > > - clkctl &= ~(S3C_PCM_CLKCTL_SCLKDIV_MASK > > - << S3C_PCM_CLKCTL_SCLKDIV_SHIFT); > > - clkctl |= ((sclk_div & S3C_PCM_CLKCTL_SCLKDIV_MASK) > > - << S3C_PCM_CLKCTL_SCLKDIV_SHIFT); > > + clkctl &= ~(S3C_PCM_CLKCTL_SCLKDIV_MASK > > + << S3C_PCM_CLKCTL_SCLKDIV_SHIFT); > > + clkctl |= ((sclk_div & S3C_PCM_CLKCTL_SCLKDIV_MASK) > > + << S3C_PCM_CLKCTL_SCLKDIV_SHIFT); > > > > - /* Set the SYNC divider */ > > - sync_div = pcm->sclk_per_fs - 1; > > + sync_div = pcm->sclk_per_fs - 1; > > + } > > > > + /* Set the SYNC divider */ > > clkctl &= ~(S3C_PCM_CLKCTL_SYNCDIV_MASK > > << S3C_PCM_CLKCTL_SYNCDIV_SHIFT); > > clkctl |= ((sync_div & S3C_PCM_CLKCTL_SYNCDIV_MASK) > > @@ -330,7 +339,6 @@ static int s3c_pcm_hw_params(struct > snd_pcm_substream *substream, > > dev_dbg(pcm->dev, "PCMSOURCE_CLK-%lu SCLK=%ufs SCLK_DIV=%d > SYNC_DIV=%d\n", > > clk_get_rate(clk), pcm->sclk_per_fs, > > sclk_div, sync_div); > > - > > return 0; > > } > > > > @@ -494,6 +502,7 @@ static __devinit int s3c_pcm_dev_probe(struct > platform_device *pdev) > > struct s3c_pcm_info *pcm; > > struct resource *mem_res, *dmatx_res, *dmarx_res; > > struct s3c_audio_pdata *pcm_pdata; > > + struct samsung_i2s *pcm_cfg; > > Oh dear, perhaps you forgot to test before sending ? I did test and PCM working is fine on SMDKV310 and SMDKV210. But It was my mistake. samsung_i2s was used unintentionally. I will resubmit it. Thanks, > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@xxxxxxxxxxxxxxxx > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html