diff options
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.patch | 68 |
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; + } |