Merge branch 'spi-5.1' into spi-5.2
[linux-2.6-microblaze.git] / drivers / spi / spi-gpio.c
index 53b35c5..c8fe87e 100644 (file)
  * platform_device->driver_data ... points to spi_gpio
  *
  * spi->controller_state ... reserved for bitbang framework code
- * spi->controller_data ... holds chipselect GPIO
  *
  * spi->master->dev.driver_data ... points to spi_gpio->bitbang
  */
 
 struct spi_gpio {
        struct spi_bitbang              bitbang;
-       struct spi_gpio_platform_data   pdata;
        struct platform_device          *pdev;
        struct gpio_desc                *sck;
        struct gpio_desc                *miso;
@@ -96,12 +94,6 @@ spi_to_spi_gpio(const struct spi_device *spi)
        return spi_gpio;
 }
 
-static inline struct spi_gpio_platform_data *__pure
-spi_to_pdata(const struct spi_device *spi)
-{
-       return &spi_to_spi_gpio(spi)->pdata;
-}
-
 /* These helpers are in turn called by the bitbang inlines */
 static inline void setsck(const struct spi_device *spi, int is_on)
 {
@@ -385,6 +377,8 @@ static int spi_gpio_probe(struct platform_device *pdev)
        struct spi_master               *master;
        struct spi_gpio                 *spi_gpio;
        struct spi_gpio_platform_data   *pdata;
+       struct device                   *dev = &pdev->dev;
+       struct spi_bitbang              *bb;
        u16 master_flags = 0;
        bool use_of = 0;
 
@@ -394,19 +388,19 @@ static int spi_gpio_probe(struct platform_device *pdev)
        if (status > 0)
                use_of = 1;
 
-       pdata = dev_get_platdata(&pdev->dev);
+       pdata = dev_get_platdata(dev);
 #ifdef GENERIC_BITBANG
        if (!pdata || (!use_of && !pdata->num_chipselect))
                return -ENODEV;
 #endif
 
-       master = spi_alloc_master(&pdev->dev, sizeof(*spi_gpio));
+       master = spi_alloc_master(dev, sizeof(*spi_gpio));
        if (!master)
                return -ENOMEM;
 
        spi_gpio = spi_master_get_devdata(master);
 
-       spi_gpio->cs_gpios = devm_kcalloc(&pdev->dev,
+       spi_gpio->cs_gpios = devm_kcalloc(dev,
                                pdata->num_chipselect,
                                sizeof(*spi_gpio->cs_gpios),
                                GFP_KERNEL);
@@ -419,10 +413,8 @@ static int spi_gpio_probe(struct platform_device *pdev)
        spi_gpio->has_cs = !!pdata->num_chipselect;
 
        spi_gpio->pdev = pdev;
-       if (pdata)
-               spi_gpio->pdata = *pdata;
 
-       status = spi_gpio_request(&pdev->dev, spi_gpio,
+       status = spi_gpio_request(dev, spi_gpio,
                                  pdata->num_chipselect, &master_flags);
        if (status)
                return status;
@@ -437,25 +429,25 @@ static int spi_gpio_probe(struct platform_device *pdev)
        master->setup = spi_gpio_setup;
        master->cleanup = spi_gpio_cleanup;
 #ifdef CONFIG_OF
-       master->dev.of_node = pdev->dev.of_node;
+       master->dev.of_node = dev->of_node;
 #endif
-
-       spi_gpio->bitbang.master = master;
-       spi_gpio->bitbang.chipselect = spi_gpio_chipselect;
-       spi_gpio->bitbang.set_line_direction = spi_gpio_set_direction;
-
-       if ((master_flags & SPI_MASTER_NO_TX) == 0) {
-               spi_gpio->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_word_mode0;
-               spi_gpio->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_word_mode1;
-               spi_gpio->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_word_mode2;
-               spi_gpio->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_word_mode3;
+       bb = &spi_gpio->bitbang;
+       bb->master = master;
+       bb->chipselect = spi_gpio_chipselect;
+       bb->set_line_direction = spi_gpio_set_direction;
+
+       if (master_flags & SPI_MASTER_NO_TX) {
+               bb->txrx_word[SPI_MODE_0] = spi_gpio_spec_txrx_word_mode0;
+               bb->txrx_word[SPI_MODE_1] = spi_gpio_spec_txrx_word_mode1;
+               bb->txrx_word[SPI_MODE_2] = spi_gpio_spec_txrx_word_mode2;
+               bb->txrx_word[SPI_MODE_3] = spi_gpio_spec_txrx_word_mode3;
        } else {
-               spi_gpio->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_spec_txrx_word_mode0;
-               spi_gpio->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_spec_txrx_word_mode1;
-               spi_gpio->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_spec_txrx_word_mode2;
-               spi_gpio->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_spec_txrx_word_mode3;
+               bb->txrx_word[SPI_MODE_0] = spi_gpio_txrx_word_mode0;
+               bb->txrx_word[SPI_MODE_1] = spi_gpio_txrx_word_mode1;
+               bb->txrx_word[SPI_MODE_2] = spi_gpio_txrx_word_mode2;
+               bb->txrx_word[SPI_MODE_3] = spi_gpio_txrx_word_mode3;
        }
-       spi_gpio->bitbang.setup_transfer = spi_bitbang_setup_transfer;
+       bb->setup_transfer = spi_bitbang_setup_transfer;
 
        status = spi_bitbang_start(&spi_gpio->bitbang);
        if (status)