diff options
author | Balaji Rao <balajirrao@openmoko.org> | 2008-11-20 19:46:50 +0000 |
---|---|---|
committer | Andy Green <agreen@pads.home.warmcat.com> | 2008-11-20 19:46:50 +0000 |
commit | 1552c51b244b71d57b73edef14047682e70717ca (patch) | |
tree | 82486a8b9b63d502e89c9f7f0998912840a63eb8 /arch/arm/mach-s3c2440 | |
parent | 058c3e475847a1f2b59400a49d176eb8cfc8109e (diff) |
pcf50633-backlight.patch
Move backlight support out of pcf50633 driver. backlight
support now uses corgibl aka generic backlight support.
Set
CONFIG_BACKLIGHT_CORGI=y to use it.
Diffstat (limited to 'arch/arm/mach-s3c2440')
-rw-r--r-- | arch/arm/mach-s3c2440/mach-gta02.c | 60 |
1 files changed, 50 insertions, 10 deletions
diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c index 96f4502b2b2..a0cebaec1b9 100644 --- a/arch/arm/mach-s3c2440/mach-gta02.c +++ b/arch/arm/mach-s3c2440/mach-gta02.c @@ -46,7 +46,7 @@ #include <linux/mtd/physmap.h> #include <linux/i2c.h> - +#include <linux/backlight.h> #include <linux/regulator/machine.h> #include <linux/pcf50633.h> @@ -683,8 +683,6 @@ struct pcf50633_platform_data gta02_pcf_pdata = { }, }, }, - .defer_resume_backlight = 1, - .resume_backlight_ramp_speed = 5, .attach_child_devices = gta02_pcf50633_attach_child_devices, .regulator_registered = gta02_pcf50633_regulator_registered, @@ -984,24 +982,66 @@ static struct s3c2410_ts_mach_info gta02_ts_cfg = { }, }; +/* Backlight control */ + +static void gta02_bl_set_intensity(int intensity) +{ + struct pcf50633_data *pcf = gta02_pcf_pdata.pcf; + + int old_intensity = pcf50633_reg_read(pcf, PCF50633_REG_LEDOUT); + int ret; + + if (!(pcf50633_reg_read(pcf, PCF50633_REG_LEDENA) & 3)) + old_intensity = 0; + + /* + * The PCF50633 cannot handle LEDOUT = 0 (datasheet p60) + * if seen, you have to re-enable the LED unit + */ + if (!intensity || !old_intensity) + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 0); + + if (!intensity) /* illegal to set LEDOUT to 0 */ + ret = pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, 2); + else + ret = pcf50633_reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, + intensity); + + if (intensity) + pcf50633_reg_write(pcf, PCF50633_REG_LEDENA, 2); +} + +static struct generic_bl_info gta02_bl_info = { + .name = "gta02-bl", + .max_intensity = 0xff, + .default_intensity = 0xff, + .set_bl_intensity = gta02_bl_set_intensity, +}; + +static struct platform_device gta02_bl_dev = { + .name = "generic-bl", + .id = 1, + .dev = { + .platform_data = >a02_bl_info, + }, +}; + /* SPI: LCM control interface attached to Glamo3362 */ static void gta02_jbt6k74_reset(int devidx, int level) { glamo_lcm_reset(level); -} +} -/* finally bring up deferred backlight resume now LCM is resumed itself */ - -static void gta02_jbt6k74_resuming(int devidx) +static void gta02_jbt6k74_probe_completed(struct device *dev) { - pcf50633_backlight_resume(gta02_pcf_pdata.pcf); + gta02_bl_dev.dev.parent = dev; + platform_device_register(>a02_bl_dev); } - const struct jbt6k74_platform_data jbt6k74_pdata = { .reset = gta02_jbt6k74_reset, - .resuming = gta02_jbt6k74_resuming, + .probe_completed = gta02_jbt6k74_probe_completed, }; static struct spi_board_info gta02_spi_board_info[] = { |