spi: dw: Convert to use CS GPIO descriptors
authorLinus Walleij <linus.walleij@linaro.org>
Mon, 7 Jan 2019 15:51:56 +0000 (16:51 +0100)
committerMark Brown <broonie@kernel.org>
Wed, 9 Jan 2019 12:42:18 +0000 (12:42 +0000)
This converts the DesignWare (dw) SPI master driver to
use GPIO descriptors for chip select handling.

This driver has a duplicate DT parser in addition to the
one in the core, sets up the line as non-asserted and
relies on the core to drive the GPIOs.

It is a pretty straight-forward conversion.

Cc: Talel Shenhar <talel@amazon.com>
Cc: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com>
Cc: Linuxarm <linuxarm@huawei.com>
Tested-by: Jay Fang <f.fangjian@huawei.com>
Reviewed-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-dw-mmio.c
drivers/spi/spi-dw.c

index d0dd7814e997834793f3e1e49339bd28c73d15ee..4bd59a93d98868901e209c8c3ec97f72f91294f3 100644 (file)
@@ -18,7 +18,6 @@
 #include <linux/mfd/syscon.h>
 #include <linux/module.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
 #include <linux/of_platform.h>
 #include <linux/acpi.h>
 #include <linux/property.h>
@@ -185,27 +184,6 @@ static int dw_spi_mmio_probe(struct platform_device *pdev)
 
        dws->num_cs = num_cs;
 
-       if (pdev->dev.of_node) {
-               int i;
-
-               for (i = 0; i < dws->num_cs; i++) {
-                       int cs_gpio = of_get_named_gpio(pdev->dev.of_node,
-                                       "cs-gpios", i);
-
-                       if (cs_gpio == -EPROBE_DEFER) {
-                               ret = cs_gpio;
-                               goto out;
-                       }
-
-                       if (gpio_is_valid(cs_gpio)) {
-                               ret = devm_gpio_request(&pdev->dev, cs_gpio,
-                                               dev_name(&pdev->dev));
-                               if (ret)
-                                       goto out;
-                       }
-               }
-       }
-
        init_func = device_get_match_data(&pdev->dev);
        if (init_func) {
                ret = init_func(pdev, dwsmmio);
index a945fad3db62fa4cf501ea0cfdaf5d0f4dbac433..f54b498001a932cf6ee36ac06b1b38fa4077a934 100644 (file)
@@ -20,7 +20,6 @@
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/spi/spi.h>
-#include <linux/gpio.h>
 
 #include "spi-dw.h"
 
@@ -426,13 +425,6 @@ static int dw_spi_setup(struct spi_device *spi)
 
        chip->tmode = SPI_TMOD_TR;
 
-       if (gpio_is_valid(spi->cs_gpio)) {
-               ret = gpio_direction_output(spi->cs_gpio,
-                               !(spi->mode & SPI_CS_HIGH));
-               if (ret)
-                       return ret;
-       }
-
        return 0;
 }
 
@@ -497,6 +489,7 @@ int dw_spi_add_host(struct device *dev, struct dw_spi *dws)
                goto err_free_master;
        }
 
+       master->use_gpio_descriptors = true;
        master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LOOP;
        master->bits_per_word_mask =  SPI_BPW_RANGE_MASK(4, 16);
        master->bus_num = dws->bus_num;