diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-09 13:55:13 -0800 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-09 13:55:13 -0800 |
| commit | b64dc5a4842c3420d7a093bf5e8979c57ceb789c (patch) | |
| tree | 48978026f68d6153716df66d77d4eccfadf5e2ee /drivers/video/backlight/tosa_lcd.c | |
| parent | 73d59314e6ed268d6f322ae1bdd723b23fa5a4ed (diff) | |
| parent | d00ba726725c6f41e43df00f83e484ba8f9fac5c (diff) | |
Merge branch 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight
* 'for-linus' of git://git.o-hand.com/linux-rpurdie-backlight:
backlight: Rename the corgi backlight driver to generic
backlight: add support for Toppoly TDO35S series to tdo24m lcd driver
backlight: Add suspend/resume support to the backlight core
bd->props.brightness doesn't reflect the actual backlight level.
backlight: Support VGA/QVGA mode switching in tosa_lcd
backlight: Catch invalid input in sysfs attributes
backlight: Value of ILI9320_RGB_IF2 register should not be hardcoded
backlight: crbllcd_bl - Use platform_device_register_simple()
backlight: progear_bl - Use platform_device_register_simple()
backlight: hp680_bl - Use platform_device_register_simple()
Diffstat (limited to 'drivers/video/backlight/tosa_lcd.c')
| -rw-r--r-- | drivers/video/backlight/tosa_lcd.c | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/drivers/video/backlight/tosa_lcd.c b/drivers/video/backlight/tosa_lcd.c index 57a26649f1a..b7fbc75a62f 100644 --- a/drivers/video/backlight/tosa_lcd.c +++ b/drivers/video/backlight/tosa_lcd.c @@ -39,6 +39,7 @@ struct tosa_lcd_data { struct i2c_client *i2c; int lcd_power; + bool is_vga; }; static int tosa_tg_send(struct spi_device *spi, int adrs, uint8_t data) @@ -81,8 +82,12 @@ static void tosa_lcd_tg_init(struct tosa_lcd_data *data) static void tosa_lcd_tg_on(struct tosa_lcd_data *data) { struct spi_device *spi = data->spi; - const int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR; - tosa_tg_send(spi, TG_PNLCTL, value | TG_REG0_VQV); /* this depends on mode */ + int value = TG_REG0_COLOR | TG_REG0_UD | TG_REG0_LR; + + if (data->is_vga) + value |= TG_REG0_VQV; + + tosa_tg_send(spi, TG_PNLCTL, value); /* TG LCD pannel power up */ tosa_tg_send(spi, TG_PINICTL,0x4); @@ -142,9 +147,25 @@ static int tosa_lcd_get_power(struct lcd_device *lcd) return data->lcd_power; } +static int tosa_lcd_set_mode(struct lcd_device *lcd, struct fb_videomode *mode) +{ + struct tosa_lcd_data *data = lcd_get_data(lcd); + + if (mode->xres == 320 || mode->yres == 320) + data->is_vga = false; + else + data->is_vga = true; + + if (POWER_IS_ON(data->lcd_power)) + tosa_lcd_tg_on(data); + + return 0; +} + static struct lcd_ops tosa_lcd_ops = { .set_power = tosa_lcd_set_power, .get_power = tosa_lcd_get_power, + .set_mode = tosa_lcd_set_mode, }; static int __devinit tosa_lcd_probe(struct spi_device *spi) @@ -156,6 +177,8 @@ static int __devinit tosa_lcd_probe(struct spi_device *spi) if (!data) return -ENOMEM; + data->is_vga = true; /* defaut to VGA mode */ + /* * bits_per_word cannot be configured in platform data */ |
