summaryrefslogtreecommitdiff
path: root/target/linux/brcm63xx/patches-3.3/014-spi-bcm63xx-don-t-use-the-stopping-state.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm63xx/patches-3.3/014-spi-bcm63xx-don-t-use-the-stopping-state.patch')
-rw-r--r--target/linux/brcm63xx/patches-3.3/014-spi-bcm63xx-don-t-use-the-stopping-state.patch68
1 files changed, 68 insertions, 0 deletions
diff --git a/target/linux/brcm63xx/patches-3.3/014-spi-bcm63xx-don-t-use-the-stopping-state.patch b/target/linux/brcm63xx/patches-3.3/014-spi-bcm63xx-don-t-use-the-stopping-state.patch
new file mode 100644
index 0000000000..98bc90980c
--- /dev/null
+++ b/target/linux/brcm63xx/patches-3.3/014-spi-bcm63xx-don-t-use-the-stopping-state.patch
@@ -0,0 +1,68 @@
+From 1e41dc0ee2f3807328db95e4f87ff1333245190f Mon Sep 17 00:00:00 2001
+From: Florian Fainelli <florian@openwrt.org>
+Date: Fri, 20 Apr 2012 15:37:34 +0200
+Subject: [PATCH] spi/bcm63xx: don't use the stopping state
+
+We do not need to use a flag to indicate if the master driver is stopping
+it is sufficient to perform spi master unregistering in the platform
+driver's remove function.
+
+Signed-off-by: Florian Fainelli <florian@openwrt.org>
+Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
+---
+ drivers/spi/spi-bcm63xx.c | 13 ++-----------
+ 1 file changed, 2 insertions(+), 11 deletions(-)
+
+--- a/drivers/spi/spi-bcm63xx.c
++++ b/drivers/spi/spi-bcm63xx.c
+@@ -39,8 +39,6 @@
+ #define DRV_VER "0.1.2"
+
+ struct bcm63xx_spi {
+- spinlock_t lock;
+- int stopping;
+ struct completion done;
+
+ void __iomem *regs;
+@@ -161,9 +159,6 @@ static int bcm63xx_spi_setup(struct spi_
+
+ bs = spi_master_get_devdata(spi->master);
+
+- if (bs->stopping)
+- return -ESHUTDOWN;
+-
+ if (!spi->bits_per_word)
+ spi->bits_per_word = 8;
+
+@@ -410,10 +405,8 @@ static int __devinit bcm63xx_spi_probe(s
+ master->unprepare_transfer_hardware = bcm63xx_spi_unprepare_transfer;
+ master->transfer_one_message = bcm63xx_spi_transfer_one;
+ bs->speed_hz = pdata->speed_hz;
+- bs->stopping = 0;
+ bs->tx_io = (u8 *)(bs->regs + bcm63xx_spireg(SPI_MSG_DATA));
+ bs->rx_io = (const u8 *)(bs->regs + bcm63xx_spireg(SPI_RX_DATA));
+- spin_lock_init(&bs->lock);
+
+ /* Initialize hardware */
+ clk_enable(bs->clk);
+@@ -447,18 +440,16 @@ static int __devexit bcm63xx_spi_remove(
+ struct spi_master *master = platform_get_drvdata(pdev);
+ struct bcm63xx_spi *bs = spi_master_get_devdata(master);
+
++ spi_unregister_master(master);
++
+ /* reset spi block */
+ bcm_spi_writeb(bs, 0, SPI_INT_MASK);
+- spin_lock(&bs->lock);
+- bs->stopping = 1;
+
+ /* HW shutdown */
+ clk_disable(bs->clk);
+ clk_put(bs->clk);
+
+- spin_unlock(&bs->lock);
+ platform_set_drvdata(pdev, 0);
+- spi_unregister_master(master);
+
+ return 0;
+ }