summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2007-04-03 19:04:33 +0000
committerJens Arnold <amiconn@rockbox.org>2007-04-03 19:04:33 +0000
commit04306321c314d7db17a2a4740eadd054d43fa5e6 (patch)
tree6500ed31e6ca6a128ad1a60ddcaaf2ba753e2485
parentaf2ca4706eff6b911394e36d4a33af81f4079264 (diff)
downloadrockbox-04306321c314d7db17a2a4740eadd054d43fa5e6.tar.gz
rockbox-04306321c314d7db17a2a4740eadd054d43fa5e6.zip
Added command macros for old LCD. Renamed some macros to better match the datasheets.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13008 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/sh/archos/player/lcd-player.c142
1 files changed, 74 insertions, 68 deletions
diff --git a/firmware/target/sh/archos/player/lcd-player.c b/firmware/target/sh/archos/player/lcd-player.c
index 8f59901116..e8a124f469 100644
--- a/firmware/target/sh/archos/player/lcd-player.c
+++ b/firmware/target/sh/archos/player/lcd-player.c
@@ -25,29 +25,33 @@
25#include "lcd.h" 25#include "lcd.h"
26#include "lcd-charcell.h" 26#include "lcd-charcell.h"
27 27
28#define OLD_LCD_CRAM ((char)0xB0) /* Characters */ 28#define OLD_LCD_DDRAM ((char)0xB0) /* Display data (characters) */
29#define OLD_LCD_PRAM ((char)0x80) /* Patterns */ 29#define OLD_LCD_CGRAM ((char)0x80) /* Character generator (patterns) */
30#define OLD_LCD_IRAM ((char)0xE0) /* Icons */ 30#define OLD_LCD_ICONRAM ((char)0xE0)
31#define OLD_LCD_CONTRAST_SET ((char)0xA8) 31#define OLD_LCD_CONTRAST_SET ((char)0xA8)
32 32#define OLD_LCD_SYSTEM_SET ((char)0x60)
33#define NEW_LCD_CRAM ((char)0x80) /* Characters */ 33#define OLD_LCD_SET_POWER_SAVE_OSC_CONTROL ((char)0x40)
34#define NEW_LCD_PRAM ((char)0xC0) /* Patterns */ 34#define OLD_LCD_SET_POWER_CONTROL ((char)0x50)
35#define NEW_LCD_IRAM ((char)0x40) /* Icons */ 35#define OLD_LCD_SET_DISPLAY_CONTROL ((char)0x30)
36
37#define NEW_LCD_DDRAM ((char)0x80) /* Display data (characters) */
38#define NEW_LCD_CGRAM ((char)0xC0) /* Character generator (patterns) */
39#define NEW_LCD_ICONRAM ((char)0x40)
36#define NEW_LCD_CONTRAST_SET ((char)0x50) 40#define NEW_LCD_CONTRAST_SET ((char)0x50)
37#define NEW_LCD_FUNCTION_SET ((char)0x10) 41#define NEW_LCD_FUNCTION_SET ((char)0x10)
38#define NEW_LCD_POWER_SAVE_MODE_OSC_CONTROL_SET ((char)0x0c) 42#define NEW_LCD_SET_POWER_SAVE_OSC_CONTROL ((char)0x0c)
39#define NEW_LCD_POWER_CONTROL_REGISTER_SET ((char)0x20) 43#define NEW_LCD_SET_POWER_CONTROL_REG ((char)0x20)
40#define NEW_LCD_DISPLAY_CONTROL_SET ((char)0x28) 44#define NEW_LCD_SET_DISPLAY_CONTROL ((char)0x28)
41#define NEW_LCD_SET_DOUBLE_HEIGHT ((char)0x08) 45#define NEW_LCD_SET_DOUBLE_HEIGHT ((char)0x08)
42 46
43#define LCD_CURSOR(x,y) ((char)(lcd_cram+((y)*16+(x)))) 47#define LCD_CURSOR(x,y) ((char)(lcd_ddram+((y)*16+(x))))
44#define LCD_ICON(i) ((char)(lcd_iram+i)) 48#define LCD_ICON(i) ((char)(lcd_iconram+i))
45 49
46static bool new_lcd; 50static bool new_lcd;
47static char lcd_contrast_set; 51static char lcd_contrast_set;
48static char lcd_cram; 52static char lcd_ddram;
49static char lcd_pram; 53static char lcd_cgram;
50static char lcd_iram; 54static char lcd_iconram;
51 55
52/* hardware configuration */ 56/* hardware configuration */
53 57
@@ -113,68 +117,70 @@ void lcd_init_device(void)
113 if (new_lcd) 117 if (new_lcd)
114 { 118 {
115 lcd_contrast_set = NEW_LCD_CONTRAST_SET; 119 lcd_contrast_set = NEW_LCD_CONTRAST_SET;
116 lcd_cram = NEW_LCD_CRAM; 120 lcd_ddram = NEW_LCD_DDRAM;
117 lcd_pram = NEW_LCD_PRAM; 121 lcd_cgram = NEW_LCD_CGRAM;
118 lcd_iram = NEW_LCD_IRAM; 122 lcd_iconram = NEW_LCD_ICONRAM;
119 123
120 /* LCD init for cold start */ 124 /* LCD init for cold start */
121 PBCR2 &= 0xff00; /* Set PB0..PB3 to GPIO */ 125 PBCR2 &= 0xff00; /* Set PB0..PB3 to GPIO */
122 or_b(0x0f, &PBDRL); /* ... high */ 126 or_b(0x0f, &PBDRL); /* ... high */
123 or_b(0x0f, &PBIORL); /* ... and output */ 127 or_b(0x0f, &PBIORL); /* ... and output */
124 128
125 lcd_write_command(NEW_LCD_FUNCTION_SET + 1); /* CGRAM selected */ 129 lcd_write_command(NEW_LCD_FUNCTION_SET|1); /* CGRAM selected */
126 lcd_write_command_e(NEW_LCD_CONTRAST_SET, 0x08); 130 lcd_write_command_e(NEW_LCD_CONTRAST_SET, 0x08);
127 lcd_write_command(NEW_LCD_POWER_SAVE_MODE_OSC_CONTROL_SET + 2); 131 lcd_write_command(NEW_LCD_SET_POWER_SAVE_OSC_CONTROL|2);
128 /* oscillator on */ 132 /* oscillator on */
129 lcd_write_command(NEW_LCD_POWER_CONTROL_REGISTER_SET + 7); 133 lcd_write_command(NEW_LCD_SET_POWER_CONTROL_REG|7);
130 /* opamp buffer + voltage booster on*/ 134 /* opamp buffer + voltage booster on */
131 135
132 memset(data_vector, 0x20, 64); 136 memset(data_vector, 0x20, 64);
133 lcd_write_command(NEW_LCD_CRAM); /* Set DDRAM address */ 137 lcd_write_command(NEW_LCD_DDRAM); /* Set DDRAM address */
134 lcd_write_data(data_vector, 64); /* all spaces */ 138 lcd_write_data(data_vector, 64); /* all spaces */
135 139
136 memset(data_vector, 0, 64); 140 memset(data_vector, 0, 64);
137 lcd_write_command(NEW_LCD_PRAM); /* Set CGRAM address */ 141 lcd_write_command(NEW_LCD_CGRAM); /* Set CGRAM address */
138 lcd_write_data(data_vector, 64); /* zero out */ 142 lcd_write_data(data_vector, 64); /* zero out */
139 lcd_write_command(NEW_LCD_IRAM); /* Set ICONRAM address */ 143 lcd_write_command(NEW_LCD_ICONRAM); /* Set ICONRAM address */
140 lcd_write_data(data_vector, 16); /* zero out */ 144 lcd_write_data(data_vector, 16); /* zero out */
141 145
142 lcd_write_command(NEW_LCD_DISPLAY_CONTROL_SET + 1); /* display on */ 146 lcd_write_command(NEW_LCD_SET_DISPLAY_CONTROL|1); /* display on */
143 } 147 }
144 else 148 else
145 { 149 {
146 lcd_contrast_set = OLD_LCD_CONTRAST_SET; 150 lcd_contrast_set = OLD_LCD_CONTRAST_SET;
147 lcd_cram = OLD_LCD_CRAM; 151 lcd_ddram = OLD_LCD_DDRAM;
148 lcd_pram = OLD_LCD_PRAM; 152 lcd_cgram = OLD_LCD_CGRAM;
149 lcd_iram = OLD_LCD_IRAM; 153 lcd_iconram = OLD_LCD_ICONRAM;
150 154
151#if 1 155#if 1
152 /* LCD init for cold start */ 156 /* LCD init for cold start */
153 PBCR2 &= 0xff00; /* Set PB0..PB3 to GPIO */ 157 PBCR2 &= 0xff00; /* Set PB0..PB3 to GPIO */
154 or_b(0x0f, &PBDRL); /* ... high */ 158 or_b(0x0f, &PBDRL); /* ... high */
155 or_b(0x0f, &PBIORL); /* ... and output */ 159 or_b(0x0f, &PBIORL); /* ... and output */
156 160
157 lcd_write_command(0x61); 161 lcd_write_command(OLD_LCD_SYSTEM_SET|1); /* CGRAM selected */
158 lcd_write_command(0x42); 162 lcd_write_command(OLD_LCD_SET_POWER_SAVE_OSC_CONTROL|2);
159 lcd_write_command(0x57); 163 /* oscillator on */
164 lcd_write_command(OLD_LCD_SET_POWER_CONTROL|7);
165 /* voltage regulator, voltage follower and booster on */
160 166
161 memset(data_vector, 0x24, 13); 167 memset(data_vector, 0x24, 13);
162 lcd_write_command(OLD_LCD_CRAM); /* Set DDRAM address */ 168 lcd_write_command(OLD_LCD_DDRAM); /* Set DDRAM address */
163 lcd_write_data(data_vector, 13); /* all spaces */ 169 lcd_write_data(data_vector, 13); /* all spaces */
164 lcd_write_command(OLD_LCD_CRAM + 0x10); 170 lcd_write_command(OLD_LCD_DDRAM + 0x10);
165 lcd_write_data(data_vector, 13); 171 lcd_write_data(data_vector, 13);
166 lcd_write_command(OLD_LCD_CRAM + 0x20); 172 lcd_write_command(OLD_LCD_DDRAM + 0x20);
167 lcd_write_data(data_vector, 13); 173 lcd_write_data(data_vector, 13);
168 174
169 memset(data_vector, 0, 32); 175 memset(data_vector, 0, 32);
170 lcd_write_command(OLD_LCD_PRAM); /* Set CGRAM address */ 176 lcd_write_command(OLD_LCD_CGRAM); /* Set CGRAM address */
171 lcd_write_data(data_vector, 32); /* zero out */ 177 lcd_write_data(data_vector, 32); /* zero out */
172 lcd_write_command(OLD_LCD_IRAM); /* Set ICONRAM address */ 178 lcd_write_command(OLD_LCD_ICONRAM); /* Set ICONRAM address */
173 lcd_write_data(data_vector, 13); /* zero out */ 179 lcd_write_data(data_vector, 13); /* zero out */
174 lcd_write_command(OLD_LCD_IRAM + 0x10); 180 lcd_write_command(OLD_LCD_ICONRAM + 0x10);
175 lcd_write_data(data_vector, 13); 181 lcd_write_data(data_vector, 13);
176 182
177 lcd_write_command(0x31); 183 lcd_write_command(OLD_LCD_SET_DISPLAY_CONTROL|1); /* display on */
178#else 184#else
179 /* archos look-alike code, left here for reference. As soon as the 185 /* archos look-alike code, left here for reference. As soon as the
180 * rockbox version is confirmed working, this will go away */ 186 * rockbox version is confirmed working, this will go away */
@@ -194,30 +200,30 @@ void lcd_init_device(void)
194 200
195 for (i=0; i<100; i++) asm volatile ("nop"); /* wait 50 us */ 201 for (i=0; i<100; i++) asm volatile ("nop"); /* wait 50 us */
196 202
197 lcd_write_command(0x61); 203 lcd_write_command(OLD_LCD_SYSTEM_SET|1);
198 lcd_write_command(0x42); 204 lcd_write_command(OLD_LCD_SET_POWER_SAVE_OSC_CONTROL|2);
199 lcd_write_command(0x57); 205 lcd_write_command(OLD_LCD_SET_POWER_CONTROL|7);
200 206
201 memset(data_vector, 0x24, 13); 207 memset(data_vector, 0x24, 13);
202 lcd_write_command(0xb0); /* Set DDRAM address */ 208 lcd_write_command(OLD_LCD_DDRAM); /* Set DDRAM address */
203 lcd_write_data(data_vector, 13); /* all spaces */ 209 lcd_write_data(data_vector, 13); /* all spaces */
204 lcd_write_command(0xc0); 210 lcd_write_command(OLD_LCD_DDRAM + 0x10);
205 lcd_write_data(data_vector, 13); 211 lcd_write_data(data_vector, 13);
206 lcd_write_command(0xd0); 212 lcd_write_command(OLD_LCD_DDRAM + 0x20);
207 lcd_write_data(data_vector, 13); 213 lcd_write_data(data_vector, 13);
208 214
209 memset(data_vector, 0, 32); 215 memset(data_vector, 0, 32);
210 lcd_write_command(0x80); /* Set CGRAM address */ 216 lcd_write_command(OLD_LCD_CGRAM); /* Set CGRAM address */
211 lcd_write_data(data_vector, 32); /* zero out */ 217 lcd_write_data(data_vector, 32); /* zero out */
212 lcd_write_command(0xe0); /* Set ICONRAM address */ 218 lcd_write_command(OLD_LCD_ICONRAM); /* Set ICONRAM address */
213 lcd_write_data(data_vector, 13); /* zero out */ 219 lcd_write_data(data_vector, 13); /* zero out */
214 lcd_write_command(0xf0); 220 lcd_write_command(OLD_LCD_ICONRAM + 0x10);
215 lcd_write_data(data_vector, 13); 221 lcd_write_data(data_vector, 13);
216 222
217 for (i=0; i<300000; i++) asm volatile ("nop"); /* wait 150 ms */ 223 for (i=0; i<300000; i++) asm volatile ("nop"); /* wait 150 ms */
218 224
219 lcd_write_command(0x31); 225 lcd_write_command(OLD_LCD_SET_DISPLAY_CONTROL|1);
220 lcd_write_command_e(0xa8, 0); /* Set contrast control */ 226 lcd_write_command_e(OLD_LCD_CONTRAST_SET, 0); /* Set contrast */
221 } 227 }
222#endif 228#endif
223 } 229 }
@@ -234,7 +240,7 @@ void lcd_update(void)
234 { 240 {
235 if (lcd_patterns[y].count > 0) 241 if (lcd_patterns[y].count > 0)
236 { 242 {
237 lcd_write_command(lcd_pram | (y << 3)); 243 lcd_write_command(lcd_cgram | (y << 3));
238 lcd_write_data(lcd_patterns[y].pattern, 7); 244 lcd_write_data(lcd_patterns[y].pattern, 7);
239 } 245 }
240 } 246 }