summaryrefslogtreecommitdiff
path: root/firmware/target/coldfire/iaudio/m3/lcd-m3.c
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2008-03-12 23:08:33 +0000
committerJens Arnold <amiconn@rockbox.org>2008-03-12 23:08:33 +0000
commit17bc340f1f0571dc90c91e6f39f93448151d557e (patch)
tree53fccad5fe81875497f717f9fe71b498bde5fc83 /firmware/target/coldfire/iaudio/m3/lcd-m3.c
parent579089afa546d72c0a05815ed3abfff069ed520b (diff)
downloadrockbox-17bc340f1f0571dc90c91e6f39f93448151d557e.tar.gz
rockbox-17bc340f1f0571dc90c91e6f39f93448151d557e.zip
Make the LCD remote work in the iAudio M3, M5 and X5 bootloaders. * Fix viewport related init bug in the 2 bit vertically interleaved LCD driver. * Fix low bat warning in iaudio bootloader - voltages are in millivolts now.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16648 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/coldfire/iaudio/m3/lcd-m3.c')
-rw-r--r--firmware/target/coldfire/iaudio/m3/lcd-m3.c49
1 files changed, 27 insertions, 22 deletions
diff --git a/firmware/target/coldfire/iaudio/m3/lcd-m3.c b/firmware/target/coldfire/iaudio/m3/lcd-m3.c
index ac60006565..d54e0596ab 100644
--- a/firmware/target/coldfire/iaudio/m3/lcd-m3.c
+++ b/firmware/target/coldfire/iaudio/m3/lcd-m3.c
@@ -60,7 +60,6 @@ static int cached_contrast = DEFAULT_CONTRAST_SETTING;
60 60
61bool initialized = false; 61bool initialized = false;
62 62
63static void lcd_tick(void);
64 63
65/* Standard low-level byte writer. Requires CLK high on entry */ 64/* Standard low-level byte writer. Requires CLK high on entry */
66static inline void _write_byte(unsigned data) 65static inline void _write_byte(unsigned data)
@@ -295,7 +294,7 @@ int lcd_default_contrast(void)
295 return DEFAULT_CONTRAST_SETTING; 294 return DEFAULT_CONTRAST_SETTING;
296} 295}
297 296
298void lcdset_contrast(int val) 297void lcd_set_contrast(int val)
299{ 298{
300 if (val < 0) 299 if (val < 0)
301 val = 0; 300 val = 0;
@@ -312,29 +311,11 @@ bool remote_detect(void)
312 return (GPIO_READ & 0x40000000) == 0; 311 return (GPIO_READ & 0x40000000) == 0;
313} 312}
314 313
315void lcd_init_device(void)
316{
317 or_l(0x24000000, &GPIO_OUT);
318 or_l(0x24000000, &GPIO_ENABLE);
319 or_l(0x24000000, &GPIO_FUNCTION);
320
321 or_l(0x00011000, &GPIO1_OUT);
322 or_l(0x00011000, &GPIO1_ENABLE);
323 or_l(0x00011000, &GPIO1_FUNCTION);
324
325 and_l(~0x40000000, &GPIO_OUT);
326 and_l(~0x40000000, &GPIO_ENABLE);
327 or_l(0x40000000, &GPIO_FUNCTION);
328
329 lcd_clear_display();
330 tick_add_task(lcd_tick);
331}
332
333void lcd_on(void) 314void lcd_on(void)
334{ 315{
335 CS_HI; 316 CS_HI;
336 CLK_HI; 317 CLK_HI;
337 sleep(10); 318 sleep(HZ/100);
338 319
339 lcd_write_command(LCD_SET_DUTY_RATIO); 320 lcd_write_command(LCD_SET_DUTY_RATIO);
340 lcd_write_command(0x70); /* 1/128 */ 321 lcd_write_command(0x70); /* 1/128 */
@@ -349,7 +330,7 @@ void lcd_on(void)
349 330
350 lcd_write_command(LCD_CONTROL_POWER | 7); /* All circuits ON */ 331 lcd_write_command(LCD_CONTROL_POWER | 7); /* All circuits ON */
351 332
352 sleep(30); 333 sleep(3*HZ/100);
353 334
354 lcd_write_command_e(LCD_SET_GRAY | 0, 0x00); 335 lcd_write_command_e(LCD_SET_GRAY | 0, 0x00);
355 lcd_write_command_e(LCD_SET_GRAY | 1, 0x00); 336 lcd_write_command_e(LCD_SET_GRAY | 1, 0x00);
@@ -385,6 +366,7 @@ void lcd_poweroff(void)
385 lcd_write_command(LCD_SET_POWER_SAVE | 1); 366 lcd_write_command(LCD_SET_POWER_SAVE | 1);
386} 367}
387 368
369#ifndef BOOTLOADER
388/* Monitor remote hotswap */ 370/* Monitor remote hotswap */
389static void lcd_tick(void) 371static void lcd_tick(void)
390{ 372{
@@ -422,6 +404,29 @@ static void lcd_tick(void)
422 } 404 }
423 } 405 }
424} 406}
407#endif
408
409void lcd_init_device(void)
410{
411 or_l(0x24000000, &GPIO_OUT);
412 or_l(0x24000000, &GPIO_ENABLE);
413 or_l(0x24000000, &GPIO_FUNCTION);
414
415 or_l(0x00011000, &GPIO1_OUT);
416 or_l(0x00011000, &GPIO1_ENABLE);
417 or_l(0x00011000, &GPIO1_FUNCTION);
418
419 and_l(~0x40000000, &GPIO_OUT);
420 and_l(~0x40000000, &GPIO_ENABLE);
421 or_l(0x40000000, &GPIO_FUNCTION);
422
423 lcd_clear_display();
424#ifdef BOOTLOADER
425 lcd_on();
426#else
427 tick_add_task(lcd_tick);
428#endif
429}
425 430
426/* Update the display. 431/* Update the display.
427 This must be called after all other LCD functions that change the display. */ 432 This must be called after all other LCD functions that change the display. */