RE: [PATCH v2] ASoC: fsl-sai: convert to use regmap API for Freeacale SAI

2014-02-10 Thread li.xi...@freescale.com


> Subject: Re: [PATCH v2] ASoC: fsl-sai: convert to use regmap API for Freeacale
> SAI
> 
> On Sat, Feb 08, 2014 at 02:38:28PM +0800, Xiubo Li wrote:
> > Signed-off-by: Xiubo Li 
> 
> Applied, thanks but I think this needs a select of REGMAP_MMIO in the
> Kconfig to ensure that regmap-mmio is actually there (it might well be
> OK due to implicit dependencies at the minute but should be fixed
> properly).

Yes, I will send another patch to fix it.

Thanks,

--
Best Regards,
Xiubo

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH v2] ASoC: fsl-sai: convert to use regmap API for Freeacale SAI

2014-02-10 Thread Mark Brown
On Sat, Feb 08, 2014 at 02:38:28PM +0800, Xiubo Li wrote:
> Signed-off-by: Xiubo Li 

Applied, thanks but I think this needs a select of REGMAP_MMIO in the
Kconfig to ensure that regmap-mmio is actually there (it might well be
OK due to implicit dependencies at the minute but should be fixed
properly).


signature.asc
Description: Digital signature


[PATCH v2] ASoC: fsl-sai: convert to use regmap API for Freeacale SAI

2014-02-07 Thread Xiubo Li
Signed-off-by: Xiubo Li 
Cc: Nicolin Chen 
---

This version applies against sound-3.14-rc1.


 sound/soc/fsl/fsl_sai.c | 255 +++-
 sound/soc/fsl/fsl_sai.h |  47 +
 2 files changed, 166 insertions(+), 136 deletions(-)

diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c
index cdd3fa8..faa65af 100644
--- a/sound/soc/fsl/fsl_sai.c
+++ b/sound/soc/fsl/fsl_sai.c
@@ -15,6 +15,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -22,34 +23,6 @@
 
 #include "fsl_sai.h"
 
-static inline u32 sai_readl(struct fsl_sai *sai,
-   const void __iomem *addr)
-{
-   u32 val;
-
-   val = __raw_readl(addr);
-
-   if (likely(sai->big_endian_regs))
-   val = be32_to_cpu(val);
-   else
-   val = le32_to_cpu(val);
-   rmb();
-
-   return val;
-}
-
-static inline void sai_writel(struct fsl_sai *sai,
-   u32 val, void __iomem *addr)
-{
-   wmb();
-   if (likely(sai->big_endian_regs))
-   val = cpu_to_be32(val);
-   else
-   val = cpu_to_le32(val);
-
-   __raw_writel(val, addr);
-}
-
 static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai *cpu_dai,
int clk_id, unsigned int freq, int fsl_dir)
 {
@@ -61,7 +34,8 @@ static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai 
*cpu_dai,
else
reg_cr2 = FSL_SAI_RCR2;
 
-   val_cr2 = sai_readl(sai, sai->base + reg_cr2);
+   regmap_read(sai->regmap, reg_cr2, &val_cr2);
+
val_cr2 &= ~FSL_SAI_CR2_MSEL_MASK;
 
switch (clk_id) {
@@ -81,7 +55,7 @@ static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai 
*cpu_dai,
return -EINVAL;
}
 
-   sai_writel(sai, val_cr2, sai->base + reg_cr2);
+   regmap_write(sai->regmap, reg_cr2, val_cr2);
 
return 0;
 }
@@ -89,32 +63,22 @@ static int fsl_sai_set_dai_sysclk_tr(struct snd_soc_dai 
*cpu_dai,
 static int fsl_sai_set_dai_sysclk(struct snd_soc_dai *cpu_dai,
int clk_id, unsigned int freq, int dir)
 {
-   struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai);
int ret;
 
if (dir == SND_SOC_CLOCK_IN)
return 0;
 
-   ret = clk_prepare_enable(sai->clk);
-   if (ret)
-   return ret;
-
ret = fsl_sai_set_dai_sysclk_tr(cpu_dai, clk_id, freq,
FSL_FMT_TRANSMITTER);
if (ret) {
dev_err(cpu_dai->dev, "Cannot set tx sysclk: %d\n", ret);
-   goto err_clk;
+   return ret;
}
 
ret = fsl_sai_set_dai_sysclk_tr(cpu_dai, clk_id, freq,
FSL_FMT_RECEIVER);
-   if (ret) {
+   if (ret)
dev_err(cpu_dai->dev, "Cannot set rx sysclk: %d\n", ret);
-   goto err_clk;
-   }
-
-err_clk:
-   clk_disable_unprepare(sai->clk);
 
return ret;
 }
@@ -133,8 +97,8 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai 
*cpu_dai,
reg_cr4 = FSL_SAI_RCR4;
}
 
-   val_cr2 = sai_readl(sai, sai->base + reg_cr2);
-   val_cr4 = sai_readl(sai, sai->base + reg_cr4);
+   regmap_read(sai->regmap, reg_cr2, &val_cr2);
+   regmap_read(sai->regmap, reg_cr4, &val_cr4);
 
if (sai->big_endian_data)
val_cr4 &= ~FSL_SAI_CR4_MF;
@@ -183,35 +147,25 @@ static int fsl_sai_set_dai_fmt_tr(struct snd_soc_dai 
*cpu_dai,
return -EINVAL;
}
 
-   sai_writel(sai, val_cr2, sai->base + reg_cr2);
-   sai_writel(sai, val_cr4, sai->base + reg_cr4);
+   regmap_write(sai->regmap, reg_cr2, val_cr2);
+   regmap_write(sai->regmap, reg_cr4, val_cr4);
 
return 0;
 }
 
 static int fsl_sai_set_dai_fmt(struct snd_soc_dai *cpu_dai, unsigned int fmt)
 {
-   struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai);
int ret;
 
-   ret = clk_prepare_enable(sai->clk);
-   if (ret)
-   return ret;
-
ret = fsl_sai_set_dai_fmt_tr(cpu_dai, fmt, FSL_FMT_TRANSMITTER);
if (ret) {
dev_err(cpu_dai->dev, "Cannot set tx format: %d\n", ret);
-   goto err_clk;
+   return ret;
}
 
ret = fsl_sai_set_dai_fmt_tr(cpu_dai, fmt, FSL_FMT_RECEIVER);
-   if (ret) {
+   if (ret)
dev_err(cpu_dai->dev, "Cannot set rx format: %d\n", ret);
-   goto err_clk;
-   }
-
-err_clk:
-   clk_disable_unprepare(sai->clk);
 
return ret;
 }
@@ -235,11 +189,12 @@ static int fsl_sai_hw_params(struct snd_pcm_substream 
*substream,
reg_mr = FSL_SAI_RMR;
}
 
-   val_cr4 = sai_readl(sai, sai->base + reg_cr4);
+   regmap_read(sai->regmap, reg_cr4, &val_cr4);
+   regmap_read(sai->regmap, reg_cr4, &val_cr5);
+
val_cr4 &= ~FSL_SAI_CR4_SYWD_MASK;
val_cr4 &= ~FSL_SAI_CR4_FRSZ_MASK;
 
-   val_cr5 = sai_readl(sai, sai->b