All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Brown <broonie@opensource.wolfsonmicro.com>
To: Dong Aisheng <b29396@freescale.com>
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: [PATCH V2 02/10] ASoc: mxs: add mxs-saif driver
Date: Wed, 13 Jul 2011 10:03:46 +0900	[thread overview]
Message-ID: <20110713010346.GA18959@opensource.wolfsonmicro.com> (raw)
In-Reply-To: <1310483085-31442-3-git-send-email-b29396@freescale.com>

On Tue, Jul 12, 2011 at 11:04:37PM +0800, Dong Aisheng wrote:

Looks pretty good, a few small issues below.

> +	/* The SAIF clock should be either 384*fs or 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);
> +		}

What if MCLK is not set corectly for some reason?  We'll just silently
do nothing.

> +	if (ret)
> +		return  -EINVAL;

Should pass through any error codes we get.

In hw_params()...
> +	stat = __raw_readl(saif->base + SAIF_STAT);
> +	if (stat & BM_SAIF_STAT_BUSY) {
> +		dev_err(cpu_dai->dev, "error: busy\n");
> +		return -EBUSY;
> +	}

Does this work for simultaneous playback and record?  Perhaps you need
to set symmetric_rates in the DAI (if the hardware needs the same sample
rate for playback and record) and have a check here to see if we're
trying to apply the same configuration as we already have.

> +	struct mxs_saif *saif = dev_id;
> +	unsigned int stat;
> +
> +	stat = __raw_readl(saif->base + SAIF_STAT);
> +	if (stat & BM_SAIF_STAT_FIFO_UNDERFLOW_IRQ)
> +		dev_dbg(saif->dev, "underrun!!! %d\n", ++saif->fifo_underrun);
> +
> +	if (stat & BM_SAIF_STAT_FIFO_OVERFLOW_IRQ)
> +		dev_dbg(saif->dev, "overrun!!! %d\n", ++saif->fifo_overrun);

Probably dev_err()?

> +	__raw_writel(BM_SAIF_STAT_FIFO_UNDERFLOW_IRQ |
> +			BM_SAIF_STAT_FIFO_OVERFLOW_IRQ,
> +			saif->base + SAIF_STAT + MXS_CLR_ADDR);
> +
> +	return IRQ_HANDLED;

Should really check to see if underflow or overflow occurred and only
report handled if they did - otherwise we might have trouble with new
hardware blocks that have other interrupts.

> +	if (pdev->id >= 2)
> +		return -EINVAL;
> +	mxs_saif[pdev->id] = saif;

The id check should check for ARRAY_SIZE() mxs_saif[] to make updates
easier if a new chip has more ports.

> +	saif->dma_param.chan_irq = platform_get_irq(pdev, 1);
> +	if (saif->dma_param.chan_irq < 0) {

Does the IRQ requesting need to happen after you've set the base
address?  Otherwise there's a potential race if for some reason the IRQ
fires before we've got the data structures set up.

WARNING: multiple messages have this Message-ID (diff)
From: broonie@opensource.wolfsonmicro.com (Mark Brown)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V2 02/10] ASoc: mxs: add mxs-saif driver
Date: Wed, 13 Jul 2011 10:03:46 +0900	[thread overview]
Message-ID: <20110713010346.GA18959@opensource.wolfsonmicro.com> (raw)
In-Reply-To: <1310483085-31442-3-git-send-email-b29396@freescale.com>

On Tue, Jul 12, 2011 at 11:04:37PM +0800, Dong Aisheng wrote:

Looks pretty good, a few small issues below.

> +	/* The SAIF clock should be either 384*fs or 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);
> +		}

What if MCLK is not set corectly for some reason?  We'll just silently
do nothing.

> +	if (ret)
> +		return  -EINVAL;

Should pass through any error codes we get.

In hw_params()...
> +	stat = __raw_readl(saif->base + SAIF_STAT);
> +	if (stat & BM_SAIF_STAT_BUSY) {
> +		dev_err(cpu_dai->dev, "error: busy\n");
> +		return -EBUSY;
> +	}

Does this work for simultaneous playback and record?  Perhaps you need
to set symmetric_rates in the DAI (if the hardware needs the same sample
rate for playback and record) and have a check here to see if we're
trying to apply the same configuration as we already have.

> +	struct mxs_saif *saif = dev_id;
> +	unsigned int stat;
> +
> +	stat = __raw_readl(saif->base + SAIF_STAT);
> +	if (stat & BM_SAIF_STAT_FIFO_UNDERFLOW_IRQ)
> +		dev_dbg(saif->dev, "underrun!!! %d\n", ++saif->fifo_underrun);
> +
> +	if (stat & BM_SAIF_STAT_FIFO_OVERFLOW_IRQ)
> +		dev_dbg(saif->dev, "overrun!!! %d\n", ++saif->fifo_overrun);

Probably dev_err()?

> +	__raw_writel(BM_SAIF_STAT_FIFO_UNDERFLOW_IRQ |
> +			BM_SAIF_STAT_FIFO_OVERFLOW_IRQ,
> +			saif->base + SAIF_STAT + MXS_CLR_ADDR);
> +
> +	return IRQ_HANDLED;

Should really check to see if underflow or overflow occurred and only
report handled if they did - otherwise we might have trouble with new
hardware blocks that have other interrupts.

> +	if (pdev->id >= 2)
> +		return -EINVAL;
> +	mxs_saif[pdev->id] = saif;

The id check should check for ARRAY_SIZE() mxs_saif[] to make updates
easier if a new chip has more ports.

> +	saif->dma_param.chan_irq = platform_get_irq(pdev, 1);
> +	if (saif->dma_param.chan_irq < 0) {

Does the IRQ requesting need to happen after you've set the base
address?  Otherwise there's a potential race if for some reason the IRQ
fires before we've got the data structures set up.

  reply	other threads:[~2011-07-13  1:03 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 [this message]
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
2011-07-14 10:39           ` [alsa-devel] " 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=20110713010346.GA18959@opensource.wolfsonmicro.com \
    --to=broonie@opensource.wolfsonmicro.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=b29396@freescale.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.