Staging: fbtft: Switch to the gpio descriptor interface
authorNishad Kamdar <nishadkamdar@gmail.com>
Wed, 16 Jan 2019 17:30:50 +0000 (23:00 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 Jan 2019 10:01:02 +0000 (11:01 +0100)
This switches the fbtft driver to use GPIO descriptors
rather than numerical gpios:

Utilize the GPIO library's intrinsic handling of OF GPIOs
and polarity. If the line is flagged active low, gpiolib
will deal with this.

Remove gpios from platform device structure. Neither assign
statically numbers to gpios in platform device nor allow
gpios to be parsed as module parameters.

Signed-off-by: Nishad Kamdar <nishadkamdar@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
27 files changed:
drivers/staging/fbtft/fb_agm1264k-fl.c
drivers/staging/fbtft/fb_bd663474.c
drivers/staging/fbtft/fb_ili9163.c
drivers/staging/fbtft/fb_ili9320.c
drivers/staging/fbtft/fb_ili9325.c
drivers/staging/fbtft/fb_ili9340.c
drivers/staging/fbtft/fb_pcd8544.c
drivers/staging/fbtft/fb_ra8875.c
drivers/staging/fbtft/fb_s6d1121.c
drivers/staging/fbtft/fb_sh1106.c
drivers/staging/fbtft/fb_ssd1289.c
drivers/staging/fbtft/fb_ssd1305.c
drivers/staging/fbtft/fb_ssd1306.c
drivers/staging/fbtft/fb_ssd1325.c
drivers/staging/fbtft/fb_ssd1331.c
drivers/staging/fbtft/fb_ssd1351.c
drivers/staging/fbtft/fb_tls8204.c
drivers/staging/fbtft/fb_uc1611.c
drivers/staging/fbtft/fb_uc1701.c
drivers/staging/fbtft/fb_upd161704.c
drivers/staging/fbtft/fb_watterott.c
drivers/staging/fbtft/fbtft-bus.c
drivers/staging/fbtft/fbtft-core.c
drivers/staging/fbtft/fbtft-io.c
drivers/staging/fbtft/fbtft.h
drivers/staging/fbtft/fbtft_device.c
drivers/staging/fbtft/flexfb.c

index f6f30f5bf15a59807ca99b56858605aaacd92375..8f27bd8da17d90374f280e472b68e391bb739376 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
 
@@ -79,14 +79,14 @@ static int init_display(struct fbtft_par *par)
 
 static void reset(struct fbtft_par *par)
 {
-       if (par->gpio.reset == -1)
+       if (!par->gpio.reset)
                return;
 
        dev_dbg(par->info->device, "%s()\n", __func__);
 
-       gpio_set_value(par->gpio.reset, 0);
+       gpiod_set_value(par->gpio.reset, 0);
        udelay(20);
-       gpio_set_value(par->gpio.reset, 1);
+       gpiod_set_value(par->gpio.reset, 1);
        mdelay(120);
 }
 
@@ -98,30 +98,30 @@ static int verify_gpios(struct fbtft_par *par)
        dev_dbg(par->info->device,
                "%s()\n", __func__);
 
-       if (par->EPIN < 0) {
+       if (!par->EPIN) {
                dev_err(par->info->device,
                        "Missing info about 'wr' (aka E) gpio. Aborting.\n");
                return -EINVAL;
        }
        for (i = 0; i < 8; ++i) {
-               if (par->gpio.db[i] < 0) {
+               if (!par->gpio.db[i]) {
                        dev_err(par->info->device,
                                "Missing info about 'db[%i]' gpio. Aborting.\n",
                                i);
                        return -EINVAL;
                }
        }
-       if (par->CS0 < 0) {
+       if (!par->CS0) {
                dev_err(par->info->device,
                        "Missing info about 'cs0' gpio. Aborting.\n");
                return -EINVAL;
        }
-       if (par->CS1 < 0) {
+       if (!par->CS1) {
                dev_err(par->info->device,
                        "Missing info about 'cs1' gpio. Aborting.\n");
                return -EINVAL;
        }
-       if (par->RW < 0) {
+       if (!par->RW) {
                dev_err(par->info->device,
                        "Missing info about 'rw' gpio. Aborting.\n");
                return -EINVAL;
@@ -139,22 +139,22 @@ request_gpios_match(struct fbtft_par *par, const struct fbtft_gpio *gpio)
        if (strcasecmp(gpio->name, "wr") == 0) {
                /* left ks0108 E pin */
                par->EPIN = gpio->gpio;
-               return GPIOF_OUT_INIT_LOW;
+               return GPIOD_OUT_LOW;
        } else if (strcasecmp(gpio->name, "cs0") == 0) {
                /* left ks0108 controller pin */
                par->CS0 = gpio->gpio;
-               return GPIOF_OUT_INIT_HIGH;
+               return GPIOD_OUT_HIGH;
        } else if (strcasecmp(gpio->name, "cs1") == 0) {
                /* right ks0108 controller pin */
                par->CS1 = gpio->gpio;
-               return GPIOF_OUT_INIT_HIGH;
+               return GPIOD_OUT_HIGH;
        }
 
        /* if write (rw = 0) e(1->0) perform write */
        /* if read (rw = 1) e(0->1) set data on D0-7*/
        else if (strcasecmp(gpio->name, "rw") == 0) {
                par->RW = gpio->gpio;
-               return GPIOF_OUT_INIT_LOW;
+               return GPIOD_OUT_LOW;
        }
 
        return FBTFT_GPIO_NO_MATCH;
@@ -194,15 +194,15 @@ static void write_reg8_bus8(struct fbtft_par *par, int len, ...)
        /* select chip */
        if (*buf) {
                /* cs1 */
-               gpio_set_value(par->CS0, 1);
-               gpio_set_value(par->CS1, 0);
+               gpiod_set_value(par->CS0, 1);
+               gpiod_set_value(par->CS1, 0);
        } else {
                /* cs0 */
-               gpio_set_value(par->CS0, 0);
-               gpio_set_value(par->CS1, 1);
+               gpiod_set_value(par->CS0, 0);
+               gpiod_set_value(par->CS1, 1);
        }
 
-       gpio_set_value(par->RS, 0); /* RS->0 (command mode) */
+       gpiod_set_value(par->RS, 0); /* RS->0 (command mode) */
        len--;
 
        if (len) {
@@ -364,7 +364,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
                        write_reg(par, 0x00, (0x17 << 3) | (u8)y);
 
                        /* write bitmap */
-                       gpio_set_value(par->RS, 1); /* RS->1 (data mode) */
+                       gpiod_set_value(par->RS, 1); /* RS->1 (data mode) */
                        ret = par->fbtftops.write(par, buf, len);
                        if (ret < 0)
                                dev_err(par->info->device,
@@ -387,7 +387,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
                        write_reg(par, 0x01, (0x17 << 3) | (u8)y);
 
                        /* write bitmap */
-                       gpio_set_value(par->RS, 1); /* RS->1 (data mode) */
+                       gpiod_set_value(par->RS, 1); /* RS->1 (data mode) */
                        par->fbtftops.write(par, buf, len);
                        if (ret < 0)
                                dev_err(par->info->device,
@@ -397,8 +397,8 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
        }
        kfree(convert_buf);
 
-       gpio_set_value(par->CS0, 1);
-       gpio_set_value(par->CS1, 1);
+       gpiod_set_value(par->CS0, 1);
+       gpiod_set_value(par->CS1, 1);
 
        return ret;
 }
@@ -408,7 +408,7 @@ static int write(struct fbtft_par *par, void *buf, size_t len)
        fbtft_par_dbg_hex(DEBUG_WRITE, par, par->info->device, u8, buf, len,
                          "%s(len=%d): ", __func__, len);
 
-       gpio_set_value(par->RW, 0); /* set write mode */
+       gpiod_set_value(par->RW, 0); /* set write mode */
 
        while (len--) {
                u8 i, data;
@@ -417,12 +417,12 @@ static int write(struct fbtft_par *par, void *buf, size_t len)
 
                /* set data bus */
                for (i = 0; i < 8; ++i)
-                       gpio_set_value(par->gpio.db[i], data & (1 << i));
+                       gpiod_set_value(par->gpio.db[i], data & (1 << i));
                /* set E */
-               gpio_set_value(par->EPIN, 1);
+               gpiod_set_value(par->EPIN, 1);
                udelay(5);
                /* unset E - write */
-               gpio_set_value(par->EPIN, 0);
+               gpiod_set_value(par->EPIN, 0);
                udelay(1);
        }
 
index a58c514f47210c4c542eca8ecf78c6eb585f63e1..b6c6d66e4eb1b5eb8806f85cceee764f805e73b0 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
@@ -24,8 +24,8 @@
 
 static int init_display(struct fbtft_par *par)
 {
-       if (par->gpio.cs != -1)
-               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+       if (!par->gpio.cs)
+               gpiod_set_value(par->gpio.cs, 0);  /* Activate chip */
 
        par->fbtftops.reset(par);
 
index 86e140244aabc1f10992b5bf7efdabc866d813b9..d609a2b67db9b6cf56db1ace82b45e1a019e776c 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 #include <video/mipi_display.h>
 
@@ -77,8 +77,8 @@ static int init_display(struct fbtft_par *par)
 {
        par->fbtftops.reset(par);
 
-       if (par->gpio.cs != -1)
-               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+       if (!par->gpio.cs)
+               gpiod_set_value(par->gpio.cs, 0);  /* Activate chip */
 
        write_reg(par, MIPI_DCS_SOFT_RESET); /* software reset */
        mdelay(500);
index 740c0acbecd8b293dbae97714ea04aa60c24b2e4..ea6e001288cef42aa65a1517abbd2a1f04e4927a 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 
index 2cf75f2e03e29e794bc04a09babfa8bf31a92846..b090e7ab6fdd60c5b4df0a7ef8568034eb4aff98 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
@@ -85,8 +85,8 @@ static int init_display(struct fbtft_par *par)
 {
        par->fbtftops.reset(par);
 
-       if (par->gpio.cs != -1)
-               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+       if (!par->gpio.cs)
+               gpiod_set_value(par->gpio.cs, 0);  /* Activate chip */
 
        bt &= 0x07;
        vc &= 0x07;
index 430f21e50f4db473af50d369decce47018a67a37..415183c7054a8723d3f27ffdd78e133fc8c2b3f7 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 #include <video/mipi_display.h>
 
index 32172f8f79f03bd02fd41b4def06488c0c6f07dc..ad49973ad594a6ad3f5d1f2651b533f32db847e0 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 
@@ -119,7 +119,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
        }
 
        /* Write data */
-       gpio_set_value(par->gpio.dc, 1);
+       gpiod_set_value(par->gpio.dc, 1);
        ret = par->fbtftops.write(par, par->txbuf.buf, 6 * 84);
        if (ret < 0)
                dev_err(par->info->device, "write failed and returned: %d\n",
index 5d3b76ca74d8153bb54e8214c26821ac561b69ae..70b37fc7fb66d3902eb9548c5e114f4be7bc9b8e 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/init.h>
 #include <linux/delay.h>
 
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include "fbtft.h"
 
 #define DRVNAME "fb_ra8875"
@@ -39,7 +39,7 @@ static int write_spi(struct fbtft_par *par, void *buf, size_t len)
 
 static int init_display(struct fbtft_par *par)
 {
-       gpio_set_value(par->gpio.dc, 1);
+       gpiod_set_value(par->gpio.dc, 1);
 
        fbtft_par_dbg(DEBUG_INIT_DISPLAY, par,
                      "%s()\n", __func__);
index aa716f33420adf6ed109a86f95b2049af174868f..b3d0701880fe353cc46092be339d0e848c904387 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
@@ -29,8 +29,8 @@ static int init_display(struct fbtft_par *par)
 {
        par->fbtftops.reset(par);
 
-       if (par->gpio.cs != -1)
-               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+       if (!par->gpio.cs)
+               gpiod_set_value(par->gpio.cs, 0);  /* Activate chip */
 
        /* Initialization sequence from Lib_UTFT */
 
index 00096f8d249adf0b6d062177eceee1cbc8e82985..6f7249493ea3b4883f92e5be8359ff4a1114b4fc 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
index c9b18b3ba4ab54615406a21573dcea867d51e878..bbf75f795234b06c96a246b009bd05015a06efbf 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 
 #include "fbtft.h"
 
@@ -28,8 +28,8 @@ static int init_display(struct fbtft_par *par)
 {
        par->fbtftops.reset(par);
 
-       if (par->gpio.cs != -1)
-               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+       if (!par->gpio.cs)
+               gpiod_set_value(par->gpio.cs, 0);  /* Activate chip */
 
        write_reg(par, 0x00, 0x0001);
        write_reg(par, 0x03, 0xA8A4);
index 3515888d94c98073a691a97a772b0c0cb2cb3e85..020fe48fed0be44b234e91fa6055e4fb2998884f 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
@@ -168,7 +168,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
        }
 
        /* Write data */
-       gpio_set_value(par->gpio.dc, 1);
+       gpiod_set_value(par->gpio.dc, 1);
        ret = par->fbtftops.write(par, par->txbuf.buf,
                                  par->info->var.xres * par->info->var.yres /
                                  8);
index 50172ddd94aea4dd652e70c50a10050772f0a2d2..d7c5e2e0eee9677995b9a9f62425c6130c882160 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
@@ -190,7 +190,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
        }
 
        /* Write data */
-       gpio_set_value(par->gpio.dc, 1);
+       gpiod_set_value(par->gpio.dc, 1);
        ret = par->fbtftops.write(par, par->txbuf.buf, xres * yres / 8);
        if (ret < 0)
                dev_err(par->info->device, "write failed and returned: %d\n",
index f974f7fc4d79bd7c417b934ff3433b43e25df2d9..8a3140d41d8bbf64c2e56e0b8af196bd2e77af7c 100644 (file)
@@ -6,7 +6,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
@@ -35,7 +35,7 @@ static int init_display(struct fbtft_par *par)
 {
        par->fbtftops.reset(par);
 
-       gpio_set_value(par->gpio.cs, 0);
+       gpiod_set_value(par->gpio.cs, 0);
 
        write_reg(par, 0xb3);
        write_reg(par, 0xf0);
@@ -155,7 +155,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
                }
        }
 
-       gpio_set_value(par->gpio.dc, 1);
+       gpiod_set_value(par->gpio.dc, 1);
 
        /* Write data */
        ret = par->fbtftops.write(par, par->txbuf.buf,
index 0b614c84822e9a9b92f611d247e210e910526063..9f54fe28d51194b8d0d88f200281f2447b10b258 100644 (file)
@@ -2,7 +2,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 
@@ -80,8 +80,8 @@ static void write_reg8_bus8(struct fbtft_par *par, int len, ...)
        va_start(args, len);
 
        *buf = (u8)va_arg(args, unsigned int);
-       if (par->gpio.dc != -1)
-               gpio_set_value(par->gpio.dc, 0);
+       if (!par->gpio.dc)
+               gpiod_set_value(par->gpio.dc, 0);
        ret = par->fbtftops.write(par, par->buf, sizeof(u8));
        if (ret < 0) {
                va_end(args);
@@ -103,8 +103,8 @@ static void write_reg8_bus8(struct fbtft_par *par, int len, ...)
                        return;
                }
        }
-       if (par->gpio.dc != -1)
-               gpio_set_value(par->gpio.dc, 1);
+       if (!par->gpio.dc)
+               gpiod_set_value(par->gpio.dc, 1);
        va_end(args);
 }
 
index 3da091b4d297c15569aada014a3c0c9559433047..a8980d9f755780ae43be39b01212e76c8d5fc634 100644 (file)
@@ -2,7 +2,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 
index 277b6ed9c725bd73adfe432446b9b00e9c491491..bec6dd0ffb016ff0630dcd732ce159c2e94d9ae4 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 
@@ -94,7 +94,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
                /* The display is 102x68 but the LCD is 84x48.
                 * Set the write pointer at the start of each row.
                 */
-               gpio_set_value(par->gpio.dc, 0);
+               gpiod_set_value(par->gpio.dc, 0);
                write_reg(par, 0x80 | 0);
                write_reg(par, 0x40 | y);
 
@@ -109,7 +109,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
                        *buf++ = ch;
                }
                /* Write the row */
-               gpio_set_value(par->gpio.dc, 1);
+               gpiod_set_value(par->gpio.dc, 1);
                ret = par->fbtftops.write(par, par->txbuf.buf, WIDTH);
                if (ret < 0) {
                        dev_err(par->info->device,
index dfaf8bc70f73545c2306fe84ff1a3406be1194db..65681d0fe20006a23e2f988b28bdee745f326ca1 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 
@@ -251,7 +251,7 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
                        }
                        break;
                }
-               gpio_set_value(par->gpio.dc, 1);
+               gpiod_set_value(par->gpio.dc, 1);
 
                /* Write data */
                ret = par->fbtftops.write(par, par->txbuf.buf, len / 2);
index 0a3531d6eb3960f2ef22372bb0bc8b968328c3ee..e4ccc73868a7bd070463b8d217b933bbfa75b1f4 100644 (file)
@@ -11,7 +11,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 
@@ -136,9 +136,9 @@ static int write_vmem(struct fbtft_par *par, size_t offset, size_t len)
                write_reg(par, LCD_PAGE_ADDRESS | (u8)y);
                write_reg(par, 0x00);
                write_reg(par, LCD_COL_ADDRESS);
-               gpio_set_value(par->gpio.dc, 1);
+               gpiod_set_value(par->gpio.dc, 1);
                ret = par->fbtftops.write(par, par->txbuf.buf, WIDTH);
-               gpio_set_value(par->gpio.dc, 0);
+               gpiod_set_value(par->gpio.dc, 0);
        }
 
        if (ret < 0)
index acc425fdf34e03a0d04be8929e976edafd5b5028..564a38e3444062b7d049470f23abbbd5a375b71c 100644 (file)
@@ -12,7 +12,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
@@ -26,8 +26,8 @@ static int init_display(struct fbtft_par *par)
 {
        par->fbtftops.reset(par);
 
-       if (par->gpio.cs != -1)
-               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+       if (!par->gpio.cs)
+               gpiod_set_value(par->gpio.cs, 0);  /* Activate chip */
 
        /* Initialization sequence from Lib_UTFT */
 
index e77178157f1b93f5fd1ebec352f2cf0930860605..0a5206d28da40c494a4107b05e626a2de1fa2aa6 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/delay.h>
 
 #include "fbtft.h"
@@ -213,7 +213,7 @@ static int set_var(struct fbtft_par *par)
 
 static int verify_gpios(struct fbtft_par *par)
 {
-       if (par->gpio.reset < 0) {
+       if (!par->gpio.reset) {
                dev_err(par->info->device, "Missing 'reset' gpio. Aborting.\n");
                return -EINVAL;
        }
index 8ce1ff9b6c2a72609f71e9f8a6619f269f92635c..2ea814d0dca5d45679866540ec7c3a7e57fde45a 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 #include <linux/export.h>
 #include <linux/errno.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include "fbtft.h"
 
@@ -135,8 +135,8 @@ int fbtft_write_vmem16_bus8(struct fbtft_par *par, size_t offset, size_t len)
        remain = len / 2;
        vmem16 = (u16 *)(par->info->screen_buffer + offset);
 
-       if (par->gpio.dc != -1)
-               gpio_set_value(par->gpio.dc, 1);
+       if (!par->gpio.dc)
+               gpiod_set_value(par->gpio.dc, 1);
 
        /* non buffered write */
        if (!par->txbuf.buf)
index a2df02d97a8ebc31896925c3beb978bb3a25c4bd..de3f431abc15954f1f53d7d5f05980f5f88a20c9 100644 (file)
@@ -16,7 +16,7 @@
 #include <linux/slab.h>
 #include <linux/init.h>
 #include <linux/fb.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 #include <linux/uaccess.h>
@@ -24,7 +24,6 @@
 #include <linux/platform_device.h>
 #include <linux/spinlock.h>
 #include <linux/of.h>
-#include <linux/of_gpio.h>
 #include <video/mipi_display.h>
 
 #include "fbtft.h"
@@ -38,8 +37,8 @@ int fbtft_write_buf_dc(struct fbtft_par *par, void *buf, size_t len, int dc)
 {
        int ret;
 
-       if (gpio_is_valid(par->gpio.dc))
-               gpio_set_value(par->gpio.dc, dc);
+       if (par->gpio.dc)
+               gpiod_set_value(par->gpio.dc, dc);
 
        ret = par->fbtftops.write(par, buf, len);
        if (ret < 0)
@@ -71,127 +70,27 @@ void fbtft_dbg_hex(const struct device *dev, int groupsize,
 }
 EXPORT_SYMBOL(fbtft_dbg_hex);
 
-static unsigned long fbtft_request_gpios_match(struct fbtft_par *par,
-                                              const struct fbtft_gpio *gpio)
-{
-       int ret;
-       unsigned int val;
-
-       fbtft_par_dbg(DEBUG_REQUEST_GPIOS_MATCH, par, "%s('%s')\n",
-                     __func__, gpio->name);
-
-       if (strcasecmp(gpio->name, "reset") == 0) {
-               par->gpio.reset = gpio->gpio;
-               return GPIOF_OUT_INIT_HIGH;
-       } else if (strcasecmp(gpio->name, "dc") == 0) {
-               par->gpio.dc = gpio->gpio;
-               return GPIOF_OUT_INIT_LOW;
-       } else if (strcasecmp(gpio->name, "cs") == 0) {
-               par->gpio.cs = gpio->gpio;
-               return GPIOF_OUT_INIT_HIGH;
-       } else if (strcasecmp(gpio->name, "wr") == 0) {
-               par->gpio.wr = gpio->gpio;
-               return GPIOF_OUT_INIT_HIGH;
-       } else if (strcasecmp(gpio->name, "rd") == 0) {
-               par->gpio.rd = gpio->gpio;
-               return GPIOF_OUT_INIT_HIGH;
-       } else if (strcasecmp(gpio->name, "latch") == 0) {
-               par->gpio.latch = gpio->gpio;
-               return GPIOF_OUT_INIT_LOW;
-       } else if (gpio->name[0] == 'd' && gpio->name[1] == 'b') {
-               ret = kstrtouint(&gpio->name[2], 10, &val);
-               if (ret == 0 && val < 16) {
-                       par->gpio.db[val] = gpio->gpio;
-                       return GPIOF_OUT_INIT_LOW;
-               }
-       } else if (strcasecmp(gpio->name, "led") == 0) {
-               par->gpio.led[0] = gpio->gpio;
-               return GPIOF_OUT_INIT_LOW;
-       } else if (strcasecmp(gpio->name, "led_") == 0) {
-               par->gpio.led[0] = gpio->gpio;
-               return GPIOF_OUT_INIT_HIGH;
-       }
-
-       return FBTFT_GPIO_NO_MATCH;
-}
-
-static int fbtft_request_gpios(struct fbtft_par *par)
-{
-       struct fbtft_platform_data *pdata = par->pdata;
-       const struct fbtft_gpio *gpio;
-       unsigned long flags;
-       int ret;
-
-       if (!(pdata && pdata->gpios))
-               return 0;
-
-       gpio = pdata->gpios;
-       while (gpio->name[0]) {
-               flags = FBTFT_GPIO_NO_MATCH;
-               /* if driver provides match function, try it first,
-                * if no match use our own
-                */
-               if (par->fbtftops.request_gpios_match)
-                       flags = par->fbtftops.request_gpios_match(par, gpio);
-               if (flags == FBTFT_GPIO_NO_MATCH)
-                       flags = fbtft_request_gpios_match(par, gpio);
-               if (flags != FBTFT_GPIO_NO_MATCH) {
-                       ret = devm_gpio_request_one(par->info->device,
-                                             gpio->gpio, flags,
-                                             par->info->device->driver->name);
-                       if (ret < 0) {
-                               dev_err(par->info->device,
-                                       "%s: gpio_request_one('%s'=%d) failed with %d\n",
-                                       __func__, gpio->name,
-                                       gpio->gpio, ret);
-                               return ret;
-                       }
-                       fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par,
-                                     "%s: '%s' = GPIO%d\n",
-                                     __func__, gpio->name, gpio->gpio);
-               }
-               gpio++;
-       }
-
-       return 0;
-}
-
 #ifdef CONFIG_OF
 static int fbtft_request_one_gpio(struct fbtft_par *par,
-                                 const char *name, int index, int *gpiop)
+                                 const char *name, int index,
+                                 struct gpio_desc **gpiop)
 {
        struct device *dev = par->info->device;
        struct device_node *node = dev->of_node;
-       int gpio, flags, ret = 0;
-       enum of_gpio_flags of_flags;
+       int ret = 0;
 
        if (of_find_property(node, name, NULL)) {
-               gpio = of_get_named_gpio_flags(node, name, index, &of_flags);
-               if (gpio == -ENOENT)
-                       return 0;
-               if (gpio == -EPROBE_DEFER)
-                       return gpio;
-               if (gpio < 0) {
+               *gpiop = devm_gpiod_get_index(dev, dev->driver->name, index,
+                                             GPIOD_OUT_HIGH);
+               if (IS_ERR(*gpiop)) {
+                       ret = PTR_ERR(*gpiop);
                        dev_err(dev,
-                               "failed to get '%s' from DT\n", name);
-                       return gpio;
-               }
-
-               /* active low translates to initially low */
-               flags = (of_flags & OF_GPIO_ACTIVE_LOW) ? GPIOF_OUT_INIT_LOW :
-                                                       GPIOF_OUT_INIT_HIGH;
-               ret = devm_gpio_request_one(dev, gpio, flags,
-                                           dev->driver->name);
-               if (ret) {
-                       dev_err(dev,
-                               "gpio_request_one('%s'=%d) failed with %d\n",
-                               name, gpio, ret);
+                               "Failed to request %s GPIO:%d\n", name, ret);
                        return ret;
+
                }
-               if (gpiop)
-                       *gpiop = gpio;
-               fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' = GPIO%d\n",
-                             __func__, name, gpio);
+               fbtft_par_dbg(DEBUG_REQUEST_GPIOS, par, "%s: '%s' GPIO\n",
+                             __func__, name);
        }
 
        return ret;
@@ -254,9 +153,9 @@ static int fbtft_backlight_update_status(struct backlight_device *bd)
 
        if ((bd->props.power == FB_BLANK_UNBLANK) &&
            (bd->props.fb_blank == FB_BLANK_UNBLANK))
-               gpio_set_value(par->gpio.led[0], polarity);
+               gpiod_set_value(par->gpio.led[0], polarity);
        else
-               gpio_set_value(par->gpio.led[0], !polarity);
+               gpiod_set_value(par->gpio.led[0], !polarity);
 
        return 0;
 }
@@ -286,7 +185,7 @@ void fbtft_register_backlight(struct fbtft_par *par)
        struct backlight_device *bd;
        struct backlight_properties bl_props = { 0, };
 
-       if (par->gpio.led[0] == -1) {
+       if (!par->gpio.led[0]) {
                fbtft_par_dbg(DEBUG_BACKLIGHT, par,
                              "%s(): led pin not set, exiting.\n", __func__);
                return;
@@ -295,7 +194,7 @@ void fbtft_register_backlight(struct fbtft_par *par)
        bl_props.type = BACKLIGHT_RAW;
        /* Assume backlight is off, get polarity from current state of pin */
        bl_props.power = FB_BLANK_POWERDOWN;
-       if (!gpio_get_value(par->gpio.led[0]))
+       if (!gpiod_get_value(par->gpio.led[0]))
                par->polarity = true;
 
        bd = backlight_device_register(dev_driver_string(par->info->device),
@@ -333,12 +232,12 @@ static void fbtft_set_addr_win(struct fbtft_par *par, int xs, int ys, int xe,
 
 static void fbtft_reset(struct fbtft_par *par)
 {
-       if (par->gpio.reset == -1)
+       if (!par->gpio.reset)
                return;
        fbtft_par_dbg(DEBUG_RESET, par, "%s()\n", __func__);
-       gpio_set_value_cansleep(par->gpio.reset, 0);
+       gpiod_set_value_cansleep(par->gpio.reset, 0);
        usleep_range(20, 40);
-       gpio_set_value_cansleep(par->gpio.reset, 1);
+       gpiod_set_value_cansleep(par->gpio.reset, 1);
        msleep(120);
 }
 
@@ -663,7 +562,7 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
        int txbuflen = display->txbuflen;
        unsigned int bpp = display->bpp;
        unsigned int fps = display->fps;
-       int vmem_size, i;
+       int vmem_size;
        const s16 *init_sequence = display->init_sequence;
        char *gamma = display->gamma;
        u32 *gamma_curves = NULL;
@@ -841,19 +740,6 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
                par->txbuf.len = txbuflen;
        }
 
-       /* Initialize gpios to disabled */
-       par->gpio.reset = -1;
-       par->gpio.dc = -1;
-       par->gpio.rd = -1;
-       par->gpio.wr = -1;
-       par->gpio.cs = -1;
-       par->gpio.latch = -1;
-       for (i = 0; i < 16; i++) {
-               par->gpio.db[i] = -1;
-               par->gpio.led[i] = -1;
-               par->gpio.aux[i] = -1;
-       }
-
        /* default fbtft operations */
        par->fbtftops.write = fbtft_write_spi;
        par->fbtftops.read = fbtft_read_spi;
@@ -863,7 +749,6 @@ struct fb_info *fbtft_framebuffer_alloc(struct fbtft_display *display,
        par->fbtftops.reset = fbtft_reset;
        par->fbtftops.mkdirty = fbtft_mkdirty;
        par->fbtftops.update_display = fbtft_update_display;
-       par->fbtftops.request_gpios = fbtft_request_gpios;
        if (display->backlight)
                par->fbtftops.register_backlight = fbtft_register_backlight;
 
@@ -1035,8 +920,8 @@ static int fbtft_init_display_dt(struct fbtft_par *par)
                return -EINVAL;
 
        par->fbtftops.reset(par);
-       if (par->gpio.cs != -1)
-               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+       if (!par->gpio.cs)
+               gpiod_set_value(par->gpio.cs, 0);  /* Activate chip */
 
        while (p) {
                if (val & FBTFT_OF_INIT_CMD) {
@@ -1126,8 +1011,8 @@ int fbtft_init_display(struct fbtft_par *par)
        }
 
        par->fbtftops.reset(par);
-       if (par->gpio.cs != -1)
-               gpio_set_value(par->gpio.cs, 0);  /* Activate chip */
+       if (!par->gpio.cs)
+               gpiod_set_value(par->gpio.cs, 0);  /* Activate chip */
 
        i = 0;
        while (i < FBTFT_MAX_INIT_SEQUENCE) {
@@ -1227,7 +1112,7 @@ static int fbtft_verify_gpios(struct fbtft_par *par)
        fbtft_par_dbg(DEBUG_VERIFY_GPIOS, par, "%s()\n", __func__);
 
        if (pdata->display.buswidth != 9 &&  par->startbyte == 0 &&
-           par->gpio.dc < 0) {
+           !par->gpio.dc) {
                dev_err(par->info->device,
                        "Missing info about 'dc' gpio. Aborting.\n");
                return -EINVAL;
@@ -1236,12 +1121,12 @@ static int fbtft_verify_gpios(struct fbtft_par *par)
        if (!par->pdev)
                return 0;
 
-       if (par->gpio.wr < 0) {
+       if (!par->gpio.wr) {
                dev_err(par->info->device, "Missing 'wr' gpio. Aborting.\n");
                return -EINVAL;
        }
        for (i = 0; i < pdata->display.buswidth; i++) {
-               if (par->gpio.db[i] < 0) {
+               if (!par->gpio.db[i]) {
                        dev_err(par->info->device,
                                "Missing 'db%02d' gpio. Aborting.\n", i);
                        return -EINVAL;
index b5051d3d46a641d89e04cc16e3678b943dacbef7..38cdad6203ea69cf7f125b0fc4d66029071c1d0e 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: GPL-2.0
 #include <linux/export.h>
 #include <linux/errno.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include "fbtft.h"
 
@@ -142,30 +142,30 @@ int fbtft_write_gpio8_wr(struct fbtft_par *par, void *buf, size_t len)
                data = *(u8 *)buf;
 
                /* Start writing by pulling down /WR */
-               gpio_set_value(par->gpio.wr, 0);
+               gpiod_set_value(par->gpio.wr, 0);
 
                /* Set data */
 #ifndef DO_NOT_OPTIMIZE_FBTFT_WRITE_GPIO
                if (data == prev_data) {
-                       gpio_set_value(par->gpio.wr, 0); /* used as delay */
+                       gpiod_set_value(par->gpio.wr, 0); /* used as delay */
                } else {
                        for (i = 0; i < 8; i++) {
                                if ((data & 1) != (prev_data & 1))
-                                       gpio_set_value(par->gpio.db[i],
-                                                      data & 1);
+                                       gpiod_set_value(par->gpio.db[i],
+                                                       data & 1);
                                data >>= 1;
                                prev_data >>= 1;
                        }
                }
 #else
                for (i = 0; i < 8; i++) {
-                       gpio_set_value(par->gpio.db[i], data & 1);
+                       gpiod_set_value(par->gpio.db[i], data & 1);
                        data >>= 1;
                }
 #endif
 
                /* Pullup /WR */
-               gpio_set_value(par->gpio.wr, 1);
+               gpiod_set_value(par->gpio.wr, 1);
 
 #ifndef DO_NOT_OPTIMIZE_FBTFT_WRITE_GPIO
                prev_data = *(u8 *)buf;
@@ -192,30 +192,30 @@ int fbtft_write_gpio16_wr(struct fbtft_par *par, void *buf, size_t len)
                data = *(u16 *)buf;
 
                /* Start writing by pulling down /WR */
-               gpio_set_value(par->gpio.wr, 0);
+               gpiod_set_value(par->gpio.wr, 0);
 
                /* Set data */
 #ifndef DO_NOT_OPTIMIZE_FBTFT_WRITE_GPIO
                if (data == prev_data) {
-                       gpio_set_value(par->gpio.wr, 0); /* used as delay */
+                       gpiod_set_value(par->gpio.wr, 0); /* used as delay */
                } else {
                        for (i = 0; i < 16; i++) {
                                if ((data & 1) != (prev_data & 1))
-                                       gpio_set_value(par->gpio.db[i],
-                                                      data & 1);
+                                       gpiod_set_value(par->gpio.db[i],
+                                                       data & 1);
                                data >>= 1;
                                prev_data >>= 1;
                        }
                }
 #else
                for (i = 0; i < 16; i++) {
-                       gpio_set_value(par->gpio.db[i], data & 1);
+                       gpiod_set_value(par->gpio.db[i], data & 1);
                        data >>= 1;
                }
 #endif
 
                /* Pullup /WR */
-               gpio_set_value(par->gpio.wr, 1);
+               gpiod_set_value(par->gpio.wr, 1);
 
 #ifndef DO_NOT_OPTIMIZE_FBTFT_WRITE_GPIO
                prev_data = *(u16 *)buf;
index ac427baa464a43886ca004699e3c7210fcd189a4..7fdd3b0851ef7f46e0249a48908080d430410c5f 100644 (file)
@@ -27,7 +27,7 @@
  */
 struct fbtft_gpio {
        char name[FBTFT_GPIO_NAME_SIZE];
-       unsigned int gpio;
+       struct gpio_desc *gpio;
 };
 
 struct fbtft_par;
@@ -134,7 +134,6 @@ struct fbtft_display {
  */
 struct fbtft_platform_data {
        struct fbtft_display display;
-       const struct fbtft_gpio *gpios;
        unsigned int rotate;
        bool bgr;
        unsigned int fps;
@@ -207,15 +206,15 @@ struct fbtft_par {
        unsigned int dirty_lines_start;
        unsigned int dirty_lines_end;
        struct {
-               int reset;
-               int dc;
-               int rd;
-               int wr;
-               int latch;
-               int cs;
-               int db[16];
-               int led[16];
-               int aux[16];
+               struct gpio_desc *reset;
+               struct gpio_desc *dc;
+               struct gpio_desc *rd;
+               struct gpio_desc *wr;
+               struct gpio_desc *latch;
+               struct gpio_desc *cs;
+               struct gpio_desc *db[16];
+               struct gpio_desc *led[16];
+               struct gpio_desc *aux[16];
        } gpio;
        const s16 *init_sequence;
        struct {
index 046f9d355ecb15d8c94cb0e63403af87f3ee6be6..5f6cd0816d5845e306d444f7f88812cfd5c9c71e 100644 (file)
@@ -8,7 +8,7 @@
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <video/mipi_display.h>
 
@@ -45,11 +45,6 @@ static int mode = -1;
 module_param(mode, int, 0000);
 MODULE_PARM_DESC(mode, "SPI mode (override device default)");
 
-static char *gpios;
-module_param(gpios, charp, 0000);
-MODULE_PARM_DESC(gpios,
-                "List of gpios. Comma separated with the form: reset:23,dc:24 (when overriding the default, all gpios must be specified)");
-
 static unsigned int fps;
 module_param(fps, uint, 0000);
 MODULE_PARM_DESC(fps, "Frames per second (override driver default)");
@@ -101,7 +96,7 @@ MODULE_PARM_DESC(debug,
 static unsigned int verbose = 3;
 module_param(verbose, uint, 0000);
 MODULE_PARM_DESC(verbose,
-                "0 silent, >0 show gpios, >1 show devices, >2 show devices before (default=3)");
+                "0 silent, >1 show devices, >2 show devices before (default=3)");
 
 struct fbtft_device_display {
        char *name;
@@ -279,12 +274,6 @@ static struct fbtft_device_display displays[] = {
                                        .buswidth = 8,
                                        .backlight = 1,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 18 },
-                                       {},
-                               },
                                .gamma = ADAFRUIT18_GAMMA,
                        }
                }
@@ -302,12 +291,6 @@ static struct fbtft_device_display displays[] = {
                                            adafruit18_green_tab_set_addr_win,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 18 },
-                                       {},
-                               },
                                .gamma = ADAFRUIT18_GAMMA,
                        }
                }
@@ -323,11 +306,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "led", 23 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -342,12 +320,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -362,12 +334,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -380,11 +346,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 8,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -399,12 +360,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                        .init_sequence = cberry28_init_sequence,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 22 },
-                                       { "led", 18 },
-                                       {},
-                               },
                                .gamma = CBERRY28_GAMMA,
                        }
                }
@@ -420,9 +375,6 @@ static struct fbtft_device_display displays[] = {
                                        .buswidth = 8,
                                        .backlight = FBTFT_ONBOARD_BACKLIGHT,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        },
                        }
                }
@@ -437,11 +389,6 @@ static struct fbtft_device_display displays[] = {
                                        .buswidth = 8,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 13 },
-                                       { "dc", 6 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -458,11 +405,6 @@ static struct fbtft_device_display displays[] = {
                                        .height = 272,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -479,11 +421,6 @@ static struct fbtft_device_display displays[] = {
                                        .height = 480,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -496,10 +433,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 8,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "dc", 24 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -512,9 +445,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 9,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        }
                }
        }, {
@@ -523,13 +453,6 @@ static struct fbtft_device_display displays[] = {
                        .modalias = "flexfb",
                        .max_speed_hz = 32000000,
                        .mode = SPI_MODE_0,
-                       .platform_data = &(struct fbtft_platform_data) {
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       {},
-                               },
-                       }
                }
        }, {
                .name = "flexpfb",
@@ -538,24 +461,6 @@ static struct fbtft_device_display displays[] = {
                        .id = 0,
                        .dev = {
                        .release = fbtft_device_pdev_release,
-                       .platform_data = &(struct fbtft_platform_data) {
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 17 },
-                                       { "dc", 1 },
-                                       { "wr", 0 },
-                                       { "cs", 21 },
-                                       { "db00", 9 },
-                                       { "db01", 11 },
-                                       { "db02", 18 },
-                                       { "db03", 23 },
-                                       { "db04", 24 },
-                                       { "db05", 25 },
-                                       { "db06", 8 },
-                                       { "db07", 7 },
-                                       { "led", 4 },
-                                       {},
-                               },
-                       },
                        }
                }
        }, {
@@ -570,11 +475,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = FBTFT_ONBOARD_BACKLIGHT,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 24 },
-                                       { "dc", 25 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -588,12 +488,6 @@ static struct fbtft_device_display displays[] = {
                                        .buswidth = 8,
                                        .backlight = 1,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 23 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -609,11 +503,6 @@ static struct fbtft_device_display displays[] = {
                                },
                                .startbyte = 0x70,
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "led", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -631,11 +520,6 @@ static struct fbtft_device_display displays[] = {
                                .startbyte = 0x70,
                                .bgr = true,
                                .fps = 50,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "led", 18 },
-                                       {},
-                               },
                                .gamma = HY28B_GAMMA,
                        }
                }
@@ -652,12 +536,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 22 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -673,22 +551,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = false,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       /* Wiring for LCD adapter kit */
-                                       { "reset", 7 },
-                                       { "dc", 0 },    /* rev 2: 2 */
-                                       { "wr", 1 },    /* rev 2: 3 */
-                                       { "cs", 8 },
-                                       { "db00", 17 },
-                                       { "db01", 18 },
-                                       { "db02", 21 }, /* rev 2: 27 */
-                                       { "db03", 22 },
-                                       { "db04", 23 },
-                                       { "db05", 24 },
-                                       { "db06", 25 },
-                                       { "db07", 4 },
-                                       {}
-                               },
                        },
                        }
                }
@@ -705,9 +567,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        },
                        }
                }
@@ -723,11 +582,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -743,12 +597,6 @@ static struct fbtft_device_display displays[] = {
                                },
                                .startbyte = 0x70,
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -763,11 +611,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "led", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -777,10 +620,6 @@ static struct fbtft_device_display displays[] = {
                        .max_speed_hz = 4000000,
                        .mode = SPI_MODE_3,
                        .platform_data = &(struct fbtft_platform_data) {
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -793,12 +632,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 8,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 23 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -811,12 +644,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 8,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 23 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -831,9 +658,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        }
                }
        }, {
@@ -849,12 +673,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 22 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -871,10 +689,6 @@ static struct fbtft_device_display displays[] = {
                                        .init_sequence = pitft_init_sequence,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "dc", 25 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -888,11 +702,6 @@ static struct fbtft_device_display displays[] = {
                                        .buswidth = 8,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 24 },
-                                       { "dc", 25 },
-                                       {},
-                               },
                                .gamma = PIOLED_GAMMA
                        }
                }
@@ -908,12 +717,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 23 },
-                                       { "dc", 24 },
-                                       { "led", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -928,12 +731,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 23 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -946,11 +743,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 8,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -968,9 +760,6 @@ static struct fbtft_device_display displays[] = {
                                        .fbtftops.write = write_gpio16_wr_slow,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        },
                },
                }
@@ -988,9 +777,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        },
                },
                }
@@ -1010,9 +796,6 @@ static struct fbtft_device_display displays[] = {
                                                fbtft_write_gpio16_wr_latched,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        },
                },
                }
@@ -1028,11 +811,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1044,9 +822,6 @@ static struct fbtft_device_display displays[] = {
                        .chip_select = 0,
                        .mode = SPI_MODE_0,
                        .platform_data = &(struct fbtft_platform_data) {
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1059,11 +834,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 8,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 24 },
-                                       { "dc", 25 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1078,12 +848,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1098,12 +862,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 25 },
-                                       { "dc", 24 },
-                                       { "led", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1118,12 +876,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 15 },
-                                       { "dc", 25 },
-                                       { "led_", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1138,12 +890,6 @@ static struct fbtft_device_display displays[] = {
                                        .backlight = 1,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 15 },
-                                       { "dc", 25 },
-                                       { "led_", 18 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1156,11 +902,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 8,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 24 },
-                                       { "dc", 25 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1177,11 +918,6 @@ static struct fbtft_device_display displays[] = {
                                                waveshare32b_init_sequence,
                                },
                                .bgr = true,
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 27 },
-                                       { "dc", 22 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1194,11 +930,6 @@ static struct fbtft_device_display displays[] = {
                                .display = {
                                        .buswidth = 8,
                                },
-                               .gpios = (const struct fbtft_gpio []) {
-                                       { "reset", 24 },
-                                       { "dc", 25 },
-                                       {},
-                               },
                        }
                }
        }, {
@@ -1211,9 +942,6 @@ static struct fbtft_device_display displays[] = {
                        .max_speed_hz = 0,
                        .mode = SPI_MODE_0,
                        .platform_data = &(struct fbtft_platform_data) {
-                               .gpios = (const struct fbtft_gpio []) {
-                                       {},
-                               },
                        }
                },
                .pdev = &(struct platform_device) {
@@ -1222,9 +950,6 @@ static struct fbtft_device_display displays[] = {
                        .dev = {
                                .release = fbtft_device_pdev_release,
                                .platform_data = &(struct fbtft_platform_data) {
-                                       .gpios = (const struct fbtft_gpio []) {
-                                               {},
-                                       },
                                },
                        },
                },
@@ -1246,30 +971,30 @@ static int write_gpio16_wr_slow(struct fbtft_par *par, void *buf, size_t len)
                data = *(u16 *)buf;
 
                /* Start writing by pulling down /WR */
-               gpio_set_value(par->gpio.wr, 0);
+               gpiod_set_value(par->gpio.wr, 0);
 
                /* Set data */
 #ifndef DO_NOT_OPTIMIZE_FBTFT_WRITE_GPIO
                if (data == prev_data) {
-                       gpio_set_value(par->gpio.wr, 0); /* used as delay */
+                       gpiod_set_value(par->gpio.wr, 0); /* used as delay */
                } else {
                        for (i = 0; i < 16; i++) {
                                if ((data & 1) != (prev_data & 1))
-                                       gpio_set_value(par->gpio.db[i],
-                                                      data & 1);
+                                       gpiod_set_value(par->gpio.db[i],
+                                                       data & 1);
                                data >>= 1;
                                prev_data >>= 1;
                        }
                }
 #else
                for (i = 0; i < 16; i++) {
-                       gpio_set_value(par->gpio.db[i], data & 1);
+                       gpiod_set_value(par->gpio.db[i], data & 1);
                        data >>= 1;
                }
 #endif
 
                /* Pullup /WR */
-               gpio_set_value(par->gpio.wr, 1);
+               gpiod_set_value(par->gpio.wr, 1);
 
 #ifndef DO_NOT_OPTIMIZE_FBTFT_WRITE_GPIO
                prev_data = *(u16 *)buf;
@@ -1289,9 +1014,6 @@ static void adafruit18_green_tab_set_addr_win(struct fbtft_par *par,
        write_reg(par, 0x2C);
 }
 
-/* used if gpios parameter is present */
-static struct fbtft_gpio fbtft_device_param_gpios[MAX_GPIOS + 1] = { };
-
 static void fbtft_device_pdev_release(struct device *dev)
 {
 /* Needed to silence this message:
@@ -1382,11 +1104,8 @@ static int __init fbtft_device_init(void)
 {
        struct spi_board_info *spi = NULL;
        struct fbtft_platform_data *pdata;
-       const struct fbtft_gpio *gpio = NULL;
-       char *p_gpio, *p_name, *p_num;
        bool found = false;
        int i = 0;
-       long val;
        int ret = 0;
 
        if (!name) {
@@ -1404,38 +1123,6 @@ static int __init fbtft_device_init(void)
                return -EINVAL;
        }
 
-       /* parse module parameter: gpios */
-       while ((p_gpio = strsep(&gpios, ","))) {
-               if (!strchr(p_gpio, ':')) {
-                       pr_err("error: missing ':' in gpios parameter: %s\n",
-                              p_gpio);
-                       return -EINVAL;
-               }
-               p_num = p_gpio;
-               p_name = strsep(&p_num, ":");
-               if (!p_name || !p_num) {
-                       pr_err("something bad happened parsing gpios parameter: %s\n",
-                              p_gpio);
-                       return -EINVAL;
-               }
-               ret = kstrtol(p_num, 10, &val);
-               if (ret) {
-                       pr_err("could not parse number in gpios parameter: %s:%s\n",
-                              p_name, p_num);
-                       return -EINVAL;
-               }
-               strncpy(fbtft_device_param_gpios[i].name, p_name,
-                       FBTFT_GPIO_NAME_SIZE - 1);
-               fbtft_device_param_gpios[i++].gpio = (int)val;
-               if (i == MAX_GPIOS) {
-                       pr_err("gpios parameter: exceeded max array size: %d\n",
-                              MAX_GPIOS);
-                       return -EINVAL;
-               }
-       }
-       if (fbtft_device_param_gpios[0].name[0])
-               gpio = fbtft_device_param_gpios;
-
        if (verbose > 2) {
                pr_spi_devices(); /* print list of registered SPI devices */
                pr_p_devices(); /* print list of 'fb' platform devices */
@@ -1516,8 +1203,6 @@ static int __init fbtft_device_init(void)
                                pdata->txbuflen = txbuflen;
                        if (init_num)
                                pdata->display.init_sequence = init;
-                       if (gpio)
-                               pdata->gpios = gpio;
                        if (custom) {
                                pdata->display.width = width;
                                pdata->display.height = height;
@@ -1549,19 +1234,6 @@ static int __init fbtft_device_init(void)
                return -EINVAL;
        }
 
-       if (verbose && pdata && pdata->gpios) {
-               gpio = pdata->gpios;
-               pr_info("GPIOS used by '%s':\n", name);
-               found = false;
-               while (verbose && gpio->name[0]) {
-                       pr_info("'%s' = GPIO%d\n", gpio->name, gpio->gpio);
-                       gpio++;
-                       found = true;
-               }
-               if (!found)
-                       pr_info("(none)\n");
-       }
-
        if (spi_device && (verbose > 1))
                pr_spi_devices();
        if (p_device && (verbose > 1))
index 2af474469e7d5efc4394947054eab2ae931c2170..c5fa59105a4365921e3daa6271f73b0ea5201e34 100644 (file)
@@ -9,7 +9,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/vmalloc.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/spi/spi.h>
 #include <linux/delay.h>
 
@@ -521,7 +521,7 @@ static int flexfb_verify_gpios_dc(struct fbtft_par *par)
 {
        fbtft_par_dbg(DEBUG_VERIFY_GPIOS, par, "%s()\n", __func__);
 
-       if (par->gpio.dc < 0) {
+       if (!par->gpio.dc) {
                dev_err(par->info->device,
                        "Missing info about 'dc' gpio. Aborting.\n");
                return -EINVAL;
@@ -537,22 +537,22 @@ static int flexfb_verify_gpios_db(struct fbtft_par *par)
 
        fbtft_par_dbg(DEBUG_VERIFY_GPIOS, par, "%s()\n", __func__);
 
-       if (par->gpio.dc < 0) {
+       if (!par->gpio.dc) {
                dev_err(par->info->device, "Missing info about 'dc' gpio. Aborting.\n");
                return -EINVAL;
        }
-       if (par->gpio.wr < 0) {
+       if (!par->gpio.wr) {
                dev_err(par->info->device, "Missing info about 'wr' gpio. Aborting.\n");
                return -EINVAL;
        }
-       if (latched && (par->gpio.latch < 0)) {
+       if (latched && !par->gpio.latch) {
                dev_err(par->info->device, "Missing info about 'latch' gpio. Aborting.\n");
                return -EINVAL;
        }
        if (latched)
                num_db = buswidth / 2;
        for (i = 0; i < num_db; i++) {
-               if (par->gpio.db[i] < 0) {
+               if (!par->gpio.db[i]) {
                        dev_err(par->info->device,
                                "Missing info about 'db%02d' gpio. Aborting.\n",
                                i);