diff --git a/firmware/export/config/sonynwze360.h b/firmware/export/config/sonynwze360.h index 2c2cb79baa..548486ae5b 100644 --- a/firmware/export/config/sonynwze360.h +++ b/firmware/export/config/sonynwze360.h @@ -108,8 +108,8 @@ /* Main LCD backlight brightness range and defaults */ #define MIN_BRIGHTNESS_SETTING 0 -#define MAX_BRIGHTNESS_SETTING 100 -#define DEFAULT_BRIGHTNESS_SETTING 50 +#define MAX_BRIGHTNESS_SETTING 88 +#define DEFAULT_BRIGHTNESS_SETTING 44 /* Which backlight fading type? */ #define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_SETTING diff --git a/firmware/export/config/sonynwze370.h b/firmware/export/config/sonynwze370.h index dc3167a658..8561541222 100644 --- a/firmware/export/config/sonynwze370.h +++ b/firmware/export/config/sonynwze370.h @@ -22,6 +22,12 @@ /* define this if you have a colour LCD */ #define HAVE_LCD_COLOR +/* define this if you have LCD enable function */ +#define HAVE_LCD_ENABLE + +/* Define this if the LCD can shut down */ +#define HAVE_LCD_SHUTDOWN + #ifndef BOOTLOADER #define HAVE_ALBUMART @@ -42,9 +48,6 @@ /* define this if you would like tagcache to build on this target */ #define HAVE_TAGCACHE -/* define this if you have LCD enable function */ -#define HAVE_LCD_ENABLE - /* Define this if your LCD can be put to sleep. HAVE_LCD_ENABLE should be defined as well. #define HAVE_LCD_SLEEP @@ -55,9 +58,8 @@ #define HAVE_LCD_FLIP */ -/* define this if you can invert the colours on your LCD +/* define this if you can invert the colours on your LCD */ #define HAVE_LCD_INVERT -*/ /* define this if you have a real-time clock */ #define CONFIG_RTC RTC_IMX233 @@ -108,8 +110,8 @@ /* Main LCD backlight brightness range and defaults */ #define MIN_BRIGHTNESS_SETTING 0 -#define MAX_BRIGHTNESS_SETTING 100 -#define DEFAULT_BRIGHTNESS_SETTING 50 +#define MAX_BRIGHTNESS_SETTING 88 +#define DEFAULT_BRIGHTNESS_SETTING 44 /* Which backlight fading type? */ #define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_SETTING diff --git a/firmware/rolo.c b/firmware/rolo.c index a8e8f3938b..3cc358331b 100644 --- a/firmware/rolo.c +++ b/firmware/rolo.c @@ -64,7 +64,7 @@ #include "ascodec.h" #endif -#if defined(FIIO_M3K) +#if defined(FIIO_M3K) || defined(SONY_NWZE370) #include "backlight-target.h" #endif @@ -318,7 +318,7 @@ int rolo_load(const char* filename) lcd_remote_update(); #endif -#if defined(FIIO_M3K) +#if defined(FIIO_M3K) || defined(SONY_NWZE370) /* Avoids the LCD backlight ramping down & up weirdly */ backlight_hw_off(); #endif diff --git a/firmware/target/arm/imx233/sony-nwz/backlight-nwz.c b/firmware/target/arm/imx233/sony-nwz/backlight-nwz.c index fecbeda15b..848d130a28 100644 --- a/firmware/target/arm/imx233/sony-nwz/backlight-nwz.c +++ b/firmware/target/arm/imx233/sony-nwz/backlight-nwz.c @@ -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 */ } diff --git a/firmware/target/arm/imx233/sony-nwz/lcd-nwze370.c b/firmware/target/arm/imx233/sony-nwz/lcd-nwze370.c index 862522da15..e7f7e1e8a0 100644 --- a/firmware/target/arm/imx233/sony-nwz/lcd-nwze370.c +++ b/firmware/target/arm/imx233/sony-nwz/lcd-nwze370.c @@ -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);