spi: mt65xx: Convert to GPIO descriptors
authorLinus Walleij <linus.walleij@linaro.org>
Sat, 22 Jan 2022 00:33:02 +0000 (01:33 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 31 Jan 2022 15:17:28 +0000 (15:17 +0000)
The MT65xx driver was already relying on the core to get some
GPIO line numbers so it can be (hopefully) trivially converted
to use descriptors instead.

Cc: Dafna Hirschfeld <dafna.hirschfeld@collabora.com>
Cc: Mason Zhang <Mason.Zhang@mediatek.com>
Cc: Guenter Roeck <linux@roeck-us.net>
Cc: Peter Hess <peter.hess@ph-home.de>
Cc: Leilk Liu <leilk.liu@mediatek.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20220122003302.374304-1-linus.walleij@linaro.org
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-mt65xx.c

index a15de10ee286a9e4f7760295fc2420fd8b51c68c..4f49b2e93ca7b37ec571b9eff797b532a992aff0 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/ioport.h>
 #include <linux/module.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/platform_device.h>
 #include <linux/platform_data/spi-mt65xx.h>
 #include <linux/pm_runtime.h>
@@ -605,8 +605,9 @@ static int mtk_spi_setup(struct spi_device *spi)
        if (!spi->controller_data)
                spi->controller_data = (void *)&mtk_default_chip_info;
 
-       if (mdata->dev_comp->need_pad_sel && gpio_is_valid(spi->cs_gpio))
-               gpio_direction_output(spi->cs_gpio, !(spi->mode & SPI_CS_HIGH));
+       if (mdata->dev_comp->need_pad_sel && spi->cs_gpiod)
+               /* CS de-asserted, gpiolib will handle inversion */
+               gpiod_direction_output(spi->cs_gpiod, 0);
 
        return 0;
 }
@@ -730,6 +731,7 @@ static int mtk_spi_probe(struct platform_device *pdev)
        master->can_dma = mtk_spi_can_dma;
        master->setup = mtk_spi_setup;
        master->set_cs_timing = mtk_spi_set_hw_cs_timing;
+       master->use_gpio_descriptors = true;
 
        of_id = of_match_node(mtk_spi_of_match, pdev->dev.of_node);
        if (!of_id) {
@@ -853,25 +855,12 @@ static int mtk_spi_probe(struct platform_device *pdev)
                        goto err_disable_runtime_pm;
                }
 
-               if (!master->cs_gpios && master->num_chipselect > 1) {
+               if (!master->cs_gpiods && master->num_chipselect > 1) {
                        dev_err(&pdev->dev,
                                "cs_gpios not specified and num_chipselect > 1\n");
                        ret = -EINVAL;
                        goto err_disable_runtime_pm;
                }
-
-               if (master->cs_gpios) {
-                       for (i = 0; i < master->num_chipselect; i++) {
-                               ret = devm_gpio_request(&pdev->dev,
-                                                       master->cs_gpios[i],
-                                                       dev_name(&pdev->dev));
-                               if (ret) {
-                                       dev_err(&pdev->dev,
-                                               "can't get CS GPIO %i\n", i);
-                                       goto err_disable_runtime_pm;
-                               }
-                       }
-               }
        }
 
        if (mdata->dev_comp->dma_ext)