[PATCH] mpc83xx SPI glitch

STALE6784d

2 messages, 2 authors, 2008-03-31 · open the first message on its own page

[PATCH] mpc83xx SPI glitch

From: Mike Hench <hidden>
Date: 2008-03-31 13:03:46

dont write SPMODE reg unless mode changed.
it causes SPI to go hi-z momentarily
which can cause a spike on the CLK line
this is a problem in MMC where /CS is held asserted
across multiple transactions.

Signed-off-by: Mike Hench <redacted>

---
--- linux-2.6.25-rc5.orig/drivers/spi/spi_mpc83xx.c	2008-03-10
00:22:27.000000000 -0500
+++ linux-2.6.25-rc5/drivers/spi/spi_mpc83xx.c	2008-03-31
07:37:37.000000000 -0500
@@ -147,6 +147,7 @@
=20
 	if (value =3D=3D BITBANG_CS_ACTIVE) {
 		u32 regval =3D
mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
+		u32 regval0 =3D regval;
 		u32 len =3D spi->bits_per_word;
 		u8 pm;
=20
@@ -188,9 +189,16 @@
 			regval |=3D SPMODE_PM(pm);
 		}
=20
-		/* Turn off SPI unit prior changing mode */
-		mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, 0);
-		mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, regval);
+		// dont write reg unless mode changed.
+		// it causes SPI to go hi-z momentarily
+		// which can cause a spike on the CLK line
+		// this is a problem in MMC where /CS is held asserted
+		// across multiple transactions.
+		if(regval !=3D regval0) {
+			/* Turn off SPI unit prior changing mode */
+			mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode,
0);
+			mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode,
regval);
+		}
 		if (mpc83xx_spi->activate_cs)
 			mpc83xx_spi->activate_cs(spi->chip_select, pol);
 	}

Re: [PATCH] mpc83xx SPI glitch

From: Joakim Tjernlund <hidden>
Date: 2008-03-31 13:23:51

Mike

I already sent a patch some time ago, it addresses this bug and
alot more. See spi-devel-general
[off-list ref],

I am waiting for David B. to comment/apply it. If you want to see this
in 2.6.25 I suggest you remind 'David Brownell' [off-list ref]

 Jocke
On Mon, 2008-03-31 at 08:04 -0500, Mike Hench wrote:
quoted hunk
dont write SPMODE reg unless mode changed.
it causes SPI to go hi-z momentarily
which can cause a spike on the CLK line
this is a problem in MMC where /CS is held asserted
across multiple transactions.
=20
Signed-off-by: Mike Hench <redacted>
=20
---
=20
--- linux-2.6.25-rc5.orig/drivers/spi/spi_mpc83xx.c	2008-03-10
00:22:27.000000000 -0500
+++ linux-2.6.25-rc5/drivers/spi/spi_mpc83xx.c	2008-03-31
07:37:37.000000000 -0500
@@ -147,6 +147,7 @@
=20
 	if (value =3D=3D BITBANG_CS_ACTIVE) {
 		u32 regval =3D
mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
+		u32 regval0 =3D regval;
 		u32 len =3D spi->bits_per_word;
 		u8 pm;
=20
@@ -188,9 +189,16 @@
 			regval |=3D SPMODE_PM(pm);
 		}
=20
-		/* Turn off SPI unit prior changing mode */
-		mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, 0);
-		mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, regval);
+		// dont write reg unless mode changed.
+		// it causes SPI to go hi-z momentarily
+		// which can cause a spike on the CLK line
+		// this is a problem in MMC where /CS is held asserted
+		// across multiple transactions.
+		if(regval !=3D regval0) {
+			/* Turn off SPI unit prior changing mode */
+			mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode,
0);
+			mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode,

12 more quoted lines

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help