linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD
@ 2009-04-30 23:47 Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 1/9] spi_mpc83xx: Handles other Freescale processors Anton Vorontsov
                   ` (9 more replies)
  0 siblings, 10 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:47 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

Hi all,

Here are few patches that are needed to support spi-mmc slot on
MPC8610HPCD PowerPC boards:

[1/9] spi_mpc83xx: Handles other Freescale processors
[2/9] spi_mpc83xx: Quieten down the "Requested speed is too low" message
[3/9] spi_mpc83xx: Add small delay after asserting chip-select line
[4/9] powerpc/86xx: Add MMC SPI support for MPC8610HPCD boards

The rest are cleanups, initially Kumar suggested to rename
spi_mpc83xx.c to spi_mpc8xxx.c, but checkpatch told me to fix
some other issues. So the following cleanups were prepared:

[5/9] spi_mpc83xx: Fix checkpatch issues
[6/9] spi_mpc83xx: Split mpc83xx_spi_work() into two routines
[7/9] spi_mpc83xx: Remove dead code
[8/9] spi_mpc83xx: Rename spi_83xx.c to spi_8xxx.c
[9/9] spi_mpc8xxx: s/83xx/8xxx/g

Thanks,

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

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

* [PATCH 1/9] spi_mpc83xx: Handles other Freescale processors
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 2/9] spi_mpc83xx: Quieten down the "Requested speed is too low" message Anton Vorontsov
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

With this patch we'll able to select spi_mpc83xx driver on the MPC86xx
platforms. Let the driver depend on FSL_SOC, so we don't have to worry
about Kconfig anymore.

Also remove the "experimental" dependency, the driver has been tested
to work on a various hardware, and surely not experimental anymore.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/spi/Kconfig |   14 ++++++--------
 1 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index 83a185d..3c1845c 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -140,16 +140,14 @@ config SPI_MPC52xx_PSC
 	  Controller in master SPI mode.
 
 config SPI_MPC83xx
-	tristate "Freescale MPC83xx/QUICC Engine SPI controller"
-	depends on (PPC_83xx || QUICC_ENGINE) && EXPERIMENTAL
+	tristate "Freescale MPC8xxx SPI controller"
+	depends on FSL_SOC
 	help
-	  This enables using the Freescale MPC83xx and QUICC Engine SPI
-	  controllers in master mode.
+	  This enables using the Freescale MPC8xxx SPI controllers in master
+	  mode.
 
-	  Note, this driver uniquely supports the SPI controller on the MPC83xx
-	  family of PowerPC processors, plus processors with QUICC Engine
-	  technology. This driver uses a simple set of shift registers for data
-	  (opposed to the CPM based descriptor model).
+	  This driver uses a simple set of shift registers for data (opposed
+	  to the CPM based descriptor model).
 
 config SPI_OMAP_UWIRE
 	tristate "OMAP1 MicroWire"
-- 
1.6.2.2

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

* [PATCH 2/9] spi_mpc83xx: Quieten down the "Requested speed is too low" message
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 1/9] spi_mpc83xx: Handles other Freescale processors Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 3/9] spi_mpc83xx: Add small delay after asserting chip-select line Anton Vorontsov
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

When a platform is running at high frequencies it's not always
possible to scale-down a frequency to a requested value, and using
mmc_spi driver this leads to the following printk flood during card
polling:

  ...
  mmc_spi spi32766.0: Requested speed is too low: 400000 Hz. Will use
  520828 Hz instead.
  mmc_spi spi32766.0: Requested speed is too low: 400000 Hz. Will use
  520828 Hz instead.
  ...

Fix this by using WARN_ONCE(), it's better than the flood, and also
better than turning dev_err() into dev_dbg(), since we actually want
to warn that some things may not work correctly.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/spi/spi_mpc83xx.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c
index f4573a9..08b49d2 100644
--- a/drivers/spi/spi_mpc83xx.c
+++ b/drivers/spi/spi_mpc83xx.c
@@ -14,6 +14,7 @@
 #include <linux/init.h>
 #include <linux/types.h>
 #include <linux/kernel.h>
+#include <linux/bug.h>
 #include <linux/errno.h>
 #include <linux/err.h>
 #include <linux/completion.h>
@@ -275,12 +276,12 @@ int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
 	if ((mpc83xx_spi->spibrg / hz) > 64) {
 		cs->hw_mode |= SPMODE_DIV16;
 		pm = mpc83xx_spi->spibrg / (hz * 64);
-		if (pm > 16) {
-			dev_err(&spi->dev, "Requested speed is too "
-				"low: %d Hz. Will use %d Hz instead.\n",
-				hz, mpc83xx_spi->spibrg / 1024);
+
+		WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. "
+			  "Will use %d Hz instead.\n", dev_name(&spi->dev),
+			  hz, mpc83xx_spi->spibrg / 1024);
+		if (pm > 16)
 			pm = 16;
-		}
 	} else
 		pm = mpc83xx_spi->spibrg / (hz * 4);
 	if (pm)
-- 
1.6.2.2

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

* [PATCH 3/9] spi_mpc83xx: Add small delay after asserting chip-select line
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 1/9] spi_mpc83xx: Handles other Freescale processors Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 2/9] spi_mpc83xx: Quieten down the "Requested speed is too low" message Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 4/9] powerpc/86xx: Add MMC SPI support for MPC8610HPCD boards Anton Vorontsov
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

This is needed for some underlaying GPIO controllers that may be
a bit slow, or if chip-select signal need some time to stabilize.

For what it's worth, we already have the similar delay for
chip-select de-assertion case.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/spi/spi_mpc83xx.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c
index 08b49d2..d378d5e 100644
--- a/drivers/spi/spi_mpc83xx.c
+++ b/drivers/spi/spi_mpc83xx.c
@@ -383,8 +383,10 @@ static void mpc83xx_spi_work(struct work_struct *work)
 					break;
 			}
 
-			if (cs_change)
+			if (cs_change) {
 				mpc83xx_spi_chipselect(spi, BITBANG_CS_ACTIVE);
+				ndelay(nsecs);
+			}
 			cs_change = t->cs_change;
 			if (t->len)
 				status = mpc83xx_spi_bufs(spi, t);
-- 
1.6.2.2

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

* [PATCH 4/9] powerpc/86xx: Add MMC SPI support for MPC8610HPCD boards
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
                   ` (2 preceding siblings ...)
  2009-04-30 23:48 ` [PATCH 3/9] spi_mpc83xx: Add small delay after asserting chip-select line Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 5/9] spi_mpc83xx: Fix checkpatch issues Anton Vorontsov
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

This patch adds spi and mmc-spi-slot nodes, plus a gpio-controller
for PIXIS' sdcsr bank that is used for managing SPI chip-select and
for reading card's states.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 arch/powerpc/boot/dts/mpc8610_hpcd.dts     |   32 ++++++++++++++++++++++++++++
 arch/powerpc/platforms/86xx/mpc8610_hpcd.c |    4 +++
 2 files changed, 36 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
index 1bd3ebe..dbb80f7 100644
--- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts
+++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
@@ -100,8 +100,18 @@
 		};
 
 		board-control@3,0 {
+			#address-cells = <1>;
+			#size-cells = <1>;
 			compatible = "fsl,fpga-pixis";
 			reg = <3 0 0x20>;
+			ranges = <0 3 0 0x20>;
+
+			sdcsr_pio: gpio-controller@a {
+				#gpio-cells = <2>;
+				compatible = "fsl,fpga-pixis-gpio-bank";
+				reg = <0xa 1>;
+				gpio-controller;
+			};
 		};
 	};
 
@@ -164,6 +174,28 @@
 			interrupt-parent = <&mpic>;
 		};
 
+		spi@7000 {
+			#address-cells = <1>;
+			#size-cells = <0>;
+			compatible = "fsl,mpc8610-spi", "fsl,spi";
+			reg = <0x7000 0x40>;
+			cell-index = <0>;
+			interrupts = <59 2>;
+			interrupt-parent = <&mpic>;
+			mode = "cpu";
+			gpios = <&sdcsr_pio 7 0>;
+
+			mmc-slot@0 {
+				compatible = "fsl,mpc8610hpcd-mmc-slot",
+					     "mmc-spi-slot";
+				reg = <0>;
+				gpios = <&sdcsr_pio 0 1   /* nCD */
+					 &sdcsr_pio 1 0>; /*  WP */
+				voltage-ranges = <3300 3300>;
+				spi-max-frequency = <50000000>;
+			};
+		};
+
 		display@2c000 {
 			compatible = "fsl,diu";
 			reg = <0x2c000 100>;
diff --git a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
index 3f49a6f..ce64572 100644
--- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
+++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
@@ -38,6 +38,7 @@
 #include <linux/of_platform.h>
 #include <sysdev/fsl_pci.h>
 #include <sysdev/fsl_soc.h>
+#include <sysdev/simple_gpio.h>
 
 #include "mpc86xx.h"
 
@@ -52,6 +53,9 @@ static struct of_device_id __initdata mpc8610_ids[] = {
 
 static int __init mpc8610_declare_of_platform_devices(void)
 {
+	/* Firstly, register PIXIS GPIOs. */
+	simple_gpiochip_init("fsl,fpga-pixis-gpio-bank");
+
 	/* Without this call, the SSI device driver won't get probed. */
 	of_platform_bus_probe(NULL, mpc8610_ids, NULL);
 
-- 
1.6.2.2

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

* [PATCH 5/9] spi_mpc83xx: Fix checkpatch issues
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
                   ` (3 preceding siblings ...)
  2009-04-30 23:48 ` [PATCH 4/9] powerpc/86xx: Add MMC SPI support for MPC8610HPCD boards Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 6/9] spi_mpc83xx: Split mpc83xx_spi_work() into two routines Anton Vorontsov
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

Checkpatch is spitting errors when seeing the rename patch, so fix
the errors prior to moving.

Following errors and warnings were fixed:

WARNING: Use #include <linux/io.h> instead of <asm/io.h>
#1027: FILE: drivers/spi/spi_mpc8xxx.c:37:
+#include <asm/io.h>

ERROR: "foo * bar" should be "foo *bar"
#1111: FILE: drivers/spi/spi_mpc8xxx.c:121:
+static inline void mpc83xx_spi_write_reg(__be32 __iomem * reg, u32 val)

ERROR: "foo * bar" should be "foo *bar"
#1116: FILE: drivers/spi/spi_mpc8xxx.c:126:
+static inline u32 mpc83xx_spi_read_reg(__be32 __iomem * reg)

ERROR: "foo * bar" should be "foo *bar"
#1125: FILE: drivers/spi/spi_mpc8xxx.c:135:
+       type * rx = mpc83xx_spi->rx;                                      \

ERROR: "foo * bar" should be "foo *bar"
#1135: FILE: drivers/spi/spi_mpc8xxx.c:145:
+       const type * tx = mpc83xx_spi->tx;                      \

WARNING: suspect code indent for conditional statements (16, 25)
#1504: FILE: drivers/spi/spi_mpc8xxx.c:514:
+               while (((event =
[...]
+                        cpu_relax();

Following warnings were left over, since fixing them will
hurt the readability. We'd better fix them by lowering
the indentation level by splitting mpc83xx_spi_work function
into two parts.

WARNING: line over 80 characters
#1371: FILE: drivers/spi/spi_mpc8xxx.c:381:
+                                       status = mpc83xx_spi_setup_transfer(spi, t);

WARNING: line over 80 characters
#1392: FILE: drivers/spi/spi_mpc8xxx.c:402:
+                               mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/spi/spi_mpc83xx.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c
index d378d5e..40f7448 100644
--- a/drivers/spi/spi_mpc83xx.c
+++ b/drivers/spi/spi_mpc83xx.c
@@ -17,6 +17,7 @@
 #include <linux/bug.h>
 #include <linux/errno.h>
 #include <linux/err.h>
+#include <linux/io.h>
 #include <linux/completion.h>
 #include <linux/interrupt.h>
 #include <linux/delay.h>
@@ -34,7 +35,6 @@
 
 #include <sysdev/fsl_soc.h>
 #include <asm/irq.h>
-#include <asm/io.h>
 
 /* SPI Controller registers */
 struct mpc83xx_spi_reg {
@@ -118,12 +118,12 @@ struct spi_mpc83xx_cs {
 	u32 hw_mode;		/* Holds HW mode register settings */
 };
 
-static inline void mpc83xx_spi_write_reg(__be32 __iomem * reg, u32 val)
+static inline void mpc83xx_spi_write_reg(__be32 __iomem *reg, u32 val)
 {
 	out_be32(reg, val);
 }
 
-static inline u32 mpc83xx_spi_read_reg(__be32 __iomem * reg)
+static inline u32 mpc83xx_spi_read_reg(__be32 __iomem *reg)
 {
 	return in_be32(reg);
 }
@@ -132,7 +132,7 @@ static inline u32 mpc83xx_spi_read_reg(__be32 __iomem * reg)
 static									  \
 void mpc83xx_spi_rx_buf_##type(u32 data, struct mpc83xx_spi *mpc83xx_spi) \
 {									  \
-	type * rx = mpc83xx_spi->rx;					  \
+	type *rx = mpc83xx_spi->rx;					  \
 	*rx++ = (type)(data >> mpc83xx_spi->rx_shift);			  \
 	mpc83xx_spi->rx = rx;						  \
 }
@@ -142,7 +142,7 @@ static								\
 u32 mpc83xx_spi_tx_buf_##type(struct mpc83xx_spi *mpc83xx_spi)	\
 {								\
 	u32 data;						\
-	const type * tx = mpc83xx_spi->tx;			\
+	const type *tx = mpc83xx_spi->tx;			\
 	if (!tx)						\
 		return 0;					\
 	data = *tx++ << mpc83xx_spi->tx_shift;			\
@@ -516,7 +516,7 @@ static irqreturn_t mpc83xx_spi_irq(s32 irq, void *context_data)
 		while (((event =
 			 mpc83xx_spi_read_reg(&mpc83xx_spi->base->event)) &
 						SPIE_NF) == 0)
-			 cpu_relax();
+			cpu_relax();
 
 	mpc83xx_spi->count -= 1;
 	if (mpc83xx_spi->count) {
-- 
1.6.2.2

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

* [PATCH 6/9] spi_mpc83xx: Split mpc83xx_spi_work() into two routines
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
                   ` (4 preceding siblings ...)
  2009-04-30 23:48 ` [PATCH 5/9] spi_mpc83xx: Fix checkpatch issues Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 7/9] spi_mpc83xx: Remove dead code Anton Vorontsov
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

mpc83xx_spi_work() is quite large, with up to five indentation
levels and is quite difficult to read.

So, split the function in two parts:
1. mpc83xx_spi_work() now only traverse queued spi messages;
2. mpc83xx_spi_do_one_msg() only manages single messages.

There should be no functional changes.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/spi/spi_mpc83xx.c |  115 +++++++++++++++++++++++---------------------
 1 files changed, 60 insertions(+), 55 deletions(-)

diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c
index 40f7448..50112a5 100644
--- a/drivers/spi/spi_mpc83xx.c
+++ b/drivers/spi/spi_mpc83xx.c
@@ -350,71 +350,76 @@ static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
 	return mpc83xx_spi->count;
 }
 
-static void mpc83xx_spi_work(struct work_struct *work)
+static void mpc83xx_spi_do_one_msg(struct spi_message *m)
 {
-	struct mpc83xx_spi *mpc83xx_spi =
-		container_of(work, struct mpc83xx_spi, work);
-
-	spin_lock_irq(&mpc83xx_spi->lock);
-	mpc83xx_spi->busy = 1;
-	while (!list_empty(&mpc83xx_spi->queue)) {
-		struct spi_message *m;
-		struct spi_device *spi;
-		struct spi_transfer *t = NULL;
-		unsigned cs_change;
-		int status, nsecs = 50;
-
-		m = container_of(mpc83xx_spi->queue.next,
-				struct spi_message, queue);
-		list_del_init(&m->queue);
-		spin_unlock_irq(&mpc83xx_spi->lock);
-
-		spi = m->spi;
-		cs_change = 1;
-		status = 0;
-		list_for_each_entry(t, &m->transfers, transfer_list) {
-			if (t->bits_per_word || t->speed_hz) {
-				/* Don't allow changes if CS is active */
-				status = -EINVAL;
-
-				if (cs_change)
-					status = mpc83xx_spi_setup_transfer(spi, t);
-				if (status < 0)
-					break;
-			}
-
-			if (cs_change) {
-				mpc83xx_spi_chipselect(spi, BITBANG_CS_ACTIVE);
-				ndelay(nsecs);
-			}
-			cs_change = t->cs_change;
-			if (t->len)
-				status = mpc83xx_spi_bufs(spi, t);
-			if (status) {
-				status = -EMSGSIZE;
+	struct spi_device *spi = m->spi;
+	struct spi_transfer *t;
+	unsigned int cs_change;
+	const int nsecs = 50;
+	int status;
+
+	cs_change = 1;
+	status = 0;
+	list_for_each_entry(t, &m->transfers, transfer_list) {
+		if (t->bits_per_word || t->speed_hz) {
+			/* Don't allow changes if CS is active */
+			status = -EINVAL;
+
+			if (cs_change)
+				status = mpc83xx_spi_setup_transfer(spi, t);
+			if (status < 0)
 				break;
-			}
-			m->actual_length += t->len;
-
-			if (t->delay_usecs)
-				udelay(t->delay_usecs);
+		}
 
-			if (cs_change) {
-				ndelay(nsecs);
-				mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
-				ndelay(nsecs);
-			}
+		if (cs_change) {
+			mpc83xx_spi_chipselect(spi, BITBANG_CS_ACTIVE);
+			ndelay(nsecs);
+		}
+		cs_change = t->cs_change;
+		if (t->len)
+			status = mpc83xx_spi_bufs(spi, t);
+		if (status) {
+			status = -EMSGSIZE;
+			break;
 		}
+		m->actual_length += t->len;
 
-		m->status = status;
-		m->complete(m->context);
+		if (t->delay_usecs)
+			udelay(t->delay_usecs);
 
-		if (status || !cs_change) {
+		if (cs_change) {
 			ndelay(nsecs);
 			mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
+			ndelay(nsecs);
 		}
+	}
+
+	m->status = status;
+	m->complete(m->context);
+
+	if (status || !cs_change) {
+		ndelay(nsecs);
+		mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
+	}
+
+	mpc83xx_spi_setup_transfer(spi, NULL);
+}
+
+static void mpc83xx_spi_work(struct work_struct *work)
+{
+	struct mpc83xx_spi *mpc83xx_spi = container_of(work, struct mpc83xx_spi,
+						       work);
+
+	spin_lock_irq(&mpc83xx_spi->lock);
+	mpc83xx_spi->busy = 1;
+	while (!list_empty(&mpc83xx_spi->queue)) {
+		struct spi_message *m = container_of(mpc83xx_spi->queue.next,
+						   struct spi_message, queue);
+
+		list_del_init(&m->queue);
+		spin_unlock_irq(&mpc83xx_spi->lock);
 
-		mpc83xx_spi_setup_transfer(spi, NULL);
+		mpc83xx_spi_do_one_msg(m);
 
 		spin_lock_irq(&mpc83xx_spi->lock);
 	}
-- 
1.6.2.2

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

* [PATCH 7/9] spi_mpc83xx: Remove dead code
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
                   ` (5 preceding siblings ...)
  2009-04-30 23:48 ` [PATCH 6/9] spi_mpc83xx: Split mpc83xx_spi_work() into two routines Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 8/9] spi_mpc83xx: Rename spi_83xx.c to spi_8xxx.c Anton Vorontsov
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

This patch removes #if 0'ed code, and spi_mpc83xx->busy variable that
is used by that dead snippet only.

Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/spi/spi_mpc83xx.c |   16 ----------------
 1 files changed, 0 insertions(+), 16 deletions(-)

diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c
index 50112a5..4192ce4 100644
--- a/drivers/spi/spi_mpc83xx.c
+++ b/drivers/spi/spi_mpc83xx.c
@@ -98,8 +98,6 @@ struct mpc83xx_spi {
 
 	bool qe_mode;
 
-	u8 busy;
-
 	struct workqueue_struct *workqueue;
 	struct work_struct work;
 
@@ -411,7 +409,6 @@ static void mpc83xx_spi_work(struct work_struct *work)
 						       work);
 
 	spin_lock_irq(&mpc83xx_spi->lock);
-	mpc83xx_spi->busy = 1;
 	while (!list_empty(&mpc83xx_spi->queue)) {
 		struct spi_message *m = container_of(mpc83xx_spi->queue.next,
 						   struct spi_message, queue);
@@ -423,7 +420,6 @@ static void mpc83xx_spi_work(struct work_struct *work)
 
 		spin_lock_irq(&mpc83xx_spi->lock);
 	}
-	mpc83xx_spi->busy = 0;
 	spin_unlock_irq(&mpc83xx_spi->lock);
 }
 
@@ -482,18 +478,6 @@ static int mpc83xx_spi_setup(struct spi_device *spi)
 	dev_dbg(&spi->dev, "%s, mode %d, %u bits/w, %u Hz\n",
 		__func__, spi->mode & (SPI_CPOL | SPI_CPHA),
 		spi->bits_per_word, spi->max_speed_hz);
-#if 0 /* Don't think this is needed */
-	/* NOTE we _need_ to call chipselect() early, ideally with adapter
-	 * setup, unless the hardware defaults cooperate to avoid confusion
-	 * between normal (active low) and inverted chipselects.
-	 */
-
-	/* deselect chip (low or high) */
-	spin_lock(&mpc83xx_spi->lock);
-	if (!mpc83xx_spi->busy)
-		mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
-	spin_unlock(&mpc83xx_spi->lock);
-#endif
 	return 0;
 }
 
-- 
1.6.2.2

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

* [PATCH 8/9] spi_mpc83xx: Rename spi_83xx.c to spi_8xxx.c
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
                   ` (6 preceding siblings ...)
  2009-04-30 23:48 ` [PATCH 7/9] spi_mpc83xx: Remove dead code Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-04-30 23:48 ` [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g Anton Vorontsov
  2009-05-04 20:55 ` [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Andrew Morton
  9 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

The driver handles MPC83xx, MPC85xx and MPC86xx SPI controllers,
so rename the file for clarity.

Suggested-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/spi/Makefile      |    2 +-
 drivers/spi/spi_mpc83xx.c |  958 ---------------------------------------------
 drivers/spi/spi_mpc8xxx.c |  958 +++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 959 insertions(+), 959 deletions(-)
 delete mode 100644 drivers/spi/spi_mpc83xx.c
 create mode 100644 drivers/spi/spi_mpc8xxx.c

diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
index 5d04519..fdc7aa0 100644
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -24,7 +24,7 @@ obj-$(CONFIG_SPI_OMAP_UWIRE)		+= omap_uwire.o
 obj-$(CONFIG_SPI_OMAP24XX)		+= omap2_mcspi.o
 obj-$(CONFIG_SPI_ORION)			+= orion_spi.o
 obj-$(CONFIG_SPI_MPC52xx_PSC)		+= mpc52xx_psc_spi.o
-obj-$(CONFIG_SPI_MPC83xx)		+= spi_mpc83xx.o
+obj-$(CONFIG_SPI_MPC83xx)		+= spi_mpc8xxx.o
 obj-$(CONFIG_SPI_S3C24XX_GPIO)		+= spi_s3c24xx_gpio.o
 obj-$(CONFIG_SPI_S3C24XX)		+= spi_s3c24xx.o
 obj-$(CONFIG_SPI_TXX9)			+= spi_txx9.o
diff --git a/drivers/spi/spi_mpc83xx.c b/drivers/spi/spi_mpc83xx.c
deleted file mode 100644
index 4192ce4..0000000
--- a/drivers/spi/spi_mpc83xx.c
+++ /dev/null
@@ -1,958 +0,0 @@
-/*
- * MPC83xx SPI controller driver.
- *
- * Maintainer: Kumar Gala
- *
- * Copyright (C) 2006 Polycom, Inc.
- *
- * This program is free software; you can redistribute  it and/or modify it
- * under  the terms of  the GNU General  Public License as published by the
- * Free Software Foundation;  either version 2 of the  License, or (at your
- * option) any later version.
- */
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
-#include <linux/bug.h>
-#include <linux/errno.h>
-#include <linux/err.h>
-#include <linux/io.h>
-#include <linux/completion.h>
-#include <linux/interrupt.h>
-#include <linux/delay.h>
-#include <linux/irq.h>
-#include <linux/device.h>
-#include <linux/spi/spi.h>
-#include <linux/spi/spi_bitbang.h>
-#include <linux/platform_device.h>
-#include <linux/fsl_devices.h>
-#include <linux/of.h>
-#include <linux/of_platform.h>
-#include <linux/gpio.h>
-#include <linux/of_gpio.h>
-#include <linux/of_spi.h>
-
-#include <sysdev/fsl_soc.h>
-#include <asm/irq.h>
-
-/* SPI Controller registers */
-struct mpc83xx_spi_reg {
-	u8 res1[0x20];
-	__be32 mode;
-	__be32 event;
-	__be32 mask;
-	__be32 command;
-	__be32 transmit;
-	__be32 receive;
-};
-
-/* SPI Controller mode register definitions */
-#define	SPMODE_LOOP		(1 << 30)
-#define	SPMODE_CI_INACTIVEHIGH	(1 << 29)
-#define	SPMODE_CP_BEGIN_EDGECLK	(1 << 28)
-#define	SPMODE_DIV16		(1 << 27)
-#define	SPMODE_REV		(1 << 26)
-#define	SPMODE_MS		(1 << 25)
-#define	SPMODE_ENABLE		(1 << 24)
-#define	SPMODE_LEN(x)		((x) << 20)
-#define	SPMODE_PM(x)		((x) << 16)
-#define	SPMODE_OP		(1 << 14)
-#define	SPMODE_CG(x)		((x) << 7)
-
-/*
- * Default for SPI Mode:
- * 	SPI MODE 0 (inactive low, phase middle, MSB, 8-bit length, slow clk
- */
-#define	SPMODE_INIT_VAL (SPMODE_CI_INACTIVEHIGH | SPMODE_DIV16 | SPMODE_REV | \
-			 SPMODE_MS | SPMODE_LEN(7) | SPMODE_PM(0xf))
-
-/* SPIE register values */
-#define	SPIE_NE		0x00000200	/* Not empty */
-#define	SPIE_NF		0x00000100	/* Not full */
-
-/* SPIM register values */
-#define	SPIM_NE		0x00000200	/* Not empty */
-#define	SPIM_NF		0x00000100	/* Not full */
-
-/* SPI Controller driver's private data. */
-struct mpc83xx_spi {
-	struct mpc83xx_spi_reg __iomem *base;
-
-	/* rx & tx bufs from the spi_transfer */
-	const void *tx;
-	void *rx;
-
-	/* functions to deal with different sized buffers */
-	void (*get_rx) (u32 rx_data, struct mpc83xx_spi *);
-	u32(*get_tx) (struct mpc83xx_spi *);
-
-	unsigned int count;
-	unsigned int irq;
-
-	unsigned nsecs;		/* (clock cycle time)/2 */
-
-	u32 spibrg;		/* SPIBRG input clock */
-	u32 rx_shift;		/* RX data reg shift when in qe mode */
-	u32 tx_shift;		/* TX data reg shift when in qe mode */
-
-	bool qe_mode;
-
-	struct workqueue_struct *workqueue;
-	struct work_struct work;
-
-	struct list_head queue;
-	spinlock_t lock;
-
-	struct completion done;
-};
-
-struct spi_mpc83xx_cs {
-	/* functions to deal with different sized buffers */
-	void (*get_rx) (u32 rx_data, struct mpc83xx_spi *);
-	u32 (*get_tx) (struct mpc83xx_spi *);
-	u32 rx_shift;		/* RX data reg shift when in qe mode */
-	u32 tx_shift;		/* TX data reg shift when in qe mode */
-	u32 hw_mode;		/* Holds HW mode register settings */
-};
-
-static inline void mpc83xx_spi_write_reg(__be32 __iomem *reg, u32 val)
-{
-	out_be32(reg, val);
-}
-
-static inline u32 mpc83xx_spi_read_reg(__be32 __iomem *reg)
-{
-	return in_be32(reg);
-}
-
-#define MPC83XX_SPI_RX_BUF(type) 					  \
-static									  \
-void mpc83xx_spi_rx_buf_##type(u32 data, struct mpc83xx_spi *mpc83xx_spi) \
-{									  \
-	type *rx = mpc83xx_spi->rx;					  \
-	*rx++ = (type)(data >> mpc83xx_spi->rx_shift);			  \
-	mpc83xx_spi->rx = rx;						  \
-}
-
-#define MPC83XX_SPI_TX_BUF(type)				\
-static								\
-u32 mpc83xx_spi_tx_buf_##type(struct mpc83xx_spi *mpc83xx_spi)	\
-{								\
-	u32 data;						\
-	const type *tx = mpc83xx_spi->tx;			\
-	if (!tx)						\
-		return 0;					\
-	data = *tx++ << mpc83xx_spi->tx_shift;			\
-	mpc83xx_spi->tx = tx;					\
-	return data;						\
-}
-
-MPC83XX_SPI_RX_BUF(u8)
-MPC83XX_SPI_RX_BUF(u16)
-MPC83XX_SPI_RX_BUF(u32)
-MPC83XX_SPI_TX_BUF(u8)
-MPC83XX_SPI_TX_BUF(u16)
-MPC83XX_SPI_TX_BUF(u32)
-
-static void mpc83xx_spi_chipselect(struct spi_device *spi, int value)
-{
-	struct mpc83xx_spi *mpc83xx_spi = spi_master_get_devdata(spi->master);
-	struct fsl_spi_platform_data *pdata = spi->dev.parent->platform_data;
-	bool pol = spi->mode & SPI_CS_HIGH;
-	struct spi_mpc83xx_cs	*cs = spi->controller_state;
-
-	if (value == BITBANG_CS_INACTIVE) {
-		if (pdata->cs_control)
-			pdata->cs_control(spi, !pol);
-	}
-
-	if (value == BITBANG_CS_ACTIVE) {
-		u32 regval = mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
-
-		mpc83xx_spi->rx_shift = cs->rx_shift;
-		mpc83xx_spi->tx_shift = cs->tx_shift;
-		mpc83xx_spi->get_rx = cs->get_rx;
-		mpc83xx_spi->get_tx = cs->get_tx;
-
-		if (cs->hw_mode != regval) {
-			unsigned long flags;
-			__be32 __iomem *mode = &mpc83xx_spi->base->mode;
-
-			regval = cs->hw_mode;
-			/* Turn off IRQs locally to minimize time that
-			 * SPI is disabled
-			 */
-			local_irq_save(flags);
-			/* Turn off SPI unit prior changing mode */
-			mpc83xx_spi_write_reg(mode, regval & ~SPMODE_ENABLE);
-			mpc83xx_spi_write_reg(mode, regval);
-			local_irq_restore(flags);
-		}
-		if (pdata->cs_control)
-			pdata->cs_control(spi, pol);
-	}
-}
-
-static
-int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
-{
-	struct mpc83xx_spi *mpc83xx_spi;
-	u32 regval;
-	u8 bits_per_word, pm;
-	u32 hz;
-	struct spi_mpc83xx_cs	*cs = spi->controller_state;
-
-	mpc83xx_spi = spi_master_get_devdata(spi->master);
-
-	if (t) {
-		bits_per_word = t->bits_per_word;
-		hz = t->speed_hz;
-	} else {
-		bits_per_word = 0;
-		hz = 0;
-	}
-
-	/* spi_transfer level calls that work per-word */
-	if (!bits_per_word)
-		bits_per_word = spi->bits_per_word;
-
-	/* Make sure its a bit width we support [4..16, 32] */
-	if ((bits_per_word < 4)
-	    || ((bits_per_word > 16) && (bits_per_word != 32)))
-		return -EINVAL;
-
-	if (!hz)
-		hz = spi->max_speed_hz;
-
-	cs->rx_shift = 0;
-	cs->tx_shift = 0;
-	if (bits_per_word <= 8) {
-		cs->get_rx = mpc83xx_spi_rx_buf_u8;
-		cs->get_tx = mpc83xx_spi_tx_buf_u8;
-		if (mpc83xx_spi->qe_mode) {
-			cs->rx_shift = 16;
-			cs->tx_shift = 24;
-		}
-	} else if (bits_per_word <= 16) {
-		cs->get_rx = mpc83xx_spi_rx_buf_u16;
-		cs->get_tx = mpc83xx_spi_tx_buf_u16;
-		if (mpc83xx_spi->qe_mode) {
-			cs->rx_shift = 16;
-			cs->tx_shift = 16;
-		}
-	} else if (bits_per_word <= 32) {
-		cs->get_rx = mpc83xx_spi_rx_buf_u32;
-		cs->get_tx = mpc83xx_spi_tx_buf_u32;
-	} else
-		return -EINVAL;
-
-	if (mpc83xx_spi->qe_mode && spi->mode & SPI_LSB_FIRST) {
-		cs->tx_shift = 0;
-		if (bits_per_word <= 8)
-			cs->rx_shift = 8;
-		else
-			cs->rx_shift = 0;
-	}
-
-	mpc83xx_spi->rx_shift = cs->rx_shift;
-	mpc83xx_spi->tx_shift = cs->tx_shift;
-	mpc83xx_spi->get_rx = cs->get_rx;
-	mpc83xx_spi->get_tx = cs->get_tx;
-
-	if (bits_per_word == 32)
-		bits_per_word = 0;
-	else
-		bits_per_word = bits_per_word - 1;
-
-	/* mask out bits we are going to set */
-	cs->hw_mode &= ~(SPMODE_LEN(0xF) | SPMODE_DIV16
-				  | SPMODE_PM(0xF));
-
-	cs->hw_mode |= SPMODE_LEN(bits_per_word);
-
-	if ((mpc83xx_spi->spibrg / hz) > 64) {
-		cs->hw_mode |= SPMODE_DIV16;
-		pm = mpc83xx_spi->spibrg / (hz * 64);
-
-		WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. "
-			  "Will use %d Hz instead.\n", dev_name(&spi->dev),
-			  hz, mpc83xx_spi->spibrg / 1024);
-		if (pm > 16)
-			pm = 16;
-	} else
-		pm = mpc83xx_spi->spibrg / (hz * 4);
-	if (pm)
-		pm--;
-
-	cs->hw_mode |= SPMODE_PM(pm);
-	regval =  mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
-	if (cs->hw_mode != regval) {
-		unsigned long flags;
-		__be32 __iomem *mode = &mpc83xx_spi->base->mode;
-
-		regval = cs->hw_mode;
-		/* Turn off IRQs locally to minimize time
-		 * that SPI is disabled
-		 */
-		local_irq_save(flags);
-		/* Turn off SPI unit prior changing mode */
-		mpc83xx_spi_write_reg(mode, regval & ~SPMODE_ENABLE);
-		mpc83xx_spi_write_reg(mode, regval);
-		local_irq_restore(flags);
-	}
-	return 0;
-}
-
-static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
-{
-	struct mpc83xx_spi *mpc83xx_spi;
-	u32 word, len, bits_per_word;
-
-	mpc83xx_spi = spi_master_get_devdata(spi->master);
-
-	mpc83xx_spi->tx = t->tx_buf;
-	mpc83xx_spi->rx = t->rx_buf;
-	bits_per_word = spi->bits_per_word;
-	if (t->bits_per_word)
-		bits_per_word = t->bits_per_word;
-	len = t->len;
-	if (bits_per_word > 8) {
-		/* invalid length? */
-		if (len & 1)
-			return -EINVAL;
-		len /= 2;
-	}
-	if (bits_per_word > 16) {
-		/* invalid length? */
-		if (len & 1)
-			return -EINVAL;
-		len /= 2;
-	}
-	mpc83xx_spi->count = len;
-
-	INIT_COMPLETION(mpc83xx_spi->done);
-
-	/* enable rx ints */
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, SPIM_NE);
-
-	/* transmit word */
-	word = mpc83xx_spi->get_tx(mpc83xx_spi);
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit, word);
-
-	wait_for_completion(&mpc83xx_spi->done);
-
-	/* disable rx ints */
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, 0);
-
-	return mpc83xx_spi->count;
-}
-
-static void mpc83xx_spi_do_one_msg(struct spi_message *m)
-{
-	struct spi_device *spi = m->spi;
-	struct spi_transfer *t;
-	unsigned int cs_change;
-	const int nsecs = 50;
-	int status;
-
-	cs_change = 1;
-	status = 0;
-	list_for_each_entry(t, &m->transfers, transfer_list) {
-		if (t->bits_per_word || t->speed_hz) {
-			/* Don't allow changes if CS is active */
-			status = -EINVAL;
-
-			if (cs_change)
-				status = mpc83xx_spi_setup_transfer(spi, t);
-			if (status < 0)
-				break;
-		}
-
-		if (cs_change) {
-			mpc83xx_spi_chipselect(spi, BITBANG_CS_ACTIVE);
-			ndelay(nsecs);
-		}
-		cs_change = t->cs_change;
-		if (t->len)
-			status = mpc83xx_spi_bufs(spi, t);
-		if (status) {
-			status = -EMSGSIZE;
-			break;
-		}
-		m->actual_length += t->len;
-
-		if (t->delay_usecs)
-			udelay(t->delay_usecs);
-
-		if (cs_change) {
-			ndelay(nsecs);
-			mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
-			ndelay(nsecs);
-		}
-	}
-
-	m->status = status;
-	m->complete(m->context);
-
-	if (status || !cs_change) {
-		ndelay(nsecs);
-		mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
-	}
-
-	mpc83xx_spi_setup_transfer(spi, NULL);
-}
-
-static void mpc83xx_spi_work(struct work_struct *work)
-{
-	struct mpc83xx_spi *mpc83xx_spi = container_of(work, struct mpc83xx_spi,
-						       work);
-
-	spin_lock_irq(&mpc83xx_spi->lock);
-	while (!list_empty(&mpc83xx_spi->queue)) {
-		struct spi_message *m = container_of(mpc83xx_spi->queue.next,
-						   struct spi_message, queue);
-
-		list_del_init(&m->queue);
-		spin_unlock_irq(&mpc83xx_spi->lock);
-
-		mpc83xx_spi_do_one_msg(m);
-
-		spin_lock_irq(&mpc83xx_spi->lock);
-	}
-	spin_unlock_irq(&mpc83xx_spi->lock);
-}
-
-/* the spi->mode bits understood by this driver: */
-#define MODEBITS	(SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
-			| SPI_LSB_FIRST | SPI_LOOP)
-
-static int mpc83xx_spi_setup(struct spi_device *spi)
-{
-	struct mpc83xx_spi *mpc83xx_spi;
-	int retval;
-	u32 hw_mode;
-	struct spi_mpc83xx_cs	*cs = spi->controller_state;
-
-	if (spi->mode & ~MODEBITS) {
-		dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
-			spi->mode & ~MODEBITS);
-		return -EINVAL;
-	}
-
-	if (!spi->max_speed_hz)
-		return -EINVAL;
-
-	if (!cs) {
-		cs = kzalloc(sizeof *cs, GFP_KERNEL);
-		if (!cs)
-			return -ENOMEM;
-		spi->controller_state = cs;
-	}
-	mpc83xx_spi = spi_master_get_devdata(spi->master);
-
-	if (!spi->bits_per_word)
-		spi->bits_per_word = 8;
-
-	hw_mode = cs->hw_mode; /* Save orginal settings */
-	cs->hw_mode = mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
-	/* mask out bits we are going to set */
-	cs->hw_mode &= ~(SPMODE_CP_BEGIN_EDGECLK | SPMODE_CI_INACTIVEHIGH
-			 | SPMODE_REV | SPMODE_LOOP);
-
-	if (spi->mode & SPI_CPHA)
-		cs->hw_mode |= SPMODE_CP_BEGIN_EDGECLK;
-	if (spi->mode & SPI_CPOL)
-		cs->hw_mode |= SPMODE_CI_INACTIVEHIGH;
-	if (!(spi->mode & SPI_LSB_FIRST))
-		cs->hw_mode |= SPMODE_REV;
-	if (spi->mode & SPI_LOOP)
-		cs->hw_mode |= SPMODE_LOOP;
-
-	retval = mpc83xx_spi_setup_transfer(spi, NULL);
-	if (retval < 0) {
-		cs->hw_mode = hw_mode; /* Restore settings */
-		return retval;
-	}
-
-	dev_dbg(&spi->dev, "%s, mode %d, %u bits/w, %u Hz\n",
-		__func__, spi->mode & (SPI_CPOL | SPI_CPHA),
-		spi->bits_per_word, spi->max_speed_hz);
-	return 0;
-}
-
-static irqreturn_t mpc83xx_spi_irq(s32 irq, void *context_data)
-{
-	struct mpc83xx_spi *mpc83xx_spi = context_data;
-	u32 event;
-	irqreturn_t ret = IRQ_NONE;
-
-	/* Get interrupt events(tx/rx) */
-	event = mpc83xx_spi_read_reg(&mpc83xx_spi->base->event);
-
-	/* We need handle RX first */
-	if (event & SPIE_NE) {
-		u32 rx_data = mpc83xx_spi_read_reg(&mpc83xx_spi->base->receive);
-
-		if (mpc83xx_spi->rx)
-			mpc83xx_spi->get_rx(rx_data, mpc83xx_spi);
-
-		ret = IRQ_HANDLED;
-	}
-
-	if ((event & SPIE_NF) == 0)
-		/* spin until TX is done */
-		while (((event =
-			 mpc83xx_spi_read_reg(&mpc83xx_spi->base->event)) &
-						SPIE_NF) == 0)
-			cpu_relax();
-
-	mpc83xx_spi->count -= 1;
-	if (mpc83xx_spi->count) {
-		u32 word = mpc83xx_spi->get_tx(mpc83xx_spi);
-		mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit, word);
-	} else {
-		complete(&mpc83xx_spi->done);
-	}
-
-	/* Clear the events */
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->event, event);
-
-	return ret;
-}
-static int mpc83xx_spi_transfer(struct spi_device *spi,
-				struct spi_message *m)
-{
-	struct mpc83xx_spi *mpc83xx_spi = spi_master_get_devdata(spi->master);
-	unsigned long flags;
-
-	m->actual_length = 0;
-	m->status = -EINPROGRESS;
-
-	spin_lock_irqsave(&mpc83xx_spi->lock, flags);
-	list_add_tail(&m->queue, &mpc83xx_spi->queue);
-	queue_work(mpc83xx_spi->workqueue, &mpc83xx_spi->work);
-	spin_unlock_irqrestore(&mpc83xx_spi->lock, flags);
-
-	return 0;
-}
-
-
-static void mpc83xx_spi_cleanup(struct spi_device *spi)
-{
-	kfree(spi->controller_state);
-}
-
-static struct spi_master * __devinit
-mpc83xx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
-{
-	struct fsl_spi_platform_data *pdata = dev->platform_data;
-	struct spi_master *master;
-	struct mpc83xx_spi *mpc83xx_spi;
-	u32 regval;
-	int ret = 0;
-
-	master = spi_alloc_master(dev, sizeof(struct mpc83xx_spi));
-	if (master == NULL) {
-		ret = -ENOMEM;
-		goto err;
-	}
-
-	dev_set_drvdata(dev, master);
-
-	master->setup = mpc83xx_spi_setup;
-	master->transfer = mpc83xx_spi_transfer;
-	master->cleanup = mpc83xx_spi_cleanup;
-
-	mpc83xx_spi = spi_master_get_devdata(master);
-	mpc83xx_spi->qe_mode = pdata->qe_mode;
-	mpc83xx_spi->get_rx = mpc83xx_spi_rx_buf_u8;
-	mpc83xx_spi->get_tx = mpc83xx_spi_tx_buf_u8;
-	mpc83xx_spi->spibrg = pdata->sysclk;
-
-	mpc83xx_spi->rx_shift = 0;
-	mpc83xx_spi->tx_shift = 0;
-	if (mpc83xx_spi->qe_mode) {
-		mpc83xx_spi->rx_shift = 16;
-		mpc83xx_spi->tx_shift = 24;
-	}
-
-	init_completion(&mpc83xx_spi->done);
-
-	mpc83xx_spi->base = ioremap(mem->start, mem->end - mem->start + 1);
-	if (mpc83xx_spi->base == NULL) {
-		ret = -ENOMEM;
-		goto put_master;
-	}
-
-	mpc83xx_spi->irq = irq;
-
-	/* Register for SPI Interrupt */
-	ret = request_irq(mpc83xx_spi->irq, mpc83xx_spi_irq,
-			  0, "mpc83xx_spi", mpc83xx_spi);
-
-	if (ret != 0)
-		goto unmap_io;
-
-	master->bus_num = pdata->bus_num;
-	master->num_chipselect = pdata->max_chipselect;
-
-	/* SPI controller initializations */
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, 0);
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, 0);
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->command, 0);
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->event, 0xffffffff);
-
-	/* Enable SPI interface */
-	regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
-	if (pdata->qe_mode)
-		regval |= SPMODE_OP;
-
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, regval);
-	spin_lock_init(&mpc83xx_spi->lock);
-	init_completion(&mpc83xx_spi->done);
-	INIT_WORK(&mpc83xx_spi->work, mpc83xx_spi_work);
-	INIT_LIST_HEAD(&mpc83xx_spi->queue);
-
-	mpc83xx_spi->workqueue = create_singlethread_workqueue(
-		dev_name(master->dev.parent));
-	if (mpc83xx_spi->workqueue == NULL) {
-		ret = -EBUSY;
-		goto free_irq;
-	}
-
-	ret = spi_register_master(master);
-	if (ret < 0)
-		goto unreg_master;
-
-	printk(KERN_INFO
-	       "%s: MPC83xx SPI Controller driver at 0x%p (irq = %d)\n",
-	       dev_name(dev), mpc83xx_spi->base, mpc83xx_spi->irq);
-
-	return master;
-
-unreg_master:
-	destroy_workqueue(mpc83xx_spi->workqueue);
-free_irq:
-	free_irq(mpc83xx_spi->irq, mpc83xx_spi);
-unmap_io:
-	iounmap(mpc83xx_spi->base);
-put_master:
-	spi_master_put(master);
-err:
-	return ERR_PTR(ret);
-}
-
-static int __devexit mpc83xx_spi_remove(struct device *dev)
-{
-	struct mpc83xx_spi *mpc83xx_spi;
-	struct spi_master *master;
-
-	master = dev_get_drvdata(dev);
-	mpc83xx_spi = spi_master_get_devdata(master);
-
-	flush_workqueue(mpc83xx_spi->workqueue);
-	destroy_workqueue(mpc83xx_spi->workqueue);
-	spi_unregister_master(master);
-
-	free_irq(mpc83xx_spi->irq, mpc83xx_spi);
-	iounmap(mpc83xx_spi->base);
-
-	return 0;
-}
-
-struct mpc83xx_spi_probe_info {
-	struct fsl_spi_platform_data pdata;
-	int *gpios;
-	bool *alow_flags;
-};
-
-static struct mpc83xx_spi_probe_info *
-to_of_pinfo(struct fsl_spi_platform_data *pdata)
-{
-	return container_of(pdata, struct mpc83xx_spi_probe_info, pdata);
-}
-
-static void mpc83xx_spi_cs_control(struct spi_device *spi, bool on)
-{
-	struct device *dev = spi->dev.parent;
-	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data);
-	u16 cs = spi->chip_select;
-	int gpio = pinfo->gpios[cs];
-	bool alow = pinfo->alow_flags[cs];
-
-	gpio_set_value(gpio, on ^ alow);
-}
-
-static int of_mpc83xx_spi_get_chipselects(struct device *dev)
-{
-	struct device_node *np = dev_archdata_get_node(&dev->archdata);
-	struct fsl_spi_platform_data *pdata = dev->platform_data;
-	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(pdata);
-	unsigned int ngpios;
-	int i = 0;
-	int ret;
-
-	ngpios = of_gpio_count(np);
-	if (!ngpios) {
-		/*
-		 * SPI w/o chip-select line. One SPI device is still permitted
-		 * though.
-		 */
-		pdata->max_chipselect = 1;
-		return 0;
-	}
-
-	pinfo->gpios = kmalloc(ngpios * sizeof(pinfo->gpios), GFP_KERNEL);
-	if (!pinfo->gpios)
-		return -ENOMEM;
-	memset(pinfo->gpios, -1, ngpios * sizeof(pinfo->gpios));
-
-	pinfo->alow_flags = kzalloc(ngpios * sizeof(pinfo->alow_flags),
-				    GFP_KERNEL);
-	if (!pinfo->alow_flags) {
-		ret = -ENOMEM;
-		goto err_alloc_flags;
-	}
-
-	for (; i < ngpios; i++) {
-		int gpio;
-		enum of_gpio_flags flags;
-
-		gpio = of_get_gpio_flags(np, i, &flags);
-		if (!gpio_is_valid(gpio)) {
-			dev_err(dev, "invalid gpio #%d: %d\n", i, gpio);
-			goto err_loop;
-		}
-
-		ret = gpio_request(gpio, dev_name(dev));
-		if (ret) {
-			dev_err(dev, "can't request gpio #%d: %d\n", i, ret);
-			goto err_loop;
-		}
-
-		pinfo->gpios[i] = gpio;
-		pinfo->alow_flags[i] = flags & OF_GPIO_ACTIVE_LOW;
-
-		ret = gpio_direction_output(pinfo->gpios[i],
-					    pinfo->alow_flags[i]);
-		if (ret) {
-			dev_err(dev, "can't set output direction for gpio "
-				"#%d: %d\n", i, ret);
-			goto err_loop;
-		}
-	}
-
-	pdata->max_chipselect = ngpios;
-	pdata->cs_control = mpc83xx_spi_cs_control;
-
-	return 0;
-
-err_loop:
-	while (i >= 0) {
-		if (gpio_is_valid(pinfo->gpios[i]))
-			gpio_free(pinfo->gpios[i]);
-		i--;
-	}
-
-	kfree(pinfo->alow_flags);
-	pinfo->alow_flags = NULL;
-err_alloc_flags:
-	kfree(pinfo->gpios);
-	pinfo->gpios = NULL;
-	return ret;
-}
-
-static int of_mpc83xx_spi_free_chipselects(struct device *dev)
-{
-	struct fsl_spi_platform_data *pdata = dev->platform_data;
-	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(pdata);
-	int i;
-
-	if (!pinfo->gpios)
-		return 0;
-
-	for (i = 0; i < pdata->max_chipselect; i++) {
-		if (gpio_is_valid(pinfo->gpios[i]))
-			gpio_free(pinfo->gpios[i]);
-	}
-
-	kfree(pinfo->gpios);
-	kfree(pinfo->alow_flags);
-	return 0;
-}
-
-static int __devinit of_mpc83xx_spi_probe(struct of_device *ofdev,
-					  const struct of_device_id *ofid)
-{
-	struct device *dev = &ofdev->dev;
-	struct device_node *np = ofdev->node;
-	struct mpc83xx_spi_probe_info *pinfo;
-	struct fsl_spi_platform_data *pdata;
-	struct spi_master *master;
-	struct resource mem;
-	struct resource irq;
-	const void *prop;
-	int ret = -ENOMEM;
-
-	pinfo = kzalloc(sizeof(*pinfo), GFP_KERNEL);
-	if (!pinfo)
-		return -ENOMEM;
-
-	pdata = &pinfo->pdata;
-	dev->platform_data = pdata;
-
-	/* Allocate bus num dynamically. */
-	pdata->bus_num = -1;
-
-	/* SPI controller is either clocked from QE or SoC clock. */
-	pdata->sysclk = get_brgfreq();
-	if (pdata->sysclk == -1) {
-		pdata->sysclk = fsl_get_sys_freq();
-		if (pdata->sysclk == -1) {
-			ret = -ENODEV;
-			goto err_clk;
-		}
-	}
-
-	prop = of_get_property(np, "mode", NULL);
-	if (prop && !strcmp(prop, "cpu-qe"))
-		pdata->qe_mode = 1;
-
-	ret = of_mpc83xx_spi_get_chipselects(dev);
-	if (ret)
-		goto err;
-
-	ret = of_address_to_resource(np, 0, &mem);
-	if (ret)
-		goto err;
-
-	ret = of_irq_to_resource(np, 0, &irq);
-	if (!ret) {
-		ret = -EINVAL;
-		goto err;
-	}
-
-	master = mpc83xx_spi_probe(dev, &mem, irq.start);
-	if (IS_ERR(master)) {
-		ret = PTR_ERR(master);
-		goto err;
-	}
-
-	of_register_spi_devices(master, np);
-
-	return 0;
-
-err:
-	of_mpc83xx_spi_free_chipselects(dev);
-err_clk:
-	kfree(pinfo);
-	return ret;
-}
-
-static int __devexit of_mpc83xx_spi_remove(struct of_device *ofdev)
-{
-	int ret;
-
-	ret = mpc83xx_spi_remove(&ofdev->dev);
-	if (ret)
-		return ret;
-	of_mpc83xx_spi_free_chipselects(&ofdev->dev);
-	return 0;
-}
-
-static const struct of_device_id of_mpc83xx_spi_match[] = {
-	{ .compatible = "fsl,spi" },
-	{},
-};
-MODULE_DEVICE_TABLE(of, of_mpc83xx_spi_match);
-
-static struct of_platform_driver of_mpc83xx_spi_driver = {
-	.name		= "mpc83xx_spi",
-	.match_table	= of_mpc83xx_spi_match,
-	.probe		= of_mpc83xx_spi_probe,
-	.remove		= __devexit_p(of_mpc83xx_spi_remove),
-};
-
-#ifdef CONFIG_MPC832x_RDB
-/*
- * 				XXX XXX XXX
- * This is "legacy" platform driver, was used by the MPC8323E-RDB boards
- * only. The driver should go away soon, since newer MPC8323E-RDB's device
- * tree can work with OpenFirmware driver. But for now we support old trees
- * as well.
- */
-static int __devinit plat_mpc83xx_spi_probe(struct platform_device *pdev)
-{
-	struct resource *mem;
-	unsigned int irq;
-	struct spi_master *master;
-
-	if (!pdev->dev.platform_data)
-		return -EINVAL;
-
-	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	if (!mem)
-		return -EINVAL;
-
-	irq = platform_get_irq(pdev, 0);
-	if (!irq)
-		return -EINVAL;
-
-	master = mpc83xx_spi_probe(&pdev->dev, mem, irq);
-	if (IS_ERR(master))
-		return PTR_ERR(master);
-	return 0;
-}
-
-static int __devexit plat_mpc83xx_spi_remove(struct platform_device *pdev)
-{
-	return mpc83xx_spi_remove(&pdev->dev);
-}
-
-MODULE_ALIAS("platform:mpc83xx_spi");
-static struct platform_driver mpc83xx_spi_driver = {
-	.probe = plat_mpc83xx_spi_probe,
-	.remove = __exit_p(plat_mpc83xx_spi_remove),
-	.driver = {
-		.name = "mpc83xx_spi",
-		.owner = THIS_MODULE,
-	},
-};
-
-static bool legacy_driver_failed;
-
-static void __init legacy_driver_register(void)
-{
-	legacy_driver_failed = platform_driver_register(&mpc83xx_spi_driver);
-}
-
-static void __exit legacy_driver_unregister(void)
-{
-	if (legacy_driver_failed)
-		return;
-	platform_driver_unregister(&mpc83xx_spi_driver);
-}
-#else
-static void __init legacy_driver_register(void) {}
-static void __exit legacy_driver_unregister(void) {}
-#endif /* CONFIG_MPC832x_RDB */
-
-static int __init mpc83xx_spi_init(void)
-{
-	legacy_driver_register();
-	return of_register_platform_driver(&of_mpc83xx_spi_driver);
-}
-
-static void __exit mpc83xx_spi_exit(void)
-{
-	of_unregister_platform_driver(&of_mpc83xx_spi_driver);
-	legacy_driver_unregister();
-}
-
-module_init(mpc83xx_spi_init);
-module_exit(mpc83xx_spi_exit);
-
-MODULE_AUTHOR("Kumar Gala");
-MODULE_DESCRIPTION("Simple MPC83xx SPI Driver");
-MODULE_LICENSE("GPL");
diff --git a/drivers/spi/spi_mpc8xxx.c b/drivers/spi/spi_mpc8xxx.c
new file mode 100644
index 0000000..4192ce4
--- /dev/null
+++ b/drivers/spi/spi_mpc8xxx.c
@@ -0,0 +1,958 @@
+/*
+ * MPC83xx SPI controller driver.
+ *
+ * Maintainer: Kumar Gala
+ *
+ * Copyright (C) 2006 Polycom, Inc.
+ *
+ * This program is free software; you can redistribute  it and/or modify it
+ * under  the terms of  the GNU General  Public License as published by the
+ * Free Software Foundation;  either version 2 of the  License, or (at your
+ * option) any later version.
+ */
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/bug.h>
+#include <linux/errno.h>
+#include <linux/err.h>
+#include <linux/io.h>
+#include <linux/completion.h>
+#include <linux/interrupt.h>
+#include <linux/delay.h>
+#include <linux/irq.h>
+#include <linux/device.h>
+#include <linux/spi/spi.h>
+#include <linux/spi/spi_bitbang.h>
+#include <linux/platform_device.h>
+#include <linux/fsl_devices.h>
+#include <linux/of.h>
+#include <linux/of_platform.h>
+#include <linux/gpio.h>
+#include <linux/of_gpio.h>
+#include <linux/of_spi.h>
+
+#include <sysdev/fsl_soc.h>
+#include <asm/irq.h>
+
+/* SPI Controller registers */
+struct mpc83xx_spi_reg {
+	u8 res1[0x20];
+	__be32 mode;
+	__be32 event;
+	__be32 mask;
+	__be32 command;
+	__be32 transmit;
+	__be32 receive;
+};
+
+/* SPI Controller mode register definitions */
+#define	SPMODE_LOOP		(1 << 30)
+#define	SPMODE_CI_INACTIVEHIGH	(1 << 29)
+#define	SPMODE_CP_BEGIN_EDGECLK	(1 << 28)
+#define	SPMODE_DIV16		(1 << 27)
+#define	SPMODE_REV		(1 << 26)
+#define	SPMODE_MS		(1 << 25)
+#define	SPMODE_ENABLE		(1 << 24)
+#define	SPMODE_LEN(x)		((x) << 20)
+#define	SPMODE_PM(x)		((x) << 16)
+#define	SPMODE_OP		(1 << 14)
+#define	SPMODE_CG(x)		((x) << 7)
+
+/*
+ * Default for SPI Mode:
+ * 	SPI MODE 0 (inactive low, phase middle, MSB, 8-bit length, slow clk
+ */
+#define	SPMODE_INIT_VAL (SPMODE_CI_INACTIVEHIGH | SPMODE_DIV16 | SPMODE_REV | \
+			 SPMODE_MS | SPMODE_LEN(7) | SPMODE_PM(0xf))
+
+/* SPIE register values */
+#define	SPIE_NE		0x00000200	/* Not empty */
+#define	SPIE_NF		0x00000100	/* Not full */
+
+/* SPIM register values */
+#define	SPIM_NE		0x00000200	/* Not empty */
+#define	SPIM_NF		0x00000100	/* Not full */
+
+/* SPI Controller driver's private data. */
+struct mpc83xx_spi {
+	struct mpc83xx_spi_reg __iomem *base;
+
+	/* rx & tx bufs from the spi_transfer */
+	const void *tx;
+	void *rx;
+
+	/* functions to deal with different sized buffers */
+	void (*get_rx) (u32 rx_data, struct mpc83xx_spi *);
+	u32(*get_tx) (struct mpc83xx_spi *);
+
+	unsigned int count;
+	unsigned int irq;
+
+	unsigned nsecs;		/* (clock cycle time)/2 */
+
+	u32 spibrg;		/* SPIBRG input clock */
+	u32 rx_shift;		/* RX data reg shift when in qe mode */
+	u32 tx_shift;		/* TX data reg shift when in qe mode */
+
+	bool qe_mode;
+
+	struct workqueue_struct *workqueue;
+	struct work_struct work;
+
+	struct list_head queue;
+	spinlock_t lock;
+
+	struct completion done;
+};
+
+struct spi_mpc83xx_cs {
+	/* functions to deal with different sized buffers */
+	void (*get_rx) (u32 rx_data, struct mpc83xx_spi *);
+	u32 (*get_tx) (struct mpc83xx_spi *);
+	u32 rx_shift;		/* RX data reg shift when in qe mode */
+	u32 tx_shift;		/* TX data reg shift when in qe mode */
+	u32 hw_mode;		/* Holds HW mode register settings */
+};
+
+static inline void mpc83xx_spi_write_reg(__be32 __iomem *reg, u32 val)
+{
+	out_be32(reg, val);
+}
+
+static inline u32 mpc83xx_spi_read_reg(__be32 __iomem *reg)
+{
+	return in_be32(reg);
+}
+
+#define MPC83XX_SPI_RX_BUF(type) 					  \
+static									  \
+void mpc83xx_spi_rx_buf_##type(u32 data, struct mpc83xx_spi *mpc83xx_spi) \
+{									  \
+	type *rx = mpc83xx_spi->rx;					  \
+	*rx++ = (type)(data >> mpc83xx_spi->rx_shift);			  \
+	mpc83xx_spi->rx = rx;						  \
+}
+
+#define MPC83XX_SPI_TX_BUF(type)				\
+static								\
+u32 mpc83xx_spi_tx_buf_##type(struct mpc83xx_spi *mpc83xx_spi)	\
+{								\
+	u32 data;						\
+	const type *tx = mpc83xx_spi->tx;			\
+	if (!tx)						\
+		return 0;					\
+	data = *tx++ << mpc83xx_spi->tx_shift;			\
+	mpc83xx_spi->tx = tx;					\
+	return data;						\
+}
+
+MPC83XX_SPI_RX_BUF(u8)
+MPC83XX_SPI_RX_BUF(u16)
+MPC83XX_SPI_RX_BUF(u32)
+MPC83XX_SPI_TX_BUF(u8)
+MPC83XX_SPI_TX_BUF(u16)
+MPC83XX_SPI_TX_BUF(u32)
+
+static void mpc83xx_spi_chipselect(struct spi_device *spi, int value)
+{
+	struct mpc83xx_spi *mpc83xx_spi = spi_master_get_devdata(spi->master);
+	struct fsl_spi_platform_data *pdata = spi->dev.parent->platform_data;
+	bool pol = spi->mode & SPI_CS_HIGH;
+	struct spi_mpc83xx_cs	*cs = spi->controller_state;
+
+	if (value == BITBANG_CS_INACTIVE) {
+		if (pdata->cs_control)
+			pdata->cs_control(spi, !pol);
+	}
+
+	if (value == BITBANG_CS_ACTIVE) {
+		u32 regval = mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
+
+		mpc83xx_spi->rx_shift = cs->rx_shift;
+		mpc83xx_spi->tx_shift = cs->tx_shift;
+		mpc83xx_spi->get_rx = cs->get_rx;
+		mpc83xx_spi->get_tx = cs->get_tx;
+
+		if (cs->hw_mode != regval) {
+			unsigned long flags;
+			__be32 __iomem *mode = &mpc83xx_spi->base->mode;
+
+			regval = cs->hw_mode;
+			/* Turn off IRQs locally to minimize time that
+			 * SPI is disabled
+			 */
+			local_irq_save(flags);
+			/* Turn off SPI unit prior changing mode */
+			mpc83xx_spi_write_reg(mode, regval & ~SPMODE_ENABLE);
+			mpc83xx_spi_write_reg(mode, regval);
+			local_irq_restore(flags);
+		}
+		if (pdata->cs_control)
+			pdata->cs_control(spi, pol);
+	}
+}
+
+static
+int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
+{
+	struct mpc83xx_spi *mpc83xx_spi;
+	u32 regval;
+	u8 bits_per_word, pm;
+	u32 hz;
+	struct spi_mpc83xx_cs	*cs = spi->controller_state;
+
+	mpc83xx_spi = spi_master_get_devdata(spi->master);
+
+	if (t) {
+		bits_per_word = t->bits_per_word;
+		hz = t->speed_hz;
+	} else {
+		bits_per_word = 0;
+		hz = 0;
+	}
+
+	/* spi_transfer level calls that work per-word */
+	if (!bits_per_word)
+		bits_per_word = spi->bits_per_word;
+
+	/* Make sure its a bit width we support [4..16, 32] */
+	if ((bits_per_word < 4)
+	    || ((bits_per_word > 16) && (bits_per_word != 32)))
+		return -EINVAL;
+
+	if (!hz)
+		hz = spi->max_speed_hz;
+
+	cs->rx_shift = 0;
+	cs->tx_shift = 0;
+	if (bits_per_word <= 8) {
+		cs->get_rx = mpc83xx_spi_rx_buf_u8;
+		cs->get_tx = mpc83xx_spi_tx_buf_u8;
+		if (mpc83xx_spi->qe_mode) {
+			cs->rx_shift = 16;
+			cs->tx_shift = 24;
+		}
+	} else if (bits_per_word <= 16) {
+		cs->get_rx = mpc83xx_spi_rx_buf_u16;
+		cs->get_tx = mpc83xx_spi_tx_buf_u16;
+		if (mpc83xx_spi->qe_mode) {
+			cs->rx_shift = 16;
+			cs->tx_shift = 16;
+		}
+	} else if (bits_per_word <= 32) {
+		cs->get_rx = mpc83xx_spi_rx_buf_u32;
+		cs->get_tx = mpc83xx_spi_tx_buf_u32;
+	} else
+		return -EINVAL;
+
+	if (mpc83xx_spi->qe_mode && spi->mode & SPI_LSB_FIRST) {
+		cs->tx_shift = 0;
+		if (bits_per_word <= 8)
+			cs->rx_shift = 8;
+		else
+			cs->rx_shift = 0;
+	}
+
+	mpc83xx_spi->rx_shift = cs->rx_shift;
+	mpc83xx_spi->tx_shift = cs->tx_shift;
+	mpc83xx_spi->get_rx = cs->get_rx;
+	mpc83xx_spi->get_tx = cs->get_tx;
+
+	if (bits_per_word == 32)
+		bits_per_word = 0;
+	else
+		bits_per_word = bits_per_word - 1;
+
+	/* mask out bits we are going to set */
+	cs->hw_mode &= ~(SPMODE_LEN(0xF) | SPMODE_DIV16
+				  | SPMODE_PM(0xF));
+
+	cs->hw_mode |= SPMODE_LEN(bits_per_word);
+
+	if ((mpc83xx_spi->spibrg / hz) > 64) {
+		cs->hw_mode |= SPMODE_DIV16;
+		pm = mpc83xx_spi->spibrg / (hz * 64);
+
+		WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. "
+			  "Will use %d Hz instead.\n", dev_name(&spi->dev),
+			  hz, mpc83xx_spi->spibrg / 1024);
+		if (pm > 16)
+			pm = 16;
+	} else
+		pm = mpc83xx_spi->spibrg / (hz * 4);
+	if (pm)
+		pm--;
+
+	cs->hw_mode |= SPMODE_PM(pm);
+	regval =  mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
+	if (cs->hw_mode != regval) {
+		unsigned long flags;
+		__be32 __iomem *mode = &mpc83xx_spi->base->mode;
+
+		regval = cs->hw_mode;
+		/* Turn off IRQs locally to minimize time
+		 * that SPI is disabled
+		 */
+		local_irq_save(flags);
+		/* Turn off SPI unit prior changing mode */
+		mpc83xx_spi_write_reg(mode, regval & ~SPMODE_ENABLE);
+		mpc83xx_spi_write_reg(mode, regval);
+		local_irq_restore(flags);
+	}
+	return 0;
+}
+
+static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
+{
+	struct mpc83xx_spi *mpc83xx_spi;
+	u32 word, len, bits_per_word;
+
+	mpc83xx_spi = spi_master_get_devdata(spi->master);
+
+	mpc83xx_spi->tx = t->tx_buf;
+	mpc83xx_spi->rx = t->rx_buf;
+	bits_per_word = spi->bits_per_word;
+	if (t->bits_per_word)
+		bits_per_word = t->bits_per_word;
+	len = t->len;
+	if (bits_per_word > 8) {
+		/* invalid length? */
+		if (len & 1)
+			return -EINVAL;
+		len /= 2;
+	}
+	if (bits_per_word > 16) {
+		/* invalid length? */
+		if (len & 1)
+			return -EINVAL;
+		len /= 2;
+	}
+	mpc83xx_spi->count = len;
+
+	INIT_COMPLETION(mpc83xx_spi->done);
+
+	/* enable rx ints */
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, SPIM_NE);
+
+	/* transmit word */
+	word = mpc83xx_spi->get_tx(mpc83xx_spi);
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit, word);
+
+	wait_for_completion(&mpc83xx_spi->done);
+
+	/* disable rx ints */
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, 0);
+
+	return mpc83xx_spi->count;
+}
+
+static void mpc83xx_spi_do_one_msg(struct spi_message *m)
+{
+	struct spi_device *spi = m->spi;
+	struct spi_transfer *t;
+	unsigned int cs_change;
+	const int nsecs = 50;
+	int status;
+
+	cs_change = 1;
+	status = 0;
+	list_for_each_entry(t, &m->transfers, transfer_list) {
+		if (t->bits_per_word || t->speed_hz) {
+			/* Don't allow changes if CS is active */
+			status = -EINVAL;
+
+			if (cs_change)
+				status = mpc83xx_spi_setup_transfer(spi, t);
+			if (status < 0)
+				break;
+		}
+
+		if (cs_change) {
+			mpc83xx_spi_chipselect(spi, BITBANG_CS_ACTIVE);
+			ndelay(nsecs);
+		}
+		cs_change = t->cs_change;
+		if (t->len)
+			status = mpc83xx_spi_bufs(spi, t);
+		if (status) {
+			status = -EMSGSIZE;
+			break;
+		}
+		m->actual_length += t->len;
+
+		if (t->delay_usecs)
+			udelay(t->delay_usecs);
+
+		if (cs_change) {
+			ndelay(nsecs);
+			mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
+			ndelay(nsecs);
+		}
+	}
+
+	m->status = status;
+	m->complete(m->context);
+
+	if (status || !cs_change) {
+		ndelay(nsecs);
+		mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
+	}
+
+	mpc83xx_spi_setup_transfer(spi, NULL);
+}
+
+static void mpc83xx_spi_work(struct work_struct *work)
+{
+	struct mpc83xx_spi *mpc83xx_spi = container_of(work, struct mpc83xx_spi,
+						       work);
+
+	spin_lock_irq(&mpc83xx_spi->lock);
+	while (!list_empty(&mpc83xx_spi->queue)) {
+		struct spi_message *m = container_of(mpc83xx_spi->queue.next,
+						   struct spi_message, queue);
+
+		list_del_init(&m->queue);
+		spin_unlock_irq(&mpc83xx_spi->lock);
+
+		mpc83xx_spi_do_one_msg(m);
+
+		spin_lock_irq(&mpc83xx_spi->lock);
+	}
+	spin_unlock_irq(&mpc83xx_spi->lock);
+}
+
+/* the spi->mode bits understood by this driver: */
+#define MODEBITS	(SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
+			| SPI_LSB_FIRST | SPI_LOOP)
+
+static int mpc83xx_spi_setup(struct spi_device *spi)
+{
+	struct mpc83xx_spi *mpc83xx_spi;
+	int retval;
+	u32 hw_mode;
+	struct spi_mpc83xx_cs	*cs = spi->controller_state;
+
+	if (spi->mode & ~MODEBITS) {
+		dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
+			spi->mode & ~MODEBITS);
+		return -EINVAL;
+	}
+
+	if (!spi->max_speed_hz)
+		return -EINVAL;
+
+	if (!cs) {
+		cs = kzalloc(sizeof *cs, GFP_KERNEL);
+		if (!cs)
+			return -ENOMEM;
+		spi->controller_state = cs;
+	}
+	mpc83xx_spi = spi_master_get_devdata(spi->master);
+
+	if (!spi->bits_per_word)
+		spi->bits_per_word = 8;
+
+	hw_mode = cs->hw_mode; /* Save orginal settings */
+	cs->hw_mode = mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
+	/* mask out bits we are going to set */
+	cs->hw_mode &= ~(SPMODE_CP_BEGIN_EDGECLK | SPMODE_CI_INACTIVEHIGH
+			 | SPMODE_REV | SPMODE_LOOP);
+
+	if (spi->mode & SPI_CPHA)
+		cs->hw_mode |= SPMODE_CP_BEGIN_EDGECLK;
+	if (spi->mode & SPI_CPOL)
+		cs->hw_mode |= SPMODE_CI_INACTIVEHIGH;
+	if (!(spi->mode & SPI_LSB_FIRST))
+		cs->hw_mode |= SPMODE_REV;
+	if (spi->mode & SPI_LOOP)
+		cs->hw_mode |= SPMODE_LOOP;
+
+	retval = mpc83xx_spi_setup_transfer(spi, NULL);
+	if (retval < 0) {
+		cs->hw_mode = hw_mode; /* Restore settings */
+		return retval;
+	}
+
+	dev_dbg(&spi->dev, "%s, mode %d, %u bits/w, %u Hz\n",
+		__func__, spi->mode & (SPI_CPOL | SPI_CPHA),
+		spi->bits_per_word, spi->max_speed_hz);
+	return 0;
+}
+
+static irqreturn_t mpc83xx_spi_irq(s32 irq, void *context_data)
+{
+	struct mpc83xx_spi *mpc83xx_spi = context_data;
+	u32 event;
+	irqreturn_t ret = IRQ_NONE;
+
+	/* Get interrupt events(tx/rx) */
+	event = mpc83xx_spi_read_reg(&mpc83xx_spi->base->event);
+
+	/* We need handle RX first */
+	if (event & SPIE_NE) {
+		u32 rx_data = mpc83xx_spi_read_reg(&mpc83xx_spi->base->receive);
+
+		if (mpc83xx_spi->rx)
+			mpc83xx_spi->get_rx(rx_data, mpc83xx_spi);
+
+		ret = IRQ_HANDLED;
+	}
+
+	if ((event & SPIE_NF) == 0)
+		/* spin until TX is done */
+		while (((event =
+			 mpc83xx_spi_read_reg(&mpc83xx_spi->base->event)) &
+						SPIE_NF) == 0)
+			cpu_relax();
+
+	mpc83xx_spi->count -= 1;
+	if (mpc83xx_spi->count) {
+		u32 word = mpc83xx_spi->get_tx(mpc83xx_spi);
+		mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit, word);
+	} else {
+		complete(&mpc83xx_spi->done);
+	}
+
+	/* Clear the events */
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->event, event);
+
+	return ret;
+}
+static int mpc83xx_spi_transfer(struct spi_device *spi,
+				struct spi_message *m)
+{
+	struct mpc83xx_spi *mpc83xx_spi = spi_master_get_devdata(spi->master);
+	unsigned long flags;
+
+	m->actual_length = 0;
+	m->status = -EINPROGRESS;
+
+	spin_lock_irqsave(&mpc83xx_spi->lock, flags);
+	list_add_tail(&m->queue, &mpc83xx_spi->queue);
+	queue_work(mpc83xx_spi->workqueue, &mpc83xx_spi->work);
+	spin_unlock_irqrestore(&mpc83xx_spi->lock, flags);
+
+	return 0;
+}
+
+
+static void mpc83xx_spi_cleanup(struct spi_device *spi)
+{
+	kfree(spi->controller_state);
+}
+
+static struct spi_master * __devinit
+mpc83xx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
+{
+	struct fsl_spi_platform_data *pdata = dev->platform_data;
+	struct spi_master *master;
+	struct mpc83xx_spi *mpc83xx_spi;
+	u32 regval;
+	int ret = 0;
+
+	master = spi_alloc_master(dev, sizeof(struct mpc83xx_spi));
+	if (master == NULL) {
+		ret = -ENOMEM;
+		goto err;
+	}
+
+	dev_set_drvdata(dev, master);
+
+	master->setup = mpc83xx_spi_setup;
+	master->transfer = mpc83xx_spi_transfer;
+	master->cleanup = mpc83xx_spi_cleanup;
+
+	mpc83xx_spi = spi_master_get_devdata(master);
+	mpc83xx_spi->qe_mode = pdata->qe_mode;
+	mpc83xx_spi->get_rx = mpc83xx_spi_rx_buf_u8;
+	mpc83xx_spi->get_tx = mpc83xx_spi_tx_buf_u8;
+	mpc83xx_spi->spibrg = pdata->sysclk;
+
+	mpc83xx_spi->rx_shift = 0;
+	mpc83xx_spi->tx_shift = 0;
+	if (mpc83xx_spi->qe_mode) {
+		mpc83xx_spi->rx_shift = 16;
+		mpc83xx_spi->tx_shift = 24;
+	}
+
+	init_completion(&mpc83xx_spi->done);
+
+	mpc83xx_spi->base = ioremap(mem->start, mem->end - mem->start + 1);
+	if (mpc83xx_spi->base == NULL) {
+		ret = -ENOMEM;
+		goto put_master;
+	}
+
+	mpc83xx_spi->irq = irq;
+
+	/* Register for SPI Interrupt */
+	ret = request_irq(mpc83xx_spi->irq, mpc83xx_spi_irq,
+			  0, "mpc83xx_spi", mpc83xx_spi);
+
+	if (ret != 0)
+		goto unmap_io;
+
+	master->bus_num = pdata->bus_num;
+	master->num_chipselect = pdata->max_chipselect;
+
+	/* SPI controller initializations */
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, 0);
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, 0);
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->command, 0);
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->event, 0xffffffff);
+
+	/* Enable SPI interface */
+	regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
+	if (pdata->qe_mode)
+		regval |= SPMODE_OP;
+
+	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, regval);
+	spin_lock_init(&mpc83xx_spi->lock);
+	init_completion(&mpc83xx_spi->done);
+	INIT_WORK(&mpc83xx_spi->work, mpc83xx_spi_work);
+	INIT_LIST_HEAD(&mpc83xx_spi->queue);
+
+	mpc83xx_spi->workqueue = create_singlethread_workqueue(
+		dev_name(master->dev.parent));
+	if (mpc83xx_spi->workqueue == NULL) {
+		ret = -EBUSY;
+		goto free_irq;
+	}
+
+	ret = spi_register_master(master);
+	if (ret < 0)
+		goto unreg_master;
+
+	printk(KERN_INFO
+	       "%s: MPC83xx SPI Controller driver at 0x%p (irq = %d)\n",
+	       dev_name(dev), mpc83xx_spi->base, mpc83xx_spi->irq);
+
+	return master;
+
+unreg_master:
+	destroy_workqueue(mpc83xx_spi->workqueue);
+free_irq:
+	free_irq(mpc83xx_spi->irq, mpc83xx_spi);
+unmap_io:
+	iounmap(mpc83xx_spi->base);
+put_master:
+	spi_master_put(master);
+err:
+	return ERR_PTR(ret);
+}
+
+static int __devexit mpc83xx_spi_remove(struct device *dev)
+{
+	struct mpc83xx_spi *mpc83xx_spi;
+	struct spi_master *master;
+
+	master = dev_get_drvdata(dev);
+	mpc83xx_spi = spi_master_get_devdata(master);
+
+	flush_workqueue(mpc83xx_spi->workqueue);
+	destroy_workqueue(mpc83xx_spi->workqueue);
+	spi_unregister_master(master);
+
+	free_irq(mpc83xx_spi->irq, mpc83xx_spi);
+	iounmap(mpc83xx_spi->base);
+
+	return 0;
+}
+
+struct mpc83xx_spi_probe_info {
+	struct fsl_spi_platform_data pdata;
+	int *gpios;
+	bool *alow_flags;
+};
+
+static struct mpc83xx_spi_probe_info *
+to_of_pinfo(struct fsl_spi_platform_data *pdata)
+{
+	return container_of(pdata, struct mpc83xx_spi_probe_info, pdata);
+}
+
+static void mpc83xx_spi_cs_control(struct spi_device *spi, bool on)
+{
+	struct device *dev = spi->dev.parent;
+	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data);
+	u16 cs = spi->chip_select;
+	int gpio = pinfo->gpios[cs];
+	bool alow = pinfo->alow_flags[cs];
+
+	gpio_set_value(gpio, on ^ alow);
+}
+
+static int of_mpc83xx_spi_get_chipselects(struct device *dev)
+{
+	struct device_node *np = dev_archdata_get_node(&dev->archdata);
+	struct fsl_spi_platform_data *pdata = dev->platform_data;
+	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(pdata);
+	unsigned int ngpios;
+	int i = 0;
+	int ret;
+
+	ngpios = of_gpio_count(np);
+	if (!ngpios) {
+		/*
+		 * SPI w/o chip-select line. One SPI device is still permitted
+		 * though.
+		 */
+		pdata->max_chipselect = 1;
+		return 0;
+	}
+
+	pinfo->gpios = kmalloc(ngpios * sizeof(pinfo->gpios), GFP_KERNEL);
+	if (!pinfo->gpios)
+		return -ENOMEM;
+	memset(pinfo->gpios, -1, ngpios * sizeof(pinfo->gpios));
+
+	pinfo->alow_flags = kzalloc(ngpios * sizeof(pinfo->alow_flags),
+				    GFP_KERNEL);
+	if (!pinfo->alow_flags) {
+		ret = -ENOMEM;
+		goto err_alloc_flags;
+	}
+
+	for (; i < ngpios; i++) {
+		int gpio;
+		enum of_gpio_flags flags;
+
+		gpio = of_get_gpio_flags(np, i, &flags);
+		if (!gpio_is_valid(gpio)) {
+			dev_err(dev, "invalid gpio #%d: %d\n", i, gpio);
+			goto err_loop;
+		}
+
+		ret = gpio_request(gpio, dev_name(dev));
+		if (ret) {
+			dev_err(dev, "can't request gpio #%d: %d\n", i, ret);
+			goto err_loop;
+		}
+
+		pinfo->gpios[i] = gpio;
+		pinfo->alow_flags[i] = flags & OF_GPIO_ACTIVE_LOW;
+
+		ret = gpio_direction_output(pinfo->gpios[i],
+					    pinfo->alow_flags[i]);
+		if (ret) {
+			dev_err(dev, "can't set output direction for gpio "
+				"#%d: %d\n", i, ret);
+			goto err_loop;
+		}
+	}
+
+	pdata->max_chipselect = ngpios;
+	pdata->cs_control = mpc83xx_spi_cs_control;
+
+	return 0;
+
+err_loop:
+	while (i >= 0) {
+		if (gpio_is_valid(pinfo->gpios[i]))
+			gpio_free(pinfo->gpios[i]);
+		i--;
+	}
+
+	kfree(pinfo->alow_flags);
+	pinfo->alow_flags = NULL;
+err_alloc_flags:
+	kfree(pinfo->gpios);
+	pinfo->gpios = NULL;
+	return ret;
+}
+
+static int of_mpc83xx_spi_free_chipselects(struct device *dev)
+{
+	struct fsl_spi_platform_data *pdata = dev->platform_data;
+	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(pdata);
+	int i;
+
+	if (!pinfo->gpios)
+		return 0;
+
+	for (i = 0; i < pdata->max_chipselect; i++) {
+		if (gpio_is_valid(pinfo->gpios[i]))
+			gpio_free(pinfo->gpios[i]);
+	}
+
+	kfree(pinfo->gpios);
+	kfree(pinfo->alow_flags);
+	return 0;
+}
+
+static int __devinit of_mpc83xx_spi_probe(struct of_device *ofdev,
+					  const struct of_device_id *ofid)
+{
+	struct device *dev = &ofdev->dev;
+	struct device_node *np = ofdev->node;
+	struct mpc83xx_spi_probe_info *pinfo;
+	struct fsl_spi_platform_data *pdata;
+	struct spi_master *master;
+	struct resource mem;
+	struct resource irq;
+	const void *prop;
+	int ret = -ENOMEM;
+
+	pinfo = kzalloc(sizeof(*pinfo), GFP_KERNEL);
+	if (!pinfo)
+		return -ENOMEM;
+
+	pdata = &pinfo->pdata;
+	dev->platform_data = pdata;
+
+	/* Allocate bus num dynamically. */
+	pdata->bus_num = -1;
+
+	/* SPI controller is either clocked from QE or SoC clock. */
+	pdata->sysclk = get_brgfreq();
+	if (pdata->sysclk == -1) {
+		pdata->sysclk = fsl_get_sys_freq();
+		if (pdata->sysclk == -1) {
+			ret = -ENODEV;
+			goto err_clk;
+		}
+	}
+
+	prop = of_get_property(np, "mode", NULL);
+	if (prop && !strcmp(prop, "cpu-qe"))
+		pdata->qe_mode = 1;
+
+	ret = of_mpc83xx_spi_get_chipselects(dev);
+	if (ret)
+		goto err;
+
+	ret = of_address_to_resource(np, 0, &mem);
+	if (ret)
+		goto err;
+
+	ret = of_irq_to_resource(np, 0, &irq);
+	if (!ret) {
+		ret = -EINVAL;
+		goto err;
+	}
+
+	master = mpc83xx_spi_probe(dev, &mem, irq.start);
+	if (IS_ERR(master)) {
+		ret = PTR_ERR(master);
+		goto err;
+	}
+
+	of_register_spi_devices(master, np);
+
+	return 0;
+
+err:
+	of_mpc83xx_spi_free_chipselects(dev);
+err_clk:
+	kfree(pinfo);
+	return ret;
+}
+
+static int __devexit of_mpc83xx_spi_remove(struct of_device *ofdev)
+{
+	int ret;
+
+	ret = mpc83xx_spi_remove(&ofdev->dev);
+	if (ret)
+		return ret;
+	of_mpc83xx_spi_free_chipselects(&ofdev->dev);
+	return 0;
+}
+
+static const struct of_device_id of_mpc83xx_spi_match[] = {
+	{ .compatible = "fsl,spi" },
+	{},
+};
+MODULE_DEVICE_TABLE(of, of_mpc83xx_spi_match);
+
+static struct of_platform_driver of_mpc83xx_spi_driver = {
+	.name		= "mpc83xx_spi",
+	.match_table	= of_mpc83xx_spi_match,
+	.probe		= of_mpc83xx_spi_probe,
+	.remove		= __devexit_p(of_mpc83xx_spi_remove),
+};
+
+#ifdef CONFIG_MPC832x_RDB
+/*
+ * 				XXX XXX XXX
+ * This is "legacy" platform driver, was used by the MPC8323E-RDB boards
+ * only. The driver should go away soon, since newer MPC8323E-RDB's device
+ * tree can work with OpenFirmware driver. But for now we support old trees
+ * as well.
+ */
+static int __devinit plat_mpc83xx_spi_probe(struct platform_device *pdev)
+{
+	struct resource *mem;
+	unsigned int irq;
+	struct spi_master *master;
+
+	if (!pdev->dev.platform_data)
+		return -EINVAL;
+
+	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!mem)
+		return -EINVAL;
+
+	irq = platform_get_irq(pdev, 0);
+	if (!irq)
+		return -EINVAL;
+
+	master = mpc83xx_spi_probe(&pdev->dev, mem, irq);
+	if (IS_ERR(master))
+		return PTR_ERR(master);
+	return 0;
+}
+
+static int __devexit plat_mpc83xx_spi_remove(struct platform_device *pdev)
+{
+	return mpc83xx_spi_remove(&pdev->dev);
+}
+
+MODULE_ALIAS("platform:mpc83xx_spi");
+static struct platform_driver mpc83xx_spi_driver = {
+	.probe = plat_mpc83xx_spi_probe,
+	.remove = __exit_p(plat_mpc83xx_spi_remove),
+	.driver = {
+		.name = "mpc83xx_spi",
+		.owner = THIS_MODULE,
+	},
+};
+
+static bool legacy_driver_failed;
+
+static void __init legacy_driver_register(void)
+{
+	legacy_driver_failed = platform_driver_register(&mpc83xx_spi_driver);
+}
+
+static void __exit legacy_driver_unregister(void)
+{
+	if (legacy_driver_failed)
+		return;
+	platform_driver_unregister(&mpc83xx_spi_driver);
+}
+#else
+static void __init legacy_driver_register(void) {}
+static void __exit legacy_driver_unregister(void) {}
+#endif /* CONFIG_MPC832x_RDB */
+
+static int __init mpc83xx_spi_init(void)
+{
+	legacy_driver_register();
+	return of_register_platform_driver(&of_mpc83xx_spi_driver);
+}
+
+static void __exit mpc83xx_spi_exit(void)
+{
+	of_unregister_platform_driver(&of_mpc83xx_spi_driver);
+	legacy_driver_unregister();
+}
+
+module_init(mpc83xx_spi_init);
+module_exit(mpc83xx_spi_exit);
+
+MODULE_AUTHOR("Kumar Gala");
+MODULE_DESCRIPTION("Simple MPC83xx SPI Driver");
+MODULE_LICENSE("GPL");
-- 
1.6.2.2

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

* [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
                   ` (7 preceding siblings ...)
  2009-04-30 23:48 ` [PATCH 8/9] spi_mpc83xx: Rename spi_83xx.c to spi_8xxx.c Anton Vorontsov
@ 2009-04-30 23:48 ` Anton Vorontsov
  2009-05-01 21:42   ` [spi-devel-general] " Grant Likely
  2009-05-04 20:53   ` Andrew Morton
  2009-05-04 20:55 ` [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Andrew Morton
  9 siblings, 2 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-04-30 23:48 UTC (permalink / raw)
  To: Kumar Gala
  Cc: linuxppc-dev, Andrew Morton, David Brownell, linux-kernel,
	spi-devel-general

Since we renamed the file, we might want to rename the file
internals too.

Though we don't bother with changing platform driver name and
platform module alias. The stuff is legacy and hopefully we'll
remove it soon.

Suggested-by: Kumar Gala <galak@kernel.crashing.org>
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
---
 drivers/spi/Kconfig       |    2 +-
 drivers/spi/Makefile      |    2 +-
 drivers/spi/spi_mpc8xxx.c |  396 ++++++++++++++++++++++----------------------
 3 files changed, 200 insertions(+), 200 deletions(-)

diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
index 3c1845c..9e77bf1 100644
--- a/drivers/spi/Kconfig
+++ b/drivers/spi/Kconfig
@@ -139,7 +139,7 @@ config SPI_MPC52xx_PSC
 	  This enables using the Freescale MPC52xx Programmable Serial
 	  Controller in master SPI mode.
 
-config SPI_MPC83xx
+config SPI_MPC8xxx
 	tristate "Freescale MPC8xxx SPI controller"
 	depends on FSL_SOC
 	help
diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
index fdc7aa0..18ba6b4 100644
--- a/drivers/spi/Makefile
+++ b/drivers/spi/Makefile
@@ -24,7 +24,7 @@ obj-$(CONFIG_SPI_OMAP_UWIRE)		+= omap_uwire.o
 obj-$(CONFIG_SPI_OMAP24XX)		+= omap2_mcspi.o
 obj-$(CONFIG_SPI_ORION)			+= orion_spi.o
 obj-$(CONFIG_SPI_MPC52xx_PSC)		+= mpc52xx_psc_spi.o
-obj-$(CONFIG_SPI_MPC83xx)		+= spi_mpc8xxx.o
+obj-$(CONFIG_SPI_MPC8xxx)		+= spi_mpc8xxx.o
 obj-$(CONFIG_SPI_S3C24XX_GPIO)		+= spi_s3c24xx_gpio.o
 obj-$(CONFIG_SPI_S3C24XX)		+= spi_s3c24xx.o
 obj-$(CONFIG_SPI_TXX9)			+= spi_txx9.o
diff --git a/drivers/spi/spi_mpc8xxx.c b/drivers/spi/spi_mpc8xxx.c
index 4192ce4..15d9527 100644
--- a/drivers/spi/spi_mpc8xxx.c
+++ b/drivers/spi/spi_mpc8xxx.c
@@ -1,5 +1,5 @@
 /*
- * MPC83xx SPI controller driver.
+ * MPC8xxx SPI controller driver.
  *
  * Maintainer: Kumar Gala
  *
@@ -37,7 +37,7 @@
 #include <asm/irq.h>
 
 /* SPI Controller registers */
-struct mpc83xx_spi_reg {
+struct mpc8xxx_spi_reg {
 	u8 res1[0x20];
 	__be32 mode;
 	__be32 event;
@@ -76,16 +76,16 @@ struct mpc83xx_spi_reg {
 #define	SPIM_NF		0x00000100	/* Not full */
 
 /* SPI Controller driver's private data. */
-struct mpc83xx_spi {
-	struct mpc83xx_spi_reg __iomem *base;
+struct mpc8xxx_spi {
+	struct mpc8xxx_spi_reg __iomem *base;
 
 	/* rx & tx bufs from the spi_transfer */
 	const void *tx;
 	void *rx;
 
 	/* functions to deal with different sized buffers */
-	void (*get_rx) (u32 rx_data, struct mpc83xx_spi *);
-	u32(*get_tx) (struct mpc83xx_spi *);
+	void (*get_rx) (u32 rx_data, struct mpc8xxx_spi *);
+	u32(*get_tx) (struct mpc8xxx_spi *);
 
 	unsigned int count;
 	unsigned int irq;
@@ -107,44 +107,44 @@ struct mpc83xx_spi {
 	struct completion done;
 };
 
-struct spi_mpc83xx_cs {
+struct spi_mpc8xxx_cs {
 	/* functions to deal with different sized buffers */
-	void (*get_rx) (u32 rx_data, struct mpc83xx_spi *);
-	u32 (*get_tx) (struct mpc83xx_spi *);
+	void (*get_rx) (u32 rx_data, struct mpc8xxx_spi *);
+	u32 (*get_tx) (struct mpc8xxx_spi *);
 	u32 rx_shift;		/* RX data reg shift when in qe mode */
 	u32 tx_shift;		/* TX data reg shift when in qe mode */
 	u32 hw_mode;		/* Holds HW mode register settings */
 };
 
-static inline void mpc83xx_spi_write_reg(__be32 __iomem *reg, u32 val)
+static inline void mpc8xxx_spi_write_reg(__be32 __iomem *reg, u32 val)
 {
 	out_be32(reg, val);
 }
 
-static inline u32 mpc83xx_spi_read_reg(__be32 __iomem *reg)
+static inline u32 mpc8xxx_spi_read_reg(__be32 __iomem *reg)
 {
 	return in_be32(reg);
 }
 
 #define MPC83XX_SPI_RX_BUF(type) 					  \
 static									  \
-void mpc83xx_spi_rx_buf_##type(u32 data, struct mpc83xx_spi *mpc83xx_spi) \
+void mpc8xxx_spi_rx_buf_##type(u32 data, struct mpc8xxx_spi *mpc8xxx_spi) \
 {									  \
-	type *rx = mpc83xx_spi->rx;					  \
-	*rx++ = (type)(data >> mpc83xx_spi->rx_shift);			  \
-	mpc83xx_spi->rx = rx;						  \
+	type *rx = mpc8xxx_spi->rx;					  \
+	*rx++ = (type)(data >> mpc8xxx_spi->rx_shift);			  \
+	mpc8xxx_spi->rx = rx;						  \
 }
 
 #define MPC83XX_SPI_TX_BUF(type)				\
 static								\
-u32 mpc83xx_spi_tx_buf_##type(struct mpc83xx_spi *mpc83xx_spi)	\
+u32 mpc8xxx_spi_tx_buf_##type(struct mpc8xxx_spi *mpc8xxx_spi)	\
 {								\
 	u32 data;						\
-	const type *tx = mpc83xx_spi->tx;			\
+	const type *tx = mpc8xxx_spi->tx;			\
 	if (!tx)						\
 		return 0;					\
-	data = *tx++ << mpc83xx_spi->tx_shift;			\
-	mpc83xx_spi->tx = tx;					\
+	data = *tx++ << mpc8xxx_spi->tx_shift;			\
+	mpc8xxx_spi->tx = tx;					\
 	return data;						\
 }
 
@@ -155,12 +155,12 @@ MPC83XX_SPI_TX_BUF(u8)
 MPC83XX_SPI_TX_BUF(u16)
 MPC83XX_SPI_TX_BUF(u32)
 
-static void mpc83xx_spi_chipselect(struct spi_device *spi, int value)
+static void mpc8xxx_spi_chipselect(struct spi_device *spi, int value)
 {
-	struct mpc83xx_spi *mpc83xx_spi = spi_master_get_devdata(spi->master);
+	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
 	struct fsl_spi_platform_data *pdata = spi->dev.parent->platform_data;
 	bool pol = spi->mode & SPI_CS_HIGH;
-	struct spi_mpc83xx_cs	*cs = spi->controller_state;
+	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
 
 	if (value == BITBANG_CS_INACTIVE) {
 		if (pdata->cs_control)
@@ -168,16 +168,16 @@ static void mpc83xx_spi_chipselect(struct spi_device *spi, int value)
 	}
 
 	if (value == BITBANG_CS_ACTIVE) {
-		u32 regval = mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
+		u32 regval = mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->mode);
 
-		mpc83xx_spi->rx_shift = cs->rx_shift;
-		mpc83xx_spi->tx_shift = cs->tx_shift;
-		mpc83xx_spi->get_rx = cs->get_rx;
-		mpc83xx_spi->get_tx = cs->get_tx;
+		mpc8xxx_spi->rx_shift = cs->rx_shift;
+		mpc8xxx_spi->tx_shift = cs->tx_shift;
+		mpc8xxx_spi->get_rx = cs->get_rx;
+		mpc8xxx_spi->get_tx = cs->get_tx;
 
 		if (cs->hw_mode != regval) {
 			unsigned long flags;
-			__be32 __iomem *mode = &mpc83xx_spi->base->mode;
+			__be32 __iomem *mode = &mpc8xxx_spi->base->mode;
 
 			regval = cs->hw_mode;
 			/* Turn off IRQs locally to minimize time that
@@ -185,8 +185,8 @@ static void mpc83xx_spi_chipselect(struct spi_device *spi, int value)
 			 */
 			local_irq_save(flags);
 			/* Turn off SPI unit prior changing mode */
-			mpc83xx_spi_write_reg(mode, regval & ~SPMODE_ENABLE);
-			mpc83xx_spi_write_reg(mode, regval);
+			mpc8xxx_spi_write_reg(mode, regval & ~SPMODE_ENABLE);
+			mpc8xxx_spi_write_reg(mode, regval);
 			local_irq_restore(flags);
 		}
 		if (pdata->cs_control)
@@ -195,15 +195,15 @@ static void mpc83xx_spi_chipselect(struct spi_device *spi, int value)
 }
 
 static
-int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
+int mpc8xxx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
 {
-	struct mpc83xx_spi *mpc83xx_spi;
+	struct mpc8xxx_spi *mpc8xxx_spi;
 	u32 regval;
 	u8 bits_per_word, pm;
 	u32 hz;
-	struct spi_mpc83xx_cs	*cs = spi->controller_state;
+	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
 
-	mpc83xx_spi = spi_master_get_devdata(spi->master);
+	mpc8xxx_spi = spi_master_get_devdata(spi->master);
 
 	if (t) {
 		bits_per_word = t->bits_per_word;
@@ -228,26 +228,26 @@ int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
 	cs->rx_shift = 0;
 	cs->tx_shift = 0;
 	if (bits_per_word <= 8) {
-		cs->get_rx = mpc83xx_spi_rx_buf_u8;
-		cs->get_tx = mpc83xx_spi_tx_buf_u8;
-		if (mpc83xx_spi->qe_mode) {
+		cs->get_rx = mpc8xxx_spi_rx_buf_u8;
+		cs->get_tx = mpc8xxx_spi_tx_buf_u8;
+		if (mpc8xxx_spi->qe_mode) {
 			cs->rx_shift = 16;
 			cs->tx_shift = 24;
 		}
 	} else if (bits_per_word <= 16) {
-		cs->get_rx = mpc83xx_spi_rx_buf_u16;
-		cs->get_tx = mpc83xx_spi_tx_buf_u16;
-		if (mpc83xx_spi->qe_mode) {
+		cs->get_rx = mpc8xxx_spi_rx_buf_u16;
+		cs->get_tx = mpc8xxx_spi_tx_buf_u16;
+		if (mpc8xxx_spi->qe_mode) {
 			cs->rx_shift = 16;
 			cs->tx_shift = 16;
 		}
 	} else if (bits_per_word <= 32) {
-		cs->get_rx = mpc83xx_spi_rx_buf_u32;
-		cs->get_tx = mpc83xx_spi_tx_buf_u32;
+		cs->get_rx = mpc8xxx_spi_rx_buf_u32;
+		cs->get_tx = mpc8xxx_spi_tx_buf_u32;
 	} else
 		return -EINVAL;
 
-	if (mpc83xx_spi->qe_mode && spi->mode & SPI_LSB_FIRST) {
+	if (mpc8xxx_spi->qe_mode && spi->mode & SPI_LSB_FIRST) {
 		cs->tx_shift = 0;
 		if (bits_per_word <= 8)
 			cs->rx_shift = 8;
@@ -255,10 +255,10 @@ int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
 			cs->rx_shift = 0;
 	}
 
-	mpc83xx_spi->rx_shift = cs->rx_shift;
-	mpc83xx_spi->tx_shift = cs->tx_shift;
-	mpc83xx_spi->get_rx = cs->get_rx;
-	mpc83xx_spi->get_tx = cs->get_tx;
+	mpc8xxx_spi->rx_shift = cs->rx_shift;
+	mpc8xxx_spi->tx_shift = cs->tx_shift;
+	mpc8xxx_spi->get_rx = cs->get_rx;
+	mpc8xxx_spi->get_tx = cs->get_tx;
 
 	if (bits_per_word == 32)
 		bits_per_word = 0;
@@ -271,25 +271,25 @@ int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
 
 	cs->hw_mode |= SPMODE_LEN(bits_per_word);
 
-	if ((mpc83xx_spi->spibrg / hz) > 64) {
+	if ((mpc8xxx_spi->spibrg / hz) > 64) {
 		cs->hw_mode |= SPMODE_DIV16;
-		pm = mpc83xx_spi->spibrg / (hz * 64);
+		pm = mpc8xxx_spi->spibrg / (hz * 64);
 
 		WARN_ONCE(pm > 16, "%s: Requested speed is too low: %d Hz. "
 			  "Will use %d Hz instead.\n", dev_name(&spi->dev),
-			  hz, mpc83xx_spi->spibrg / 1024);
+			  hz, mpc8xxx_spi->spibrg / 1024);
 		if (pm > 16)
 			pm = 16;
 	} else
-		pm = mpc83xx_spi->spibrg / (hz * 4);
+		pm = mpc8xxx_spi->spibrg / (hz * 4);
 	if (pm)
 		pm--;
 
 	cs->hw_mode |= SPMODE_PM(pm);
-	regval =  mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
+	regval =  mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->mode);
 	if (cs->hw_mode != regval) {
 		unsigned long flags;
-		__be32 __iomem *mode = &mpc83xx_spi->base->mode;
+		__be32 __iomem *mode = &mpc8xxx_spi->base->mode;
 
 		regval = cs->hw_mode;
 		/* Turn off IRQs locally to minimize time
@@ -297,22 +297,22 @@ int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transfer *t)
 		 */
 		local_irq_save(flags);
 		/* Turn off SPI unit prior changing mode */
-		mpc83xx_spi_write_reg(mode, regval & ~SPMODE_ENABLE);
-		mpc83xx_spi_write_reg(mode, regval);
+		mpc8xxx_spi_write_reg(mode, regval & ~SPMODE_ENABLE);
+		mpc8xxx_spi_write_reg(mode, regval);
 		local_irq_restore(flags);
 	}
 	return 0;
 }
 
-static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
+static int mpc8xxx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
 {
-	struct mpc83xx_spi *mpc83xx_spi;
+	struct mpc8xxx_spi *mpc8xxx_spi;
 	u32 word, len, bits_per_word;
 
-	mpc83xx_spi = spi_master_get_devdata(spi->master);
+	mpc8xxx_spi = spi_master_get_devdata(spi->master);
 
-	mpc83xx_spi->tx = t->tx_buf;
-	mpc83xx_spi->rx = t->rx_buf;
+	mpc8xxx_spi->tx = t->tx_buf;
+	mpc8xxx_spi->rx = t->rx_buf;
 	bits_per_word = spi->bits_per_word;
 	if (t->bits_per_word)
 		bits_per_word = t->bits_per_word;
@@ -329,26 +329,26 @@ static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer *t)
 			return -EINVAL;
 		len /= 2;
 	}
-	mpc83xx_spi->count = len;
+	mpc8xxx_spi->count = len;
 
-	INIT_COMPLETION(mpc83xx_spi->done);
+	INIT_COMPLETION(mpc8xxx_spi->done);
 
 	/* enable rx ints */
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, SPIM_NE);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mask, SPIM_NE);
 
 	/* transmit word */
-	word = mpc83xx_spi->get_tx(mpc83xx_spi);
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit, word);
+	word = mpc8xxx_spi->get_tx(mpc8xxx_spi);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->transmit, word);
 
-	wait_for_completion(&mpc83xx_spi->done);
+	wait_for_completion(&mpc8xxx_spi->done);
 
 	/* disable rx ints */
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, 0);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mask, 0);
 
-	return mpc83xx_spi->count;
+	return mpc8xxx_spi->count;
 }
 
-static void mpc83xx_spi_do_one_msg(struct spi_message *m)
+static void mpc8xxx_spi_do_one_msg(struct spi_message *m)
 {
 	struct spi_device *spi = m->spi;
 	struct spi_transfer *t;
@@ -364,18 +364,18 @@ static void mpc83xx_spi_do_one_msg(struct spi_message *m)
 			status = -EINVAL;
 
 			if (cs_change)
-				status = mpc83xx_spi_setup_transfer(spi, t);
+				status = mpc8xxx_spi_setup_transfer(spi, t);
 			if (status < 0)
 				break;
 		}
 
 		if (cs_change) {
-			mpc83xx_spi_chipselect(spi, BITBANG_CS_ACTIVE);
+			mpc8xxx_spi_chipselect(spi, BITBANG_CS_ACTIVE);
 			ndelay(nsecs);
 		}
 		cs_change = t->cs_change;
 		if (t->len)
-			status = mpc83xx_spi_bufs(spi, t);
+			status = mpc8xxx_spi_bufs(spi, t);
 		if (status) {
 			status = -EMSGSIZE;
 			break;
@@ -387,7 +387,7 @@ static void mpc83xx_spi_do_one_msg(struct spi_message *m)
 
 		if (cs_change) {
 			ndelay(nsecs);
-			mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
+			mpc8xxx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
 			ndelay(nsecs);
 		}
 	}
@@ -397,42 +397,42 @@ static void mpc83xx_spi_do_one_msg(struct spi_message *m)
 
 	if (status || !cs_change) {
 		ndelay(nsecs);
-		mpc83xx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
+		mpc8xxx_spi_chipselect(spi, BITBANG_CS_INACTIVE);
 	}
 
-	mpc83xx_spi_setup_transfer(spi, NULL);
+	mpc8xxx_spi_setup_transfer(spi, NULL);
 }
 
-static void mpc83xx_spi_work(struct work_struct *work)
+static void mpc8xxx_spi_work(struct work_struct *work)
 {
-	struct mpc83xx_spi *mpc83xx_spi = container_of(work, struct mpc83xx_spi,
+	struct mpc8xxx_spi *mpc8xxx_spi = container_of(work, struct mpc8xxx_spi,
 						       work);
 
-	spin_lock_irq(&mpc83xx_spi->lock);
-	while (!list_empty(&mpc83xx_spi->queue)) {
-		struct spi_message *m = container_of(mpc83xx_spi->queue.next,
+	spin_lock_irq(&mpc8xxx_spi->lock);
+	while (!list_empty(&mpc8xxx_spi->queue)) {
+		struct spi_message *m = container_of(mpc8xxx_spi->queue.next,
 						   struct spi_message, queue);
 
 		list_del_init(&m->queue);
-		spin_unlock_irq(&mpc83xx_spi->lock);
+		spin_unlock_irq(&mpc8xxx_spi->lock);
 
-		mpc83xx_spi_do_one_msg(m);
+		mpc8xxx_spi_do_one_msg(m);
 
-		spin_lock_irq(&mpc83xx_spi->lock);
+		spin_lock_irq(&mpc8xxx_spi->lock);
 	}
-	spin_unlock_irq(&mpc83xx_spi->lock);
+	spin_unlock_irq(&mpc8xxx_spi->lock);
 }
 
 /* the spi->mode bits understood by this driver: */
 #define MODEBITS	(SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
 			| SPI_LSB_FIRST | SPI_LOOP)
 
-static int mpc83xx_spi_setup(struct spi_device *spi)
+static int mpc8xxx_spi_setup(struct spi_device *spi)
 {
-	struct mpc83xx_spi *mpc83xx_spi;
+	struct mpc8xxx_spi *mpc8xxx_spi;
 	int retval;
 	u32 hw_mode;
-	struct spi_mpc83xx_cs	*cs = spi->controller_state;
+	struct spi_mpc8xxx_cs	*cs = spi->controller_state;
 
 	if (spi->mode & ~MODEBITS) {
 		dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
@@ -449,13 +449,13 @@ static int mpc83xx_spi_setup(struct spi_device *spi)
 			return -ENOMEM;
 		spi->controller_state = cs;
 	}
-	mpc83xx_spi = spi_master_get_devdata(spi->master);
+	mpc8xxx_spi = spi_master_get_devdata(spi->master);
 
 	if (!spi->bits_per_word)
 		spi->bits_per_word = 8;
 
 	hw_mode = cs->hw_mode; /* Save orginal settings */
-	cs->hw_mode = mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode);
+	cs->hw_mode = mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->mode);
 	/* mask out bits we are going to set */
 	cs->hw_mode &= ~(SPMODE_CP_BEGIN_EDGECLK | SPMODE_CI_INACTIVEHIGH
 			 | SPMODE_REV | SPMODE_LOOP);
@@ -469,7 +469,7 @@ static int mpc83xx_spi_setup(struct spi_device *spi)
 	if (spi->mode & SPI_LOOP)
 		cs->hw_mode |= SPMODE_LOOP;
 
-	retval = mpc83xx_spi_setup_transfer(spi, NULL);
+	retval = mpc8xxx_spi_setup_transfer(spi, NULL);
 	if (retval < 0) {
 		cs->hw_mode = hw_mode; /* Restore settings */
 		return retval;
@@ -481,21 +481,21 @@ static int mpc83xx_spi_setup(struct spi_device *spi)
 	return 0;
 }
 
-static irqreturn_t mpc83xx_spi_irq(s32 irq, void *context_data)
+static irqreturn_t mpc8xxx_spi_irq(s32 irq, void *context_data)
 {
-	struct mpc83xx_spi *mpc83xx_spi = context_data;
+	struct mpc8xxx_spi *mpc8xxx_spi = context_data;
 	u32 event;
 	irqreturn_t ret = IRQ_NONE;
 
 	/* Get interrupt events(tx/rx) */
-	event = mpc83xx_spi_read_reg(&mpc83xx_spi->base->event);
+	event = mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->event);
 
 	/* We need handle RX first */
 	if (event & SPIE_NE) {
-		u32 rx_data = mpc83xx_spi_read_reg(&mpc83xx_spi->base->receive);
+		u32 rx_data = mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->receive);
 
-		if (mpc83xx_spi->rx)
-			mpc83xx_spi->get_rx(rx_data, mpc83xx_spi);
+		if (mpc8xxx_spi->rx)
+			mpc8xxx_spi->get_rx(rx_data, mpc8xxx_spi);
 
 		ret = IRQ_HANDLED;
 	}
@@ -503,56 +503,56 @@ static irqreturn_t mpc83xx_spi_irq(s32 irq, void *context_data)
 	if ((event & SPIE_NF) == 0)
 		/* spin until TX is done */
 		while (((event =
-			 mpc83xx_spi_read_reg(&mpc83xx_spi->base->event)) &
+			 mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->event)) &
 						SPIE_NF) == 0)
 			cpu_relax();
 
-	mpc83xx_spi->count -= 1;
-	if (mpc83xx_spi->count) {
-		u32 word = mpc83xx_spi->get_tx(mpc83xx_spi);
-		mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit, word);
+	mpc8xxx_spi->count -= 1;
+	if (mpc8xxx_spi->count) {
+		u32 word = mpc8xxx_spi->get_tx(mpc8xxx_spi);
+		mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->transmit, word);
 	} else {
-		complete(&mpc83xx_spi->done);
+		complete(&mpc8xxx_spi->done);
 	}
 
 	/* Clear the events */
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->event, event);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->event, event);
 
 	return ret;
 }
-static int mpc83xx_spi_transfer(struct spi_device *spi,
+static int mpc8xxx_spi_transfer(struct spi_device *spi,
 				struct spi_message *m)
 {
-	struct mpc83xx_spi *mpc83xx_spi = spi_master_get_devdata(spi->master);
+	struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master);
 	unsigned long flags;
 
 	m->actual_length = 0;
 	m->status = -EINPROGRESS;
 
-	spin_lock_irqsave(&mpc83xx_spi->lock, flags);
-	list_add_tail(&m->queue, &mpc83xx_spi->queue);
-	queue_work(mpc83xx_spi->workqueue, &mpc83xx_spi->work);
-	spin_unlock_irqrestore(&mpc83xx_spi->lock, flags);
+	spin_lock_irqsave(&mpc8xxx_spi->lock, flags);
+	list_add_tail(&m->queue, &mpc8xxx_spi->queue);
+	queue_work(mpc8xxx_spi->workqueue, &mpc8xxx_spi->work);
+	spin_unlock_irqrestore(&mpc8xxx_spi->lock, flags);
 
 	return 0;
 }
 
 
-static void mpc83xx_spi_cleanup(struct spi_device *spi)
+static void mpc8xxx_spi_cleanup(struct spi_device *spi)
 {
 	kfree(spi->controller_state);
 }
 
 static struct spi_master * __devinit
-mpc83xx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
+mpc8xxx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
 {
 	struct fsl_spi_platform_data *pdata = dev->platform_data;
 	struct spi_master *master;
-	struct mpc83xx_spi *mpc83xx_spi;
+	struct mpc8xxx_spi *mpc8xxx_spi;
 	u32 regval;
 	int ret = 0;
 
-	master = spi_alloc_master(dev, sizeof(struct mpc83xx_spi));
+	master = spi_alloc_master(dev, sizeof(struct mpc8xxx_spi));
 	if (master == NULL) {
 		ret = -ENOMEM;
 		goto err;
@@ -560,36 +560,36 @@ mpc83xx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
 
 	dev_set_drvdata(dev, master);
 
-	master->setup = mpc83xx_spi_setup;
-	master->transfer = mpc83xx_spi_transfer;
-	master->cleanup = mpc83xx_spi_cleanup;
-
-	mpc83xx_spi = spi_master_get_devdata(master);
-	mpc83xx_spi->qe_mode = pdata->qe_mode;
-	mpc83xx_spi->get_rx = mpc83xx_spi_rx_buf_u8;
-	mpc83xx_spi->get_tx = mpc83xx_spi_tx_buf_u8;
-	mpc83xx_spi->spibrg = pdata->sysclk;
-
-	mpc83xx_spi->rx_shift = 0;
-	mpc83xx_spi->tx_shift = 0;
-	if (mpc83xx_spi->qe_mode) {
-		mpc83xx_spi->rx_shift = 16;
-		mpc83xx_spi->tx_shift = 24;
+	master->setup = mpc8xxx_spi_setup;
+	master->transfer = mpc8xxx_spi_transfer;
+	master->cleanup = mpc8xxx_spi_cleanup;
+
+	mpc8xxx_spi = spi_master_get_devdata(master);
+	mpc8xxx_spi->qe_mode = pdata->qe_mode;
+	mpc8xxx_spi->get_rx = mpc8xxx_spi_rx_buf_u8;
+	mpc8xxx_spi->get_tx = mpc8xxx_spi_tx_buf_u8;
+	mpc8xxx_spi->spibrg = pdata->sysclk;
+
+	mpc8xxx_spi->rx_shift = 0;
+	mpc8xxx_spi->tx_shift = 0;
+	if (mpc8xxx_spi->qe_mode) {
+		mpc8xxx_spi->rx_shift = 16;
+		mpc8xxx_spi->tx_shift = 24;
 	}
 
-	init_completion(&mpc83xx_spi->done);
+	init_completion(&mpc8xxx_spi->done);
 
-	mpc83xx_spi->base = ioremap(mem->start, mem->end - mem->start + 1);
-	if (mpc83xx_spi->base == NULL) {
+	mpc8xxx_spi->base = ioremap(mem->start, mem->end - mem->start + 1);
+	if (mpc8xxx_spi->base == NULL) {
 		ret = -ENOMEM;
 		goto put_master;
 	}
 
-	mpc83xx_spi->irq = irq;
+	mpc8xxx_spi->irq = irq;
 
 	/* Register for SPI Interrupt */
-	ret = request_irq(mpc83xx_spi->irq, mpc83xx_spi_irq,
-			  0, "mpc83xx_spi", mpc83xx_spi);
+	ret = request_irq(mpc8xxx_spi->irq, mpc8xxx_spi_irq,
+			  0, "mpc8xxx_spi", mpc8xxx_spi);
 
 	if (ret != 0)
 		goto unmap_io;
@@ -598,25 +598,25 @@ mpc83xx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
 	master->num_chipselect = pdata->max_chipselect;
 
 	/* SPI controller initializations */
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, 0);
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, 0);
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->command, 0);
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->event, 0xffffffff);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mode, 0);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mask, 0);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->command, 0);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->event, 0xffffffff);
 
 	/* Enable SPI interface */
 	regval = pdata->initial_spmode | SPMODE_INIT_VAL | SPMODE_ENABLE;
 	if (pdata->qe_mode)
 		regval |= SPMODE_OP;
 
-	mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, regval);
-	spin_lock_init(&mpc83xx_spi->lock);
-	init_completion(&mpc83xx_spi->done);
-	INIT_WORK(&mpc83xx_spi->work, mpc83xx_spi_work);
-	INIT_LIST_HEAD(&mpc83xx_spi->queue);
+	mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mode, regval);
+	spin_lock_init(&mpc8xxx_spi->lock);
+	init_completion(&mpc8xxx_spi->done);
+	INIT_WORK(&mpc8xxx_spi->work, mpc8xxx_spi_work);
+	INIT_LIST_HEAD(&mpc8xxx_spi->queue);
 
-	mpc83xx_spi->workqueue = create_singlethread_workqueue(
+	mpc8xxx_spi->workqueue = create_singlethread_workqueue(
 		dev_name(master->dev.parent));
-	if (mpc83xx_spi->workqueue == NULL) {
+	if (mpc8xxx_spi->workqueue == NULL) {
 		ret = -EBUSY;
 		goto free_irq;
 	}
@@ -626,57 +626,57 @@ mpc83xx_spi_probe(struct device *dev, struct resource *mem, unsigned int irq)
 		goto unreg_master;
 
 	printk(KERN_INFO
-	       "%s: MPC83xx SPI Controller driver at 0x%p (irq = %d)\n",
-	       dev_name(dev), mpc83xx_spi->base, mpc83xx_spi->irq);
+	       "%s: MPC8xxx SPI Controller driver at 0x%p (irq = %d)\n",
+	       dev_name(dev), mpc8xxx_spi->base, mpc8xxx_spi->irq);
 
 	return master;
 
 unreg_master:
-	destroy_workqueue(mpc83xx_spi->workqueue);
+	destroy_workqueue(mpc8xxx_spi->workqueue);
 free_irq:
-	free_irq(mpc83xx_spi->irq, mpc83xx_spi);
+	free_irq(mpc8xxx_spi->irq, mpc8xxx_spi);
 unmap_io:
-	iounmap(mpc83xx_spi->base);
+	iounmap(mpc8xxx_spi->base);
 put_master:
 	spi_master_put(master);
 err:
 	return ERR_PTR(ret);
 }
 
-static int __devexit mpc83xx_spi_remove(struct device *dev)
+static int __devexit mpc8xxx_spi_remove(struct device *dev)
 {
-	struct mpc83xx_spi *mpc83xx_spi;
+	struct mpc8xxx_spi *mpc8xxx_spi;
 	struct spi_master *master;
 
 	master = dev_get_drvdata(dev);
-	mpc83xx_spi = spi_master_get_devdata(master);
+	mpc8xxx_spi = spi_master_get_devdata(master);
 
-	flush_workqueue(mpc83xx_spi->workqueue);
-	destroy_workqueue(mpc83xx_spi->workqueue);
+	flush_workqueue(mpc8xxx_spi->workqueue);
+	destroy_workqueue(mpc8xxx_spi->workqueue);
 	spi_unregister_master(master);
 
-	free_irq(mpc83xx_spi->irq, mpc83xx_spi);
-	iounmap(mpc83xx_spi->base);
+	free_irq(mpc8xxx_spi->irq, mpc8xxx_spi);
+	iounmap(mpc8xxx_spi->base);
 
 	return 0;
 }
 
-struct mpc83xx_spi_probe_info {
+struct mpc8xxx_spi_probe_info {
 	struct fsl_spi_platform_data pdata;
 	int *gpios;
 	bool *alow_flags;
 };
 
-static struct mpc83xx_spi_probe_info *
+static struct mpc8xxx_spi_probe_info *
 to_of_pinfo(struct fsl_spi_platform_data *pdata)
 {
-	return container_of(pdata, struct mpc83xx_spi_probe_info, pdata);
+	return container_of(pdata, struct mpc8xxx_spi_probe_info, pdata);
 }
 
-static void mpc83xx_spi_cs_control(struct spi_device *spi, bool on)
+static void mpc8xxx_spi_cs_control(struct spi_device *spi, bool on)
 {
 	struct device *dev = spi->dev.parent;
-	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data);
+	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(dev->platform_data);
 	u16 cs = spi->chip_select;
 	int gpio = pinfo->gpios[cs];
 	bool alow = pinfo->alow_flags[cs];
@@ -684,11 +684,11 @@ static void mpc83xx_spi_cs_control(struct spi_device *spi, bool on)
 	gpio_set_value(gpio, on ^ alow);
 }
 
-static int of_mpc83xx_spi_get_chipselects(struct device *dev)
+static int of_mpc8xxx_spi_get_chipselects(struct device *dev)
 {
 	struct device_node *np = dev_archdata_get_node(&dev->archdata);
 	struct fsl_spi_platform_data *pdata = dev->platform_data;
-	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(pdata);
+	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
 	unsigned int ngpios;
 	int i = 0;
 	int ret;
@@ -744,7 +744,7 @@ static int of_mpc83xx_spi_get_chipselects(struct device *dev)
 	}
 
 	pdata->max_chipselect = ngpios;
-	pdata->cs_control = mpc83xx_spi_cs_control;
+	pdata->cs_control = mpc8xxx_spi_cs_control;
 
 	return 0;
 
@@ -763,10 +763,10 @@ err_alloc_flags:
 	return ret;
 }
 
-static int of_mpc83xx_spi_free_chipselects(struct device *dev)
+static int of_mpc8xxx_spi_free_chipselects(struct device *dev)
 {
 	struct fsl_spi_platform_data *pdata = dev->platform_data;
-	struct mpc83xx_spi_probe_info *pinfo = to_of_pinfo(pdata);
+	struct mpc8xxx_spi_probe_info *pinfo = to_of_pinfo(pdata);
 	int i;
 
 	if (!pinfo->gpios)
@@ -782,12 +782,12 @@ static int of_mpc83xx_spi_free_chipselects(struct device *dev)
 	return 0;
 }
 
-static int __devinit of_mpc83xx_spi_probe(struct of_device *ofdev,
+static int __devinit of_mpc8xxx_spi_probe(struct of_device *ofdev,
 					  const struct of_device_id *ofid)
 {
 	struct device *dev = &ofdev->dev;
 	struct device_node *np = ofdev->node;
-	struct mpc83xx_spi_probe_info *pinfo;
+	struct mpc8xxx_spi_probe_info *pinfo;
 	struct fsl_spi_platform_data *pdata;
 	struct spi_master *master;
 	struct resource mem;
@@ -819,7 +819,7 @@ static int __devinit of_mpc83xx_spi_probe(struct of_device *ofdev,
 	if (prop && !strcmp(prop, "cpu-qe"))
 		pdata->qe_mode = 1;
 
-	ret = of_mpc83xx_spi_get_chipselects(dev);
+	ret = of_mpc8xxx_spi_get_chipselects(dev);
 	if (ret)
 		goto err;
 
@@ -833,7 +833,7 @@ static int __devinit of_mpc83xx_spi_probe(struct of_device *ofdev,
 		goto err;
 	}
 
-	master = mpc83xx_spi_probe(dev, &mem, irq.start);
+	master = mpc8xxx_spi_probe(dev, &mem, irq.start);
 	if (IS_ERR(master)) {
 		ret = PTR_ERR(master);
 		goto err;
@@ -844,34 +844,34 @@ static int __devinit of_mpc83xx_spi_probe(struct of_device *ofdev,
 	return 0;
 
 err:
-	of_mpc83xx_spi_free_chipselects(dev);
+	of_mpc8xxx_spi_free_chipselects(dev);
 err_clk:
 	kfree(pinfo);
 	return ret;
 }
 
-static int __devexit of_mpc83xx_spi_remove(struct of_device *ofdev)
+static int __devexit of_mpc8xxx_spi_remove(struct of_device *ofdev)
 {
 	int ret;
 
-	ret = mpc83xx_spi_remove(&ofdev->dev);
+	ret = mpc8xxx_spi_remove(&ofdev->dev);
 	if (ret)
 		return ret;
-	of_mpc83xx_spi_free_chipselects(&ofdev->dev);
+	of_mpc8xxx_spi_free_chipselects(&ofdev->dev);
 	return 0;
 }
 
-static const struct of_device_id of_mpc83xx_spi_match[] = {
+static const struct of_device_id of_mpc8xxx_spi_match[] = {
 	{ .compatible = "fsl,spi" },
 	{},
 };
-MODULE_DEVICE_TABLE(of, of_mpc83xx_spi_match);
+MODULE_DEVICE_TABLE(of, of_mpc8xxx_spi_match);
 
-static struct of_platform_driver of_mpc83xx_spi_driver = {
-	.name		= "mpc83xx_spi",
-	.match_table	= of_mpc83xx_spi_match,
-	.probe		= of_mpc83xx_spi_probe,
-	.remove		= __devexit_p(of_mpc83xx_spi_remove),
+static struct of_platform_driver of_mpc8xxx_spi_driver = {
+	.name		= "mpc8xxx_spi",
+	.match_table	= of_mpc8xxx_spi_match,
+	.probe		= of_mpc8xxx_spi_probe,
+	.remove		= __devexit_p(of_mpc8xxx_spi_remove),
 };
 
 #ifdef CONFIG_MPC832x_RDB
@@ -882,7 +882,7 @@ static struct of_platform_driver of_mpc83xx_spi_driver = {
  * tree can work with OpenFirmware driver. But for now we support old trees
  * as well.
  */
-static int __devinit plat_mpc83xx_spi_probe(struct platform_device *pdev)
+static int __devinit plat_mpc8xxx_spi_probe(struct platform_device *pdev)
 {
 	struct resource *mem;
 	unsigned int irq;
@@ -899,21 +899,21 @@ static int __devinit plat_mpc83xx_spi_probe(struct platform_device *pdev)
 	if (!irq)
 		return -EINVAL;
 
-	master = mpc83xx_spi_probe(&pdev->dev, mem, irq);
+	master = mpc8xxx_spi_probe(&pdev->dev, mem, irq);
 	if (IS_ERR(master))
 		return PTR_ERR(master);
 	return 0;
 }
 
-static int __devexit plat_mpc83xx_spi_remove(struct platform_device *pdev)
+static int __devexit plat_mpc8xxx_spi_remove(struct platform_device *pdev)
 {
-	return mpc83xx_spi_remove(&pdev->dev);
+	return mpc8xxx_spi_remove(&pdev->dev);
 }
 
 MODULE_ALIAS("platform:mpc83xx_spi");
-static struct platform_driver mpc83xx_spi_driver = {
-	.probe = plat_mpc83xx_spi_probe,
-	.remove = __exit_p(plat_mpc83xx_spi_remove),
+static struct platform_driver mpc8xxx_spi_driver = {
+	.probe = plat_mpc8xxx_spi_probe,
+	.remove = __exit_p(plat_mpc8xxx_spi_remove),
 	.driver = {
 		.name = "mpc83xx_spi",
 		.owner = THIS_MODULE,
@@ -924,35 +924,35 @@ static bool legacy_driver_failed;
 
 static void __init legacy_driver_register(void)
 {
-	legacy_driver_failed = platform_driver_register(&mpc83xx_spi_driver);
+	legacy_driver_failed = platform_driver_register(&mpc8xxx_spi_driver);
 }
 
 static void __exit legacy_driver_unregister(void)
 {
 	if (legacy_driver_failed)
 		return;
-	platform_driver_unregister(&mpc83xx_spi_driver);
+	platform_driver_unregister(&mpc8xxx_spi_driver);
 }
 #else
 static void __init legacy_driver_register(void) {}
 static void __exit legacy_driver_unregister(void) {}
 #endif /* CONFIG_MPC832x_RDB */
 
-static int __init mpc83xx_spi_init(void)
+static int __init mpc8xxx_spi_init(void)
 {
 	legacy_driver_register();
-	return of_register_platform_driver(&of_mpc83xx_spi_driver);
+	return of_register_platform_driver(&of_mpc8xxx_spi_driver);
 }
 
-static void __exit mpc83xx_spi_exit(void)
+static void __exit mpc8xxx_spi_exit(void)
 {
-	of_unregister_platform_driver(&of_mpc83xx_spi_driver);
+	of_unregister_platform_driver(&of_mpc8xxx_spi_driver);
 	legacy_driver_unregister();
 }
 
-module_init(mpc83xx_spi_init);
-module_exit(mpc83xx_spi_exit);
+module_init(mpc8xxx_spi_init);
+module_exit(mpc8xxx_spi_exit);
 
 MODULE_AUTHOR("Kumar Gala");
-MODULE_DESCRIPTION("Simple MPC83xx SPI Driver");
+MODULE_DESCRIPTION("Simple MPC8xxx SPI Driver");
 MODULE_LICENSE("GPL");
-- 
1.6.2.2

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

* Re: [spi-devel-general] [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g
  2009-04-30 23:48 ` [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g Anton Vorontsov
@ 2009-05-01 21:42   ` Grant Likely
  2009-05-04 20:53   ` Andrew Morton
  1 sibling, 0 replies; 15+ messages in thread
From: Grant Likely @ 2009-05-01 21:42 UTC (permalink / raw)
  To: Anton Vorontsov
  Cc: David Brownell, linux-kernel, linuxppc-dev, spi-devel-general,
	Andrew Morton

On Thu, Apr 30, 2009 at 5:48 PM, Anton Vorontsov
<avorontsov@ru.mvista.com> wrote:
> Since we renamed the file, we might want to rename the file
> internals too.
>
> Though we don't bother with changing platform driver name and
> platform module alias. The stuff is legacy and hopefully we'll
> remove it soon.
>

I'd say no personally.  Its a lot of churn for very little gain.  The
filename change alone should be sufficient to clue people into what
the driver is for.

g.

> Suggested-by: Kumar Gala <galak@kernel.crashing.org>
> Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
> ---
> =A0drivers/spi/Kconfig =A0 =A0 =A0 | =A0 =A02 +-
> =A0drivers/spi/Makefile =A0 =A0 =A0| =A0 =A02 +-
> =A0drivers/spi/spi_mpc8xxx.c | =A0396 ++++++++++++++++++++++-------------=
---------
> =A03 files changed, 200 insertions(+), 200 deletions(-)
>
> diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig
> index 3c1845c..9e77bf1 100644
> --- a/drivers/spi/Kconfig
> +++ b/drivers/spi/Kconfig
> @@ -139,7 +139,7 @@ config SPI_MPC52xx_PSC
> =A0 =A0 =A0 =A0 =A0This enables using the Freescale MPC52xx Programmable =
Serial
> =A0 =A0 =A0 =A0 =A0Controller in master SPI mode.
>
> -config SPI_MPC83xx
> +config SPI_MPC8xxx
> =A0 =A0 =A0 =A0tristate "Freescale MPC8xxx SPI controller"
> =A0 =A0 =A0 =A0depends on FSL_SOC
> =A0 =A0 =A0 =A0help
> diff --git a/drivers/spi/Makefile b/drivers/spi/Makefile
> index fdc7aa0..18ba6b4 100644
> --- a/drivers/spi/Makefile
> +++ b/drivers/spi/Makefile
> @@ -24,7 +24,7 @@ obj-$(CONFIG_SPI_OMAP_UWIRE) =A0 =A0 =A0 =A0 =A0+=3D om=
ap_uwire.o
> =A0obj-$(CONFIG_SPI_OMAP24XX) =A0 =A0 =A0 =A0 =A0 =A0 +=3D omap2_mcspi.o
> =A0obj-$(CONFIG_SPI_ORION) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0+=3D orion_spi.o
> =A0obj-$(CONFIG_SPI_MPC52xx_PSC) =A0 =A0 =A0 =A0 =A0+=3D mpc52xx_psc_spi.=
o
> -obj-$(CONFIG_SPI_MPC83xx) =A0 =A0 =A0 =A0 =A0 =A0 =A0+=3D spi_mpc8xxx.o
> +obj-$(CONFIG_SPI_MPC8xxx) =A0 =A0 =A0 =A0 =A0 =A0 =A0+=3D spi_mpc8xxx.o
> =A0obj-$(CONFIG_SPI_S3C24XX_GPIO) =A0 =A0 =A0 =A0 +=3D spi_s3c24xx_gpio.o
> =A0obj-$(CONFIG_SPI_S3C24XX) =A0 =A0 =A0 =A0 =A0 =A0 =A0+=3D spi_s3c24xx.=
o
> =A0obj-$(CONFIG_SPI_TXX9) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 +=3D spi_txx9.o
> diff --git a/drivers/spi/spi_mpc8xxx.c b/drivers/spi/spi_mpc8xxx.c
> index 4192ce4..15d9527 100644
> --- a/drivers/spi/spi_mpc8xxx.c
> +++ b/drivers/spi/spi_mpc8xxx.c
> @@ -1,5 +1,5 @@
> =A0/*
> - * MPC83xx SPI controller driver.
> + * MPC8xxx SPI controller driver.
> =A0*
> =A0* Maintainer: Kumar Gala
> =A0*
> @@ -37,7 +37,7 @@
> =A0#include <asm/irq.h>
>
> =A0/* SPI Controller registers */
> -struct mpc83xx_spi_reg {
> +struct mpc8xxx_spi_reg {
> =A0 =A0 =A0 =A0u8 res1[0x20];
> =A0 =A0 =A0 =A0__be32 mode;
> =A0 =A0 =A0 =A0__be32 event;
> @@ -76,16 +76,16 @@ struct mpc83xx_spi_reg {
> =A0#define =A0 =A0 =A0 =A0SPIM_NF =A0 =A0 =A0 =A0 0x00000100 =A0 =A0 =A0/=
* Not full */
>
> =A0/* SPI Controller driver's private data. */
> -struct mpc83xx_spi {
> - =A0 =A0 =A0 struct mpc83xx_spi_reg __iomem *base;
> +struct mpc8xxx_spi {
> + =A0 =A0 =A0 struct mpc8xxx_spi_reg __iomem *base;
>
> =A0 =A0 =A0 =A0/* rx & tx bufs from the spi_transfer */
> =A0 =A0 =A0 =A0const void *tx;
> =A0 =A0 =A0 =A0void *rx;
>
> =A0 =A0 =A0 =A0/* functions to deal with different sized buffers */
> - =A0 =A0 =A0 void (*get_rx) (u32 rx_data, struct mpc83xx_spi *);
> - =A0 =A0 =A0 u32(*get_tx) (struct mpc83xx_spi *);
> + =A0 =A0 =A0 void (*get_rx) (u32 rx_data, struct mpc8xxx_spi *);
> + =A0 =A0 =A0 u32(*get_tx) (struct mpc8xxx_spi *);
>
> =A0 =A0 =A0 =A0unsigned int count;
> =A0 =A0 =A0 =A0unsigned int irq;
> @@ -107,44 +107,44 @@ struct mpc83xx_spi {
> =A0 =A0 =A0 =A0struct completion done;
> =A0};
>
> -struct spi_mpc83xx_cs {
> +struct spi_mpc8xxx_cs {
> =A0 =A0 =A0 =A0/* functions to deal with different sized buffers */
> - =A0 =A0 =A0 void (*get_rx) (u32 rx_data, struct mpc83xx_spi *);
> - =A0 =A0 =A0 u32 (*get_tx) (struct mpc83xx_spi *);
> + =A0 =A0 =A0 void (*get_rx) (u32 rx_data, struct mpc8xxx_spi *);
> + =A0 =A0 =A0 u32 (*get_tx) (struct mpc8xxx_spi *);
> =A0 =A0 =A0 =A0u32 rx_shift; =A0 =A0 =A0 =A0 =A0 /* RX data reg shift whe=
n in qe mode */
> =A0 =A0 =A0 =A0u32 tx_shift; =A0 =A0 =A0 =A0 =A0 /* TX data reg shift whe=
n in qe mode */
> =A0 =A0 =A0 =A0u32 hw_mode; =A0 =A0 =A0 =A0 =A0 =A0/* Holds HW mode regis=
ter settings */
> =A0};
>
> -static inline void mpc83xx_spi_write_reg(__be32 __iomem *reg, u32 val)
> +static inline void mpc8xxx_spi_write_reg(__be32 __iomem *reg, u32 val)
> =A0{
> =A0 =A0 =A0 =A0out_be32(reg, val);
> =A0}
>
> -static inline u32 mpc83xx_spi_read_reg(__be32 __iomem *reg)
> +static inline u32 mpc8xxx_spi_read_reg(__be32 __iomem *reg)
> =A0{
> =A0 =A0 =A0 =A0return in_be32(reg);
> =A0}
>
> =A0#define MPC83XX_SPI_RX_BUF(type) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> =A0static =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> -void mpc83xx_spi_rx_buf_##type(u32 data, struct mpc83xx_spi *mpc83xx_spi=
) \
> +void mpc8xxx_spi_rx_buf_##type(u32 data, struct mpc8xxx_spi *mpc8xxx_spi=
) \
> =A0{ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
\
> - =A0 =A0 =A0 type *rx =3D mpc83xx_spi->rx; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> - =A0 =A0 =A0 *rx++ =3D (type)(data >> mpc83xx_spi->rx_shift); =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\
> - =A0 =A0 =A0 mpc83xx_spi->rx =3D rx; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> + =A0 =A0 =A0 type *rx =3D mpc8xxx_spi->rx; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> + =A0 =A0 =A0 *rx++ =3D (type)(data >> mpc8xxx_spi->rx_shift); =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\
> + =A0 =A0 =A0 mpc8xxx_spi->rx =3D rx; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> =A0}
>
> =A0#define MPC83XX_SPI_TX_BUF(type) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 \
> =A0static =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> -u32 mpc83xx_spi_tx_buf_##type(struct mpc83xx_spi *mpc83xx_spi) \
> +u32 mpc8xxx_spi_tx_buf_##type(struct mpc8xxx_spi *mpc8xxx_spi) \
> =A0{ =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\
> =A0 =A0 =A0 =A0u32 data; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> - =A0 =A0 =A0 const type *tx =3D mpc83xx_spi->tx; =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 \
> + =A0 =A0 =A0 const type *tx =3D mpc8xxx_spi->tx; =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 \
> =A0 =A0 =A0 =A0if (!tx) =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return 0; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> - =A0 =A0 =A0 data =3D *tx++ << mpc83xx_spi->tx_shift; =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0\
> - =A0 =A0 =A0 mpc83xx_spi->tx =3D tx; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> + =A0 =A0 =A0 data =3D *tx++ << mpc8xxx_spi->tx_shift; =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0\
> + =A0 =A0 =A0 mpc8xxx_spi->tx =3D tx; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0=
 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 \
> =A0 =A0 =A0 =A0return data; =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0\
> =A0}
>
> @@ -155,12 +155,12 @@ MPC83XX_SPI_TX_BUF(u8)
> =A0MPC83XX_SPI_TX_BUF(u16)
> =A0MPC83XX_SPI_TX_BUF(u32)
>
> -static void mpc83xx_spi_chipselect(struct spi_device *spi, int value)
> +static void mpc8xxx_spi_chipselect(struct spi_device *spi, int value)
> =A0{
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi =3D spi_master_get_devdata(=
spi->master);
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi =3D spi_master_get_devdata(=
spi->master);
> =A0 =A0 =A0 =A0struct fsl_spi_platform_data *pdata =3D spi->dev.parent->p=
latform_data;
> =A0 =A0 =A0 =A0bool pol =3D spi->mode & SPI_CS_HIGH;
> - =A0 =A0 =A0 struct spi_mpc83xx_cs =A0 *cs =3D spi->controller_state;
> + =A0 =A0 =A0 struct spi_mpc8xxx_cs =A0 *cs =3D spi->controller_state;
>
> =A0 =A0 =A0 =A0if (value =3D=3D BITBANG_CS_INACTIVE) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (pdata->cs_control)
> @@ -168,16 +168,16 @@ static void mpc83xx_spi_chipselect(struct spi_devic=
e *spi, int value)
> =A0 =A0 =A0 =A0}
>
> =A0 =A0 =A0 =A0if (value =3D=3D BITBANG_CS_ACTIVE) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 regval =3D mpc83xx_spi_read_reg(&mpc83x=
x_spi->base->mode);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 regval =3D mpc8xxx_spi_read_reg(&mpc8xx=
x_spi->base->mode);
>
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi->rx_shift =3D cs->rx_shift;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi->tx_shift =3D cs->tx_shift;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi->get_rx =3D cs->get_rx;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi->get_tx =3D cs->get_tx;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi->rx_shift =3D cs->rx_shift;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi->tx_shift =3D cs->tx_shift;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi->get_rx =3D cs->get_rx;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi->get_tx =3D cs->get_tx;
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (cs->hw_mode !=3D regval) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0unsigned long flags;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 __be32 __iomem *mode =3D &m=
pc83xx_spi->base->mode;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 __be32 __iomem *mode =3D &m=
pc8xxx_spi->base->mode;
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0regval =3D cs->hw_mode;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Turn off IRQs locally t=
o minimize time that
> @@ -185,8 +185,8 @@ static void mpc83xx_spi_chipselect(struct spi_device =
*spi, int value)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 */
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0local_irq_save(flags);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Turn off SPI unit prior=
 changing mode */
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_write_reg(mode,=
 regval & ~SPMODE_ENABLE);
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_write_reg(mode,=
 regval);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_write_reg(mode,=
 regval & ~SPMODE_ENABLE);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_write_reg(mode,=
 regval);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0local_irq_restore(flags);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (pdata->cs_control)
> @@ -195,15 +195,15 @@ static void mpc83xx_spi_chipselect(struct spi_devic=
e *spi, int value)
> =A0}
>
> =A0static
> -int mpc83xx_spi_setup_transfer(struct spi_device *spi, struct spi_transf=
er *t)
> +int mpc8xxx_spi_setup_transfer(struct spi_device *spi, struct spi_transf=
er *t)
> =A0{
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi;
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi;
> =A0 =A0 =A0 =A0u32 regval;
> =A0 =A0 =A0 =A0u8 bits_per_word, pm;
> =A0 =A0 =A0 =A0u32 hz;
> - =A0 =A0 =A0 struct spi_mpc83xx_cs =A0 *cs =3D spi->controller_state;
> + =A0 =A0 =A0 struct spi_mpc8xxx_cs =A0 *cs =3D spi->controller_state;
>
> - =A0 =A0 =A0 mpc83xx_spi =3D spi_master_get_devdata(spi->master);
> + =A0 =A0 =A0 mpc8xxx_spi =3D spi_master_get_devdata(spi->master);
>
> =A0 =A0 =A0 =A0if (t) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bits_per_word =3D t->bits_per_word;
> @@ -228,26 +228,26 @@ int mpc83xx_spi_setup_transfer(struct spi_device *s=
pi, struct spi_transfer *t)
> =A0 =A0 =A0 =A0cs->rx_shift =3D 0;
> =A0 =A0 =A0 =A0cs->tx_shift =3D 0;
> =A0 =A0 =A0 =A0if (bits_per_word <=3D 8) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_rx =3D mpc83xx_spi_rx_buf_u8;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_tx =3D mpc83xx_spi_tx_buf_u8;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (mpc83xx_spi->qe_mode) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_rx =3D mpc8xxx_spi_rx_buf_u8;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_tx =3D mpc8xxx_spi_tx_buf_u8;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (mpc8xxx_spi->qe_mode) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->rx_shift =3D 16;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->tx_shift =3D 24;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
> =A0 =A0 =A0 =A0} else if (bits_per_word <=3D 16) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_rx =3D mpc83xx_spi_rx_buf_u16;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_tx =3D mpc83xx_spi_tx_buf_u16;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (mpc83xx_spi->qe_mode) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_rx =3D mpc8xxx_spi_rx_buf_u16;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_tx =3D mpc8xxx_spi_tx_buf_u16;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (mpc8xxx_spi->qe_mode) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->rx_shift =3D 16;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->tx_shift =3D 16;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
> =A0 =A0 =A0 =A0} else if (bits_per_word <=3D 32) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_rx =3D mpc83xx_spi_rx_buf_u32;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_tx =3D mpc83xx_spi_tx_buf_u32;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_rx =3D mpc8xxx_spi_rx_buf_u32;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 cs->get_tx =3D mpc8xxx_spi_tx_buf_u32;
> =A0 =A0 =A0 =A0} else
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -EINVAL;
>
> - =A0 =A0 =A0 if (mpc83xx_spi->qe_mode && spi->mode & SPI_LSB_FIRST) {
> + =A0 =A0 =A0 if (mpc8xxx_spi->qe_mode && spi->mode & SPI_LSB_FIRST) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->tx_shift =3D 0;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (bits_per_word <=3D 8)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->rx_shift =3D 8;
> @@ -255,10 +255,10 @@ int mpc83xx_spi_setup_transfer(struct spi_device *s=
pi, struct spi_transfer *t)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->rx_shift =3D 0;
> =A0 =A0 =A0 =A0}
>
> - =A0 =A0 =A0 mpc83xx_spi->rx_shift =3D cs->rx_shift;
> - =A0 =A0 =A0 mpc83xx_spi->tx_shift =3D cs->tx_shift;
> - =A0 =A0 =A0 mpc83xx_spi->get_rx =3D cs->get_rx;
> - =A0 =A0 =A0 mpc83xx_spi->get_tx =3D cs->get_tx;
> + =A0 =A0 =A0 mpc8xxx_spi->rx_shift =3D cs->rx_shift;
> + =A0 =A0 =A0 mpc8xxx_spi->tx_shift =3D cs->tx_shift;
> + =A0 =A0 =A0 mpc8xxx_spi->get_rx =3D cs->get_rx;
> + =A0 =A0 =A0 mpc8xxx_spi->get_tx =3D cs->get_tx;
>
> =A0 =A0 =A0 =A0if (bits_per_word =3D=3D 32)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bits_per_word =3D 0;
> @@ -271,25 +271,25 @@ int mpc83xx_spi_setup_transfer(struct spi_device *s=
pi, struct spi_transfer *t)
>
> =A0 =A0 =A0 =A0cs->hw_mode |=3D SPMODE_LEN(bits_per_word);
>
> - =A0 =A0 =A0 if ((mpc83xx_spi->spibrg / hz) > 64) {
> + =A0 =A0 =A0 if ((mpc8xxx_spi->spibrg / hz) > 64) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->hw_mode |=3D SPMODE_DIV16;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 pm =3D mpc83xx_spi->spibrg / (hz * 64);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 pm =3D mpc8xxx_spi->spibrg / (hz * 64);
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0WARN_ONCE(pm > 16, "%s: Requested speed is=
 too low: %d Hz. "
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0"Will use %d Hz instea=
d.\n", dev_name(&spi->dev),
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 hz, mpc83xx_spi->spibrg=
 / 1024);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 hz, mpc8xxx_spi->spibrg=
 / 1024);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (pm > 16)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pm =3D 16;
> =A0 =A0 =A0 =A0} else
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 pm =3D mpc83xx_spi->spibrg / (hz * 4);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 pm =3D mpc8xxx_spi->spibrg / (hz * 4);
> =A0 =A0 =A0 =A0if (pm)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pm--;
>
> =A0 =A0 =A0 =A0cs->hw_mode |=3D SPMODE_PM(pm);
> - =A0 =A0 =A0 regval =3D =A0mpc83xx_spi_read_reg(&mpc83xx_spi->base->mode=
);
> + =A0 =A0 =A0 regval =3D =A0mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->mode=
);
> =A0 =A0 =A0 =A0if (cs->hw_mode !=3D regval) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0unsigned long flags;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 __be32 __iomem *mode =3D &mpc83xx_spi->base=
->mode;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 __be32 __iomem *mode =3D &mpc8xxx_spi->base=
->mode;
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0regval =3D cs->hw_mode;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Turn off IRQs locally to minimize time
> @@ -297,22 +297,22 @@ int mpc83xx_spi_setup_transfer(struct spi_device *s=
pi, struct spi_transfer *t)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 */
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0local_irq_save(flags);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* Turn off SPI unit prior changing mode *=
/
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_write_reg(mode, regval & ~SPMOD=
E_ENABLE);
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_write_reg(mode, regval);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_write_reg(mode, regval & ~SPMOD=
E_ENABLE);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_write_reg(mode, regval);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0local_irq_restore(flags);
> =A0 =A0 =A0 =A0}
> =A0 =A0 =A0 =A0return 0;
> =A0}
>
> -static int mpc83xx_spi_bufs(struct spi_device *spi, struct spi_transfer =
*t)
> +static int mpc8xxx_spi_bufs(struct spi_device *spi, struct spi_transfer =
*t)
> =A0{
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi;
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi;
> =A0 =A0 =A0 =A0u32 word, len, bits_per_word;
>
> - =A0 =A0 =A0 mpc83xx_spi =3D spi_master_get_devdata(spi->master);
> + =A0 =A0 =A0 mpc8xxx_spi =3D spi_master_get_devdata(spi->master);
>
> - =A0 =A0 =A0 mpc83xx_spi->tx =3D t->tx_buf;
> - =A0 =A0 =A0 mpc83xx_spi->rx =3D t->rx_buf;
> + =A0 =A0 =A0 mpc8xxx_spi->tx =3D t->tx_buf;
> + =A0 =A0 =A0 mpc8xxx_spi->rx =3D t->rx_buf;
> =A0 =A0 =A0 =A0bits_per_word =3D spi->bits_per_word;
> =A0 =A0 =A0 =A0if (t->bits_per_word)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0bits_per_word =3D t->bits_per_word;
> @@ -329,26 +329,26 @@ static int mpc83xx_spi_bufs(struct spi_device *spi,=
 struct spi_transfer *t)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -EINVAL;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0len /=3D 2;
> =A0 =A0 =A0 =A0}
> - =A0 =A0 =A0 mpc83xx_spi->count =3D len;
> + =A0 =A0 =A0 mpc8xxx_spi->count =3D len;
>
> - =A0 =A0 =A0 INIT_COMPLETION(mpc83xx_spi->done);
> + =A0 =A0 =A0 INIT_COMPLETION(mpc8xxx_spi->done);
>
> =A0 =A0 =A0 =A0/* enable rx ints */
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, SPIM_NE);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mask, SPIM_NE);
>
> =A0 =A0 =A0 =A0/* transmit word */
> - =A0 =A0 =A0 word =3D mpc83xx_spi->get_tx(mpc83xx_spi);
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->transmit, word);
> + =A0 =A0 =A0 word =3D mpc8xxx_spi->get_tx(mpc8xxx_spi);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->transmit, word);
>
> - =A0 =A0 =A0 wait_for_completion(&mpc83xx_spi->done);
> + =A0 =A0 =A0 wait_for_completion(&mpc8xxx_spi->done);
>
> =A0 =A0 =A0 =A0/* disable rx ints */
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, 0);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mask, 0);
>
> - =A0 =A0 =A0 return mpc83xx_spi->count;
> + =A0 =A0 =A0 return mpc8xxx_spi->count;
> =A0}
>
> -static void mpc83xx_spi_do_one_msg(struct spi_message *m)
> +static void mpc8xxx_spi_do_one_msg(struct spi_message *m)
> =A0{
> =A0 =A0 =A0 =A0struct spi_device *spi =3D m->spi;
> =A0 =A0 =A0 =A0struct spi_transfer *t;
> @@ -364,18 +364,18 @@ static void mpc83xx_spi_do_one_msg(struct spi_messa=
ge *m)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0status =3D -EINVAL;
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (cs_change)
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 status =3D =
mpc83xx_spi_setup_transfer(spi, t);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 status =3D =
mpc8xxx_spi_setup_transfer(spi, t);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (status < 0)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (cs_change) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_chipselect(spi,=
 BITBANG_CS_ACTIVE);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_chipselect(spi,=
 BITBANG_CS_ACTIVE);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ndelay(nsecs);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs_change =3D t->cs_change;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (t->len)
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 status =3D mpc83xx_spi_bufs=
(spi, t);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 status =3D mpc8xxx_spi_bufs=
(spi, t);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (status) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0status =3D -EMSGSIZE;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0break;
> @@ -387,7 +387,7 @@ static void mpc83xx_spi_do_one_msg(struct spi_message=
 *m)
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0if (cs_change) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ndelay(nsecs);
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_chipselect(spi,=
 BITBANG_CS_INACTIVE);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_chipselect(spi,=
 BITBANG_CS_INACTIVE);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ndelay(nsecs);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0}
> =A0 =A0 =A0 =A0}
> @@ -397,42 +397,42 @@ static void mpc83xx_spi_do_one_msg(struct spi_messa=
ge *m)
>
> =A0 =A0 =A0 =A0if (status || !cs_change) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ndelay(nsecs);
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_chipselect(spi, BITBANG_CS_INAC=
TIVE);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_chipselect(spi, BITBANG_CS_INAC=
TIVE);
> =A0 =A0 =A0 =A0}
>
> - =A0 =A0 =A0 mpc83xx_spi_setup_transfer(spi, NULL);
> + =A0 =A0 =A0 mpc8xxx_spi_setup_transfer(spi, NULL);
> =A0}
>
> -static void mpc83xx_spi_work(struct work_struct *work)
> +static void mpc8xxx_spi_work(struct work_struct *work)
> =A0{
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi =3D container_of(work, stru=
ct mpc83xx_spi,
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi =3D container_of(work, stru=
ct mpc8xxx_spi,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 work);
>
> - =A0 =A0 =A0 spin_lock_irq(&mpc83xx_spi->lock);
> - =A0 =A0 =A0 while (!list_empty(&mpc83xx_spi->queue)) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct spi_message *m =3D container_of(mpc8=
3xx_spi->queue.next,
> + =A0 =A0 =A0 spin_lock_irq(&mpc8xxx_spi->lock);
> + =A0 =A0 =A0 while (!list_empty(&mpc8xxx_spi->queue)) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct spi_message *m =3D container_of(mpc8=
xxx_spi->queue.next,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0 =A0 struct spi_message, queue);
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0list_del_init(&m->queue);
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 spin_unlock_irq(&mpc83xx_spi->lock);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 spin_unlock_irq(&mpc8xxx_spi->lock);
>
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_do_one_msg(m);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_do_one_msg(m);
>
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 spin_lock_irq(&mpc83xx_spi->lock);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 spin_lock_irq(&mpc8xxx_spi->lock);
> =A0 =A0 =A0 =A0}
> - =A0 =A0 =A0 spin_unlock_irq(&mpc83xx_spi->lock);
> + =A0 =A0 =A0 spin_unlock_irq(&mpc8xxx_spi->lock);
> =A0}
>
> =A0/* the spi->mode bits understood by this driver: */
> =A0#define MODEBITS =A0 =A0 =A0 (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| SPI_LSB_FIRST | SPI_LOOP=
)
>
> -static int mpc83xx_spi_setup(struct spi_device *spi)
> +static int mpc8xxx_spi_setup(struct spi_device *spi)
> =A0{
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi;
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi;
> =A0 =A0 =A0 =A0int retval;
> =A0 =A0 =A0 =A0u32 hw_mode;
> - =A0 =A0 =A0 struct spi_mpc83xx_cs =A0 *cs =3D spi->controller_state;
> + =A0 =A0 =A0 struct spi_mpc8xxx_cs =A0 *cs =3D spi->controller_state;
>
> =A0 =A0 =A0 =A0if (spi->mode & ~MODEBITS) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0dev_dbg(&spi->dev, "setup: unsupported mod=
e bits %x\n",
> @@ -449,13 +449,13 @@ static int mpc83xx_spi_setup(struct spi_device *spi=
)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -ENOMEM;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0spi->controller_state =3D cs;
> =A0 =A0 =A0 =A0}
> - =A0 =A0 =A0 mpc83xx_spi =3D spi_master_get_devdata(spi->master);
> + =A0 =A0 =A0 mpc8xxx_spi =3D spi_master_get_devdata(spi->master);
>
> =A0 =A0 =A0 =A0if (!spi->bits_per_word)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0spi->bits_per_word =3D 8;
>
> =A0 =A0 =A0 =A0hw_mode =3D cs->hw_mode; /* Save orginal settings */
> - =A0 =A0 =A0 cs->hw_mode =3D mpc83xx_spi_read_reg(&mpc83xx_spi->base->mo=
de);
> + =A0 =A0 =A0 cs->hw_mode =3D mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->mo=
de);
> =A0 =A0 =A0 =A0/* mask out bits we are going to set */
> =A0 =A0 =A0 =A0cs->hw_mode &=3D ~(SPMODE_CP_BEGIN_EDGECLK | SPMODE_CI_INA=
CTIVEHIGH
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 | SPMODE_REV | SPMODE_LOO=
P);
> @@ -469,7 +469,7 @@ static int mpc83xx_spi_setup(struct spi_device *spi)
> =A0 =A0 =A0 =A0if (spi->mode & SPI_LOOP)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->hw_mode |=3D SPMODE_LOOP;
>
> - =A0 =A0 =A0 retval =3D mpc83xx_spi_setup_transfer(spi, NULL);
> + =A0 =A0 =A0 retval =3D mpc8xxx_spi_setup_transfer(spi, NULL);
> =A0 =A0 =A0 =A0if (retval < 0) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cs->hw_mode =3D hw_mode; /* Restore settin=
gs */
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return retval;
> @@ -481,21 +481,21 @@ static int mpc83xx_spi_setup(struct spi_device *spi=
)
> =A0 =A0 =A0 =A0return 0;
> =A0}
>
> -static irqreturn_t mpc83xx_spi_irq(s32 irq, void *context_data)
> +static irqreturn_t mpc8xxx_spi_irq(s32 irq, void *context_data)
> =A0{
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi =3D context_data;
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi =3D context_data;
> =A0 =A0 =A0 =A0u32 event;
> =A0 =A0 =A0 =A0irqreturn_t ret =3D IRQ_NONE;
>
> =A0 =A0 =A0 =A0/* Get interrupt events(tx/rx) */
> - =A0 =A0 =A0 event =3D mpc83xx_spi_read_reg(&mpc83xx_spi->base->event);
> + =A0 =A0 =A0 event =3D mpc8xxx_spi_read_reg(&mpc8xxx_spi->base->event);
>
> =A0 =A0 =A0 =A0/* We need handle RX first */
> =A0 =A0 =A0 =A0if (event & SPIE_NE) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 rx_data =3D mpc83xx_spi_read_reg(&mpc83=
xx_spi->base->receive);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 rx_data =3D mpc8xxx_spi_read_reg(&mpc8x=
xx_spi->base->receive);
>
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (mpc83xx_spi->rx)
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi->get_rx(rx_data=
, mpc83xx_spi);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 if (mpc8xxx_spi->rx)
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi->get_rx(rx_data=
, mpc8xxx_spi);
>
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ret =3D IRQ_HANDLED;
> =A0 =A0 =A0 =A0}
> @@ -503,56 +503,56 @@ static irqreturn_t mpc83xx_spi_irq(s32 irq, void *c=
ontext_data)
> =A0 =A0 =A0 =A0if ((event & SPIE_NF) =3D=3D 0)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0/* spin until TX is done */
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0while (((event =3D
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0mpc83xx_spi_read_reg(&mp=
c83xx_spi->base->event)) &
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0mpc8xxx_spi_read_reg(&mp=
c8xxx_spi->base->event)) &
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0 =A0 =A0 =A0SPIE_NF) =3D=3D 0)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0cpu_relax();
>
> - =A0 =A0 =A0 mpc83xx_spi->count -=3D 1;
> - =A0 =A0 =A0 if (mpc83xx_spi->count) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 word =3D mpc83xx_spi->get_tx(mpc83xx_sp=
i);
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->t=
ransmit, word);
> + =A0 =A0 =A0 mpc8xxx_spi->count -=3D 1;
> + =A0 =A0 =A0 if (mpc8xxx_spi->count) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 word =3D mpc8xxx_spi->get_tx(mpc8xxx_sp=
i);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->t=
ransmit, word);
> =A0 =A0 =A0 =A0} else {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 complete(&mpc83xx_spi->done);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 complete(&mpc8xxx_spi->done);
> =A0 =A0 =A0 =A0}
>
> =A0 =A0 =A0 =A0/* Clear the events */
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->event, event);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->event, event);
>
> =A0 =A0 =A0 =A0return ret;
> =A0}
> -static int mpc83xx_spi_transfer(struct spi_device *spi,
> +static int mpc8xxx_spi_transfer(struct spi_device *spi,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0struct spi=
_message *m)
> =A0{
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi =3D spi_master_get_devdata(=
spi->master);
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi =3D spi_master_get_devdata(=
spi->master);
> =A0 =A0 =A0 =A0unsigned long flags;
>
> =A0 =A0 =A0 =A0m->actual_length =3D 0;
> =A0 =A0 =A0 =A0m->status =3D -EINPROGRESS;
>
> - =A0 =A0 =A0 spin_lock_irqsave(&mpc83xx_spi->lock, flags);
> - =A0 =A0 =A0 list_add_tail(&m->queue, &mpc83xx_spi->queue);
> - =A0 =A0 =A0 queue_work(mpc83xx_spi->workqueue, &mpc83xx_spi->work);
> - =A0 =A0 =A0 spin_unlock_irqrestore(&mpc83xx_spi->lock, flags);
> + =A0 =A0 =A0 spin_lock_irqsave(&mpc8xxx_spi->lock, flags);
> + =A0 =A0 =A0 list_add_tail(&m->queue, &mpc8xxx_spi->queue);
> + =A0 =A0 =A0 queue_work(mpc8xxx_spi->workqueue, &mpc8xxx_spi->work);
> + =A0 =A0 =A0 spin_unlock_irqrestore(&mpc8xxx_spi->lock, flags);
>
> =A0 =A0 =A0 =A0return 0;
> =A0}
>
>
> -static void mpc83xx_spi_cleanup(struct spi_device *spi)
> +static void mpc8xxx_spi_cleanup(struct spi_device *spi)
> =A0{
> =A0 =A0 =A0 =A0kfree(spi->controller_state);
> =A0}
>
> =A0static struct spi_master * __devinit
> -mpc83xx_spi_probe(struct device *dev, struct resource *mem, unsigned int=
 irq)
> +mpc8xxx_spi_probe(struct device *dev, struct resource *mem, unsigned int=
 irq)
> =A0{
> =A0 =A0 =A0 =A0struct fsl_spi_platform_data *pdata =3D dev->platform_data=
;
> =A0 =A0 =A0 =A0struct spi_master *master;
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi;
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi;
> =A0 =A0 =A0 =A0u32 regval;
> =A0 =A0 =A0 =A0int ret =3D 0;
>
> - =A0 =A0 =A0 master =3D spi_alloc_master(dev, sizeof(struct mpc83xx_spi)=
);
> + =A0 =A0 =A0 master =3D spi_alloc_master(dev, sizeof(struct mpc8xxx_spi)=
);
> =A0 =A0 =A0 =A0if (master =3D=3D NULL) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ret =3D -ENOMEM;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto err;
> @@ -560,36 +560,36 @@ mpc83xx_spi_probe(struct device *dev, struct resour=
ce *mem, unsigned int irq)
>
> =A0 =A0 =A0 =A0dev_set_drvdata(dev, master);
>
> - =A0 =A0 =A0 master->setup =3D mpc83xx_spi_setup;
> - =A0 =A0 =A0 master->transfer =3D mpc83xx_spi_transfer;
> - =A0 =A0 =A0 master->cleanup =3D mpc83xx_spi_cleanup;
> -
> - =A0 =A0 =A0 mpc83xx_spi =3D spi_master_get_devdata(master);
> - =A0 =A0 =A0 mpc83xx_spi->qe_mode =3D pdata->qe_mode;
> - =A0 =A0 =A0 mpc83xx_spi->get_rx =3D mpc83xx_spi_rx_buf_u8;
> - =A0 =A0 =A0 mpc83xx_spi->get_tx =3D mpc83xx_spi_tx_buf_u8;
> - =A0 =A0 =A0 mpc83xx_spi->spibrg =3D pdata->sysclk;
> -
> - =A0 =A0 =A0 mpc83xx_spi->rx_shift =3D 0;
> - =A0 =A0 =A0 mpc83xx_spi->tx_shift =3D 0;
> - =A0 =A0 =A0 if (mpc83xx_spi->qe_mode) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi->rx_shift =3D 16;
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc83xx_spi->tx_shift =3D 24;
> + =A0 =A0 =A0 master->setup =3D mpc8xxx_spi_setup;
> + =A0 =A0 =A0 master->transfer =3D mpc8xxx_spi_transfer;
> + =A0 =A0 =A0 master->cleanup =3D mpc8xxx_spi_cleanup;
> +
> + =A0 =A0 =A0 mpc8xxx_spi =3D spi_master_get_devdata(master);
> + =A0 =A0 =A0 mpc8xxx_spi->qe_mode =3D pdata->qe_mode;
> + =A0 =A0 =A0 mpc8xxx_spi->get_rx =3D mpc8xxx_spi_rx_buf_u8;
> + =A0 =A0 =A0 mpc8xxx_spi->get_tx =3D mpc8xxx_spi_tx_buf_u8;
> + =A0 =A0 =A0 mpc8xxx_spi->spibrg =3D pdata->sysclk;
> +
> + =A0 =A0 =A0 mpc8xxx_spi->rx_shift =3D 0;
> + =A0 =A0 =A0 mpc8xxx_spi->tx_shift =3D 0;
> + =A0 =A0 =A0 if (mpc8xxx_spi->qe_mode) {
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi->rx_shift =3D 16;
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 mpc8xxx_spi->tx_shift =3D 24;
> =A0 =A0 =A0 =A0}
>
> - =A0 =A0 =A0 init_completion(&mpc83xx_spi->done);
> + =A0 =A0 =A0 init_completion(&mpc8xxx_spi->done);
>
> - =A0 =A0 =A0 mpc83xx_spi->base =3D ioremap(mem->start, mem->end - mem->s=
tart + 1);
> - =A0 =A0 =A0 if (mpc83xx_spi->base =3D=3D NULL) {
> + =A0 =A0 =A0 mpc8xxx_spi->base =3D ioremap(mem->start, mem->end - mem->s=
tart + 1);
> + =A0 =A0 =A0 if (mpc8xxx_spi->base =3D=3D NULL) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ret =3D -ENOMEM;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto put_master;
> =A0 =A0 =A0 =A0}
>
> - =A0 =A0 =A0 mpc83xx_spi->irq =3D irq;
> + =A0 =A0 =A0 mpc8xxx_spi->irq =3D irq;
>
> =A0 =A0 =A0 =A0/* Register for SPI Interrupt */
> - =A0 =A0 =A0 ret =3D request_irq(mpc83xx_spi->irq, mpc83xx_spi_irq,
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0, "mpc83xx_spi", mpc83=
xx_spi);
> + =A0 =A0 =A0 ret =3D request_irq(mpc8xxx_spi->irq, mpc8xxx_spi_irq,
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 0, "mpc8xxx_spi", mpc8x=
xx_spi);
>
> =A0 =A0 =A0 =A0if (ret !=3D 0)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto unmap_io;
> @@ -598,25 +598,25 @@ mpc83xx_spi_probe(struct device *dev, struct resour=
ce *mem, unsigned int irq)
> =A0 =A0 =A0 =A0master->num_chipselect =3D pdata->max_chipselect;
>
> =A0 =A0 =A0 =A0/* SPI controller initializations */
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, 0);
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->mask, 0);
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->command, 0);
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->event, 0xffffffff=
);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mode, 0);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mask, 0);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->command, 0);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->event, 0xffffffff=
);
>
> =A0 =A0 =A0 =A0/* Enable SPI interface */
> =A0 =A0 =A0 =A0regval =3D pdata->initial_spmode | SPMODE_INIT_VAL | SPMOD=
E_ENABLE;
> =A0 =A0 =A0 =A0if (pdata->qe_mode)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0regval |=3D SPMODE_OP;
>
> - =A0 =A0 =A0 mpc83xx_spi_write_reg(&mpc83xx_spi->base->mode, regval);
> - =A0 =A0 =A0 spin_lock_init(&mpc83xx_spi->lock);
> - =A0 =A0 =A0 init_completion(&mpc83xx_spi->done);
> - =A0 =A0 =A0 INIT_WORK(&mpc83xx_spi->work, mpc83xx_spi_work);
> - =A0 =A0 =A0 INIT_LIST_HEAD(&mpc83xx_spi->queue);
> + =A0 =A0 =A0 mpc8xxx_spi_write_reg(&mpc8xxx_spi->base->mode, regval);
> + =A0 =A0 =A0 spin_lock_init(&mpc8xxx_spi->lock);
> + =A0 =A0 =A0 init_completion(&mpc8xxx_spi->done);
> + =A0 =A0 =A0 INIT_WORK(&mpc8xxx_spi->work, mpc8xxx_spi_work);
> + =A0 =A0 =A0 INIT_LIST_HEAD(&mpc8xxx_spi->queue);
>
> - =A0 =A0 =A0 mpc83xx_spi->workqueue =3D create_singlethread_workqueue(
> + =A0 =A0 =A0 mpc8xxx_spi->workqueue =3D create_singlethread_workqueue(
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0dev_name(master->dev.parent));
> - =A0 =A0 =A0 if (mpc83xx_spi->workqueue =3D=3D NULL) {
> + =A0 =A0 =A0 if (mpc8xxx_spi->workqueue =3D=3D NULL) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ret =3D -EBUSY;
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto free_irq;
> =A0 =A0 =A0 =A0}
> @@ -626,57 +626,57 @@ mpc83xx_spi_probe(struct device *dev, struct resour=
ce *mem, unsigned int irq)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto unreg_master;
>
> =A0 =A0 =A0 =A0printk(KERN_INFO
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0"%s: MPC83xx SPI Controller driver at 0x%p (=
irq =3D %d)\n",
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0dev_name(dev), mpc83xx_spi->base, mpc83xx_sp=
i->irq);
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0"%s: MPC8xxx SPI Controller driver at 0x%p (=
irq =3D %d)\n",
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0dev_name(dev), mpc8xxx_spi->base, mpc8xxx_sp=
i->irq);
>
> =A0 =A0 =A0 =A0return master;
>
> =A0unreg_master:
> - =A0 =A0 =A0 destroy_workqueue(mpc83xx_spi->workqueue);
> + =A0 =A0 =A0 destroy_workqueue(mpc8xxx_spi->workqueue);
> =A0free_irq:
> - =A0 =A0 =A0 free_irq(mpc83xx_spi->irq, mpc83xx_spi);
> + =A0 =A0 =A0 free_irq(mpc8xxx_spi->irq, mpc8xxx_spi);
> =A0unmap_io:
> - =A0 =A0 =A0 iounmap(mpc83xx_spi->base);
> + =A0 =A0 =A0 iounmap(mpc8xxx_spi->base);
> =A0put_master:
> =A0 =A0 =A0 =A0spi_master_put(master);
> =A0err:
> =A0 =A0 =A0 =A0return ERR_PTR(ret);
> =A0}
>
> -static int __devexit mpc83xx_spi_remove(struct device *dev)
> +static int __devexit mpc8xxx_spi_remove(struct device *dev)
> =A0{
> - =A0 =A0 =A0 struct mpc83xx_spi *mpc83xx_spi;
> + =A0 =A0 =A0 struct mpc8xxx_spi *mpc8xxx_spi;
> =A0 =A0 =A0 =A0struct spi_master *master;
>
> =A0 =A0 =A0 =A0master =3D dev_get_drvdata(dev);
> - =A0 =A0 =A0 mpc83xx_spi =3D spi_master_get_devdata(master);
> + =A0 =A0 =A0 mpc8xxx_spi =3D spi_master_get_devdata(master);
>
> - =A0 =A0 =A0 flush_workqueue(mpc83xx_spi->workqueue);
> - =A0 =A0 =A0 destroy_workqueue(mpc83xx_spi->workqueue);
> + =A0 =A0 =A0 flush_workqueue(mpc8xxx_spi->workqueue);
> + =A0 =A0 =A0 destroy_workqueue(mpc8xxx_spi->workqueue);
> =A0 =A0 =A0 =A0spi_unregister_master(master);
>
> - =A0 =A0 =A0 free_irq(mpc83xx_spi->irq, mpc83xx_spi);
> - =A0 =A0 =A0 iounmap(mpc83xx_spi->base);
> + =A0 =A0 =A0 free_irq(mpc8xxx_spi->irq, mpc8xxx_spi);
> + =A0 =A0 =A0 iounmap(mpc8xxx_spi->base);
>
> =A0 =A0 =A0 =A0return 0;
> =A0}
>
> -struct mpc83xx_spi_probe_info {
> +struct mpc8xxx_spi_probe_info {
> =A0 =A0 =A0 =A0struct fsl_spi_platform_data pdata;
> =A0 =A0 =A0 =A0int *gpios;
> =A0 =A0 =A0 =A0bool *alow_flags;
> =A0};
>
> -static struct mpc83xx_spi_probe_info *
> +static struct mpc8xxx_spi_probe_info *
> =A0to_of_pinfo(struct fsl_spi_platform_data *pdata)
> =A0{
> - =A0 =A0 =A0 return container_of(pdata, struct mpc83xx_spi_probe_info, p=
data);
> + =A0 =A0 =A0 return container_of(pdata, struct mpc8xxx_spi_probe_info, p=
data);
> =A0}
>
> -static void mpc83xx_spi_cs_control(struct spi_device *spi, bool on)
> +static void mpc8xxx_spi_cs_control(struct spi_device *spi, bool on)
> =A0{
> =A0 =A0 =A0 =A0struct device *dev =3D spi->dev.parent;
> - =A0 =A0 =A0 struct mpc83xx_spi_probe_info *pinfo =3D to_of_pinfo(dev->p=
latform_data);
> + =A0 =A0 =A0 struct mpc8xxx_spi_probe_info *pinfo =3D to_of_pinfo(dev->p=
latform_data);
> =A0 =A0 =A0 =A0u16 cs =3D spi->chip_select;
> =A0 =A0 =A0 =A0int gpio =3D pinfo->gpios[cs];
> =A0 =A0 =A0 =A0bool alow =3D pinfo->alow_flags[cs];
> @@ -684,11 +684,11 @@ static void mpc83xx_spi_cs_control(struct spi_devic=
e *spi, bool on)
> =A0 =A0 =A0 =A0gpio_set_value(gpio, on ^ alow);
> =A0}
>
> -static int of_mpc83xx_spi_get_chipselects(struct device *dev)
> +static int of_mpc8xxx_spi_get_chipselects(struct device *dev)
> =A0{
> =A0 =A0 =A0 =A0struct device_node *np =3D dev_archdata_get_node(&dev->arc=
hdata);
> =A0 =A0 =A0 =A0struct fsl_spi_platform_data *pdata =3D dev->platform_data=
;
> - =A0 =A0 =A0 struct mpc83xx_spi_probe_info *pinfo =3D to_of_pinfo(pdata)=
;
> + =A0 =A0 =A0 struct mpc8xxx_spi_probe_info *pinfo =3D to_of_pinfo(pdata)=
;
> =A0 =A0 =A0 =A0unsigned int ngpios;
> =A0 =A0 =A0 =A0int i =3D 0;
> =A0 =A0 =A0 =A0int ret;
> @@ -744,7 +744,7 @@ static int of_mpc83xx_spi_get_chipselects(struct devi=
ce *dev)
> =A0 =A0 =A0 =A0}
>
> =A0 =A0 =A0 =A0pdata->max_chipselect =3D ngpios;
> - =A0 =A0 =A0 pdata->cs_control =3D mpc83xx_spi_cs_control;
> + =A0 =A0 =A0 pdata->cs_control =3D mpc8xxx_spi_cs_control;
>
> =A0 =A0 =A0 =A0return 0;
>
> @@ -763,10 +763,10 @@ err_alloc_flags:
> =A0 =A0 =A0 =A0return ret;
> =A0}
>
> -static int of_mpc83xx_spi_free_chipselects(struct device *dev)
> +static int of_mpc8xxx_spi_free_chipselects(struct device *dev)
> =A0{
> =A0 =A0 =A0 =A0struct fsl_spi_platform_data *pdata =3D dev->platform_data=
;
> - =A0 =A0 =A0 struct mpc83xx_spi_probe_info *pinfo =3D to_of_pinfo(pdata)=
;
> + =A0 =A0 =A0 struct mpc8xxx_spi_probe_info *pinfo =3D to_of_pinfo(pdata)=
;
> =A0 =A0 =A0 =A0int i;
>
> =A0 =A0 =A0 =A0if (!pinfo->gpios)
> @@ -782,12 +782,12 @@ static int of_mpc83xx_spi_free_chipselects(struct d=
evice *dev)
> =A0 =A0 =A0 =A0return 0;
> =A0}
>
> -static int __devinit of_mpc83xx_spi_probe(struct of_device *ofdev,
> +static int __devinit of_mpc8xxx_spi_probe(struct of_device *ofdev,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =
=A0 =A0 =A0const struct of_device_id *ofid)
> =A0{
> =A0 =A0 =A0 =A0struct device *dev =3D &ofdev->dev;
> =A0 =A0 =A0 =A0struct device_node *np =3D ofdev->node;
> - =A0 =A0 =A0 struct mpc83xx_spi_probe_info *pinfo;
> + =A0 =A0 =A0 struct mpc8xxx_spi_probe_info *pinfo;
> =A0 =A0 =A0 =A0struct fsl_spi_platform_data *pdata;
> =A0 =A0 =A0 =A0struct spi_master *master;
> =A0 =A0 =A0 =A0struct resource mem;
> @@ -819,7 +819,7 @@ static int __devinit of_mpc83xx_spi_probe(struct of_d=
evice *ofdev,
> =A0 =A0 =A0 =A0if (prop && !strcmp(prop, "cpu-qe"))
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0pdata->qe_mode =3D 1;
>
> - =A0 =A0 =A0 ret =3D of_mpc83xx_spi_get_chipselects(dev);
> + =A0 =A0 =A0 ret =3D of_mpc8xxx_spi_get_chipselects(dev);
> =A0 =A0 =A0 =A0if (ret)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto err;
>
> @@ -833,7 +833,7 @@ static int __devinit of_mpc83xx_spi_probe(struct of_d=
evice *ofdev,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto err;
> =A0 =A0 =A0 =A0}
>
> - =A0 =A0 =A0 master =3D mpc83xx_spi_probe(dev, &mem, irq.start);
> + =A0 =A0 =A0 master =3D mpc8xxx_spi_probe(dev, &mem, irq.start);
> =A0 =A0 =A0 =A0if (IS_ERR(master)) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0ret =3D PTR_ERR(master);
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0goto err;
> @@ -844,34 +844,34 @@ static int __devinit of_mpc83xx_spi_probe(struct of=
_device *ofdev,
> =A0 =A0 =A0 =A0return 0;
>
> =A0err:
> - =A0 =A0 =A0 of_mpc83xx_spi_free_chipselects(dev);
> + =A0 =A0 =A0 of_mpc8xxx_spi_free_chipselects(dev);
> =A0err_clk:
> =A0 =A0 =A0 =A0kfree(pinfo);
> =A0 =A0 =A0 =A0return ret;
> =A0}
>
> -static int __devexit of_mpc83xx_spi_remove(struct of_device *ofdev)
> +static int __devexit of_mpc8xxx_spi_remove(struct of_device *ofdev)
> =A0{
> =A0 =A0 =A0 =A0int ret;
>
> - =A0 =A0 =A0 ret =3D mpc83xx_spi_remove(&ofdev->dev);
> + =A0 =A0 =A0 ret =3D mpc8xxx_spi_remove(&ofdev->dev);
> =A0 =A0 =A0 =A0if (ret)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return ret;
> - =A0 =A0 =A0 of_mpc83xx_spi_free_chipselects(&ofdev->dev);
> + =A0 =A0 =A0 of_mpc8xxx_spi_free_chipselects(&ofdev->dev);
> =A0 =A0 =A0 =A0return 0;
> =A0}
>
> -static const struct of_device_id of_mpc83xx_spi_match[] =3D {
> +static const struct of_device_id of_mpc8xxx_spi_match[] =3D {
> =A0 =A0 =A0 =A0{ .compatible =3D "fsl,spi" },
> =A0 =A0 =A0 =A0{},
> =A0};
> -MODULE_DEVICE_TABLE(of, of_mpc83xx_spi_match);
> +MODULE_DEVICE_TABLE(of, of_mpc8xxx_spi_match);
>
> -static struct of_platform_driver of_mpc83xx_spi_driver =3D {
> - =A0 =A0 =A0 .name =A0 =A0 =A0 =A0 =A0 =3D "mpc83xx_spi",
> - =A0 =A0 =A0 .match_table =A0 =A0=3D of_mpc83xx_spi_match,
> - =A0 =A0 =A0 .probe =A0 =A0 =A0 =A0 =A0=3D of_mpc83xx_spi_probe,
> - =A0 =A0 =A0 .remove =A0 =A0 =A0 =A0 =3D __devexit_p(of_mpc83xx_spi_remo=
ve),
> +static struct of_platform_driver of_mpc8xxx_spi_driver =3D {
> + =A0 =A0 =A0 .name =A0 =A0 =A0 =A0 =A0 =3D "mpc8xxx_spi",
> + =A0 =A0 =A0 .match_table =A0 =A0=3D of_mpc8xxx_spi_match,
> + =A0 =A0 =A0 .probe =A0 =A0 =A0 =A0 =A0=3D of_mpc8xxx_spi_probe,
> + =A0 =A0 =A0 .remove =A0 =A0 =A0 =A0 =3D __devexit_p(of_mpc8xxx_spi_remo=
ve),
> =A0};
>
> =A0#ifdef CONFIG_MPC832x_RDB
> @@ -882,7 +882,7 @@ static struct of_platform_driver of_mpc83xx_spi_drive=
r =3D {
> =A0* tree can work with OpenFirmware driver. But for now we support old t=
rees
> =A0* as well.
> =A0*/
> -static int __devinit plat_mpc83xx_spi_probe(struct platform_device *pdev=
)
> +static int __devinit plat_mpc8xxx_spi_probe(struct platform_device *pdev=
)
> =A0{
> =A0 =A0 =A0 =A0struct resource *mem;
> =A0 =A0 =A0 =A0unsigned int irq;
> @@ -899,21 +899,21 @@ static int __devinit plat_mpc83xx_spi_probe(struct =
platform_device *pdev)
> =A0 =A0 =A0 =A0if (!irq)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return -EINVAL;
>
> - =A0 =A0 =A0 master =3D mpc83xx_spi_probe(&pdev->dev, mem, irq);
> + =A0 =A0 =A0 master =3D mpc8xxx_spi_probe(&pdev->dev, mem, irq);
> =A0 =A0 =A0 =A0if (IS_ERR(master))
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return PTR_ERR(master);
> =A0 =A0 =A0 =A0return 0;
> =A0}
>
> -static int __devexit plat_mpc83xx_spi_remove(struct platform_device *pde=
v)
> +static int __devexit plat_mpc8xxx_spi_remove(struct platform_device *pde=
v)
> =A0{
> - =A0 =A0 =A0 return mpc83xx_spi_remove(&pdev->dev);
> + =A0 =A0 =A0 return mpc8xxx_spi_remove(&pdev->dev);
> =A0}
>
> =A0MODULE_ALIAS("platform:mpc83xx_spi");
> -static struct platform_driver mpc83xx_spi_driver =3D {
> - =A0 =A0 =A0 .probe =3D plat_mpc83xx_spi_probe,
> - =A0 =A0 =A0 .remove =3D __exit_p(plat_mpc83xx_spi_remove),
> +static struct platform_driver mpc8xxx_spi_driver =3D {
> + =A0 =A0 =A0 .probe =3D plat_mpc8xxx_spi_probe,
> + =A0 =A0 =A0 .remove =3D __exit_p(plat_mpc8xxx_spi_remove),
> =A0 =A0 =A0 =A0.driver =3D {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.name =3D "mpc83xx_spi",
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.owner =3D THIS_MODULE,
> @@ -924,35 +924,35 @@ static bool legacy_driver_failed;
>
> =A0static void __init legacy_driver_register(void)
> =A0{
> - =A0 =A0 =A0 legacy_driver_failed =3D platform_driver_register(&mpc83xx_=
spi_driver);
> + =A0 =A0 =A0 legacy_driver_failed =3D platform_driver_register(&mpc8xxx_=
spi_driver);
> =A0}
>
> =A0static void __exit legacy_driver_unregister(void)
> =A0{
> =A0 =A0 =A0 =A0if (legacy_driver_failed)
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0return;
> - =A0 =A0 =A0 platform_driver_unregister(&mpc83xx_spi_driver);
> + =A0 =A0 =A0 platform_driver_unregister(&mpc8xxx_spi_driver);
> =A0}
> =A0#else
> =A0static void __init legacy_driver_register(void) {}
> =A0static void __exit legacy_driver_unregister(void) {}
> =A0#endif /* CONFIG_MPC832x_RDB */
>
> -static int __init mpc83xx_spi_init(void)
> +static int __init mpc8xxx_spi_init(void)
> =A0{
> =A0 =A0 =A0 =A0legacy_driver_register();
> - =A0 =A0 =A0 return of_register_platform_driver(&of_mpc83xx_spi_driver);
> + =A0 =A0 =A0 return of_register_platform_driver(&of_mpc8xxx_spi_driver);
> =A0}
>
> -static void __exit mpc83xx_spi_exit(void)
> +static void __exit mpc8xxx_spi_exit(void)
> =A0{
> - =A0 =A0 =A0 of_unregister_platform_driver(&of_mpc83xx_spi_driver);
> + =A0 =A0 =A0 of_unregister_platform_driver(&of_mpc8xxx_spi_driver);
> =A0 =A0 =A0 =A0legacy_driver_unregister();
> =A0}
>
> -module_init(mpc83xx_spi_init);
> -module_exit(mpc83xx_spi_exit);
> +module_init(mpc8xxx_spi_init);
> +module_exit(mpc8xxx_spi_exit);
>
> =A0MODULE_AUTHOR("Kumar Gala");
> -MODULE_DESCRIPTION("Simple MPC83xx SPI Driver");
> +MODULE_DESCRIPTION("Simple MPC8xxx SPI Driver");
> =A0MODULE_LICENSE("GPL");
> --
> 1.6.2.2
>
> -------------------------------------------------------------------------=
-----
> Register Now & Save for Velocity, the Web Performance & Operations
> Conference from O'Reilly Media. Velocity features a full day of
> expert-led, hands-on workshops and two days of sessions from industry
> leaders in dedicated Performance & Operations tracks. Use code vel09scf
> and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
> _______________________________________________
> spi-devel-general mailing list
> spi-devel-general@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/spi-devel-general
>



--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.

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

* Re: [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g
  2009-04-30 23:48 ` [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g Anton Vorontsov
  2009-05-01 21:42   ` [spi-devel-general] " Grant Likely
@ 2009-05-04 20:53   ` Andrew Morton
  2009-05-04 23:36     ` Anton Vorontsov
  1 sibling, 1 reply; 15+ messages in thread
From: Andrew Morton @ 2009-05-04 20:53 UTC (permalink / raw)
  To: Anton Vorontsov; +Cc: linuxppc-dev, dbrownell, linux-kernel, spi-devel-general

On Fri, 1 May 2009 03:48:33 +0400
Anton Vorontsov <avorontsov@ru.mvista.com> wrote:

> Since we renamed the file, we might want to rename the file
> internals too.
> 
> Though we don't bother with changing platform driver name and
> platform module alias. The stuff is legacy and hopefully we'll
> remove it soon.
> 

but but but

>
> -static struct of_platform_driver of_mpc83xx_spi_driver = {
> -	.name		= "mpc83xx_spi",
> -	.match_table	= of_mpc83xx_spi_match,
> -	.probe		= of_mpc83xx_spi_probe,
> -	.remove		= __devexit_p(of_mpc83xx_spi_remove),
> +static struct of_platform_driver of_mpc8xxx_spi_driver = {
> +	.name		= "mpc8xxx_spi",
> +	.match_table	= of_mpc8xxx_spi_match,
> +	.probe		= of_mpc8xxx_spi_probe,
> +	.remove		= __devexit_p(of_mpc8xxx_spi_remove),
>  };

It _did_ change the platform driver name, didn't it?


This patch series had quite a lot of conflicts with the already-pending

spi-move-common-spi_setup-functionality-into-core.patch
spi-move-more-spi_setup-functionality-into-core.patch

which I beleive I successfully fixed up.

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

* Re: [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD
  2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
                   ` (8 preceding siblings ...)
  2009-04-30 23:48 ` [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g Anton Vorontsov
@ 2009-05-04 20:55 ` Andrew Morton
  2009-05-04 23:36   ` Anton Vorontsov
  9 siblings, 1 reply; 15+ messages in thread
From: Andrew Morton @ 2009-05-04 20:55 UTC (permalink / raw)
  To: avorontsov; +Cc: linuxppc-dev, dbrownell, linux-kernel, spi-devel-general

On Fri, 1 May 2009 03:47:39 +0400
Anton Vorontsov <avorontsov@ru.mvista.com> wrote:

> Here are few patches that are needed to support spi-mmc slot on
> MPC8610HPCD PowerPC boards:
> 
> [1/9] spi_mpc83xx: Handles other Freescale processors
> [2/9] spi_mpc83xx: Quieten down the "Requested speed is too low" message
> [3/9] spi_mpc83xx: Add small delay after asserting chip-select line
> [4/9] powerpc/86xx: Add MMC SPI support for MPC8610HPCD boards
> 

Some or all of these seem appropriate to 2.6.30 and perhaps even -stable?

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

* Re: [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g
  2009-05-04 20:53   ` Andrew Morton
@ 2009-05-04 23:36     ` Anton Vorontsov
  0 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-05-04 23:36 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linuxppc-dev, dbrownell, linux-kernel, spi-devel-general

On Mon, May 04, 2009 at 01:53:27PM -0700, Andrew Morton wrote:
> On Fri, 1 May 2009 03:48:33 +0400
> Anton Vorontsov <avorontsov@ru.mvista.com> wrote:
> 
> > Since we renamed the file, we might want to rename the file
> > internals too.
> > 
> > Though we don't bother with changing platform driver name and
> > platform module alias. The stuff is legacy and hopefully we'll
> > remove it soon.
> > 
> 
> but but but
> 
> >
> > -static struct of_platform_driver of_mpc83xx_spi_driver = {
> > -	.name		= "mpc83xx_spi",
> > -	.match_table	= of_mpc83xx_spi_match,
> > -	.probe		= of_mpc83xx_spi_probe,
> > -	.remove		= __devexit_p(of_mpc83xx_spi_remove),
> > +static struct of_platform_driver of_mpc8xxx_spi_driver = {
> > +	.name		= "mpc8xxx_spi",
> > +	.match_table	= of_mpc8xxx_spi_match,
> > +	.probe		= of_mpc8xxx_spi_probe,
> > +	.remove		= __devexit_p(of_mpc8xxx_spi_remove),
> >  };
> 
> It _did_ change the platform driver name, didn't it?

This is an OF platform driver, here it is safe to change
the name. But I didn't change the pure platform driver,
here:

| -static struct platform_driver mpc83xx_spi_driver = {
| -       .probe = plat_mpc83xx_spi_probe,
| -       .remove = __exit_p(plat_mpc83xx_spi_remove),
| +static struct platform_driver mpc8xxx_spi_driver = {
| +       .probe = plat_mpc8xxx_spi_probe,
| +       .remove = __exit_p(plat_mpc8xxx_spi_remove),
|         .driver = {
|                 .name = "mpc83xx_spi",

------------------^

> This patch series had quite a lot of conflicts with the already-pending
> 
> spi-move-common-spi_setup-functionality-into-core.patch
> spi-move-more-spi_setup-functionality-into-core.patch
> 
> which I beleive I successfully fixed up.

Thanks a lot, I'll test it soon.

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

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

* Re: [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD
  2009-05-04 20:55 ` [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Andrew Morton
@ 2009-05-04 23:36   ` Anton Vorontsov
  0 siblings, 0 replies; 15+ messages in thread
From: Anton Vorontsov @ 2009-05-04 23:36 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linuxppc-dev, dbrownell, linux-kernel, spi-devel-general

On Mon, May 04, 2009 at 01:55:04PM -0700, Andrew Morton wrote:
> On Fri, 1 May 2009 03:47:39 +0400
> Anton Vorontsov <avorontsov@ru.mvista.com> wrote:
> 
> > Here are few patches that are needed to support spi-mmc slot on
> > MPC8610HPCD PowerPC boards:
> > 
> > [1/9] spi_mpc83xx: Handles other Freescale processors
> > [2/9] spi_mpc83xx: Quieten down the "Requested speed is too low" message
> > [3/9] spi_mpc83xx: Add small delay after asserting chip-select line
> > [4/9] powerpc/86xx: Add MMC SPI support for MPC8610HPCD boards
> > 
> 
> Some or all of these seem appropriate to 2.6.30 and perhaps even -stable?

I'd say no, we don't need the fixes for MPC8323E-RDB boards
(currently the only mainline user of that driver), and support
for MPC8610HPCD boards is a new feature, so I think all these
patches can wait for 2.6.31.

Thanks,

-- 
Anton Vorontsov
email: cbouatmailru@gmail.com
irc://irc.freenode.net/bd2

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

end of thread, other threads:[~2009-05-04 23:36 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-04-30 23:47 [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Anton Vorontsov
2009-04-30 23:48 ` [PATCH 1/9] spi_mpc83xx: Handles other Freescale processors Anton Vorontsov
2009-04-30 23:48 ` [PATCH 2/9] spi_mpc83xx: Quieten down the "Requested speed is too low" message Anton Vorontsov
2009-04-30 23:48 ` [PATCH 3/9] spi_mpc83xx: Add small delay after asserting chip-select line Anton Vorontsov
2009-04-30 23:48 ` [PATCH 4/9] powerpc/86xx: Add MMC SPI support for MPC8610HPCD boards Anton Vorontsov
2009-04-30 23:48 ` [PATCH 5/9] spi_mpc83xx: Fix checkpatch issues Anton Vorontsov
2009-04-30 23:48 ` [PATCH 6/9] spi_mpc83xx: Split mpc83xx_spi_work() into two routines Anton Vorontsov
2009-04-30 23:48 ` [PATCH 7/9] spi_mpc83xx: Remove dead code Anton Vorontsov
2009-04-30 23:48 ` [PATCH 8/9] spi_mpc83xx: Rename spi_83xx.c to spi_8xxx.c Anton Vorontsov
2009-04-30 23:48 ` [PATCH 9/9] spi_mpc8xxx: s/83xx/8xxx/g Anton Vorontsov
2009-05-01 21:42   ` [spi-devel-general] " Grant Likely
2009-05-04 20:53   ` Andrew Morton
2009-05-04 23:36     ` Anton Vorontsov
2009-05-04 20:55 ` [PATCH 0/9] Some work for spi_mpc83xx driver, spi-mmc support for MPC8610HPCD Andrew Morton
2009-05-04 23:36   ` Anton Vorontsov

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).