From f34cd80f638a6ca3b336f6ebd14cd958974b2760 Mon Sep 17 00:00:00 2001 From: Mark Arigo Date: Wed, 18 Feb 2009 02:19:22 +0000 Subject: Backlight brightness and button lights for the Philips HDD1630 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20035 a1c6a512-1295-4272-9138-f99709370657 --- .../target/arm/philips/hdd1630/backlight-hdd1630.c | 59 ++++++++++++++++++++-- 1 file changed, 54 insertions(+), 5 deletions(-) (limited to 'firmware/target/arm/philips/hdd1630/backlight-hdd1630.c') diff --git a/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c b/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c index eb2c2731ac..eafce13759 100755 --- a/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c +++ b/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c @@ -21,35 +21,84 @@ #include "config.h" #include "backlight-target.h" #include "system.h" -#include "lcd.h" #include "backlight.h" +#include "synaptics-mep.h" #ifdef HAVE_BACKLIGHT_BRIGHTNESS -static unsigned short backlight_brightness = DEFAULT_BRIGHTNESS_SETTING; +static const int brightness_vals[16] = + {255,237,219,201,183,165,147,130,112,94,76,58,40,22,5,0}; void _backlight_set_brightness(int brightness) { + outl(0x80000000 | (brightness_vals[brightness-1] << 16), 0x7000a000); } #endif void _backlight_on(void) { - GPO32_VAL &= ~0x1000000; + GPO32_VAL &= ~0x1000000; GPO32_ENABLE &= ~0x1000000; } void _backlight_off(void) { - GPO32_VAL |= 0x1000000; + GPO32_VAL |= 0x1000000; GPO32_ENABLE |= 0x1000000; } #ifdef HAVE_BUTTON_LIGHT -void _buttonlight_on(void) + +#define BUTTONLIGHT_MASK 0x7f + +static unsigned short buttonight_brightness = DEFAULT_BRIGHTNESS_SETTING - 1; +static unsigned short buttonlight_status = 0; + +static void set_buttonlight(int brightness) { + int data[6]; + + if (syn_get_status()) + { + syn_int_enable(false); + + /* turn on all touchpad leds */ + data[0] = 0x05; + data[1] = 0x31; + data[2] = (brightness & 0xff) << 4; + data[3] = 0x00; + data[4] = 0x00; + data[5] = BUTTONLIGHT_MASK; + syn_send(data, 6); + + /* device responds with a single-byte ACK packet */ + syn_read(data, 2); + + syn_int_enable(true); + } } +void _buttonlight_on(void) +{ + if (!buttonlight_status) + { + set_buttonlight(buttonight_brightness); + buttonlight_status = 1; + } +} + void _buttonlight_off(void) { + if (buttonlight_status) + { + set_buttonlight(0); + buttonlight_status = 0; + } +} + +void _buttonlight_set_brightness(int brightness) +{ + buttonight_brightness = brightness - 1; + set_buttonlight(buttonight_brightness); + buttonlight_status = 1; } #endif -- cgit