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

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
Loading
Loading
Loading
Loading
+0 −15
Original line number Diff line number Diff line
@@ -72,18 +72,6 @@
#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
 */
@@ -192,7 +180,4 @@
#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_ */
+22 −0
Original line number Diff line number Diff line
@@ -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);
+5 −5
Original line number Diff line number Diff line
@@ -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;
+8 −0
Original line number Diff line number Diff line
/* 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
+21 −7
Original line number Diff line number Diff line
@@ -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)

@@ -28,12 +28,26 @@
#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);