aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/mach-s3c2440
diff options
context:
space:
mode:
authorBalaji Rao <balajirrao@openmoko.org>2008-11-20 19:46:50 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-20 19:46:50 +0000
commit1552c51b244b71d57b73edef14047682e70717ca (patch)
tree82486a8b9b63d502e89c9f7f0998912840a63eb8 /arch/arm/mach-s3c2440
parent058c3e475847a1f2b59400a49d176eb8cfc8109e (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.c60
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 = &gta02_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(&gta02_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[] = {