Renesas ARM and SH based SoC backlight drivers for v3.12
Backlight drivers used by SH and ARM SH-Mobile boards. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJR6LwHAAoJENfPZGlqN0++pegP/01bPW/lmL4FScr5INN9zyGG Xt7SaQPVYq9SkIY1E79pcfXFWXIbS3G/eouYF5K5cgoL4HGdQLyAgTzka0eC9Ir+ GsEI2fhOCTcC6GzFSn3KZuVSuFsH6rcykV6KmU6rceGQ7F3Wwj77JbI8h1g7YUNR Mo5PttLW4XSTBFsubPACFZZEvP1Ah7UTjgXbI3QDpTrF3OCQ5I9ie3z2Z83Sx2Pc W+JJumGfvtpS3irZrputCcgorz6B1/1q/HtCOdrLm9SCwHtm/J7xsgXccJM31+kG Or5yrPittbN8E8KQtYHbvjOzwH1RpjeKwqRVsmBy1oezFHp6CRfRh1x9jwoKU0ES SmkJgP5IYW9XEi9hpR1sY24Eq05zEk7SVg3cWSGH7kiUCVtd8OyU70CF1KKm8YL8 LXqb4roZfpMQFKifxg0CbYQN4LgzM97oe3cc2es+KyMHvMNh6ynEjWpkNdW7zlfc 2GtE9nrPYY6PRrpMhF45oMFRWiSqN4Y9RPzVqtQ03rVwbrWq0JbHik/nt5U3gJo7 JGbQ3WSU4Z8orrygkbUR9i3Z8Y9tTlxq+MnZ55u1UUfYAihnOUAttHrxR8VvHsSv NekrnoZydzLluYgyhhCYHHocLGKoZ9h31kX+OFwCS57ljChjYCNUGSET+N4dD2h9 2z+oAHhDsBWhAIX6frGF =KAMH -----END PGP SIGNATURE----- Merge tag 'renesas-backlight-for-v3.12' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into next/boards From Simon Horman: Renesas ARM and SH based SoC backlight drivers for v3.12 Backlight drivers used by SH and ARM SH-Mobile boards. * tag 'renesas-backlight-for-v3.12' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas: ARM: mach-shmobile: ag5evm: Use bd6107 backlight driver sh: kfr2r09: Use lv5207lp backlight sh: ecovec24: Use gpio-backlight ARM: mach-shmobile: mackerel: Use gpio-backlight backlight: Add ROHM BD6107 backlight driver backlight: Add Sanyo LV5207LP backlight driver backlight: Add GPIO-based backlight driver Signed-off-by: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
16649596d7
|
@ -41,6 +41,7 @@
|
|||
#include <linux/mmc/sh_mmcif.h>
|
||||
#include <linux/mmc/sh_mobile_sdhi.h>
|
||||
#include <linux/mfd/tmio.h>
|
||||
#include <linux/platform_data/bd6107.h>
|
||||
#include <linux/sh_clk.h>
|
||||
#include <linux/irqchip/arm-gic.h>
|
||||
#include <video/sh_mobile_lcdc.h>
|
||||
|
@ -291,47 +292,7 @@ static struct platform_device mipidsi0_device = {
|
|||
},
|
||||
};
|
||||
|
||||
static unsigned char lcd_backlight_seq[3][2] = {
|
||||
{ 0x04, 0x07 },
|
||||
{ 0x23, 0x80 },
|
||||
{ 0x03, 0x01 },
|
||||
};
|
||||
|
||||
static int lcd_backlight_set_brightness(int brightness)
|
||||
{
|
||||
struct i2c_adapter *adap;
|
||||
struct i2c_msg msg;
|
||||
unsigned int i;
|
||||
int ret;
|
||||
|
||||
if (brightness == 0) {
|
||||
/* Reset the chip */
|
||||
gpio_set_value(235, 0);
|
||||
mdelay(24);
|
||||
gpio_set_value(235, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
adap = i2c_get_adapter(1);
|
||||
if (adap == NULL)
|
||||
return -ENODEV;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(lcd_backlight_seq); i++) {
|
||||
msg.addr = 0x6d;
|
||||
msg.buf = &lcd_backlight_seq[i][0];
|
||||
msg.len = 2;
|
||||
msg.flags = 0;
|
||||
|
||||
ret = i2c_transfer(adap, &msg, 1);
|
||||
if (ret < 0)
|
||||
break;
|
||||
}
|
||||
|
||||
i2c_put_adapter(adap);
|
||||
return ret < 0 ? ret : 0;
|
||||
}
|
||||
|
||||
/* LCDC0 */
|
||||
/* LCDC0 and backlight */
|
||||
static const struct fb_videomode lcdc0_modes[] = {
|
||||
{
|
||||
.name = "R63302(QHD)",
|
||||
|
@ -361,11 +322,6 @@ static struct sh_mobile_lcdc_info lcdc0_info = {
|
|||
.width = 44,
|
||||
.height = 79,
|
||||
},
|
||||
.bl_info = {
|
||||
.name = "sh_mobile_lcdc_bl",
|
||||
.max_brightness = 1,
|
||||
.set_brightness = lcd_backlight_set_brightness,
|
||||
},
|
||||
.tx_dev = &mipidsi0_device,
|
||||
}
|
||||
};
|
||||
|
@ -394,6 +350,17 @@ static struct platform_device lcdc0_device = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct bd6107_platform_data backlight_data = {
|
||||
.fbdev = &lcdc0_device.dev,
|
||||
.reset = 235,
|
||||
.def_value = 0,
|
||||
};
|
||||
|
||||
static struct i2c_board_info backlight_board_info = {
|
||||
I2C_BOARD_INFO("bd6107", 0x6d),
|
||||
.platform_data = &backlight_data,
|
||||
};
|
||||
|
||||
/* Fixed 2.8V regulators to be used by SDHI0 */
|
||||
static struct regulator_consumer_supply fixed2v8_power_consumers[] =
|
||||
{
|
||||
|
@ -648,15 +615,15 @@ static void __init ag5evm_init(void)
|
|||
gpio_set_value(217, 1);
|
||||
mdelay(100);
|
||||
|
||||
/* LCD backlight controller */
|
||||
gpio_request_one(235, GPIOF_OUT_INIT_LOW, NULL); /* RESET */
|
||||
lcd_backlight_set_brightness(0);
|
||||
|
||||
#ifdef CONFIG_CACHE_L2X0
|
||||
/* Shared attribute override enable, 64K*8way */
|
||||
l2x0_init(IOMEM(0xf0100000), 0x00460000, 0xc2000fff);
|
||||
#endif
|
||||
sh73a0_add_standard_devices();
|
||||
|
||||
i2c_register_board_info(1, &backlight_board_info, 1);
|
||||
|
||||
platform_add_devices(ag5evm_devices, ARRAY_SIZE(ag5evm_devices));
|
||||
}
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@
|
|||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/mtd/sh_flctl.h>
|
||||
#include <linux/pinctrl/machine.h>
|
||||
#include <linux/platform_data/gpio_backlight.h>
|
||||
#include <linux/pm_clock.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
@ -49,7 +50,6 @@
|
|||
#include <linux/tca6416_keypad.h>
|
||||
#include <linux/usb/renesas_usbhs.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include <video/sh_mobile_hdmi.h>
|
||||
#include <video/sh_mobile_lcdc.h>
|
||||
#include <media/sh_mobile_ceu.h>
|
||||
|
@ -346,7 +346,7 @@ static struct platform_device meram_device = {
|
|||
},
|
||||
};
|
||||
|
||||
/* LCDC */
|
||||
/* LCDC and backlight */
|
||||
static struct fb_videomode mackerel_lcdc_modes[] = {
|
||||
{
|
||||
.name = "WVGA Panel",
|
||||
|
@ -362,13 +362,6 @@ static struct fb_videomode mackerel_lcdc_modes[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static int mackerel_set_brightness(int brightness)
|
||||
{
|
||||
gpio_set_value(31, brightness);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct sh_mobile_meram_cfg lcd_meram_cfg = {
|
||||
.icb[0] = {
|
||||
.meram_size = 0x40,
|
||||
|
@ -393,11 +386,6 @@ static struct sh_mobile_lcdc_info lcdc_info = {
|
|||
.width = 152,
|
||||
.height = 91,
|
||||
},
|
||||
.bl_info = {
|
||||
.name = "sh_mobile_lcdc_bl",
|
||||
.max_brightness = 1,
|
||||
.set_brightness = mackerel_set_brightness,
|
||||
},
|
||||
.meram_cfg = &lcd_meram_cfg,
|
||||
}
|
||||
};
|
||||
|
@ -425,6 +413,20 @@ static struct platform_device lcdc_device = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct gpio_backlight_platform_data gpio_backlight_data = {
|
||||
.fbdev = &lcdc_device.dev,
|
||||
.gpio = 31,
|
||||
.def_value = 1,
|
||||
.name = "backlight",
|
||||
};
|
||||
|
||||
static struct platform_device gpio_backlight_device = {
|
||||
.name = "gpio-backlight",
|
||||
.dev = {
|
||||
.platform_data = &gpio_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
/* HDMI */
|
||||
static struct sh_mobile_hdmi_info hdmi_info = {
|
||||
.flags = HDMI_SND_SRC_SPDIF,
|
||||
|
@ -1231,6 +1233,7 @@ static struct platform_device *mackerel_devices[] __initdata = {
|
|||
&nor_flash_device,
|
||||
&smc911x_device,
|
||||
&lcdc_device,
|
||||
&gpio_backlight_device,
|
||||
&usbhs0_device,
|
||||
&usbhs1_device,
|
||||
&leds_device,
|
||||
|
@ -1441,9 +1444,6 @@ static void __init mackerel_init(void)
|
|||
ARRAY_SIZE(mackerel_pinctrl_map));
|
||||
sh7372_pinmux_init();
|
||||
|
||||
/* backlight, off by default */
|
||||
gpio_request_one(31, GPIOF_OUT_INIT_LOW, NULL);
|
||||
|
||||
gpio_request_one(151, GPIOF_OUT_INIT_HIGH, NULL); /* LCDDON */
|
||||
|
||||
/* USBHS0 */
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <linux/spi/mmc_spi.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/input/sh_keysc.h>
|
||||
#include <linux/platform_data/gpio_backlight.h>
|
||||
#include <linux/sh_eth.h>
|
||||
#include <linux/sh_intc.h>
|
||||
#include <linux/videodev2.h>
|
||||
|
@ -303,7 +304,7 @@ static struct platform_device usbhs_device = {
|
|||
.resource = usbhs_resources,
|
||||
};
|
||||
|
||||
/* LCDC */
|
||||
/* LCDC and backlight */
|
||||
static const struct fb_videomode ecovec_lcd_modes[] = {
|
||||
{
|
||||
.name = "Panel",
|
||||
|
@ -334,13 +335,6 @@ static const struct fb_videomode ecovec_dvi_modes[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static int ecovec24_set_brightness(int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_PTR1, brightness);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct sh_mobile_lcdc_info lcdc_info = {
|
||||
.ch[0] = {
|
||||
.interface_type = RGB18,
|
||||
|
@ -350,11 +344,6 @@ static struct sh_mobile_lcdc_info lcdc_info = {
|
|||
.width = 152,
|
||||
.height = 91,
|
||||
},
|
||||
.bl_info = {
|
||||
.name = "sh_mobile_lcdc_bl",
|
||||
.max_brightness = 1,
|
||||
.set_brightness = ecovec24_set_brightness,
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -380,6 +369,20 @@ static struct platform_device lcdc_device = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct gpio_backlight_platform_data gpio_backlight_data = {
|
||||
.fbdev = &lcdc_device.dev,
|
||||
.gpio = GPIO_PTR1,
|
||||
.def_value = 1,
|
||||
.name = "backlight",
|
||||
};
|
||||
|
||||
static struct platform_device gpio_backlight_device = {
|
||||
.name = "gpio-backlight",
|
||||
.dev = {
|
||||
.platform_data = &gpio_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
/* CEU0 */
|
||||
static struct sh_mobile_ceu_info sh_mobile_ceu0_info = {
|
||||
.flags = SH_CEU_FLAG_USE_8BIT_BUS,
|
||||
|
@ -1049,6 +1052,7 @@ static struct platform_device *ecovec_devices[] __initdata = {
|
|||
&usb1_common_device,
|
||||
&usbhs_device,
|
||||
&lcdc_device,
|
||||
&gpio_backlight_device,
|
||||
&ceu0_device,
|
||||
&ceu1_device,
|
||||
&keysc_device,
|
||||
|
@ -1239,11 +1243,9 @@ static int __init arch_setup(void)
|
|||
|
||||
gpio_request(GPIO_PTE6, NULL);
|
||||
gpio_request(GPIO_PTU1, NULL);
|
||||
gpio_request(GPIO_PTR1, NULL);
|
||||
gpio_request(GPIO_PTA2, NULL);
|
||||
gpio_direction_input(GPIO_PTE6);
|
||||
gpio_direction_output(GPIO_PTU1, 0);
|
||||
gpio_direction_output(GPIO_PTR1, 0);
|
||||
gpio_direction_output(GPIO_PTA2, 0);
|
||||
|
||||
/* I/O buffer drive ability is high */
|
||||
|
@ -1256,6 +1258,9 @@ static int __init arch_setup(void)
|
|||
lcdc_info.ch[0].lcd_modes = ecovec_dvi_modes;
|
||||
lcdc_info.ch[0].num_modes = ARRAY_SIZE(ecovec_dvi_modes);
|
||||
|
||||
/* No backlight */
|
||||
gpio_backlight_data.fbdev = NULL;
|
||||
|
||||
gpio_set_value(GPIO_PTA2, 1);
|
||||
gpio_set_value(GPIO_PTU1, 1);
|
||||
} else {
|
||||
|
@ -1265,8 +1270,6 @@ static int __init arch_setup(void)
|
|||
lcdc_info.ch[0].lcd_modes = ecovec_lcd_modes;
|
||||
lcdc_info.ch[0].num_modes = ARRAY_SIZE(ecovec_lcd_modes);
|
||||
|
||||
gpio_set_value(GPIO_PTR1, 1);
|
||||
|
||||
/* FIXME
|
||||
*
|
||||
* LCDDON control is needed for Panel,
|
||||
|
|
|
@ -276,51 +276,3 @@ void kfr2r09_lcd_start(void *sohandle, struct sh_mobile_lcdc_sys_bus_ops *so)
|
|||
{
|
||||
write_memory_start(sohandle, so);
|
||||
}
|
||||
|
||||
#define CTRL_CKSW 0x10
|
||||
#define CTRL_C10 0x20
|
||||
#define CTRL_CPSW 0x80
|
||||
#define MAIN_MLED4 0x40
|
||||
#define MAIN_MSW 0x80
|
||||
|
||||
int kfr2r09_lcd_set_brightness(int brightness)
|
||||
{
|
||||
struct i2c_adapter *a;
|
||||
struct i2c_msg msg;
|
||||
unsigned char buf[2];
|
||||
int ret;
|
||||
|
||||
a = i2c_get_adapter(0);
|
||||
if (!a)
|
||||
return -ENODEV;
|
||||
|
||||
buf[0] = 0x00;
|
||||
if (brightness)
|
||||
buf[1] = CTRL_CPSW | CTRL_C10 | CTRL_CKSW;
|
||||
else
|
||||
buf[1] = 0;
|
||||
|
||||
msg.addr = 0x75;
|
||||
msg.buf = buf;
|
||||
msg.len = 2;
|
||||
msg.flags = 0;
|
||||
ret = i2c_transfer(a, &msg, 1);
|
||||
if (ret != 1)
|
||||
return -ENODEV;
|
||||
|
||||
buf[0] = 0x01;
|
||||
if (brightness)
|
||||
buf[1] = MAIN_MSW | MAIN_MLED4 | 0x0c;
|
||||
else
|
||||
buf[1] = 0;
|
||||
|
||||
msg.addr = 0x75;
|
||||
msg.buf = buf;
|
||||
msg.len = 2;
|
||||
msg.flags = 0;
|
||||
ret = i2c_transfer(a, &msg, 1);
|
||||
if (ret != 1)
|
||||
return -ENODEV;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <linux/input.h>
|
||||
#include <linux/input/sh_keysc.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/platform_data/lv5207lp.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/usb/r8a66597.h>
|
||||
|
@ -159,11 +160,6 @@ static struct sh_mobile_lcdc_info kfr2r09_sh_lcdc_info = {
|
|||
.setup_sys = kfr2r09_lcd_setup,
|
||||
.start_transfer = kfr2r09_lcd_start,
|
||||
},
|
||||
.bl_info = {
|
||||
.name = "sh_mobile_lcdc_bl",
|
||||
.max_brightness = 1,
|
||||
.set_brightness = kfr2r09_lcd_set_brightness,
|
||||
},
|
||||
.sys_bus_cfg = {
|
||||
.ldmt2r = 0x07010904,
|
||||
.ldmt3r = 0x14012914,
|
||||
|
@ -195,6 +191,17 @@ static struct platform_device kfr2r09_sh_lcdc_device = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct lv5207lp_platform_data kfr2r09_backlight_data = {
|
||||
.fbdev = &kfr2r09_sh_lcdc_device.dev,
|
||||
.def_value = 13,
|
||||
.max_value = 13,
|
||||
};
|
||||
|
||||
static struct i2c_board_info kfr2r09_backlight_board_info = {
|
||||
I2C_BOARD_INFO("lv5207lp", 0x75),
|
||||
.platform_data = &kfr2r09_backlight_data,
|
||||
};
|
||||
|
||||
static struct r8a66597_platdata kfr2r09_usb0_gadget_data = {
|
||||
.on_chip = 1,
|
||||
};
|
||||
|
@ -627,6 +634,8 @@ static int __init kfr2r09_devices_setup(void)
|
|||
gpio_request(GPIO_FN_SDHI0CMD, NULL);
|
||||
gpio_request(GPIO_FN_SDHI0CLK, NULL);
|
||||
|
||||
i2c_register_board_info(0, &kfr2r09_backlight_board_info, 1);
|
||||
|
||||
return platform_add_devices(kfr2r09_devices,
|
||||
ARRAY_SIZE(kfr2r09_devices));
|
||||
}
|
||||
|
|
|
@ -4,13 +4,11 @@
|
|||
#include <video/sh_mobile_lcdc.h>
|
||||
|
||||
#if defined(CONFIG_FB_SH_MOBILE_LCDC) || defined(CONFIG_FB_SH_MOBILE_LCDC_MODULE)
|
||||
int kfr2r09_lcd_set_brightness(int brightness);
|
||||
int kfr2r09_lcd_setup(void *sys_ops_handle,
|
||||
struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
|
||||
void kfr2r09_lcd_start(void *sys_ops_handle,
|
||||
struct sh_mobile_lcdc_sys_bus_ops *sys_ops);
|
||||
#else
|
||||
static int kfr2r09_lcd_set_brightness(int brightness) {}
|
||||
static int kfr2r09_lcd_setup(void *sys_ops_handle,
|
||||
struct sh_mobile_lcdc_sys_bus_ops *sys_ops)
|
||||
{
|
||||
|
|
|
@ -425,6 +425,25 @@ config BACKLIGHT_AS3711
|
|||
If you have an Austrian Microsystems AS3711 say Y to enable the
|
||||
backlight driver.
|
||||
|
||||
config BACKLIGHT_GPIO
|
||||
tristate "Generic GPIO based Backlight Driver"
|
||||
depends on GPIOLIB
|
||||
help
|
||||
If you have a LCD backlight adjustable by GPIO, say Y to enable
|
||||
this driver.
|
||||
|
||||
config BACKLIGHT_LV5207LP
|
||||
tristate "Sanyo LV5207LP Backlight"
|
||||
depends on I2C
|
||||
help
|
||||
If you have a Sanyo LV5207LP say Y to enable the backlight driver.
|
||||
|
||||
config BACKLIGHT_BD6107
|
||||
tristate "Rohm BD6107 Backlight"
|
||||
depends on I2C
|
||||
help
|
||||
If you have a Rohm BD6107 say Y to enable the backlight driver.
|
||||
|
||||
endif # BACKLIGHT_CLASS_DEVICE
|
||||
|
||||
endif # BACKLIGHT_LCD_SUPPORT
|
||||
|
|
|
@ -26,12 +26,14 @@ obj-$(CONFIG_BACKLIGHT_ADP8870) += adp8870_bl.o
|
|||
obj-$(CONFIG_BACKLIGHT_APPLE) += apple_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_AS3711) += as3711_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_ATMEL_PWM) += atmel-pwm-bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_BD6107) += bd6107.o
|
||||
obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
|
||||
obj-$(CONFIG_BACKLIGHT_CLASS_DEVICE) += backlight.o
|
||||
obj-$(CONFIG_BACKLIGHT_DA903X) += da903x_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_DA9052) += da9052_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_EP93XX) += ep93xx_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_GENERIC) += generic_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_GPIO) += gpio_backlight.o
|
||||
obj-$(CONFIG_BACKLIGHT_HP680) += hp680_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_HP700) += jornada720_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_LM3533) += lm3533_bl.o
|
||||
|
@ -40,6 +42,7 @@ obj-$(CONFIG_BACKLIGHT_LM3639) += lm3639_bl.o
|
|||
obj-$(CONFIG_BACKLIGHT_LOCOMO) += locomolcd.o
|
||||
obj-$(CONFIG_BACKLIGHT_LP855X) += lp855x_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_LP8788) += lp8788_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_LV5207LP) += lv5207lp.o
|
||||
obj-$(CONFIG_BACKLIGHT_MAX8925) += max8925_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_OMAP1) += omap1_bl.o
|
||||
obj-$(CONFIG_BACKLIGHT_OT200) += ot200_bl.o
|
||||
|
|
|
@ -0,0 +1,213 @@
|
|||
/*
|
||||
* ROHM Semiconductor BD6107 LED Driver
|
||||
*
|
||||
* Copyright (C) 2013 Ideas on board SPRL
|
||||
*
|
||||
* Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_data/bd6107.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define BD6107_PSCNT1 0x00
|
||||
#define BD6107_PSCNT1_PSCNTREG2 (1 << 2)
|
||||
#define BD6107_PSCNT1_PSCNTREG1 (1 << 0)
|
||||
#define BD6107_REGVSET 0x02
|
||||
#define BD6107_REGVSET_REG1VSET_2_85V (1 << 2)
|
||||
#define BD6107_REGVSET_REG1VSET_2_80V (0 << 2)
|
||||
#define BD6107_LEDCNT1 0x03
|
||||
#define BD6107_LEDCNT1_LEDONOFF2 (1 << 1)
|
||||
#define BD6107_LEDCNT1_LEDONOFF1 (1 << 0)
|
||||
#define BD6107_PORTSEL 0x04
|
||||
#define BD6107_PORTSEL_LEDM(n) (1 << (n))
|
||||
#define BD6107_RGB1CNT1 0x05
|
||||
#define BD6107_RGB1CNT2 0x06
|
||||
#define BD6107_RGB1CNT3 0x07
|
||||
#define BD6107_RGB1CNT4 0x08
|
||||
#define BD6107_RGB1CNT5 0x09
|
||||
#define BD6107_RGB1FLM 0x0a
|
||||
#define BD6107_RGB2CNT1 0x0b
|
||||
#define BD6107_RGB2CNT2 0x0c
|
||||
#define BD6107_RGB2CNT3 0x0d
|
||||
#define BD6107_RGB2CNT4 0x0e
|
||||
#define BD6107_RGB2CNT5 0x0f
|
||||
#define BD6107_RGB2FLM 0x10
|
||||
#define BD6107_PSCONT3 0x11
|
||||
#define BD6107_SMMONCNT 0x12
|
||||
#define BD6107_DCDCCNT 0x13
|
||||
#define BD6107_IOSEL 0x14
|
||||
#define BD6107_OUT1 0x15
|
||||
#define BD6107_OUT2 0x16
|
||||
#define BD6107_MASK1 0x17
|
||||
#define BD6107_MASK2 0x18
|
||||
#define BD6107_FACTOR1 0x19
|
||||
#define BD6107_FACTOR2 0x1a
|
||||
#define BD6107_CLRFACT1 0x1b
|
||||
#define BD6107_CLRFACT2 0x1c
|
||||
#define BD6107_STATE1 0x1d
|
||||
#define BD6107_LSIVER 0x1e
|
||||
#define BD6107_GRPSEL 0x1f
|
||||
#define BD6107_LEDCNT2 0x20
|
||||
#define BD6107_LEDCNT3 0x21
|
||||
#define BD6107_MCURRENT 0x22
|
||||
#define BD6107_MAINCNT1 0x23
|
||||
#define BD6107_MAINCNT2 0x24
|
||||
#define BD6107_SLOPECNT 0x25
|
||||
#define BD6107_MSLOPE 0x26
|
||||
#define BD6107_RGBSLOPE 0x27
|
||||
#define BD6107_TEST 0x29
|
||||
#define BD6107_SFTRST 0x2a
|
||||
#define BD6107_SFTRSTGD 0x2b
|
||||
|
||||
struct bd6107 {
|
||||
struct i2c_client *client;
|
||||
struct backlight_device *backlight;
|
||||
struct bd6107_platform_data *pdata;
|
||||
};
|
||||
|
||||
static int bd6107_write(struct bd6107 *bd, u8 reg, u8 data)
|
||||
{
|
||||
return i2c_smbus_write_byte_data(bd->client, reg, data);
|
||||
}
|
||||
|
||||
static int bd6107_backlight_update_status(struct backlight_device *backlight)
|
||||
{
|
||||
struct bd6107 *bd = bl_get_data(backlight);
|
||||
int brightness = backlight->props.brightness;
|
||||
|
||||
if (backlight->props.power != FB_BLANK_UNBLANK ||
|
||||
backlight->props.fb_blank != FB_BLANK_UNBLANK ||
|
||||
backlight->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK))
|
||||
brightness = 0;
|
||||
|
||||
if (brightness) {
|
||||
bd6107_write(bd, BD6107_PORTSEL, BD6107_PORTSEL_LEDM(2) |
|
||||
BD6107_PORTSEL_LEDM(1) | BD6107_PORTSEL_LEDM(0));
|
||||
bd6107_write(bd, BD6107_MAINCNT1, brightness);
|
||||
bd6107_write(bd, BD6107_LEDCNT1, BD6107_LEDCNT1_LEDONOFF1);
|
||||
} else {
|
||||
gpio_set_value(bd->pdata->reset, 0);
|
||||
msleep(24);
|
||||
gpio_set_value(bd->pdata->reset, 1);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bd6107_backlight_get_brightness(struct backlight_device *backlight)
|
||||
{
|
||||
return backlight->props.brightness;
|
||||
}
|
||||
|
||||
static int bd6107_backlight_check_fb(struct backlight_device *backlight,
|
||||
struct fb_info *info)
|
||||
{
|
||||
struct bd6107 *bd = bl_get_data(backlight);
|
||||
|
||||
return bd->pdata->fbdev == NULL || bd->pdata->fbdev == info->dev;
|
||||
}
|
||||
|
||||
static const struct backlight_ops bd6107_backlight_ops = {
|
||||
.options = BL_CORE_SUSPENDRESUME,
|
||||
.update_status = bd6107_backlight_update_status,
|
||||
.get_brightness = bd6107_backlight_get_brightness,
|
||||
.check_fb = bd6107_backlight_check_fb,
|
||||
};
|
||||
|
||||
static int bd6107_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
struct bd6107_platform_data *pdata = client->dev.platform_data;
|
||||
struct backlight_device *backlight;
|
||||
struct backlight_properties props;
|
||||
struct bd6107 *bd;
|
||||
int ret;
|
||||
|
||||
if (pdata == NULL || !pdata->reset) {
|
||||
dev_err(&client->dev, "No reset GPIO in platform data\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!i2c_check_functionality(client->adapter,
|
||||
I2C_FUNC_SMBUS_BYTE_DATA)) {
|
||||
dev_warn(&client->dev,
|
||||
"I2C adapter doesn't support I2C_FUNC_SMBUS_BYTE\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
bd = devm_kzalloc(&client->dev, sizeof(*bd), GFP_KERNEL);
|
||||
if (!bd)
|
||||
return -ENOMEM;
|
||||
|
||||
bd->client = client;
|
||||
bd->pdata = pdata;
|
||||
|
||||
ret = devm_gpio_request_one(&client->dev, pdata->reset,
|
||||
GPIOF_DIR_OUT | GPIOF_INIT_LOW, "reset");
|
||||
if (ret < 0) {
|
||||
dev_err(&client->dev, "unable to request reset GPIO\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
memset(&props, 0, sizeof(props));
|
||||
props.type = BACKLIGHT_RAW;
|
||||
props.max_brightness = 128;
|
||||
props.brightness = clamp_t(unsigned int, pdata->def_value, 0,
|
||||
props.max_brightness);
|
||||
|
||||
backlight = backlight_device_register(dev_name(&client->dev),
|
||||
&bd->client->dev, bd,
|
||||
&bd6107_backlight_ops, &props);
|
||||
if (IS_ERR(backlight)) {
|
||||
dev_err(&client->dev, "failed to register backlight\n");
|
||||
return PTR_ERR(backlight);
|
||||
}
|
||||
|
||||
backlight_update_status(backlight);
|
||||
i2c_set_clientdata(client, backlight);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bd6107_remove(struct i2c_client *client)
|
||||
{
|
||||
struct backlight_device *backlight = i2c_get_clientdata(client);
|
||||
|
||||
backlight->props.brightness = 0;
|
||||
backlight_update_status(backlight);
|
||||
backlight_device_unregister(backlight);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct i2c_device_id bd6107_ids[] = {
|
||||
{ "bd6107", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, bd6107_ids);
|
||||
|
||||
static struct i2c_driver bd6107_driver = {
|
||||
.driver = {
|
||||
.name = "bd6107",
|
||||
},
|
||||
.probe = bd6107_probe,
|
||||
.remove = bd6107_remove,
|
||||
.id_table = bd6107_ids,
|
||||
};
|
||||
|
||||
module_i2c_driver(bd6107_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Rohm BD6107 Backlight Driver");
|
||||
MODULE_AUTHOR("Laurent Pinchart <laurent.pinchart@ideasonboard.com>");
|
||||
MODULE_LICENSE("GPL");
|
|
@ -0,0 +1,133 @@
|
|||
/*
|
||||
* gpio_backlight.c - Simple GPIO-controlled backlight
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_data/gpio_backlight.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
struct gpio_backlight {
|
||||
struct device *dev;
|
||||
struct device *fbdev;
|
||||
|
||||
int gpio;
|
||||
int active;
|
||||
};
|
||||
|
||||
static int gpio_backlight_update_status(struct backlight_device *bl)
|
||||
{
|
||||
struct gpio_backlight *gbl = bl_get_data(bl);
|
||||
int brightness = bl->props.brightness;
|
||||
|
||||
if (bl->props.power != FB_BLANK_UNBLANK ||
|
||||
bl->props.fb_blank != FB_BLANK_UNBLANK ||
|
||||
bl->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK))
|
||||
brightness = 0;
|
||||
|
||||
gpio_set_value(gbl->gpio, brightness ? gbl->active : !gbl->active);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gpio_backlight_get_brightness(struct backlight_device *bl)
|
||||
{
|
||||
return bl->props.brightness;
|
||||
}
|
||||
|
||||
static int gpio_backlight_check_fb(struct backlight_device *bl,
|
||||
struct fb_info *info)
|
||||
{
|
||||
struct gpio_backlight *gbl = bl_get_data(bl);
|
||||
|
||||
return gbl->fbdev == NULL || gbl->fbdev == info->dev;
|
||||
}
|
||||
|
||||
static const struct backlight_ops gpio_backlight_ops = {
|
||||
.options = BL_CORE_SUSPENDRESUME,
|
||||
.update_status = gpio_backlight_update_status,
|
||||
.get_brightness = gpio_backlight_get_brightness,
|
||||
.check_fb = gpio_backlight_check_fb,
|
||||
};
|
||||
|
||||
static int gpio_backlight_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct gpio_backlight_platform_data *pdata = pdev->dev.platform_data;
|
||||
struct backlight_properties props;
|
||||
struct backlight_device *bl;
|
||||
struct gpio_backlight *gbl;
|
||||
int ret;
|
||||
|
||||
if (!pdata) {
|
||||
dev_err(&pdev->dev, "failed to find platform data\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
gbl = devm_kzalloc(&pdev->dev, sizeof(*gbl), GFP_KERNEL);
|
||||
if (gbl == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
gbl->dev = &pdev->dev;
|
||||
gbl->fbdev = pdata->fbdev;
|
||||
gbl->gpio = pdata->gpio;
|
||||
gbl->active = pdata->active_low ? 0 : 1;
|
||||
|
||||
ret = devm_gpio_request_one(gbl->dev, gbl->gpio, GPIOF_DIR_OUT |
|
||||
(gbl->active ? GPIOF_INIT_LOW
|
||||
: GPIOF_INIT_HIGH),
|
||||
pdata->name);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "unable to request GPIO\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
memset(&props, 0, sizeof(props));
|
||||
props.type = BACKLIGHT_RAW;
|
||||
props.max_brightness = 1;
|
||||
bl = backlight_device_register(dev_name(&pdev->dev), &pdev->dev, gbl,
|
||||
&gpio_backlight_ops, &props);
|
||||
if (IS_ERR(bl)) {
|
||||
dev_err(&pdev->dev, "failed to register backlight\n");
|
||||
return PTR_ERR(bl);
|
||||
}
|
||||
|
||||
bl->props.brightness = pdata->def_value;
|
||||
backlight_update_status(bl);
|
||||
|
||||
platform_set_drvdata(pdev, bl);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int gpio_backlight_remove(struct platform_device *pdev)
|
||||
{
|
||||
struct backlight_device *bl = platform_get_drvdata(pdev);
|
||||
|
||||
backlight_device_unregister(bl);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver gpio_backlight_driver = {
|
||||
.driver = {
|
||||
.name = "gpio-backlight",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = gpio_backlight_probe,
|
||||
.remove = gpio_backlight_remove,
|
||||
};
|
||||
|
||||
module_platform_driver(gpio_backlight_driver);
|
||||
|
||||
MODULE_AUTHOR("Laurent Pinchart <laurent.pinchart@ideasonboard.com>");
|
||||
MODULE_DESCRIPTION("GPIO-based Backlight Driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:gpio-backlight");
|
|
@ -0,0 +1,171 @@
|
|||
/*
|
||||
* Sanyo LV5207LP LED Driver
|
||||
*
|
||||
* Copyright (C) 2013 Ideas on board SPRL
|
||||
*
|
||||
* Contact: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/backlight.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/platform_data/lv5207lp.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define LV5207LP_CTRL1 0x00
|
||||
#define LV5207LP_CPSW (1 << 7)
|
||||
#define LV5207LP_SCTEN (1 << 6)
|
||||
#define LV5207LP_C10 (1 << 5)
|
||||
#define LV5207LP_CKSW (1 << 4)
|
||||
#define LV5207LP_RSW (1 << 3)
|
||||
#define LV5207LP_GSW (1 << 2)
|
||||
#define LV5207LP_BSW (1 << 1)
|
||||
#define LV5207LP_CTRL2 0x01
|
||||
#define LV5207LP_MSW (1 << 7)
|
||||
#define LV5207LP_MLED4 (1 << 6)
|
||||
#define LV5207LP_RED 0x02
|
||||
#define LV5207LP_GREEN 0x03
|
||||
#define LV5207LP_BLUE 0x04
|
||||
|
||||
#define LV5207LP_MAX_BRIGHTNESS 32
|
||||
|
||||
struct lv5207lp {
|
||||
struct i2c_client *client;
|
||||
struct backlight_device *backlight;
|
||||
struct lv5207lp_platform_data *pdata;
|
||||
};
|
||||
|
||||
static int lv5207lp_write(struct lv5207lp *lv, u8 reg, u8 data)
|
||||
{
|
||||
return i2c_smbus_write_byte_data(lv->client, reg, data);
|
||||
}
|
||||
|
||||
static int lv5207lp_backlight_update_status(struct backlight_device *backlight)
|
||||
{
|
||||
struct lv5207lp *lv = bl_get_data(backlight);
|
||||
int brightness = backlight->props.brightness;
|
||||
|
||||
if (backlight->props.power != FB_BLANK_UNBLANK ||
|
||||
backlight->props.fb_blank != FB_BLANK_UNBLANK ||
|
||||
backlight->props.state & (BL_CORE_SUSPENDED | BL_CORE_FBBLANK))
|
||||
brightness = 0;
|
||||
|
||||
if (brightness) {
|
||||
lv5207lp_write(lv, LV5207LP_CTRL1,
|
||||
LV5207LP_CPSW | LV5207LP_C10 | LV5207LP_CKSW);
|
||||
lv5207lp_write(lv, LV5207LP_CTRL2,
|
||||
LV5207LP_MSW | LV5207LP_MLED4 |
|
||||
(brightness - 1));
|
||||
} else {
|
||||
lv5207lp_write(lv, LV5207LP_CTRL1, 0);
|
||||
lv5207lp_write(lv, LV5207LP_CTRL2, 0);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lv5207lp_backlight_get_brightness(struct backlight_device *backlight)
|
||||
{
|
||||
return backlight->props.brightness;
|
||||
}
|
||||
|
||||
static int lv5207lp_backlight_check_fb(struct backlight_device *backlight,
|
||||
struct fb_info *info)
|
||||
{
|
||||
struct lv5207lp *lv = bl_get_data(backlight);
|
||||
|
||||
return lv->pdata->fbdev == NULL || lv->pdata->fbdev == info->dev;
|
||||
}
|
||||
|
||||
static const struct backlight_ops lv5207lp_backlight_ops = {
|
||||
.options = BL_CORE_SUSPENDRESUME,
|
||||
.update_status = lv5207lp_backlight_update_status,
|
||||
.get_brightness = lv5207lp_backlight_get_brightness,
|
||||
.check_fb = lv5207lp_backlight_check_fb,
|
||||
};
|
||||
|
||||
static int lv5207lp_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
struct lv5207lp_platform_data *pdata = client->dev.platform_data;
|
||||
struct backlight_device *backlight;
|
||||
struct backlight_properties props;
|
||||
struct lv5207lp *lv;
|
||||
|
||||
if (pdata == NULL) {
|
||||
dev_err(&client->dev, "No platform data supplied\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
if (!i2c_check_functionality(client->adapter,
|
||||
I2C_FUNC_SMBUS_BYTE_DATA)) {
|
||||
dev_warn(&client->dev,
|
||||
"I2C adapter doesn't support I2C_FUNC_SMBUS_BYTE\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
lv = devm_kzalloc(&client->dev, sizeof(*lv), GFP_KERNEL);
|
||||
if (!lv)
|
||||
return -ENOMEM;
|
||||
|
||||
lv->client = client;
|
||||
lv->pdata = pdata;
|
||||
|
||||
memset(&props, 0, sizeof(props));
|
||||
props.type = BACKLIGHT_RAW;
|
||||
props.max_brightness = min_t(unsigned int, pdata->max_value,
|
||||
LV5207LP_MAX_BRIGHTNESS);
|
||||
props.brightness = clamp_t(unsigned int, pdata->def_value, 0,
|
||||
props.max_brightness);
|
||||
|
||||
backlight = backlight_device_register(dev_name(&client->dev),
|
||||
&lv->client->dev, lv,
|
||||
&lv5207lp_backlight_ops, &props);
|
||||
if (IS_ERR(backlight)) {
|
||||
dev_err(&client->dev, "failed to register backlight\n");
|
||||
return PTR_ERR(backlight);
|
||||
}
|
||||
|
||||
backlight_update_status(backlight);
|
||||
i2c_set_clientdata(client, backlight);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int lv5207lp_remove(struct i2c_client *client)
|
||||
{
|
||||
struct backlight_device *backlight = i2c_get_clientdata(client);
|
||||
|
||||
backlight->props.brightness = 0;
|
||||
backlight_update_status(backlight);
|
||||
backlight_device_unregister(backlight);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct i2c_device_id lv5207lp_ids[] = {
|
||||
{ "lv5207lp", 0 },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, lv5207lp_ids);
|
||||
|
||||
static struct i2c_driver lv5207lp_driver = {
|
||||
.driver = {
|
||||
.name = "lv5207lp",
|
||||
},
|
||||
.probe = lv5207lp_probe,
|
||||
.remove = lv5207lp_remove,
|
||||
.id_table = lv5207lp_ids,
|
||||
};
|
||||
|
||||
module_i2c_driver(lv5207lp_driver);
|
||||
|
||||
MODULE_DESCRIPTION("Sanyo LV5207LP Backlight Driver");
|
||||
MODULE_AUTHOR("Laurent Pinchart <laurent.pinchart@ideasonboard.com>");
|
||||
MODULE_LICENSE("GPL");
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* bd6107.h - Rohm BD6107 LEDs Driver
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef __BD6107_H__
|
||||
#define __BD6107_H__
|
||||
|
||||
struct device;
|
||||
|
||||
struct bd6107_platform_data {
|
||||
struct device *fbdev;
|
||||
int reset; /* Reset GPIO */
|
||||
unsigned int def_value;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* gpio_backlight.h - Simple GPIO-controlled backlight
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef __GPIO_BACKLIGHT_H__
|
||||
#define __GPIO_BACKLIGHT_H__
|
||||
|
||||
struct device;
|
||||
|
||||
struct gpio_backlight_platform_data {
|
||||
struct device *fbdev;
|
||||
int gpio;
|
||||
int def_value;
|
||||
bool active_low;
|
||||
const char *name;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -0,0 +1,19 @@
|
|||
/*
|
||||
* lv5207lp.h - Sanyo LV5207LP LEDs Driver
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef __LV5207LP_H__
|
||||
#define __LV5207LP_H__
|
||||
|
||||
struct device;
|
||||
|
||||
struct lv5207lp_platform_data {
|
||||
struct device *fbdev;
|
||||
unsigned int max_value;
|
||||
unsigned int def_value;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in New Issue