diff options
author | Moshe Piekarski <dev.rockbox@melachim.net> | 2020-10-28 15:48:33 -0400 |
---|---|---|
committer | William Wilgus <me.theuser@yahoo.com> | 2020-11-08 03:19:04 +0000 |
commit | c4254d10fc61779656dd5692c2f6333692ba73f8 (patch) | |
tree | a96699e9e7bae2b4f48c9c72741891d14fca2097 /firmware | |
parent | 9fcdb44e55b5bee585e4906e93d055d230ee01d9 (diff) | |
download | rockbox-c4254d10fc61779656dd5692c2f6333692ba73f8.tar.gz rockbox-c4254d10fc61779656dd5692c2f6333692ba73f8.tar.bz2 rockbox-c4254d10fc61779656dd5692c2f6333692ba73f8.zip |
Fuze+: Fix misplaced rectangle when lcd_flip set
Change-Id: Ic5197d8dffd66cfefdb42242869b48b33aa4d042
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c | 37 |
1 files changed, 30 insertions, 7 deletions
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c index 224ff3d0fc..92864c9ed7 100644 --- a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c +++ b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c @@ -545,7 +545,7 @@ void lcd_set_invert_display(bool yesno) #ifdef HAVE_LCD_FLIP void lcd_set_flip(bool yesno) { - lcd_reg_3_val = yesno ? 0x1000 : 0x1030; + lcd_reg_3_val = yesno ? 0x1080 : 0x1030; #ifdef HAVE_LCD_ENABLE if(!lcd_on) return; @@ -587,13 +587,36 @@ void lcd_update_rect(int x, int y, int w, int h) if (h <= 0) return; /* nothing left to do */ + imx233_lcdif_wait_ready(); - lcd_write_reg(0x50, x); - lcd_write_reg(0x51, x + w - 1); - lcd_write_reg(0x52, y); - lcd_write_reg(0x53, y + h - 1); - lcd_write_reg(0x20, x); - lcd_write_reg(0x21, y); +#ifdef HAVE_LCD_FLIP + if(!(lcd_reg_3_val&0x10)) + { + int xr = LCD_WIDTH - x; + lcd_write_reg(0x50, xr-w); + lcd_write_reg(0x51, xr-1); + lcd_write_reg(0x20, xr-w); + }else +#endif + { + lcd_write_reg(0x50, x); + lcd_write_reg(0x51, x + w - 1); + lcd_write_reg(0x20, x); + } +#ifdef HAVE_LCD_FLIP + if(!(lcd_reg_3_val&0x20)) + { + int yr = LCD_HEIGHT - y; + lcd_write_reg(0x52, yr-h); + lcd_write_reg(0x53, yr-1); + lcd_write_reg(0x21, yr-h); + }else +#endif + { + lcd_write_reg(0x52, y); + lcd_write_reg(0x53, y + h - 1); + lcd_write_reg(0x21, y); + } lcd_write_reg(0x22, 0); imx233_lcdif_wait_ready(); imx233_lcdif_set_word_length(16); |