Commit 0b0cb52b authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Lee Jones

video: backlight: tosa: Use GPIO lookup table

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: default avatarArnd Bergmann <arnd@arndb.de>
Acked-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Reviewed-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 8663c188
...@@ -72,18 +72,6 @@ ...@@ -72,18 +72,6 @@
#define TOSA_GPIO_BAT0_TH_ON (TOSA_TC6393XB_GPIO_BASE + 14) #define TOSA_GPIO_BAT0_TH_ON (TOSA_TC6393XB_GPIO_BASE + 14)
#define TOSA_GPIO_BAT1_TH_ON (TOSA_TC6393XB_GPIO_BASE + 15) #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 * PXA GPIOs
*/ */
...@@ -192,7 +180,4 @@ ...@@ -192,7 +180,4 @@
#define TOSA_KEY_MAIL KEY_MAIL #define TOSA_KEY_MAIL KEY_MAIL
#endif #endif
struct spi_device;
extern int tosa_bl_enable(struct spi_device *spi, int enable);
#endif /* _ASM_ARCH_TOSA_H_ */ #endif /* _ASM_ARCH_TOSA_H_ */
...@@ -813,6 +813,26 @@ static struct pxa2xx_spi_controller pxa_ssp_master_info = { ...@@ -813,6 +813,26 @@ static struct pxa2xx_spi_controller pxa_ssp_master_info = {
.num_chipselect = 1, .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 = { static struct spi_board_info spi_board_info[] __initdata = {
{ {
.modalias = "tosa-lcd", .modalias = "tosa-lcd",
...@@ -923,6 +943,8 @@ static void __init tosa_init(void) ...@@ -923,6 +943,8 @@ static void __init tosa_init(void)
platform_scoop_config = &tosa_pcmcia_config; platform_scoop_config = &tosa_pcmcia_config;
pxa2xx_set_spi_info(2, &pxa_ssp_master_info); 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)); spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
clk_add_alias("CLK_CK3P6MI", tc6393xb_device.name, "GPIO11_CLK", NULL); clk_add_alias("CLK_CK3P6MI", tc6393xb_device.name, "GPIO11_CLK", NULL);
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
#include <asm/mach/sharpsl_param.h> #include <asm/mach/sharpsl_param.h>
#include <mach/tosa.h> #include "tosa_bl.h"
#define COMADJ_DEFAULT 97 #define COMADJ_DEFAULT 97
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
struct tosa_bl_data { struct tosa_bl_data {
struct i2c_client *i2c; struct i2c_client *i2c;
struct backlight_device *bl; struct backlight_device *bl;
struct gpio_desc *gpio;
int comadj; int comadj;
}; };
...@@ -42,7 +43,7 @@ static void tosa_bl_set_backlight(struct tosa_bl_data *data, int brightness) ...@@ -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)); i2c_smbus_write_byte_data(data->i2c, DAC_CH2, (u8)(brightness & 0xff));
/* SetBacklightVR */ /* SetBacklightVR */
gpio_set_value(TOSA_GPIO_BL_C20MA, brightness & 0x100); gpiod_set_value(data->gpio, brightness & 0x100);
tosa_bl_enable(spi, brightness); tosa_bl_enable(spi, brightness);
} }
...@@ -87,9 +88,8 @@ static int tosa_bl_probe(struct i2c_client *client, ...@@ -87,9 +88,8 @@ static int tosa_bl_probe(struct i2c_client *client,
return -ENOMEM; return -ENOMEM;
data->comadj = sharpsl_param.comadj == -1 ? COMADJ_DEFAULT : sharpsl_param.comadj; data->comadj = sharpsl_param.comadj == -1 ? COMADJ_DEFAULT : sharpsl_param.comadj;
data->gpio = devm_gpiod_get(&client->dev, "backlight", GPIOD_OUT_LOW);
ret = devm_gpio_request_one(&client->dev, TOSA_GPIO_BL_C20MA, ret = PTR_ERR_OR_ZERO(data->gpio);
GPIOF_OUT_INIT_LOW, "backlight");
if (ret) { if (ret) {
dev_dbg(&data->bl->dev, "Unable to request gpio!\n"); dev_dbg(&data->bl->dev, "Unable to request gpio!\n");
return ret; return ret;
......
/* 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
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
#include <asm/mach/sharpsl_param.h> #include <asm/mach/sharpsl_param.h>
#include <mach/tosa.h> #include "tosa_bl.h"
#define POWER_IS_ON(pwr) ((pwr) <= FB_BLANK_NORMAL) #define POWER_IS_ON(pwr) ((pwr) <= FB_BLANK_NORMAL)
...@@ -28,12 +28,26 @@ ...@@ -28,12 +28,26 @@
#define TG_REG0_UD 0x0004 #define TG_REG0_UD 0x0004
#define TG_REG0_LR 0x0008 #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 #define DAC_BASE 0x4e
struct tosa_lcd_data { struct tosa_lcd_data {
struct spi_device *spi; struct spi_device *spi;
struct lcd_device *lcd; struct lcd_device *lcd;
struct i2c_client *i2c; struct i2c_client *i2c;
struct gpio_desc *gpiod_tg;
int lcd_power; int lcd_power;
bool is_vga; bool is_vga;
...@@ -66,7 +80,7 @@ EXPORT_SYMBOL(tosa_bl_enable); ...@@ -66,7 +80,7 @@ EXPORT_SYMBOL(tosa_bl_enable);
static void tosa_lcd_tg_init(struct tosa_lcd_data *data) static void tosa_lcd_tg_init(struct tosa_lcd_data *data)
{ {
/* TG on */ /* TG on */
gpio_set_value(TOSA_GPIO_TG_ON, 0); gpiod_set_value(data->gpiod_tg, 0);
mdelay(60); mdelay(60);
...@@ -100,6 +114,7 @@ static void tosa_lcd_tg_on(struct tosa_lcd_data *data) ...@@ -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_adapter *adap = i2c_get_adapter(0);
struct i2c_board_info info = { struct i2c_board_info info = {
.dev_name = "tosa-bl",
.type = "tosa-bl", .type = "tosa-bl",
.addr = DAC_BASE, .addr = DAC_BASE,
.platform_data = data->spi, .platform_data = data->spi,
...@@ -121,7 +136,7 @@ static void tosa_lcd_tg_off(struct tosa_lcd_data *data) ...@@ -121,7 +136,7 @@ static void tosa_lcd_tg_off(struct tosa_lcd_data *data)
mdelay(50); mdelay(50);
/* TG Off */ /* TG Off */
gpio_set_value(TOSA_GPIO_TG_ON, 1); gpiod_set_value(data->gpiod_tg, 1);
mdelay(100); mdelay(100);
} }
...@@ -191,10 +206,9 @@ static int tosa_lcd_probe(struct spi_device *spi) ...@@ -191,10 +206,9 @@ static int tosa_lcd_probe(struct spi_device *spi)
data->spi = spi; data->spi = spi;
spi_set_drvdata(spi, data); spi_set_drvdata(spi, data);
ret = devm_gpio_request_one(&spi->dev, TOSA_GPIO_TG_ON, data->gpiod_tg = devm_gpiod_get(&spi->dev, "tg #pwr", GPIOD_OUT_LOW);
GPIOF_OUT_INIT_LOW, "tg #pwr"); if (IS_ERR(data->gpiod_tg))
if (ret < 0) return PTR_ERR(data->gpiod_tg);
return ret;
mdelay(60); mdelay(60);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment