Hi Kevin,
first of all thanks for your reply.

I'm very happy to see a feedback.

2010/6/22 Kevin Hilman <khil...@deeprootsystems.com>

> Raffaele Recalcati <lamiapost...@gmail.com> writes:
>
> > From: Raffaele Recalcati <raffaele.recalc...@bticino.it>
> >
> >        - Frame Sync master and Clock master (internally generated)
> >        - Frame Sync master and Clock slave
> >
> > Signed-off-by: Raffaele Recalcati <raffaele.recalc...@bticino.it>
> > Signed-off-by: Davide Bonfanti <davide.bonfa...@bticino.it>
> > ---
>
> First, some general comments on your series.
>
> 1) Grouping patches together in series is usually done to suggest
> interdependencies, or that all the patches go together towards a
> single problem/feature etc.  Your current series combines multiple
> patches, most of which are independent and most of which need to go
> upstream through different subsytems.
>

It will be done.


>
> For example, the audio/asoc patches go upstream through the ASoC
> maintainers, and the SPI, touchscreen, mfd, MTD drivers all have
> different subsystems and maintainers.
>
> The only thing that gets merged directly through me and the davinci
> git tree are changes to arch/arm/mach-davinci/*.
>

> So, I suggest you break this up into patches that are per-subsytem.
> In other words, one patch/series for arch/arm/mach-davinci/* another
> for audio, another for video, etc.
>

Ok, but what about sound/soc/davinci and similar directories?
Anyway ... the patches are sent also to davinci mailing list and you can see
them.


>
> To find out the right mailing lists for each of these subsystems,
> please consult the MAINTAINERS file.  A really useful tool is the
> scripts/get_maintainer.pl script.  Running that on a patch will
> suggest the right audience for that patch using the MAINTAINERS file.
> Since I gathered you're now using git-send-email, you can use this script
> in combination with git-send-email's --cc-cmd option.  e.g.
>
>   git-send-email --to <davinci list> --cc-cmd=scripts/get_maintainer.pl [...]
>
> will automatically add the right folks to the Cc: line of the emails
> sent by git-send-email.
>
> 2) For each series, please be sure to state what tree the patches
> were generated against, and on what platforms they were tested.
>

I will write for example:
The patch has been created against
http://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci.git
and checked with bmx dm365 board (similar to evm dm365).


> 3) Please add descriptive changelogs to each patch.  The changelog
>   should describe the problem being addressed, the solution and
>   why.
>

It will be done.


>
> Some other comments below on this patch...
>
> >  sound/soc/davinci/davinci-i2s.c |  120
> +++++++++++++++++++++++++++++++++++---
> >  1 files changed, 110 insertions(+), 10 deletions(-)
> >
> > diff --git a/sound/soc/davinci/davinci-i2s.c
> b/sound/soc/davinci/davinci-i2s.c
> > index adadcd3..620f977 100644
> > --- a/sound/soc/davinci/davinci-i2s.c
> > +++ b/sound/soc/davinci/davinci-i2s.c
> > @@ -68,16 +68,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 +96,13 @@
> >  #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
> > + */
> > +#define I2S_FAST_CLOCK
> > +
> >  enum {
> >       DAVINCI_MCBSP_WORD_8 = 0,
> >       DAVINCI_MCBSP_WORD_12,
> > @@ -146,6 +160,13 @@ struct davinci_mcbsp_dev {
> >       unsigned enable_channel_combine:1;
> >  };
> >
> > +struct davinci_mcbsp_data {
> > +     unsigned int    fmt;
>
> this indent is a tab (as it should be)
>
> > +    int             clk_div;
>
> and this is spaces.  Please use tabs throughout.
>

I had a checkpatch false positive.
I have fixed it sending this patch to its mantainers.
Sorry, but this mail client (gmail with webmail) converts tabs in spaces so
the following patch
is not directly usable.

diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl
index a4d7434..315a827 100755
--- a/scripts/checkpatch.pl
+++ b/scripts/checkpatch.pl
@@ -1433,6 +1433,13 @@ sub process {
                        WARN("please, no space before tabs\n" . $herevet);
                }

+# check for spaces at the beginning of a line.
+               if ($rawline =~ /^\+ / && $rawline !~ /\+ +\*/)  {
+                       my $herevet = "$here\n" . cat_vet($rawline) . "\n";
+                       WARN("please, no space for starting a line, \
+                               excluding comments\n" . $herevet);
+               }
+
 # check we are in a valid C source file if not then ignore this hunk
                next if ($realfile !~ /\.(h|c)$/);




> > +};
> > +
> > +static struct davinci_mcbsp_data mcbsp_data;
> > +
> >  static inline void davinci_mcbsp_write_reg(struct davinci_mcbsp_dev
> *dev,
> >                                          int reg, u32 val)
> >  {
> > @@ -257,9 +278,12 @@ static int davinci_i2s_set_dai_fmt(struct
> snd_soc_dai *cpu_dai,
> >       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 |
> > @@ -372,6 +396,17 @@ 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;
> > +    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 +415,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 +432,53 @@ 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");
> > +             if (clk)
> > +                     freq = clk_get_rate(clk);
> > +             freq = 122000000; /* FIXME ask to Texas */
> > +#ifdef I2S_FAST_CLOCK
> > +             clk_div = 256;
> > +             do {
> > +                     framesize = (freq / (--clk_div)) / params->rate_num
> * \
> > +                             params->rate_den;
> > +             } while (((framesize < 33) || (framesize > 4095)) &&
> (clk_div));
> > +             clk_div--;
> > +             srgr = DAVINCI_MCBSP_SRGR_FSGM | DAVINCI_MCBSP_SRGR_CLKSM;
> > +             srgr |= DAVINCI_MCBSP_SRGR_FWID(mcbsp_word_length*8-1);
> > +             srgr |= DAVINCI_MCBSP_SRGR_FPER(framesize - 1);
> > +#else
> > +             /* simmetric waveforms */
> > +             srgr = DAVINCI_MCBSP_SRGR_FSGM | DAVINCI_MCBSP_SRGR_CLKSM;
> > +             srgr |= DAVINCI_MCBSP_SRGR_FWID(mcbsp_word_length * 8 - 1);
> > +             srgr |= DAVINCI_MCBSP_SRGR_FPER(mcbsp_word_length * 16 -
> 1);
> > +             clk_div = freq / (mcbsp_word_length * 16) /
> params->rate_num * \
> > +                     params->rate_den;
> > +#endif
>
> These optional features are better done using run-time decisions based
> on optional flags passed in from board files instead of compile-time
> decisions using #ifdef.
>


Done.



> > +             clk_div &= 0xFF;
> > +             srgr |= clk_div;
> > +     } else if (master == SND_SOC_DAIFMT_CBS_CFM) {
> > +             /* Clock given on CLKS */
> > +             srgr = DAVINCI_MCBSP_SRGR_FSGM;
> > +             clk_div = mcbsp_data.clk_div - 1;
> > +             srgr |= DAVINCI_MCBSP_SRGR_FWID(mcbsp_word_length * 8 - 1);
> > +             srgr |= DAVINCI_MCBSP_SRGR_FPER(mcbsp_word_length * 16 -
> 1);
> > +             clk_div &= 0xFF;
> > +             srgr |= clk_div;
> > +     } else {
> > +             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);
> > +             pr_debug("%s - %d  FWID set: re-read srgr = %X\n",
> > +                     __func__, __LINE__, snd_interval_value(i) - 1);
> > +
> > +             i = hw_param_interval(params,
> SNDRV_PCM_HW_PARAM_FRAME_BITS);
> > +             srgr |= DAVINCI_MCBSP_SRGR_FPER(snd_interval_value(i) - 1);
> > +     }
> >       davinci_mcbsp_write_reg(dev, DAVINCI_MCBSP_SRGR_REG, srgr);
> >
> >       rcr = DAVINCI_MCBSP_RCR_RFIG;
> > @@ -426,12 +503,31 @@ static int davinci_i2s_hw_params(struct
> snd_pcm_substream *substream,
> >                       element_cnt = 1;
> >                       fmt = double_fmt[fmt];
> >               }
> > +             if (master == SND_SOC_DAIFMT_CBS_CFS ||
> > +                             master == SND_SOC_DAIFMT_CBS_CFM) {
> > +                     rcr |= DAVINCI_MCBSP_RCR_RFRLEN2(0);
> > +                     xcr |= DAVINCI_MCBSP_XCR_XFRLEN2(0);
> > +                     rcr |= DAVINCI_MCBSP_RCR_RPHASE;
> > +                     xcr |= DAVINCI_MCBSP_XCR_XPHASE;
> > +             } else {
> > +                     /* FIXME ask to Texas */
> > +                 rcr |= DAVINCI_MCBSP_RCR_RFRLEN2(element_cnt - 1);
> > +                     xcr |= DAVINCI_MCBSP_XCR_XFRLEN2(element_cnt - 1);
> > +             }
> >       }
> >       dma_params->acnt = dma_params->data_type = data_type[fmt];
> >       dma_params->fifo_level = 0;
> >       mcbsp_word_length = asp_word_length[fmt];
> > -     rcr |= DAVINCI_MCBSP_RCR_RFRLEN1(element_cnt - 1);
> > -     xcr |= DAVINCI_MCBSP_XCR_XFRLEN1(element_cnt - 1);
> > +
> > +     if (master == SND_SOC_DAIFMT_CBS_CFS ||
> > +                     master == SND_SOC_DAIFMT_CBS_CFM) {
> > +             rcr |= DAVINCI_MCBSP_RCR_RFRLEN1(0);
> > +             xcr |= DAVINCI_MCBSP_XCR_XFRLEN1(0);
> > +     } else {
> > +             /* FIXME ask to Texas */
> > +             rcr |= DAVINCI_MCBSP_RCR_RFRLEN1(element_cnt - 1);
> > +             xcr |= DAVINCI_MCBSP_XCR_XFRLEN1(element_cnt - 1);
> > +     }
> >
> >       rcr |= DAVINCI_MCBSP_RCR_RWDLEN1(mcbsp_word_length) |
> >               DAVINCI_MCBSP_RCR_RWDLEN2(mcbsp_word_length);
> > @@ -442,6 +538,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);
> >       return 0;
> >  }
> >
> > @@ -500,7 +600,7 @@ static struct snd_soc_dai_ops davinci_i2s_dai_ops = {
> >       .trigger        = davinci_i2s_trigger,
> >       .hw_params      = davinci_i2s_hw_params,
> >       .set_fmt        = davinci_i2s_set_dai_fmt,
> > -
> > +     .set_clkdiv = davinci_i2s_dai_set_clkdiv,
>
> please keep alignment
>

I hope to have correctly understood alignment rules...
:)
Raffaele

P.S.
The davinci-i2s patch is going to be sent in a couple of minutes.



> Kevin
>
> >  };
> >
> >  struct snd_soc_dai davinci_i2s_dai = {
> > --
> > 1.7.0.4
> >
> > _______________________________________________
> > Davinci-linux-open-source mailing list
> > Davinci-linux-open-source@linux.davincidsp.com
> > http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
>





-- 
www.opensurf.it
_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to