Hello.

Raffaele Recalcati wrote:

From: Raffaele Recalcati <[email protected] <mailto:[email protected]>>

   I think "mailto:"; should be omitted.

Date: Thu, 3 Jun 2010 14:40:05 +0200
Subject: [PATCH 01/12] ASoC: DaVinci: Added support for stereo I2S

     - Frame Sync master and Clock master (internally generated)
     - Frame Sync master and Clock slave

Signed-off-by: Davide Bonfanti <[email protected]

   Where's your own signoff? Is it your patch or Davide's?

<mailto:[email protected]>>

   Same about "mailto:";...

---
sound/soc/davinci/davinci-i2s.c | 137 ++++++++++++++++++++++++++++++++++-----
 1 files changed, 121 insertions(+), 16 deletions(-)

diff --git a/sound/soc/davinci/davinci-i2s.c b/sound/soc/davinci/davinci-i2s.c
index adadcd3..c1281c5 100644
--- a/sound/soc/davinci/davinci-i2s.c
+++ b/sound/soc/davinci/davinci-i2s.c
@@ -9,6 +9,8 @@
  * published by the Free Software Foundation.
  */
+#define DEBUG 3
+
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/device.h>
@@ -68,16 +70,23 @@
 #define DAVINCI_MCBSP_RCR_RDATDLY(v)    ((v) << 16)
 #define DAVINCI_MCBSP_RCR_RFIG        (1 << 18)
 #define DAVINCI_MCBSP_RCR_RWDLEN2(v)    ((v) << 21)
+#define DAVINCI_MCBSP_RCR_RFRLEN2(v)    ((v) << 24)
+#define DAVINCI_MCBSP_RCR_RPHASE        (1 << 31)
#define DAVINCI_MCBSP_XCR_XWDLEN1(v) ((v) << 5)
 #define DAVINCI_MCBSP_XCR_XFRLEN1(v)    ((v) << 8)
 #define DAVINCI_MCBSP_XCR_XDATDLY(v)    ((v) << 16)
 #define DAVINCI_MCBSP_XCR_XFIG        (1 << 18)
 #define DAVINCI_MCBSP_XCR_XWDLEN2(v)    ((v) << 21)
+#define DAVINCI_MCBSP_XCR_XFRLEN2(v)    ((v) << 24)
+#define DAVINCI_MCBSP_XCR_XPHASE    (1 << 31)
+
+#define CLKGDV(v) (v) /* Bits 0:7 */
 #define DAVINCI_MCBSP_SRGR_FWID(v)    ((v) << 8)
 #define DAVINCI_MCBSP_SRGR_FPER(v)    ((v) << 16)
 #define DAVINCI_MCBSP_SRGR_FSGM        (1 << 28)
+#define DAVINCI_MCBSP_SRGR_CLKSM    (1 << 29)
#define DAVINCI_MCBSP_PCR_CLKRP (1 << 0)
 #define DAVINCI_MCBSP_PCR_CLKXP        (1 << 1)
@@ -89,6 +98,11 @@
 #define DAVINCI_MCBSP_PCR_FSRM        (1 << 10)
 #define DAVINCI_MCBSP_PCR_FSXM        (1 << 11)
+/* this define works when both clock and FS are output for the cpu
+   and makes clock very fast (FS is not simmetrical, but sampling
+   frequency is better approximated */

See chapter 8 of the Documentation/CodingStyle for the preferrable style of multi-line comments, it should be:

/*
 * blah
 * blah
 */

@@ -146,6 +160,14 @@ struct davinci_mcbsp_dev {
     unsigned enable_channel_combine:1;
 };
+struct davinci_mcbsp_data {
+    unsigned int    fmt;
+    int             clk_div;
+};
+
+static struct davinci_mcbsp_data mcbsp_data;
+
+

   Extra newline?

 static inline void davinci_mcbsp_write_reg(struct davinci_mcbsp_dev *dev,
                        int reg, u32 val)
 {
@@ -197,7 +219,7 @@ static void davinci_mcbsp_start(struct davinci_mcbsp_dev *dev,
             int ret = platform->pcm_ops->trigger(substream,
                 SNDRV_PCM_TRIGGER_STOP);
             if (ret < 0)
-                printk(KERN_DEBUG "Playback DMA stop failed\n");
+                pr_debug("Playback DMA stop failed\n");
         }
/* Enable the transmitter */

Your mailer has converted all tabes to spaces. Patches can't be applied until you dealt with this and resend.

@@ -219,7 +241,7 @@ static void davinci_mcbsp_start(struct davinci_mcbsp_dev *dev,
             int ret = platform->pcm_ops->trigger(substream,
                 SNDRV_PCM_TRIGGER_START);
             if (ret < 0)
-                printk(KERN_DEBUG "Playback DMA start failed\n");
+                pr_debug("Playback DMA start failed\n");

   Unrelated change.

         }
     }
@@ -254,12 +276,15 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
     struct davinci_mcbsp_dev *dev = cpu_dai->private_data;
     unsigned int pcr;
     unsigned int srgr;
-    srgr = DAVINCI_MCBSP_SRGR_FSGM |
+    srgr = DAVINCI_MCBSP_SRGR_FSGM |
         DAVINCI_MCBSP_SRGR_FPER(DEFAULT_BITPERSAMPLE * 2 - 1) |
         DAVINCI_MCBSP_SRGR_FWID(DEFAULT_BITPERSAMPLE - 1);
+    /* Attention srgr is updated by hw_params! */
+ mcbsp_data.fmt = fmt;
     /* set master/slave audio interface */
     switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) {
+    case SND_SOC_DAIFMT_CBS_CFM:
     case SND_SOC_DAIFMT_CBS_CFS:
         /* cpu is master */
         pcr = DAVINCI_MCBSP_PCR_FSXM |
@@ -279,7 +304,7 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
         pcr = 0;
         break;
     default:
-        printk(KERN_ERR "%s:bad master\n", __func__);
+        dev_err(dev, "%s:bad master\n", __func__);

   Unrelated change.

@@ -310,7 +335,7 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
         dev->mode = MOD_DSP_B;
         break;
     default:
-        printk(KERN_ERR "%s:bad format\n", __func__);
+        dev_err(dev, "%s:bad format\n", __func__);

   ... and again.

         return -EINVAL;
     }
@@ -372,6 +397,25 @@ static int davinci_i2s_set_dai_fmt(struct snd_soc_dai *cpu_dai,
     return 0;
 }
+static int davinci_i2s_dai_set_clkdiv (struct snd_soc_dai *cpu_dai,
+                     int div_id, int div)
+{
+    struct davinci_mcbsp_dev *dev = cpu_dai->private_data;
+    int srgr;
+
+    mcbsp_data.clk_div = div;
+/* register set in hw_params: not needed here

   Don't include it then.

+    srgr = davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_SRGR_REG);
+    srgr |= CLKGDV(div - 1);
+    davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_SRGR_REG, srgr);
+    pr_debug("%s - %d  DIV set re-read srgr = %X \n",
+ __func__,__LINE__, davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_SRGR_REG));

   Your mailer has also line-wrapped the patch.

+*/
+
+    return 0;
+}
+
+
 static int davinci_i2s_hw_params(struct snd_pcm_substream *substream,
                  struct snd_pcm_hw_params *params,
                  struct snd_soc_dai *dai)
@@ -380,11 +424,12 @@ static int davinci_i2s_hw_params(struct snd_pcm_substream *substream,
     struct davinci_pcm_dma_params *dma_params =
                     &dev->dma_params[substream->stream];
     struct snd_interval *i = NULL;
-    int mcbsp_word_length;
-    unsigned int rcr, xcr, srgr;
+    int mcbsp_word_length, master;
+    unsigned int rcr, xcr, srgr, clk_div, freq, framesize;
     u32 spcr;
     snd_pcm_format_t fmt;
     unsigned element_cnt = 1;
+    struct clk *clk;
/* general line settings */
     spcr = davinci_mcbsp_read_reg(dev, DAVINCI_MCBSP_SPCR_REG);
@@ -396,12 +441,51 @@ static int davinci_i2s_hw_params(struct snd_pcm_substream *substream,
         davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_SPCR_REG, spcr);
     }
- i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_SAMPLE_BITS);
-    srgr = DAVINCI_MCBSP_SRGR_FSGM;
-    srgr |= DAVINCI_MCBSP_SRGR_FWID(snd_interval_value(i) - 1);
+    master = mcbsp_data.fmt & SND_SOC_DAIFMT_MASTER_MASK;
+    fmt = params_format(params);
+    mcbsp_word_length = asp_word_length[fmt];
- i = hw_param_interval(params, SNDRV_PCM_HW_PARAM_FRAME_BITS);
-    srgr |= DAVINCI_MCBSP_SRGR_FPER(snd_interval_value(i) - 1);
+    if (master == SND_SOC_DAIFMT_CBS_CFS) {
+        clk = clk_get(NULL, "pll1_sysclk6");//"pll1");
+        if (clk)
+            freq = clk_get_rate(clk);
+        freq = 122000000; /* FIXME ask to Texas */
+#ifdef I2S_FAST_CLOCK
+        clk_div=256;

  Put spaces before and after =, please.

@@ -416,7 +500,7 @@ static int davinci_i2s_hw_params(struct snd_pcm_substream *substream,
     /* Determine xfer data type */
     fmt = params_format(params);
     if ((fmt > SNDRV_PCM_FORMAT_S32_LE) || !data_type[fmt]) {
-        printk(KERN_WARNING "davinci-i2s: unsupported PCM format\n");
+        dev_warn(dev, "davinci-i2s: unsupported PCM format\n");

   Unrelated change.

@@ -442,6 +543,10 @@ static int davinci_i2s_hw_params(struct snd_pcm_substream *substream,
         davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_XCR_REG, xcr);
     else
         davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_RCR_REG, rcr);
+
+    pr_debug("%s - %d  srgr=%X \n",__func__,__LINE__, srgr );
+    pr_debug("%s - %d  xcr=%X \n",__func__,__LINE__, xcr );
+    pr_debug("%s - %d  rcr=%X \n",__func__,__LINE__, rcr );

Remove spaces before ). Run your patches thru scripts/checkpatch.pl before submitting.

WBR, Sergei

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to