From ef12b3b5c678e4fa44d60061b0c1bc312e589ba1 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Mon, 12 Nov 2007 18:49:53 +0000 Subject: Hardware controlled backlight brightness for iPod Video and Nano, retaining the software PWM fade in/ fade out. * Backlight handling cleanup, getting rid of one layer of 'lowlevelness'. * Use atomic GPIO bit manipulation for PP502x backlight handling. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15599 a1c6a512-1295-4272-9138-f99709370657 --- firmware/target/coldfire/iaudio/m5/backlight-m5.c | 12 ++++---- .../target/coldfire/iaudio/m5/backlight-target.h | 10 +++---- .../target/coldfire/iaudio/x5/backlight-target.h | 12 ++++---- firmware/target/coldfire/iaudio/x5/backlight-x5.c | 25 +++++++++++----- firmware/target/coldfire/iriver/backlight-target.h | 31 ------------------- .../target/coldfire/iriver/h100/backlight-h100.c | 10 +++---- .../target/coldfire/iriver/h100/backlight-target.h | 35 ++++++++++++++++++++++ .../target/coldfire/iriver/h300/backlight-h300.c | 12 ++++---- .../target/coldfire/iriver/h300/backlight-target.h | 29 ++++++++++++++++++ 9 files changed, 109 insertions(+), 67 deletions(-) delete mode 100644 firmware/target/coldfire/iriver/backlight-target.h create mode 100644 firmware/target/coldfire/iriver/h100/backlight-target.h create mode 100644 firmware/target/coldfire/iriver/h300/backlight-target.h (limited to 'firmware/target/coldfire') diff --git a/firmware/target/coldfire/iaudio/m5/backlight-m5.c b/firmware/target/coldfire/iaudio/m5/backlight-m5.c index 63bc5bc30e..19bc5bfcae 100644 --- a/firmware/target/coldfire/iaudio/m5/backlight-m5.c +++ b/firmware/target/coldfire/iaudio/m5/backlight-m5.c @@ -24,14 +24,14 @@ #include "pcf50606.h" #include "lcd.h" -bool __backlight_init(void) +bool _backlight_init(void) { - __backlight_on(); + _backlight_on(); return true; /* Backlight always ON after boot. */ } -void __backlight_on(void) +void _backlight_on(void) { int level = set_irq_level(HIGHEST_IRQ_LEVEL); @@ -39,7 +39,7 @@ void __backlight_on(void) set_irq_level(level); } -void __backlight_off(void) +void _backlight_off(void) { int level = set_irq_level(HIGHEST_IRQ_LEVEL); @@ -47,12 +47,12 @@ void __backlight_off(void) set_irq_level(level); } -void __remote_backlight_on(void) +void _remote_backlight_on(void) { and_l(~0x00200000, &GPIO_OUT); } -void __remote_backlight_off(void) +void _remote_backlight_off(void) { or_l(0x00200000, &GPIO_OUT); } diff --git a/firmware/target/coldfire/iaudio/m5/backlight-target.h b/firmware/target/coldfire/iaudio/m5/backlight-target.h index 824810baa1..a5932d32db 100644 --- a/firmware/target/coldfire/iaudio/m5/backlight-target.h +++ b/firmware/target/coldfire/iaudio/m5/backlight-target.h @@ -19,10 +19,10 @@ #ifndef BACKLIGHT_TARGET_H #define BACKLIGHT_TARGET_H -bool __backlight_init(void); -void __backlight_on(void); -void __backlight_off(void); -void __remote_backlight_on(void); -void __remote_backlight_off(void); +bool _backlight_init(void); +void _backlight_on(void); +void _backlight_off(void); +void _remote_backlight_on(void); +void _remote_backlight_off(void); #endif diff --git a/firmware/target/coldfire/iaudio/x5/backlight-target.h b/firmware/target/coldfire/iaudio/x5/backlight-target.h index 6e03aaa76f..8b50638f85 100644 --- a/firmware/target/coldfire/iaudio/x5/backlight-target.h +++ b/firmware/target/coldfire/iaudio/x5/backlight-target.h @@ -19,11 +19,11 @@ #ifndef BACKLIGHT_TARGET_H #define BACKLIGHT_TARGET_H -bool __backlight_init(void); -void __backlight_on(void); -void __backlight_off(void); -void __backlight_set_brightness(int val); -void __remote_backlight_on(void); -void __remote_backlight_off(void); +bool _backlight_init(void); +void _backlight_on(void); +void _backlight_off(void); +void _backlight_set_brightness(int val); +void _remote_backlight_on(void); +void _remote_backlight_off(void); #endif diff --git a/firmware/target/coldfire/iaudio/x5/backlight-x5.c b/firmware/target/coldfire/iaudio/x5/backlight-x5.c index a2682ff1ae..667f4e7278 100644 --- a/firmware/target/coldfire/iaudio/x5/backlight-x5.c +++ b/firmware/target/coldfire/iaudio/x5/backlight-x5.c @@ -24,33 +24,42 @@ #include "pcf50606.h" #include "lcd.h" -bool __backlight_init(void) +bool _backlight_init(void) { - __backlight_set_brightness(DEFAULT_BRIGHTNESS_SETTING); - __backlight_on(); + _backlight_set_brightness(DEFAULT_BRIGHTNESS_SETTING); + _backlight_on(); return true; /* Backlight always ON after boot. */ } -void __backlight_on(void) +void _backlight_on(void) { int level; lcd_enable(true); + _lcd_sleep_timer = 0; /* LCD should be awake already */ level = set_irq_level(HIGHEST_IRQ_LEVEL); pcf50606_write(0x38, 0xb0); /* Backlight ON, GPO1INV=1, GPO1ACT=011 */ set_irq_level(level); } -void __backlight_off(void) +void _backlight_off(void) { int level = set_irq_level(HIGHEST_IRQ_LEVEL); pcf50606_write(0x38, 0x80); /* Backlight OFF, GPO1INV=1, GPO1ACT=000 */ set_irq_level(level); lcd_enable(false); + /* Start LCD sleep countdown */ + if (_lcd_sleep_timeout < 0) + { + _lcd_sleep_timer = 0; /* Setting == Always */ + lcd_sleep(); + } + else + _lcd_sleep_timer = _lcd_sleep_timeout; } /* set brightness by changing the PWM */ -void __backlight_set_brightness(int val) +void _backlight_set_brightness(int val) { /* disable IRQs while bitbanging */ int old_irq_level = set_irq_level(HIGHEST_IRQ_LEVEL); @@ -59,12 +68,12 @@ void __backlight_set_brightness(int val) set_irq_level(old_irq_level); } -void __remote_backlight_on(void) +void _remote_backlight_on(void) { and_l(~0x00200000, &GPIO_OUT); } -void __remote_backlight_off(void) +void _remote_backlight_off(void) { or_l(0x00200000, &GPIO_OUT); } diff --git a/firmware/target/coldfire/iriver/backlight-target.h b/firmware/target/coldfire/iriver/backlight-target.h deleted file mode 100644 index 30a57e4fbc..0000000000 --- a/firmware/target/coldfire/iriver/backlight-target.h +++ /dev/null @@ -1,31 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2006 by Linus Nielsen Feltzing - * - * All files in this archive are subject to the GNU General Public License. - * See the file COPYING in the source tree root for full license agreement. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ****************************************************************************/ -#ifndef BACKLIGHT_TARGET_H -#define BACKLIGHT_TARGET_H - -bool __backlight_init(void); /* Returns backlight current state (true=ON). */ -void __backlight_on(void); -void __backlight_off(void); -#ifdef HAVE_BACKLIGHT_BRIGHTNESS -void __backlight_set_brightness(int val); -#endif -void __remote_backlight_on(void); -void __remote_backlight_off(void); - -#endif diff --git a/firmware/target/coldfire/iriver/h100/backlight-h100.c b/firmware/target/coldfire/iriver/h100/backlight-h100.c index 7cff965ff9..1c3dded5e5 100644 --- a/firmware/target/coldfire/iriver/h100/backlight-h100.c +++ b/firmware/target/coldfire/iriver/h100/backlight-h100.c @@ -25,7 +25,7 @@ #include "lcd.h" /* Returns the current state of the backlight (true=ON, false=OFF). */ -bool __backlight_init(void) +bool _backlight_init(void) { or_l(0x00020000, &GPIO1_ENABLE); or_l(0x00020000, &GPIO1_FUNCTION); @@ -33,22 +33,22 @@ bool __backlight_init(void) return (GPIO1_OUT & 0x00020000) ? false : true; } -void __backlight_on(void) +void _backlight_hw_on(void) { and_l(~0x00020000, &GPIO1_OUT); } -void __backlight_off(void) +void _backlight_hw_off(void) { or_l(0x00020000, &GPIO1_OUT); } -void __remote_backlight_on(void) +void _remote_backlight_on(void) { and_l(~0x00000800, &GPIO_OUT); } -void __remote_backlight_off(void) +void _remote_backlight_off(void) { or_l(0x00000800, &GPIO_OUT); } diff --git a/firmware/target/coldfire/iriver/h100/backlight-target.h b/firmware/target/coldfire/iriver/h100/backlight-target.h new file mode 100644 index 0000000000..6697fb19c3 --- /dev/null +++ b/firmware/target/coldfire/iriver/h100/backlight-target.h @@ -0,0 +1,35 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 by Linus Nielsen Feltzing + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#ifndef BACKLIGHT_TARGET_H +#define BACKLIGHT_TARGET_H + +bool _backlight_init(void); /* Returns backlight current state (true=ON). */ +void _backlight_hw_on(void); +void _backlight_hw_off(void); + +#define _backlight_on_isr() _backlight_hw_on() +#define _backlight_off_isr() _backlight_hw_off() +#define _backlight_on_normal() _backlight_hw_on() +#define _backlight_off_normal() _backlight_hw_off() +#define _BACKLIGHT_FADE_BOOST + +void _remote_backlight_on(void); +void _remote_backlight_off(void); + +#endif diff --git a/firmware/target/coldfire/iriver/h300/backlight-h300.c b/firmware/target/coldfire/iriver/h300/backlight-h300.c index 4cec54f0d7..c0d441ad3f 100644 --- a/firmware/target/coldfire/iriver/h300/backlight-h300.c +++ b/firmware/target/coldfire/iriver/h300/backlight-h300.c @@ -25,7 +25,7 @@ #include "pcf50606.h" #include "lcd.h" -bool __backlight_init(void) +bool _backlight_init(void) { or_l(0x00020000, &GPIO1_ENABLE); or_l(0x00020000, &GPIO1_FUNCTION); @@ -34,21 +34,21 @@ bool __backlight_init(void) return true; /* Backlight always ON after boot. */ } -void __backlight_on(void) +void _backlight_on(void) { lcd_enable(true); sleep(HZ/100); /* lcd needs time - avoid flashing for dark screens */ or_l(0x00020000, &GPIO1_OUT); } -void __backlight_off(void) +void _backlight_off(void) { and_l(~0x00020000, &GPIO1_OUT); lcd_enable(false); } /* set brightness by changing the PWM */ -void __backlight_set_brightness(int val) +void _backlight_set_brightness(int val) { /* disable IRQs while bitbanging */ int old_irq_level = set_irq_level(HIGHEST_IRQ_LEVEL); @@ -57,12 +57,12 @@ void __backlight_set_brightness(int val) set_irq_level(old_irq_level); } -void __remote_backlight_on(void) +void _remote_backlight_on(void) { and_l(~0x00000002, &GPIO1_OUT); } -void __remote_backlight_off(void) +void _remote_backlight_off(void) { or_l(0x00000002, &GPIO1_OUT); } diff --git a/firmware/target/coldfire/iriver/h300/backlight-target.h b/firmware/target/coldfire/iriver/h300/backlight-target.h new file mode 100644 index 0000000000..f0e1147304 --- /dev/null +++ b/firmware/target/coldfire/iriver/h300/backlight-target.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2006 by Linus Nielsen Feltzing + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#ifndef BACKLIGHT_TARGET_H +#define BACKLIGHT_TARGET_H + +bool _backlight_init(void); /* Returns backlight current state (true=ON). */ +void _backlight_on(void); +void _backlight_off(void); +void _backlight_set_brightness(int val); +void _remote_backlight_on(void); +void _remote_backlight_off(void); + +#endif -- cgit v1.2.3