video: backlight: tosa: Use GPIO lookup table
authorArnd Bergmann <arnd@arndb.de>
Fri, 18 Oct 2019 15:41:53 +0000 (17:41 +0200)
committerLee Jones <lee.jones@linaro.org>
Mon, 11 Nov 2019 09:29:56 +0000 (09:29 +0000)
The driver should not require a machine specific header. Change
it to pass the GPIO line through a lookup table, and move the
timing generator definitions into the drivers itself.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Acked-by: Robert Jarzmik <robert.jarzmik@free.fr>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
arch/arm/mach-pxa/include/mach/tosa.h
arch/arm/mach-pxa/tosa.c
drivers/video/backlight/tosa_bl.c
drivers/video/backlight/tosa_bl.h [new file with mode: 0644]
drivers/video/backlight/tosa_lcd.c

index a499ed17931e4df35e4e5c3c9539293ef557457e..8bfaca3a8b6421c9a32936a2b35d431be3e0dca9 100644 (file)
 #define TOSA_GPIO_BAT0_TH_ON           (TOSA_TC6393XB_GPIO_BASE + 14)
 #define TOSA_GPIO_BAT1_TH_ON           (TOSA_TC6393XB_GPIO_BASE + 15)
 
-/*
- * Timing Generator
- */
-#define TG_PNLCTL                      0x00
-#define TG_TPOSCTL                     0x01
-#define TG_DUTYCTL                     0x02
-#define TG_GPOSR                       0x03
-#define TG_GPODR1                      0x04
-#define TG_GPODR2                      0x05
-#define TG_PINICTL                     0x06
-#define TG_HPOSCTL                     0x07
-
 /*
  * PXA GPIOs
  */
 #define TOSA_KEY_MAIL          KEY_MAIL
 #endif
 
-struct spi_device;
-extern int tosa_bl_enable(struct spi_device *spi, int enable);
-
 #endif /* _ASM_ARCH_TOSA_H_ */
index f537ff1c3ba7e6ba91c1ecca813be1c1a8ac3ced..4e13893edeb95a94692b93e738fd1e7dbaa97fdd 100644 (file)
@@ -813,6 +813,26 @@ static struct pxa2xx_spi_controller pxa_ssp_master_info = {
        .num_chipselect = 1,
 };
 
+static struct gpiod_lookup_table tosa_lcd_gpio_table = {
+       .dev_id = "spi2.0",
+       .table = {
+               GPIO_LOOKUP("tc6393xb",
+                           TOSA_GPIO_TG_ON - TOSA_TC6393XB_GPIO_BASE,
+                           "tg #pwr", GPIO_ACTIVE_HIGH),
+               { },
+       },
+};
+
+static struct gpiod_lookup_table tosa_lcd_bl_gpio_table = {
+       .dev_id = "i2c-tosa-bl",
+       .table = {
+               GPIO_LOOKUP("tc6393xb",
+                           TOSA_GPIO_BL_C20MA - TOSA_TC6393XB_GPIO_BASE,
+                           "backlight", GPIO_ACTIVE_HIGH),
+               { },
+       },
+};
+
 static struct spi_board_info spi_board_info[] __initdata = {
        {
                .modalias       = "tosa-lcd",
@@ -923,6 +943,8 @@ static void __init tosa_init(void)
        platform_scoop_config = &tosa_pcmcia_config;
 
        pxa2xx_set_spi_info(2, &pxa_ssp_master_info);
+       gpiod_add_lookup_table(&tosa_lcd_gpio_table);
+       gpiod_add_lookup_table(&tosa_lcd_bl_gpio_table);
        spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
 
        clk_add_alias("CLK_CK3P6MI", tc6393xb_device.name, "GPIO11_CLK", NULL);
index 1275e815bd86d51a79a3c90427724aa817bf218d..cff5e96fd9884224b610086143ed5ee03c1b54b4 100644 (file)
@@ -18,7 +18,7 @@
 
 #include <asm/mach/sharpsl_param.h>
 
-#include <mach/tosa.h>
+#include "tosa_bl.h"
 
 #define COMADJ_DEFAULT 97
 
@@ -28,6 +28,7 @@
 struct tosa_bl_data {
        struct i2c_client *i2c;
        struct backlight_device *bl;
+       struct gpio_desc *gpio;
 
        int comadj;
 };
@@ -42,7 +43,7 @@ static void tosa_bl_set_backlight(struct tosa_bl_data *data, int brightness)
        i2c_smbus_write_byte_data(data->i2c, DAC_CH2, (u8)(brightness & 0xff));
 
        /* SetBacklightVR */
-       gpio_set_value(TOSA_GPIO_BL_C20MA, brightness & 0x100);
+       gpiod_set_value(data->gpio, brightness & 0x100);
 
        tosa_bl_enable(spi, brightness);
 }
@@ -87,9 +88,8 @@ static int tosa_bl_probe(struct i2c_client *client,
                return -ENOMEM;
 
        data->comadj = sharpsl_param.comadj == -1 ? COMADJ_DEFAULT : sharpsl_param.comadj;
-
-       ret = devm_gpio_request_one(&client->dev, TOSA_GPIO_BL_C20MA,
-                               GPIOF_OUT_INIT_LOW, "backlight");
+       data->gpio = devm_gpiod_get(&client->dev, "backlight", GPIOD_OUT_LOW);
+       ret = PTR_ERR_OR_ZERO(data->gpio);
        if (ret) {
                dev_dbg(&data->bl->dev, "Unable to request gpio!\n");
                return ret;
diff --git a/drivers/video/backlight/tosa_bl.h b/drivers/video/backlight/tosa_bl.h
new file mode 100644 (file)
index 0000000..589e17e
--- /dev/null
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+#ifndef _TOSA_BL_H
+#define _TOSA_BL_H
+
+struct spi_device;
+extern int tosa_bl_enable(struct spi_device *spi, int enable);
+
+#endif
index 29af8e27b6e5fef9db74dab54dbe953290b7f6d8..e8ab583e50982b357fd1bfa267f9be716cf21e01 100644 (file)
@@ -19,7 +19,7 @@
 
 #include <asm/mach/sharpsl_param.h>
 
-#include <mach/tosa.h>
+#include "tosa_bl.h"
 
 #define POWER_IS_ON(pwr)       ((pwr) <= FB_BLANK_NORMAL)
 
 #define TG_REG0_UD     0x0004
 #define TG_REG0_LR     0x0008
 
+/*
+ * Timing Generator
+ */
+#define TG_PNLCTL      0x00
+#define TG_TPOSCTL     0x01
+#define TG_DUTYCTL     0x02
+#define TG_GPOSR       0x03
+#define TG_GPODR1      0x04
+#define TG_GPODR2      0x05
+#define TG_PINICTL     0x06
+#define TG_HPOSCTL     0x07
+
+
 #define        DAC_BASE        0x4e
 
 struct tosa_lcd_data {
        struct spi_device *spi;
        struct lcd_device *lcd;
        struct i2c_client *i2c;
+       struct gpio_desc *gpiod_tg;
 
        int lcd_power;
        bool is_vga;
@@ -66,7 +80,7 @@ EXPORT_SYMBOL(tosa_bl_enable);
 static void tosa_lcd_tg_init(struct tosa_lcd_data *data)
 {
        /* TG on */
-       gpio_set_value(TOSA_GPIO_TG_ON, 0);
+       gpiod_set_value(data->gpiod_tg, 0);
 
        mdelay(60);
 
@@ -100,6 +114,7 @@ static void tosa_lcd_tg_on(struct tosa_lcd_data *data)
                 */
                struct i2c_adapter *adap = i2c_get_adapter(0);
                struct i2c_board_info info = {
+                       .dev_name = "tosa-bl",
                        .type   = "tosa-bl",
                        .addr   = DAC_BASE,
                        .platform_data = data->spi,
@@ -121,7 +136,7 @@ static void tosa_lcd_tg_off(struct tosa_lcd_data *data)
        mdelay(50);
 
        /* TG Off */
-       gpio_set_value(TOSA_GPIO_TG_ON, 1);
+       gpiod_set_value(data->gpiod_tg, 1);
        mdelay(100);
 }
 
@@ -191,10 +206,9 @@ static int tosa_lcd_probe(struct spi_device *spi)
        data->spi = spi;
        spi_set_drvdata(spi, data);
 
-       ret = devm_gpio_request_one(&spi->dev, TOSA_GPIO_TG_ON,
-                               GPIOF_OUT_INIT_LOW, "tg #pwr");
-       if (ret < 0)
-               return ret;
+       data->gpiod_tg = devm_gpiod_get(&spi->dev, "tg #pwr", GPIOD_OUT_LOW);
+       if (IS_ERR(data->gpiod_tg))
+               return PTR_ERR(data->gpiod_tg);
 
        mdelay(60);