All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dong Aisheng-B29396 <B29396@freescale.com>
To: Mark Brown <broonie@opensource.wolfsonmicro.com>
Cc: "alsa-devel@alsa-project.org" <alsa-devel@alsa-project.org>,
	"u.kleine-koenig@pengutronix.de" <u.kleine-koenig@pengutronix.de>,
	"s.hauer@pengutronix.de" <s.hauer@pengutronix.de>,
	"linux-arm-kernel@lists.infradead.org"
	<linux-arm-kernel@lists.infradead.org>, "lrg@ti.com" <lrg@ti.com>
Subject: Re: [PATCH V2 02/10] ASoc: mxs: add mxs-saif driver
Date: Thu, 14 Jul 2011 10:39:13 +0000	[thread overview]
Message-ID: <65EE16ACC360FA4D99C96DC085B3F7721CE875@039-SN1MPN1-002.039d.mgd.msft.net> (raw)
In-Reply-To: <20110714030633.GA11559@opensource.wolfsonmicro.com>


> -----Original Message-----
> From: Mark Brown [mailto:broonie@opensource.wolfsonmicro.com]
> Sent: Thursday, July 14, 2011 11:07 AM
> To: Dong Aisheng-B29396
> Cc: alsa-devel@alsa-project.org; s.hauer@pengutronix.de; lrg@ti.com;
> linux-arm-kernel@lists.infradead.org; u.kleine-koenig@pengutronix.de
> Subject: Re: [alsa-devel] [PATCH V2 02/10] ASoc: mxs: add mxs-saif driver
> 
> On Wed, Jul 13, 2011 at 08:14:09AM +0000, Dong Aisheng-B29396 wrote:
> 
> > > What if MCLK is not set corectly for some reason?  We'll just
> > > silently do nothing.
> 
> > We will just return an error if MCLK is not correct (not 32x or 48x).
> >         /* SAIF MCLK should be either 32*fs or 48*fs */
> >         if (saif->mclk_in_use && (mclk % 32 != 0) && (mclk % 48 != 0))
> >                 return -EINVAL;
> > Machine driver should guarantee to set a correct value since it's HW
> limitation.
> > Is that ok?
> 
> Please fix the code so you only check if the ratio is valid in one place,
> the code currently is too hard to read.

Hi Mark,

So far, thanks a lot for your kindly review.
I removed the duplicated checking as you indicated and changed the clk setting
flow a bit(also adding more comments) to try to make it more easy to read.

The code is as follows.
Is it ok for you?
Or you have any better suggestions?

/*
 * Set SAIF clock and MCLK
 */
static int mxs_saif_set_clk(struct mxs_saif *saif,
                                  unsigned int mclk,
                                  unsigned int rate)
{
        u32 scr;
        int ret;

        scr = __raw_readl(saif->base + SAIF_CTRL);
        scr &= ~BM_SAIF_CTRL_BITCLK_MULT_RATE;
        scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;

        /*
         * Set SAIF clock
         *
         * The SAIF clock should be either 384*fs or 512*fs.
         * If MCLK is used, the SAIF clk ratio needs to match mclk ratio.
         *  For 32x mclk, set saif clk as 512*fs.
         *  For 48x mclk, set saif clk as 384*fs.
         *
         * If MCLK is not used, we just set saif clk to 512*fs.
         */
        if (saif->mclk_in_use) {
                if (mclk % 32 == 0) {
                        scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
                        ret = clk_set_rate(saif->clk, 512 * rate);
                } else if (mclk % 48 == 0) {
                        scr |= BM_SAIF_CTRL_BITCLK_BASE_RATE;
                        ret = clk_set_rate(saif->clk, 384 * rate);
                } else {
                        /* SAIF MCLK should be either 32x or 48x */
                        return -EINVAL;
                }
        } else {
                ret = clk_set_rate(saif->clk, 512 * rate);
                scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
        }

        if (ret)
                return ret;

        if (!saif->mclk_in_use) {
                __raw_writel(scr, saif->base + SAIF_CTRL);
                return 0;
        }

        /*
         * Program the over-sample rate for MCLK output if used
         *
         * The available MCLK range is 32x, 48x... 512x. The rate
         * could be from 8kHz to 192kH.
         */
        switch (mclk / rate) {
        case 32:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(4);
                break;
        case 64:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(3);
                break;
        case 128:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(2);
                break;
        case 256:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(1);
                break;
        case 512:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(0);
                break;
        case 48:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(3);
                break;
        case 96:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(2);
                break;
        case 192:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(1);
                break;
        case 384:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(0);
                break;
        default:
                return -EINVAL;
        }

        __raw_writel(scr, saif->base + SAIF_CTRL);

        return 0;
}

Regards
Dong Aisheng

WARNING: multiple messages have this Message-ID (diff)
From: B29396@freescale.com (Dong Aisheng-B29396)
To: linux-arm-kernel@lists.infradead.org
Subject: [alsa-devel] [PATCH V2 02/10] ASoc: mxs: add mxs-saif driver
Date: Thu, 14 Jul 2011 10:39:13 +0000	[thread overview]
Message-ID: <65EE16ACC360FA4D99C96DC085B3F7721CE875@039-SN1MPN1-002.039d.mgd.msft.net> (raw)
In-Reply-To: <20110714030633.GA11559@opensource.wolfsonmicro.com>


> -----Original Message-----
> From: Mark Brown [mailto:broonie at opensource.wolfsonmicro.com]
> Sent: Thursday, July 14, 2011 11:07 AM
> To: Dong Aisheng-B29396
> Cc: alsa-devel at alsa-project.org; s.hauer at pengutronix.de; lrg at ti.com;
> linux-arm-kernel at lists.infradead.org; u.kleine-koenig at pengutronix.de
> Subject: Re: [alsa-devel] [PATCH V2 02/10] ASoc: mxs: add mxs-saif driver
> 
> On Wed, Jul 13, 2011 at 08:14:09AM +0000, Dong Aisheng-B29396 wrote:
> 
> > > What if MCLK is not set corectly for some reason?  We'll just
> > > silently do nothing.
> 
> > We will just return an error if MCLK is not correct (not 32x or 48x).
> >         /* SAIF MCLK should be either 32*fs or 48*fs */
> >         if (saif->mclk_in_use && (mclk % 32 != 0) && (mclk % 48 != 0))
> >                 return -EINVAL;
> > Machine driver should guarantee to set a correct value since it's HW
> limitation.
> > Is that ok?
> 
> Please fix the code so you only check if the ratio is valid in one place,
> the code currently is too hard to read.

Hi Mark,

So far, thanks a lot for your kindly review.
I removed the duplicated checking as you indicated and changed the clk setting
flow a bit(also adding more comments) to try to make it more easy to read.

The code is as follows.
Is it ok for you?
Or you have any better suggestions?

/*
 * Set SAIF clock and MCLK
 */
static int mxs_saif_set_clk(struct mxs_saif *saif,
                                  unsigned int mclk,
                                  unsigned int rate)
{
        u32 scr;
        int ret;

        scr = __raw_readl(saif->base + SAIF_CTRL);
        scr &= ~BM_SAIF_CTRL_BITCLK_MULT_RATE;
        scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;

        /*
         * Set SAIF clock
         *
         * The SAIF clock should be either 384*fs or 512*fs.
         * If MCLK is used, the SAIF clk ratio needs to match mclk ratio.
         *  For 32x mclk, set saif clk as 512*fs.
         *  For 48x mclk, set saif clk as 384*fs.
         *
         * If MCLK is not used, we just set saif clk to 512*fs.
         */
        if (saif->mclk_in_use) {
                if (mclk % 32 == 0) {
                        scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
                        ret = clk_set_rate(saif->clk, 512 * rate);
                } else if (mclk % 48 == 0) {
                        scr |= BM_SAIF_CTRL_BITCLK_BASE_RATE;
                        ret = clk_set_rate(saif->clk, 384 * rate);
                } else {
                        /* SAIF MCLK should be either 32x or 48x */
                        return -EINVAL;
                }
        } else {
                ret = clk_set_rate(saif->clk, 512 * rate);
                scr &= ~BM_SAIF_CTRL_BITCLK_BASE_RATE;
        }

        if (ret)
                return ret;

        if (!saif->mclk_in_use) {
                __raw_writel(scr, saif->base + SAIF_CTRL);
                return 0;
        }

        /*
         * Program the over-sample rate for MCLK output if used
         *
         * The available MCLK range is 32x, 48x... 512x. The rate
         * could be from 8kHz to 192kH.
         */
        switch (mclk / rate) {
        case 32:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(4);
                break;
        case 64:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(3);
                break;
        case 128:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(2);
                break;
        case 256:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(1);
                break;
        case 512:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(0);
                break;
        case 48:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(3);
                break;
        case 96:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(2);
                break;
        case 192:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(1);
                break;
        case 384:
                scr |= BF_SAIF_CTRL_BITCLK_MULT_RATE(0);
                break;
        default:
                return -EINVAL;
        }

        __raw_writel(scr, saif->base + SAIF_CTRL);

        return 0;
}

Regards
Dong Aisheng

  parent reply	other threads:[~2011-07-14 10:39 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-12 15:04 [PATCH V2 00/10] Dong Aisheng
2011-07-12 15:04 ` Dong Aisheng
2011-07-12 15:04 ` [PATCH V2 01/10] ASoc: mxs: add mxs-pcm driver Dong Aisheng
2011-07-12 15:04   ` Dong Aisheng
2011-07-12 23:27   ` Mark Brown
2011-07-12 23:27     ` Mark Brown
2011-07-13  3:20     ` Dong Aisheng-B29396
2011-07-13  3:20       ` Dong Aisheng-B29396
2011-07-13  6:29     ` Dong Aisheng-B29396
2011-07-13  6:29       ` Dong Aisheng-B29396
2011-07-13  7:44   ` Russell King - ARM Linux
2011-07-13  7:44     ` Russell King - ARM Linux
2011-07-13  8:17     ` Dong Aisheng-B29396
2011-07-13  8:17       ` Dong Aisheng-B29396
2011-07-14 12:31   ` Wolfram Sang
2011-07-14 12:31     ` Wolfram Sang
2011-07-14 16:15     ` Dong Aisheng
2011-07-14 16:15       ` [alsa-devel] " Dong Aisheng
2011-07-15  6:30       ` Dong Aisheng-B29396
2011-07-15  6:30         ` [alsa-devel] " Dong Aisheng-B29396
2011-07-12 15:04 ` [PATCH V2 02/10] ASoc: mxs: add mxs-saif driver Dong Aisheng
2011-07-12 15:04   ` Dong Aisheng
2011-07-13  1:03   ` Mark Brown
2011-07-13  1:03     ` Mark Brown
2011-07-13  8:14     ` [alsa-devel] " Dong Aisheng-B29396
2011-07-13  8:14       ` Dong Aisheng-B29396
2011-07-14  3:06       ` Mark Brown
2011-07-14  3:06         ` Mark Brown
2011-07-14  4:34         ` Dong Aisheng-B29396
2011-07-14  4:34           ` Dong Aisheng-B29396
2011-07-14 10:39         ` Dong Aisheng-B29396 [this message]
2011-07-14 10:39           ` Dong Aisheng-B29396
2011-07-14 11:05           ` Mark Brown
2011-07-14 11:05             ` [alsa-devel] " Mark Brown
2011-07-14 16:06             ` Dong Aisheng
2011-07-14 16:06               ` [alsa-devel] " Dong Aisheng
2011-07-12 15:04 ` [PATCH V2 03/10] ASoc: mxs: add mxs-sgtl5000 machine driver Dong Aisheng
2011-07-12 15:04   ` Dong Aisheng
2011-07-13 11:57   ` Wolfram Sang
2011-07-13 11:57     ` Wolfram Sang
2011-07-13 12:19     ` Dong Aisheng-B29396
2011-07-13 12:19       ` Dong Aisheng-B29396
2011-07-13 13:40       ` Dong Aisheng-B29396
2011-07-13 13:40         ` Dong Aisheng-B29396
2011-07-13 14:00         ` Wolfram Sang
2011-07-13 14:00           ` Wolfram Sang
2011-07-13 14:13           ` Dong Aisheng-B29396
2011-07-13 14:13             ` Dong Aisheng-B29396
2011-07-13 14:22           ` Dong Aisheng-B29396
2011-07-13 14:22             ` Dong Aisheng-B29396
2011-07-13 15:01             ` Wolfram Sang
2011-07-13 15:01               ` Wolfram Sang
2011-07-13 15:16               ` Dong Aisheng
2011-07-13 15:16                 ` Dong Aisheng
2011-07-13 12:46     ` Mark Brown
2011-07-13 12:46       ` Mark Brown
2011-07-13 12:59       ` Wolfram Sang
2011-07-13 12:59         ` Wolfram Sang
2011-07-13 15:58   ` Wolfram Sang
2011-07-13 15:58     ` Wolfram Sang
2011-07-14  3:04     ` [alsa-devel] " Dong Aisheng-B29396
2011-07-14  3:04       ` Dong Aisheng-B29396
     [not found]   ` <1310483085-31442-4-git-send-email-b29396-KZfg59tc24xl57MIdRCFDg@public.gmane.org>
2011-07-15 15:11     ` Shawn Guo
2011-07-15 15:11       ` Shawn Guo
2011-07-15 15:17       ` Mark Brown
2011-07-15 15:17         ` Mark Brown
2011-07-12 15:04 ` [PATCH V2 04/10] ASoc: mxs: add asoc configuration files Dong Aisheng
2011-07-12 15:04   ` Dong Aisheng
2011-07-13  9:08   ` Wolfram Sang
2011-07-13  9:08     ` Wolfram Sang
2011-07-13 11:13     ` Dong Aisheng
2011-07-13 11:13       ` [alsa-devel] " Dong Aisheng
2011-07-12 15:04 ` [PATCH V2 05/10] ARM: mxs: add saif clock Dong Aisheng
2011-07-12 15:04   ` Dong Aisheng
2011-07-12 15:04 ` [PATCH V2 06/10] ARM: mxs: add saif device Dong Aisheng
2011-07-12 15:04   ` Dong Aisheng
2011-07-15 13:32   ` Wolfram Sang
2011-07-15 13:32     ` Wolfram Sang
2011-07-15 15:02     ` Dong Aisheng
2011-07-15 15:02       ` [alsa-devel] " Dong Aisheng
2011-07-15 15:34       ` Wolfram Sang
2011-07-15 15:34         ` [alsa-devel] " Wolfram Sang
2011-07-15 17:22         ` Dong Aisheng
2011-07-15 17:22           ` [alsa-devel] " Dong Aisheng
2011-07-12 18:22 ` [PATCH V2 00/10] Wolfram Sang
2011-07-12 18:22   ` Wolfram Sang
2011-07-13  3:02   ` [PATCH V2 00/10] ARM: mxs: add audio support Dong Aisheng-B29396
2011-07-13  3:02     ` Dong Aisheng-B29396
2011-07-13  3:36 ` [PATCH V2 07/10] ARM: mxs: add sgtl5000 i2c device Dong Aisheng
2011-07-13  3:36   ` Dong Aisheng
2011-07-13  9:13   ` Wolfram Sang
2011-07-13  9:13     ` Wolfram Sang
2011-07-13  9:56     ` Wolfram Sang
2011-07-13  9:56       ` Wolfram Sang
2011-07-13 11:09       ` Dong Aisheng-B29396
2011-07-13 11:09         ` Dong Aisheng-B29396
2011-07-13  3:39 ` [PATCH V2 08/10] ARM: mxs: add mxs-sgtl5000 device Dong Aisheng
2011-07-13  3:39   ` Dong Aisheng
2011-07-13  3:40 ` [PATCH V2 09/10] ARM: mxs: correct the using of frac div for saif Dong Aisheng
2011-07-13  3:40   ` Dong Aisheng
2011-07-13  3:40 ` [PATCH V2 10/10] ARM: mxs-dma: include <linux/dmaengine.h> Dong Aisheng
2011-07-13  3:40   ` Dong Aisheng
2011-07-14 14:17   ` Wolfram Sang
2011-07-14 14:17     ` Wolfram Sang

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=65EE16ACC360FA4D99C96DC085B3F7721CE875@039-SN1MPN1-002.039d.mgd.msft.net \
    --to=b29396@freescale.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=lrg@ti.com \
    --cc=s.hauer@pengutronix.de \
    --cc=u.kleine-koenig@pengutronix.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.