From 14a6fd9bbe9c80edbc3b414e47376a20908cdba1 Mon Sep 17 00:00:00 2001 From: Rob Purchase Date: Mon, 13 Oct 2008 20:25:16 +0000 Subject: [PATCH] Hopefully fix the D2s 'cut and repeated LCD lines' bug (fix suggested by Francesco Rigoni). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18801 a1c6a512-1295-4272-9138-f99709370657 --- docs/CREDITS | 1 + firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c | 14 +++++++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/docs/CREDITS b/docs/CREDITS index 121b030d41..53addf0121 100644 --- a/docs/CREDITS +++ b/docs/CREDITS @@ -424,6 +424,7 @@ Denes Balatoni Roy Wallace Eric Lassauge François Dinel +Francesco Rigoni The libmad team The wavpack team diff --git a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c index 70d823a25b..b41117c259 100644 --- a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c +++ b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c @@ -73,24 +73,36 @@ void lcd_set_contrast(int val) /* LTV250QV panel functions */ +/* Delay loop based on CPU frequency (FREQ>>23 is 3..22 for 32MHz..192MHz) */ +static void delay_loop(void) +{ + unsigned long x; + for (x = (unsigned)(FREQ>>23); x; x--); +} +#define DELAY delay_loop() + static void ltv250qv_write(unsigned int command) { int i; GPIOA_CLEAR = LTV250QV_CS; + DELAY; for (i = 23; i >= 0; i--) { GPIOA_CLEAR = LTV250QV_SCL; + DELAY; if ((command>>i) & 1) GPIOA_SET = LTV250QV_SDI; else GPIOA_CLEAR = LTV250QV_SDI; + DELAY; GPIOA_SET = LTV250QV_SCL; } + DELAY; GPIOA_SET = LTV250QV_CS; } @@ -162,7 +174,7 @@ static void lcd_display_on(void) lcd_write_reg(3, 0xE100); lcd_write_reg(4, 0x1000); lcd_write_reg(5, 0x5033); - lcd_write_reg(6, 0x4); + lcd_write_reg(6, 0x2); /* vertical back porch adjusted from 0x4 in OF */ lcd_write_reg(7, 0x30); lcd_write_reg(8, 0x41C); lcd_write_reg(16, 0x207);