diff options
-rw-r--r-- | bootloader/ipodnano2g.c | 45 | ||||
-rw-r--r-- | firmware/SOURCES | 1 | ||||
-rw-r--r-- | firmware/export/s5l8700.h | 2 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/crt0.S | 6 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c | 9 |
5 files changed, 59 insertions, 4 deletions
diff --git a/bootloader/ipodnano2g.c b/bootloader/ipodnano2g.c index e8e8e2e1a4..f6bfe148ac 100644 --- a/bootloader/ipodnano2g.c +++ b/bootloader/ipodnano2g.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include "cpu.h" | 30 | #include "cpu.h" |
31 | #include "system.h" | 31 | #include "system.h" |
32 | #include "lcd.h" | 32 | #include "lcd.h" |
33 | #include "i2c-s5l8700.h" | ||
33 | #include "kernel.h" | 34 | #include "kernel.h" |
34 | #include "thread.h" | 35 | #include "thread.h" |
35 | #include "storage.h" | 36 | #include "storage.h" |
@@ -49,13 +50,51 @@ char version[] = APPSVERSION; | |||
49 | /* Show the Rockbox logo - in show_logo.c */ | 50 | /* Show the Rockbox logo - in show_logo.c */ |
50 | extern int show_logo(void); | 51 | extern int show_logo(void); |
51 | 52 | ||
53 | extern int line; | ||
54 | |||
52 | void main(void) | 55 | void main(void) |
53 | { | 56 | { |
57 | int i; | ||
58 | |||
59 | system_init(); | ||
60 | i2c_init(); | ||
61 | kernel_init(); | ||
62 | |||
63 | enable_irq(); | ||
64 | |||
54 | lcd_init(); | 65 | lcd_init(); |
55 | 66 | ||
56 | show_logo(); | 67 | _backlight_init(); |
68 | |||
69 | lcd_puts_scroll(0,0,"+++ this is a very very long line to test scrolling. ---"); | ||
70 | verbose = 0; | ||
71 | i = 0; | ||
72 | while (!button_hold()) { | ||
73 | line = 1; | ||
57 | 74 | ||
58 | /* Do nothing... */ | 75 | printf("i=%d",i++); |
76 | printf("TBCNT: %08x",TBCNT); | ||
77 | printf("GPIO 0: %08x",PDAT0); | ||
78 | printf("GPIO 1: %08x",PDAT1); | ||
79 | printf("GPIO 2: %08x",PDAT2); | ||
80 | printf("GPIO 3: %08x",PDAT3); | ||
81 | printf("GPIO 4: %08x",PDAT4); | ||
82 | printf("GPIO 5: %08x",PDAT5); | ||
83 | printf("GPIO 6: %08x",PDAT6); | ||
84 | printf("GPIO 7: %08x",PDAT7); | ||
85 | printf("GPIO 10: %08x",PDAT10); | ||
86 | printf("GPIO 11: %08x",PDAT11); | ||
87 | printf("GPIO 13: %08x",PDAT13); | ||
88 | printf("GPIO 14: %08x",PDAT14); | ||
89 | |||
90 | lcd_update(); | ||
91 | } | ||
92 | |||
93 | disable_irq(); | ||
94 | |||
95 | /* Branch back to iBugger entry point */ | ||
96 | asm volatile("ldr pc, =0x08640568"); | ||
97 | |||
98 | /* We never reach here */ | ||
59 | while(1); | 99 | while(1); |
60 | } | 100 | } |
61 | |||
diff --git a/firmware/SOURCES b/firmware/SOURCES index a3359cf8e7..51693b9b65 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES | |||
@@ -1303,6 +1303,7 @@ target/arm/s5l8700/udacodec-meizu.c | |||
1303 | #ifdef IPOD_NANO2G | 1303 | #ifdef IPOD_NANO2G |
1304 | target/arm/s5l8700/kernel-s5l8700.c | 1304 | target/arm/s5l8700/kernel-s5l8700.c |
1305 | target/arm/s5l8700/ipodnano2g/backlight-nano2g.c | 1305 | target/arm/s5l8700/ipodnano2g/backlight-nano2g.c |
1306 | target/arm/s5l8700/ipodnano2g/button-nano2g.c | ||
1306 | target/arm/s5l8700/ipodnano2g/lcd-nano2g.c | 1307 | target/arm/s5l8700/ipodnano2g/lcd-nano2g.c |
1307 | #endif | 1308 | #endif |
1308 | 1309 | ||
diff --git a/firmware/export/s5l8700.h b/firmware/export/s5l8700.h index 353690398a..4360f14a2d 100644 --- a/firmware/export/s5l8700.h +++ b/firmware/export/s5l8700.h | |||
@@ -19,6 +19,8 @@ | |||
19 | * | 19 | * |
20 | ****************************************************************************/ | 20 | ****************************************************************************/ |
21 | 21 | ||
22 | #include <inttypes.h> | ||
23 | |||
22 | #define REG8_PTR_T volatile uint8_t * | 24 | #define REG8_PTR_T volatile uint8_t * |
23 | #define REG16_PTR_T volatile uint16_t * | 25 | #define REG16_PTR_T volatile uint16_t * |
24 | #define REG32_PTR_T volatile uint32_t * | 26 | #define REG32_PTR_T volatile uint32_t * |
diff --git a/firmware/target/arm/s5l8700/crt0.S b/firmware/target/arm/s5l8700/crt0.S index c79897606c..c6e201e73f 100644 --- a/firmware/target/arm/s5l8700/crt0.S +++ b/firmware/target/arm/s5l8700/crt0.S | |||
@@ -82,7 +82,6 @@ newstart2: | |||
82 | // orr r0, r0, r2 | 82 | // orr r0, r0, r2 |
83 | // str r0, [r1] // switch backlight on | 83 | // str r0, [r1] // switch backlight on |
84 | 84 | ||
85 | #if CONFIG_CPU==S5L8700 | ||
86 | ldr r1, =0x3c500000 // CLKCON | 85 | ldr r1, =0x3c500000 // CLKCON |
87 | ldr r0, =0x00800080 | 86 | ldr r0, =0x00800080 |
88 | str r0, [r1] | 87 | str r0, [r1] |
@@ -90,7 +89,11 @@ newstart2: | |||
90 | mov r0, #0 | 89 | mov r0, #0 |
91 | str r0, [r1] | 90 | str r0, [r1] |
92 | ldr r1, =0x3c500004 // PLL0PMS | 91 | ldr r1, =0x3c500004 // PLL0PMS |
92 | #ifdef IPOD_NANO2G | ||
93 | ldr r0, =0x21200 | ||
94 | #else | ||
93 | ldr r0, =0x1ad200 | 95 | ldr r0, =0x1ad200 |
96 | #endif | ||
94 | str r0, [r1] | 97 | str r0, [r1] |
95 | ldr r1, =0x3c500014 // PLL0LCNT | 98 | ldr r1, =0x3c500014 // PLL0LCNT |
96 | ldr r0, =8100 | 99 | ldr r0, =8100 |
@@ -226,6 +229,7 @@ newstart2: | |||
226 | mcr 15, 0, r0, c1, c0, 0 // enable protection unit | 229 | mcr 15, 0, r0, c1, c0, 0 // enable protection unit |
227 | 230 | ||
228 | 231 | ||
232 | #if CONFIG_CPU==S5L8700 | ||
229 | /* Copy interrupt vectors to iram */ | 233 | /* Copy interrupt vectors to iram */ |
230 | ldr r2, =_intvectstart | 234 | ldr r2, =_intvectstart |
231 | ldr r3, =_intvectend | 235 | ldr r3, =_intvectend |
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c index 481e548440..3cbff75ffd 100644 --- a/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c +++ b/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c | |||
@@ -60,21 +60,28 @@ static int xoffset; /* needed for flip */ | |||
60 | 60 | ||
61 | static inline void s5l_lcd_write_cmd_data(int cmd, int data) | 61 | static inline void s5l_lcd_write_cmd_data(int cmd, int data) |
62 | { | 62 | { |
63 | while (LCD_STATUS & 0x10); | ||
63 | LCD_WCMD = cmd >> 8; | 64 | LCD_WCMD = cmd >> 8; |
65 | while (LCD_STATUS & 0x10); | ||
64 | LCD_WCMD = cmd & 0xff; | 66 | LCD_WCMD = cmd & 0xff; |
65 | 67 | ||
68 | while (LCD_STATUS & 0x10); | ||
66 | LCD_WDATA = data >> 8; | 69 | LCD_WDATA = data >> 8; |
70 | while (LCD_STATUS & 0x10); | ||
67 | LCD_WDATA = data & 0xff; | 71 | LCD_WDATA = data & 0xff; |
68 | } | 72 | } |
69 | 73 | ||
70 | static inline void s5l_lcd_write_cmd(unsigned short cmd) | 74 | static inline void s5l_lcd_write_cmd(unsigned short cmd) |
71 | { | 75 | { |
76 | while (LCD_STATUS & 0x10); | ||
72 | LCD_WCMD = cmd; | 77 | LCD_WCMD = cmd; |
73 | } | 78 | } |
74 | 79 | ||
75 | static inline void s5l_lcd_write_data(int data) | 80 | static inline void s5l_lcd_write_data(int data) |
76 | { | 81 | { |
82 | while (LCD_STATUS & 0x10); | ||
77 | LCD_WDATA = data >> 8; | 83 | LCD_WDATA = data >> 8; |
84 | while (LCD_STATUS & 0x10); | ||
78 | LCD_WDATA = data & 0xff; | 85 | LCD_WDATA = data & 0xff; |
79 | } | 86 | } |
80 | 87 | ||
@@ -185,7 +192,9 @@ void lcd_update(void) | |||
185 | for (x = 0; x < LCD_WIDTH; x++) { | 192 | for (x = 0; x < LCD_WIDTH; x++) { |
186 | pixel = *(p++); | 193 | pixel = *(p++); |
187 | 194 | ||
195 | while (LCD_STATUS & 0x10); | ||
188 | LCD_WDATA = (pixel & 0xff00) >> 8; | 196 | LCD_WDATA = (pixel & 0xff00) >> 8; |
197 | while (LCD_STATUS & 0x10); | ||
189 | LCD_WDATA = pixel & 0xff; | 198 | LCD_WDATA = pixel & 0xff; |
190 | } | 199 | } |
191 | } | 200 | } |