]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge remote-tracking branch 'spi/topic/sirf' into spi-next
authorMark Brown <broonie@linaro.org>
Wed, 26 Jun 2013 15:21:04 +0000 (16:21 +0100)
committerMark Brown <broonie@linaro.org>
Wed, 26 Jun 2013 15:21:04 +0000 (16:21 +0100)
1  2 
drivers/spi/spi-sirf.c

diff --combined drivers/spi/spi-sirf.c
index e262736f91639b9c02ad7d2f8dd4eaba32d88fbe,e00b437fa2a283ac055922edba50e6fdc51011ba..fc20bcfd90c30dd7bf90faa9eb4cd8785822b38e
@@@ -19,7 -19,6 +19,6 @@@
  #include <linux/of_gpio.h>
  #include <linux/spi/spi.h>
  #include <linux/spi/spi_bitbang.h>
- #include <linux/pinctrl/consumer.h>
  
  #define DRIVER_NAME "sirfsoc_spi"
  
@@@ -127,7 -126,6 +126,6 @@@ struct sirfsoc_spi 
        void __iomem *base;
        u32 ctrl_freq;  /* SPI controller clock speed */
        struct clk *clk;
-       struct pinctrl *p;
  
        /* rx & tx bufs from the spi_transfer */
        const void *tx;
        unsigned int left_tx_cnt;
        unsigned int left_rx_cnt;
  
-       /* tasklet to push tx msg into FIFO */
-       struct tasklet_struct tasklet_tx;
        int chipselect[0];
  };
  
@@@ -236,17 -231,6 +231,6 @@@ static void spi_sirfsoc_tx_word_u32(str
        sspi->left_tx_cnt--;
  }
  
- static void spi_sirfsoc_tasklet_tx(unsigned long arg)
- {
-       struct sirfsoc_spi *sspi = (struct sirfsoc_spi *)arg;
-       /* Fill Tx FIFO while there are left words to be transmitted */
-       while (!((readl(sspi->base + SIRFSOC_SPI_TXFIFO_STATUS) &
-                       SIRFSOC_SPI_FIFO_FULL)) &&
-                       sspi->left_tx_cnt)
-               sspi->tx_word(sspi);
- }
  static irqreturn_t spi_sirfsoc_irq(int irq, void *dev_id)
  {
        struct sirfsoc_spi *sspi = dev_id;
                writel(0x0, sspi->base + SIRFSOC_SPI_INT_EN);
        }
  
-       if (spi_stat & SIRFSOC_SPI_FRM_END) {
+       if (spi_stat & (SIRFSOC_SPI_FRM_END
+                       | SIRFSOC_SPI_RXFIFO_THD_REACH))
                while (!((readl(sspi->base + SIRFSOC_SPI_RXFIFO_STATUS)
                                & SIRFSOC_SPI_FIFO_EMPTY)) &&
                                sspi->left_rx_cnt)
                        sspi->rx_word(sspi);
  
-               /* Received all words */
-               if ((sspi->left_rx_cnt == 0) && (sspi->left_tx_cnt == 0)) {
-                       complete(&sspi->done);
-                       writel(0x0, sspi->base + SIRFSOC_SPI_INT_EN);
-               }
-       }
-       if (spi_stat & SIRFSOC_SPI_RXFIFO_THD_REACH ||
-               spi_stat & SIRFSOC_SPI_TXFIFO_THD_REACH ||
-               spi_stat & SIRFSOC_SPI_RX_FIFO_FULL ||
-               spi_stat & SIRFSOC_SPI_TXFIFO_EMPTY)
-               tasklet_schedule(&sspi->tasklet_tx);
+       if (spi_stat & (SIRFSOC_SPI_FIFO_EMPTY
+                       | SIRFSOC_SPI_TXFIFO_THD_REACH))
+               while (!((readl(sspi->base + SIRFSOC_SPI_TXFIFO_STATUS)
+                               & SIRFSOC_SPI_FIFO_FULL)) &&
+                               sspi->left_tx_cnt)
+                       sspi->tx_word(sspi);
  
+       /* Received all words */
+       if ((sspi->left_rx_cnt == 0) && (sspi->left_tx_cnt == 0)) {
+               complete(&sspi->done);
+               writel(0x0, sspi->base + SIRFSOC_SPI_INT_EN);
+       }
        return IRQ_HANDLED;
  }
  
@@@ -426,7 -410,9 +410,7 @@@ spi_sirfsoc_setup_transfer(struct spi_d
                                        SIRFSOC_SPI_FIFO_WIDTH_DWORD;
                break;
        default:
 -              dev_err(&spi->dev, "Bits per word %d not supported\n",
 -                     bits_per_word);
 -              return -EINVAL;
 +              BUG();
        }
  
        if (!(spi->mode & SPI_CS_HIGH))
@@@ -554,28 -540,18 +538,20 @@@ static int spi_sirfsoc_probe(struct pla
        sspi->bitbang.txrx_bufs = spi_sirfsoc_transfer;
        sspi->bitbang.master->setup = spi_sirfsoc_setup;
        master->bus_num = pdev->id;
 +      master->bits_per_word_mask = SPI_BPW_MASK(8) | SPI_BPW_MASK(12) |
 +                                      SPI_BPW_MASK(16) | SPI_BPW_MASK(32);
        sspi->bitbang.master->dev.of_node = pdev->dev.of_node;
  
-       sspi->p = pinctrl_get_select_default(&pdev->dev);
-       ret = IS_ERR(sspi->p);
-       if (ret)
-               goto free_master;
        sspi->clk = clk_get(&pdev->dev, NULL);
        if (IS_ERR(sspi->clk)) {
                ret = -EINVAL;
-               goto free_pin;
+               goto free_master;
        }
        clk_prepare_enable(sspi->clk);
        sspi->ctrl_freq = clk_get_rate(sspi->clk);
  
        init_completion(&sspi->done);
  
-       tasklet_init(&sspi->tasklet_tx, spi_sirfsoc_tasklet_tx,
-                    (unsigned long)sspi);
        writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_RXFIFO_OP);
        writel(SIRFSOC_SPI_FIFO_RESET, sspi->base + SIRFSOC_SPI_TXFIFO_OP);
        writel(SIRFSOC_SPI_FIFO_START, sspi->base + SIRFSOC_SPI_RXFIFO_OP);
  free_clk:
        clk_disable_unprepare(sspi->clk);
        clk_put(sspi->clk);
- free_pin:
-       pinctrl_put(sspi->p);
  free_master:
        spi_master_put(master);
  err_cs:
@@@ -618,7 -592,6 +592,6 @@@ static int  spi_sirfsoc_remove(struct p
        }
        clk_disable_unprepare(sspi->clk);
        clk_put(sspi->clk);
-       pinctrl_put(sspi->p);
        spi_master_put(master);
        return 0;
  }