mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-11-09 13:12:37 -05:00
nwze370: improve lcd & backlight
Added lcd inversion Fix issue where backlight would turn on before first frame rendered Fix issue where backlight would shortly appear at 100% before PWM is ready during fade in Turn off backlight before booting/RoLo/shutdown to avoid it being enabled on next boot Fix issue where fade in isn't smooth because brightness levels below 13 were basically equalivent to off, by removing these brightness levels Change-Id: I868eae2cbeea52c6af7d09c886958ff46167fe26
This commit is contained in:
parent
9722cad478
commit
b1511738f7
5 changed files with 47 additions and 15 deletions
|
|
@ -26,12 +26,20 @@
|
|||
#include "backlight-target.h"
|
||||
#include "pwm-imx233.h"
|
||||
#include "pinctrl-imx233.h"
|
||||
#include "kernel.h"
|
||||
|
||||
static int last_brightness;
|
||||
|
||||
void backlight_hw_brightness(int brightness)
|
||||
{
|
||||
bool en = brightness > 0;
|
||||
imx233_pwm_setup_simple(2, 24000, 100 - brightness);
|
||||
/* brightness has extreme dip above 88% duty cycle, limit range to [87%, 0%] */
|
||||
if (en)
|
||||
imx233_pwm_setup_simple(2, 24000, 88 - brightness);
|
||||
imx233_pwm_enable(2, en);
|
||||
if (last_brightness == 0 && en)
|
||||
sleep(HZ / 25); /* make sure PWM settings are applied */
|
||||
last_brightness = brightness;
|
||||
imx233_pinctrl_set_gpio(0, 10, en);
|
||||
}
|
||||
|
||||
|
|
@ -40,9 +48,8 @@ bool backlight_hw_init(void)
|
|||
imx233_pinctrl_acquire(0, 10, "backlight_enable");
|
||||
imx233_pinctrl_set_function(0, 10, PINCTRL_FUNCTION_GPIO);
|
||||
imx233_pinctrl_enable_gpio(0, 10, true);
|
||||
imx233_pinctrl_set_gpio(0, 10, true);
|
||||
backlight_hw_brightness(DEFAULT_BRIGHTNESS_SETTING);
|
||||
return true;
|
||||
backlight_hw_brightness(0);
|
||||
return false;
|
||||
}
|
||||
|
||||
void backlight_hw_on(void)
|
||||
|
|
@ -50,6 +57,7 @@ void backlight_hw_on(void)
|
|||
#ifdef HAVE_LCD_ENABLE
|
||||
lcd_enable(true); /* power on lcd + visible display */
|
||||
#endif
|
||||
sleep(HZ / 10); /* make sure screen is not white anymore */
|
||||
/* don't do anything special, the core will set the brightness */
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,9 @@
|
|||
|
||||
#ifdef HAVE_LCD_ENABLE
|
||||
static bool lcd_on;
|
||||
#ifdef HAVE_LCD_INVERT
|
||||
static bool lcd_inverted;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
static void lcd_write_reg(uint8_t reg, void *data, int data_len)
|
||||
|
|
@ -120,6 +123,9 @@ static void lcd_enable_seq(bool enable)
|
|||
if(enable)
|
||||
{
|
||||
lcd_write_reg(0x11, NULL, 0);
|
||||
#ifdef HAVE_LCD_INVERT
|
||||
lcd_set_invert_display(lcd_inverted);
|
||||
#endif
|
||||
lcd_write_reg(0x29, NULL, 0);
|
||||
}
|
||||
else
|
||||
|
|
@ -146,6 +152,22 @@ void lcd_enable(bool enable)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LCD_SHUTDOWN
|
||||
void lcd_shutdown(void) {
|
||||
backlight_hw_off();
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_LCD_INVERT
|
||||
void lcd_set_invert_display(bool yesno)
|
||||
{
|
||||
lcd_write_reg(yesno ? 0x21 : 0x20, NULL, 0);
|
||||
#ifdef HAVE_LCD_ENABLE
|
||||
lcd_inverted = yesno;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
void lcd_update(void)
|
||||
{
|
||||
lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue