diff mbox

[RESEND,1/1] ASoC: dwc: correct irq clear method

Message ID 006301d0fac4$94eb5890$bec209b0$@tangramtek.com (mailing list archive)
State New, archived
Headers show

Commit Message

yitian Sept. 29, 2015, 2:39 p.m. UTC
from Designware I2S datasheet, irq is cleared by reading from
TOR/ROR registers, rather than by writing into them.

Signed-off-by: Yitian Bu <yitian.bu@tangramtek.com>
---
 sound/soc/dwc/designware_i2s.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Mark Brown Sept. 30, 2015, 6:17 p.m. UTC | #1
On Tue, Sep 29, 2015 at 10:39:00PM +0800, yitian wrote:
> from Designware I2S datasheet, irq is cleared by reading from
> TOR/ROR registers, rather than by writing into them.

This doesn't apply against current code, please check and resend.
yitian Oct. 1, 2015, 2:39 a.m. UTC | #2
> From: linux-arm-kernel
> [mailto:linux-arm-kernel-bounces@lists.infradead.org] On Behalf Of Mark
> Brown
> Sent: Thursday, October 1, 2015 2:18 AM
> To: yitian <yitian.bu@tangramtek.com>
> Cc: alsa-devel@alsa-project.org; wsa@the-dreams.de;
> linux-kernel@vger.kernel.org; Andrew.Jackson@arm.com; tiwai@suse.com;
> lgirdwood@gmail.com; perex@perex.cz;
> linux-arm-kernel@lists.infradead.org
> Subject: Re: [RESEND PATCH 1/1] ASoC: dwc: correct irq clear method
> 
> On Tue, Sep 29, 2015 at 10:39:00PM +0800, yitian wrote:
> > from Designware I2S datasheet, irq is cleared by reading from
> > TOR/ROR registers, rather than by writing into them.
> 
> This doesn't apply against current code, please check and resend.
Hi Mark:

Thanks for your comments.
Maybe I misunderstand your meaning. Please correct me.

I synced up to latest kernel branch, the code is the same as what this patch
was
generated.

I checked designware I2S spec "version 1.08a June 2014", it specified that
the TOR
and ROR registers are read only and reading the last bit will clear tx/rx
overrun irq.

Also I have checked this register by writing its last bit, the overrun irq
is not cleared.
But if I read the last bit, the overrun irq is cleared. That means the spec
is correct.

Can you please let me know what else I should double check? Thanks.
Mark Brown Oct. 1, 2015, 10:03 a.m. UTC | #3
On Thu, Oct 01, 2015 at 10:39:09AM +0800, yitian wrote:

> > This doesn't apply against current code, please check and resend.

> I synced up to latest kernel branch, the code is the same as what this patch
> was
> generated.

The "latest kernel branch" was neither v4.3-rc1 nor my for-next
branch, at least as far as git am was concerned, so I couldn't apply the
patch.
yitian Oct. 2, 2015, 7:22 a.m. UTC | #4
Hi Mark:
> From: alsa-devel-bounces@alsa-project.org
> [mailto:alsa-devel-bounces@alsa-project.org] On Behalf Of Mark Brown
> Sent: Thursday, October 1, 2015 6:04 PM
> To: yitian <yitian.bu@tangramtek.com>
> Cc: alsa-devel@alsa-project.org; wsa@the-dreams.de;
> linux-kernel@vger.kernel.org; Andrew.Jackson@arm.com;
> lgirdwood@gmail.com; tiwai@suse.com;
> linux-arm-kernel@lists.infradead.org
> Subject: Re: [alsa-devel] [RESEND PATCH 1/1] ASoC: dwc: correct irq clear
> method
> 
> On Thu, Oct 01, 2015 at 10:39:09AM +0800, yitian wrote:
> 
> > > This doesn't apply against current code, please check and resend.
> 
> > I synced up to latest kernel branch, the code is the same as what this
> patch
> > was
> > generated.
> 
> The "latest kernel branch" was neither v4.3-rc1 nor my for-next
> branch, at least as far as git am was concerned, so I couldn't apply the
> patch.

I am sorry.
I used Linux v4.3-rc3 to generate the patch, and I assumed that was the same
as v4.3-rc1.
I generated new patch based on next-20151001, please review it again,
thanks.
diff mbox

Patch

diff --git a/sound/soc/dwc/designware_i2s.c b/sound/soc/dwc/designware_i2s.c
index a3e97b4..0d28e3b 100644
--- a/sound/soc/dwc/designware_i2s.c
+++ b/sound/soc/dwc/designware_i2s.c
@@ -131,10 +131,10 @@  static inline void i2s_clear_irqs(struct dw_i2s_dev
*dev, u32 stream)
 
 	if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
 		for (i = 0; i < 4; i++)
-			i2s_write_reg(dev->i2s_base, TOR(i), 0);
+			i2s_read_reg(dev->i2s_base, TOR(i));
 	} else {
 		for (i = 0; i < 4; i++)
-			i2s_write_reg(dev->i2s_base, ROR(i), 0);
+			i2s_read_reg(dev->i2s_base, ROR(i));
 	}
 }