summaryrefslogtreecommitdiff
path: root/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c')
-rw-r--r--firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c38
1 files changed, 8 insertions, 30 deletions
diff --git a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
index 7b64493c0a..d0b7e9214e 100644
--- a/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
+++ b/firmware/target/arm/tcc780x/cowond2/lcd-cowond2.c
@@ -116,33 +116,11 @@ static void lcd_write_reg(unsigned char reg, unsigned short val)
116 restore_irq(level); 116 restore_irq(level);
117} 117}
118 118
119
120/*
121 TEMP: Rough millisecond delay routine used by the LCD panel init sequence.
122 PCK_TCT must first have been initialised to 2Mhz by calling clock_init().
123*/
124static void sleep_ms(unsigned int ms)
125{
126 /* disable timer */
127 TCFG1 = 0;
128
129 /* set Timer1 reference value based on 125kHz tick */
130 TREF1 = ms * 125;
131
132 /* single count, zero the counter, divider = 16 [2^(3+1)], enable */
133 TCFG1 = (1<<9) | (1<<8) | (3<<4) | 1;
134
135 /* wait until Timer1 ref reached */
136 while (!(TIREQ & TF1)) {};
137}
138
139
140static void lcd_display_on(void) 119static void lcd_display_on(void)
141{ 120{
142 /* power on sequence as per the D2 firmware */ 121 /* power on sequence as per the D2 firmware */
143 GPIOA_SET = (1<<16); 122 GPIOA_SET = (1<<16);
144 123 udelay(10000);
145 sleep_ms(10);
146 124
147 lcd_write_reg(1, 0x1D); 125 lcd_write_reg(1, 0x1D);
148 lcd_write_reg(2, 0x0); 126 lcd_write_reg(2, 0x0);
@@ -164,14 +142,14 @@ static void lcd_display_on(void)
164 lcd_write_reg(23, 0x0); 142 lcd_write_reg(23, 0x0);
165 lcd_write_reg(24, 0x0); 143 lcd_write_reg(24, 0x0);
166 lcd_write_reg(25, 0x0); 144 lcd_write_reg(25, 0x0);
167 sleep_ms(10); 145 udelay(10000);
168 146
169 lcd_write_reg(9, 0x4055); 147 lcd_write_reg(9, 0x4055);
170 lcd_write_reg(10, 0x0); 148 lcd_write_reg(10, 0x0);
171 sleep_ms(40); 149 udelay(40000);
172 150
173 lcd_write_reg(10, 0x2000); 151 lcd_write_reg(10, 0x2000);
174 sleep_ms(40); 152 udelay(40000);
175 153
176 lcd_write_reg(1, 0xC01D); 154 lcd_write_reg(1, 0xC01D);
177 lcd_write_reg(2, 0x204); 155 lcd_write_reg(2, 0x204);
@@ -191,11 +169,11 @@ static void lcd_display_on(void)
191 lcd_write_reg(23, 0x406); 169 lcd_write_reg(23, 0x406);
192 lcd_write_reg(24, 0x2); 170 lcd_write_reg(24, 0x2);
193 lcd_write_reg(25, 0x0); 171 lcd_write_reg(25, 0x0);
194 sleep_ms(60); 172 udelay(60000);
195 173
196 lcd_write_reg(9, 0xA55); 174 lcd_write_reg(9, 0xA55);
197 lcd_write_reg(10, 0x111F); 175 lcd_write_reg(10, 0x111F);
198 sleep_ms(10); 176 udelay(10000);
199 177
200 /* tell that we're on now */ 178 /* tell that we're on now */
201 display_on = true; 179 display_on = true;
@@ -210,10 +188,10 @@ static void lcd_display_off(void)
210 lcd_write_reg(9, 0x55); 188 lcd_write_reg(9, 0x55);
211 lcd_write_reg(10, 0x1417); 189 lcd_write_reg(10, 0x1417);
212 lcd_write_reg(5, 0x4003); 190 lcd_write_reg(5, 0x4003);
213 sleep_ms(10); 191 udelay(10000);
214 192
215 lcd_write_reg(9, 0x0); 193 lcd_write_reg(9, 0x0);
216 sleep_ms(10); 194 udelay(10000);
217 195
218 /* kill power to LCD panel (unconfirmed) */ 196 /* kill power to LCD panel (unconfirmed) */
219 GPIOA_CLEAR = (1<<16); 197 GPIOA_CLEAR = (1<<16);