linux-spi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] spi: nuc900: Fix setting multiple bits settings in register
@ 2014-03-21 14:40 Axel Lin
  2014-03-26 16:48 ` Mark Brown
  0 siblings, 1 reply; 3+ messages in thread
From: Axel Lin @ 2014-03-21 14:40 UTC (permalink / raw)
  To: Mark Brown
  Cc: Geert Uytterhoeven, Wan ZongShun,
	linux-spi-u79uwXL29TY76Z2rM5mHXA

The correct way to set multiple bits settings is always clear these
bit fields before set new settings.

Current code does not cause problem because the reset value of these
bit fields are 0, and these settings only set once during probe.

Signed-off-by: Axel Lin <axel.lin-8E1dMatC8ynQT0dZR+AlfA@public.gmane.org>
---
 drivers/spi/spi-nuc900.c | 22 ++++++----------------
 1 file changed, 6 insertions(+), 16 deletions(-)

diff --git a/drivers/spi/spi-nuc900.c b/drivers/spi/spi-nuc900.c
index 675c210..a062a89 100644
--- a/drivers/spi/spi-nuc900.c
+++ b/drivers/spi/spi-nuc900.c
@@ -37,7 +37,9 @@
 /* usi register bit */
 #define ENINT		(0x01 << 17)
 #define ENFLG		(0x01 << 16)
+#define SLEEP		(0x0f << 12)
 #define TXNUM		(0x03 << 8)
+#define TXBITLEN	(0x1f << 3)
 #define TXNEG		(0x01 << 2)
 #define RXNEG		(0x01 << 1)
 #define LSB		(0x01 << 10)
@@ -115,8 +117,7 @@ static void nuc900_spi_chipsel(struct spi_device *spi, int value)
 	}
 }
 
-static void nuc900_spi_setup_txnum(struct nuc900_spi *hw,
-							unsigned int txnum)
+static void nuc900_spi_setup_txnum(struct nuc900_spi *hw, unsigned int txnum)
 {
 	unsigned int val;
 	unsigned long flags;
@@ -124,12 +125,7 @@ static void nuc900_spi_setup_txnum(struct nuc900_spi *hw,
 	spin_lock_irqsave(&hw->lock, flags);
 
 	val = __raw_readl(hw->regs + USI_CNT);
-
-	if (!txnum)
-		val &= ~TXNUM;
-	else
-		val |= txnum << 0x08;
-
+	val = (val & ~TXNUM) | (txnum << 0x08);
 	__raw_writel(val, hw->regs + USI_CNT);
 
 	spin_unlock_irqrestore(&hw->lock, flags);
@@ -145,9 +141,7 @@ static void nuc900_spi_setup_txbitlen(struct nuc900_spi *hw,
 	spin_lock_irqsave(&hw->lock, flags);
 
 	val = __raw_readl(hw->regs + USI_CNT);
-
-	val |= (txbitlen << 0x03);
-
+	val = (val & ~TXBITLEN) | (txbitlen << 0x03);
 	__raw_writel(val, hw->regs + USI_CNT);
 
 	spin_unlock_irqrestore(&hw->lock, flags);
@@ -284,11 +278,7 @@ static void nuc900_set_sleep(struct nuc900_spi *hw, unsigned int sleep)
 	spin_lock_irqsave(&hw->lock, flags);
 
 	val = __raw_readl(hw->regs + USI_CNT);
-
-	if (sleep)
-		val |= (sleep << 12);
-	else
-		val &= ~(0x0f << 12);
+	val = (val & ~SLEEP) | (sleep << 12);
 	__raw_writel(val, hw->regs + USI_CNT);
 
 	spin_unlock_irqrestore(&hw->lock, flags);
-- 
1.8.3.2



--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] spi: nuc900: Fix setting multiple bits settings in register
  2014-03-21 14:40 [PATCH v2] spi: nuc900: Fix setting multiple bits settings in register Axel Lin
@ 2014-03-26 16:48 ` Mark Brown
       [not found]   ` <20140326164819.GC14287-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
  0 siblings, 1 reply; 3+ messages in thread
From: Mark Brown @ 2014-03-26 16:48 UTC (permalink / raw)
  To: Axel Lin; +Cc: Geert Uytterhoeven, Wan ZongShun,
	linux-spi-u79uwXL29TY76Z2rM5mHXA

[-- Attachment #1: Type: text/plain, Size: 399 bytes --]

On Fri, Mar 21, 2014 at 10:40:23PM +0800, Axel Lin wrote:
> The correct way to set multiple bits settings is always clear these
> bit fields before set new settings.
> 
> Current code does not cause problem because the reset value of these
> bit fields are 0, and these settings only set once during probe.

This doesn't seem to apply against current code, can you please check
and resend?

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] spi: nuc900: Fix setting multiple bits settings in register
       [not found]   ` <20140326164819.GC14287-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
@ 2014-03-27  0:41     ` Axel Lin
  0 siblings, 0 replies; 3+ messages in thread
From: Axel Lin @ 2014-03-27  0:41 UTC (permalink / raw)
  To: Mark Brown; +Cc: Geert Uytterhoeven, Wan ZongShun, linux-spi

2014-03-27 0:48 GMT+08:00 Mark Brown <broonie-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>:
> On Fri, Mar 21, 2014 at 10:40:23PM +0800, Axel Lin wrote:
>> The correct way to set multiple bits settings is always clear these
>> bit fields before set new settings.
>>
>> Current code does not cause problem because the reset value of these
>> bit fields are 0, and these settings only set once during probe.
>
> This doesn't seem to apply against current code, can you please check
> and resend?
It's because v1 is applied.
I personally do not have strong preference between v1 and v2.
Is it ok to keep it as is since it's applied.
--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-03-27  0:41 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-21 14:40 [PATCH v2] spi: nuc900: Fix setting multiple bits settings in register Axel Lin
2014-03-26 16:48 ` Mark Brown
     [not found]   ` <20140326164819.GC14287-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2014-03-27  0:41     ` Axel Lin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).