Skip to content

Commit

Permalink
Staging: fbtft: Switch to the gpio descriptor interface
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Nishad Kamdar authored and Greg Kroah-Hartman committed Jan 18, 2019
1 parent 032ecb5 commit c440eee
Show file tree
Hide file tree
Showing 27 changed files with 143 additions and 587 deletions.
52 changes: 26 additions & 26 deletions drivers/staging/fbtft/fb_agm1264k-fl.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down Expand Up @@ -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);
}

Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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,
Expand All @@ -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,
Expand All @@ -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;
}
Expand All @@ -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;
Expand All @@ -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);
}

Expand Down
6 changes: 3 additions & 3 deletions drivers/staging/fbtft/fb_bd663474.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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);

Expand Down
6 changes: 3 additions & 3 deletions drivers/staging/fbtft/fb_ili9163.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/fbtft/fb_ili9320.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
6 changes: 3 additions & 3 deletions drivers/staging/fbtft/fb_ili9325.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/fbtft/fb_ili9340.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/fbtft/fb_pcd8544.c
Original file line number Diff line number Diff line change
Expand Up @@ -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>

Expand Down Expand Up @@ -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",
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/fbtft/fb_ra8875.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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__);
Expand Down
6 changes: 3 additions & 3 deletions drivers/staging/fbtft/fb_s6d1121.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand All @@ -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 */

Expand Down
2 changes: 1 addition & 1 deletion drivers/staging/fbtft/fb_sh1106.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
6 changes: 3 additions & 3 deletions drivers/staging/fbtft/fb_ssd1289.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand All @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/fbtft/fb_ssd1305.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions drivers/staging/fbtft/fb_ssd1306.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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",
Expand Down
6 changes: 3 additions & 3 deletions drivers/staging/fbtft/fb_ssd1325.c
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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,
Expand Down
Loading

0 comments on commit c440eee

Please sign in to comment.