diff options
author | Mark Arigo <markarigo@gmail.com> | 2009-06-19 03:41:52 +0000 |
---|---|---|
committer | Mark Arigo <markarigo@gmail.com> | 2009-06-19 03:41:52 +0000 |
commit | df8f64d3a4d927a6880040c70ab2fee93f4c901c (patch) | |
tree | 85d192c9ef164fd973010ae0b6657fee17fde546 | |
parent | a61196fd3ae5ebd71134da8eb10e3189403c116f (diff) | |
download | rockbox-df8f64d3a4d927a6880040c70ab2fee93f4c901c.tar.gz rockbox-df8f64d3a4d927a6880040c70ab2fee93f4c901c.zip |
Philips SA9200: 1) reset all devices in system_init, 2) revert an earlier change in the sd driver, 3) properly detect the charger, 4) add lcd register defines.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21347 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | firmware/target/arm/ata-sd-pp.c | 9 | ||||
-rwxr-xr-x | firmware/target/arm/philips/sa9200/lcd-sa9200.c | 109 | ||||
-rw-r--r-- | firmware/target/arm/philips/sa9200/power-sa9200.c | 2 | ||||
-rw-r--r-- | firmware/target/arm/system-pp502x.c | 10 |
4 files changed, 86 insertions, 44 deletions
diff --git a/firmware/target/arm/ata-sd-pp.c b/firmware/target/arm/ata-sd-pp.c index 9f0263a411..cd3b5ca3f9 100644 --- a/firmware/target/arm/ata-sd-pp.c +++ b/firmware/target/arm/ata-sd-pp.c | |||
@@ -666,21 +666,12 @@ static void sd_init_device(int card_no) | |||
666 | sd_card_mux(card_no); | 666 | sd_card_mux(card_no); |
667 | 667 | ||
668 | /* Init NAND */ | 668 | /* Init NAND */ |
669 | #if defined(PHILIPS_SA9200) | ||
670 | MMC_INIT_1 |= (1 << 15); | ||
671 | MMC_INIT_2 |= (1 << 15); | ||
672 | MMC_INIT_2 &= ~(3 << 12); | ||
673 | MMC_INIT_2 |= (1 << 12); | ||
674 | MMC_INIT_1 &= ~(3 << 12); | ||
675 | MMC_INIT_1 |= (1 << 12); | ||
676 | #else | ||
677 | MMC_INIT_1 |= (1 << 15); | 669 | MMC_INIT_1 |= (1 << 15); |
678 | MMC_INIT_2 |= (1 << 15); | 670 | MMC_INIT_2 |= (1 << 15); |
679 | MMC_INIT_2 &= ~(3 << 12); | 671 | MMC_INIT_2 &= ~(3 << 12); |
680 | MMC_INIT_2 |= (1 << 13); | 672 | MMC_INIT_2 |= (1 << 13); |
681 | MMC_INIT_1 &= ~(3 << 12); | 673 | MMC_INIT_1 &= ~(3 << 12); |
682 | MMC_INIT_1 |= (1 << 13); | 674 | MMC_INIT_1 |= (1 << 13); |
683 | #endif | ||
684 | 675 | ||
685 | DEV_EN |= DEV_ATA; /* Enable controller */ | 676 | DEV_EN |= DEV_ATA; /* Enable controller */ |
686 | DEV_RS |= DEV_ATA; /* Reset controller */ | 677 | DEV_RS |= DEV_ATA; /* Reset controller */ |
diff --git a/firmware/target/arm/philips/sa9200/lcd-sa9200.c b/firmware/target/arm/philips/sa9200/lcd-sa9200.c index 2181e26e64..d7fe2e9c12 100755 --- a/firmware/target/arm/philips/sa9200/lcd-sa9200.c +++ b/firmware/target/arm/philips/sa9200/lcd-sa9200.c | |||
@@ -24,6 +24,44 @@ | |||
24 | #include "kernel.h" | 24 | #include "kernel.h" |
25 | #include "system.h" | 25 | #include "system.h" |
26 | 26 | ||
27 | /* The SA9200 controller closely matches the register defines for the | ||
28 | Samsung S6D0151 */ | ||
29 | #define R_START_OSC 0x00 | ||
30 | #define R_DRV_OUTPUT_CONTROL 0x01 | ||
31 | #define R_INVERSION_CONTROL 0x02 | ||
32 | #define R_ENTRY_MODE 0x03 | ||
33 | #define R_DISP_CONTROL 0x07 | ||
34 | #define R_BLANK_PERIOD_CONTROL 0x08 | ||
35 | #define R_FRAME_CYCLE_CONTROL 0x0b | ||
36 | #define R_EXT_INTERFACE_CONTROL 0x0c | ||
37 | #define R_POWER_CONTROL1 0x10 | ||
38 | #define R_GAMMA_CONTROL1 0x11 | ||
39 | #define R_POWER_CONTROL2 0x12 | ||
40 | #define R_POWER_CONTROL3 0x13 | ||
41 | #define R_POWER_CONTROL4 0x14 | ||
42 | #define R_RAM_ADDR_SET 0x21 | ||
43 | #define R_WRITE_DATA_2_GRAM 0x22 | ||
44 | #define R_RAM_READ_DATA 0x22 | ||
45 | #define R_GAMMA_FINE_ADJ_POS1 0x30 | ||
46 | #define R_GAMMA_FINE_ADJ_POS2 0x31 | ||
47 | #define R_GAMMA_FINE_ADJ_POS3 0x32 | ||
48 | #define R_GAMMA_GRAD_ADJ_POS 0x33 | ||
49 | #define R_GAMMA_FINE_ADJ_NEG1 0x34 | ||
50 | #define R_GAMMA_FINE_ADJ_NEG2 0x35 | ||
51 | #define R_GAMMA_FINE_ADJ_NEG3 0x36 | ||
52 | #define R_GAMMA_GRAD_ADJ_NEG 0x37 | ||
53 | #define R_GAMMA_CONTROL3 0x38 | ||
54 | #define R_GATE_SCAN_START_POS 0x40 | ||
55 | #define R_1ST_SCR_DRV_POS 0x42 | ||
56 | #define R_2ND_SCR_DRV_POS 0x43 | ||
57 | #define R_HORIZ_RAM_ADDR_POS 0x44 | ||
58 | #define R_VERT_RAM_ADDR_POS 0x45 | ||
59 | #define R_OSC_CONTROL 0x61 | ||
60 | #define R_LOW_POWER_MODE 0x69 | ||
61 | #define R_PRE_DRIVING_PERIOD 0x70 | ||
62 | #define R_GATE_OUT_PERIOD_CTRL 0x71 | ||
63 | #define R_SOFTWARE_RESET 0x72 | ||
64 | |||
27 | /* Display status */ | 65 | /* Display status */ |
28 | static unsigned lcd_yuv_options SHAREDBSS_ATTR = 0; | 66 | static unsigned lcd_yuv_options SHAREDBSS_ATTR = 0; |
29 | 67 | ||
@@ -80,51 +118,54 @@ void lcd_init_device(void) | |||
80 | 118 | ||
81 | LCD1_CONTROL |= 0x1; | 119 | LCD1_CONTROL |= 0x1; |
82 | 120 | ||
83 | lcd_write_reg(0x0000, 0x0001); | 121 | lcd_write_reg(R_START_OSC, 0x0001); |
84 | udelay(50000); | 122 | udelay(50000); |
85 | 123 | ||
86 | lcd_write_reg(0x0011, 0x171f); | 124 | lcd_write_reg(R_GAMMA_CONTROL1, 0x171f); |
87 | lcd_write_reg(0x0012, 0x0001); | 125 | lcd_write_reg(R_POWER_CONTROL2, 0x0001); |
88 | lcd_write_reg(0x0013, 0x08cd); | 126 | lcd_write_reg(R_POWER_CONTROL3, 0x08cd); |
89 | lcd_write_reg(0x0014, 0x0416); | 127 | lcd_write_reg(R_POWER_CONTROL4, 0x0416); |
90 | lcd_write_reg(0x0010, 0x1208); | 128 | lcd_write_reg(R_POWER_CONTROL1, 0x1208); |
91 | udelay(50000); | 129 | udelay(50000); |
92 | 130 | ||
93 | lcd_write_reg(0x0013, 0x081C); | 131 | lcd_write_reg(R_POWER_CONTROL3, 0x081c); |
94 | udelay(200000); | 132 | udelay(200000); |
95 | 133 | ||
96 | lcd_write_reg(0x0001, 0x0a0c); | 134 | lcd_write_reg(R_DRV_OUTPUT_CONTROL, 0x0a0c); |
97 | lcd_write_reg(0x0002, 0x0200); | 135 | lcd_write_reg(R_INVERSION_CONTROL, 0x0200); |
98 | lcd_write_reg(0x0003, 0x1030); | 136 | lcd_write_reg(R_ENTRY_MODE, 0x1030); |
99 | lcd_write_reg(0x0007, 0x0005); | 137 | lcd_write_reg(R_DISP_CONTROL, 0x0005); |
100 | lcd_write_reg(0x0008, 0x030a); | 138 | lcd_write_reg(R_BLANK_PERIOD_CONTROL, 0x030a); |
101 | lcd_write_reg(0x000b, 0x0000); | 139 | lcd_write_reg(R_FRAME_CYCLE_CONTROL, 0x0000); |
102 | lcd_write_reg(0x000c, 0x0000); | 140 | lcd_write_reg(R_EXT_INTERFACE_CONTROL, 0x0000); |
103 | lcd_write_reg(0x0030, 0x0000); | 141 | |
104 | lcd_write_reg(0x0031, 0x0204); | 142 | lcd_write_reg(R_GAMMA_FINE_ADJ_POS1, 0x0000); |
105 | lcd_write_reg(0x0032, 0x0001); | 143 | lcd_write_reg(R_GAMMA_FINE_ADJ_POS2, 0x0204); |
106 | lcd_write_reg(0x0033, 0x0600); | 144 | lcd_write_reg(R_GAMMA_FINE_ADJ_POS3, 0x0001); |
107 | lcd_write_reg(0x0034, 0x0607); | 145 | lcd_write_reg(R_GAMMA_GRAD_ADJ_POS, 0x0600); |
108 | lcd_write_reg(0x0035, 0x0305); | 146 | lcd_write_reg(R_GAMMA_FINE_ADJ_NEG1, 0x0607); |
109 | lcd_write_reg(0x0036, 0x0707); | 147 | lcd_write_reg(R_GAMMA_FINE_ADJ_NEG2, 0x0305); |
110 | lcd_write_reg(0x0037, 0x0006); | 148 | lcd_write_reg(R_GAMMA_FINE_ADJ_NEG3, 0x0707); |
111 | lcd_write_reg(0x0038, 0x0400); | 149 | lcd_write_reg(R_GAMMA_GRAD_ADJ_NEG, 0x0006); |
112 | lcd_write_reg(0x0040, 0x0000); | 150 | lcd_write_reg(R_GAMMA_CONTROL3, 0x0400); |
113 | lcd_write_reg(0x0042, 0x9f00); | 151 | |
114 | lcd_write_reg(0x0043, 0x0000); | 152 | lcd_write_reg(R_GATE_SCAN_START_POS, 0x0000); |
115 | lcd_write_reg(0x0044, 0x7f00); | 153 | lcd_write_reg(R_1ST_SCR_DRV_POS, 0x9f00); |
116 | lcd_write_reg(0x0045, 0x9f00); | 154 | lcd_write_reg(R_2ND_SCR_DRV_POS, 0x0000); |
155 | lcd_write_reg(R_HORIZ_RAM_ADDR_POS, 0x7f00); | ||
156 | lcd_write_reg(R_VERT_RAM_ADDR_POS, 0x9f00); | ||
157 | |||
117 | lcd_write_reg(0x00a8, 0x0125); | 158 | lcd_write_reg(0x00a8, 0x0125); |
118 | lcd_write_reg(0x00a9, 0x0014); | 159 | lcd_write_reg(0x00a9, 0x0014); |
119 | lcd_write_reg(0x00a7, 0x0022); | 160 | lcd_write_reg(0x00a7, 0x0022); |
120 | 161 | ||
121 | lcd_write_reg(0x0007, 0x0021); | 162 | lcd_write_reg(R_DISP_CONTROL, 0x0021); |
122 | udelay(40000); | 163 | udelay(40000); |
123 | lcd_write_reg(0x0007, 0x0023); | 164 | lcd_write_reg(R_DISP_CONTROL, 0x0023); |
124 | udelay(40000); | 165 | udelay(40000); |
125 | lcd_write_reg(0x0007, 0x1037); | 166 | lcd_write_reg(R_DISP_CONTROL, 0x1037); |
126 | 167 | ||
127 | lcd_write_reg(0x0021, 0x0000); | 168 | lcd_write_reg(R_RAM_ADDR_SET, 0x0000); |
128 | #endif | 169 | #endif |
129 | } | 170 | } |
130 | 171 | ||
@@ -195,8 +236,8 @@ void lcd_update_rect(int x, int y, int width, int height) | |||
195 | addr = &lcd_framebuffer[y][x]; | 236 | addr = &lcd_framebuffer[y][x]; |
196 | 237 | ||
197 | do { | 238 | do { |
198 | lcd_write_reg(0x0021, ((y++ & 0xff) << 8) | (x & 0xff)); | 239 | lcd_write_reg(R_RAM_ADDR_SET, ((y++ & 0xff) << 8) | (x & 0xff)); |
199 | lcd_send_command(0x0022); | 240 | lcd_send_command(R_WRITE_DATA_2_GRAM); |
200 | 241 | ||
201 | int w = width; | 242 | int w = width; |
202 | do { | 243 | do { |
diff --git a/firmware/target/arm/philips/sa9200/power-sa9200.c b/firmware/target/arm/philips/sa9200/power-sa9200.c index 5da1fc5fc4..e0bdfcf8ea 100644 --- a/firmware/target/arm/philips/sa9200/power-sa9200.c +++ b/firmware/target/arm/philips/sa9200/power-sa9200.c | |||
@@ -97,7 +97,7 @@ unsigned int power_input_status(void) | |||
97 | /* GPIOF indicates that the connector is present, | 97 | /* GPIOF indicates that the connector is present, |
98 | GPIOB indicates that there's power there too. | 98 | GPIOB indicates that there's power there too. |
99 | Same status bits for both USB and the charger. */ | 99 | Same status bits for both USB and the charger. */ |
100 | if (!(GPIOF_INPUT_VAL & 0x80) && !(GPIOB_INPUT_VAL & 0x80)) | 100 | if (!(GPIOF_INPUT_VAL & 0x80) && (GPIOB_INPUT_VAL & 0x40)) |
101 | status = POWER_INPUT_MAIN_CHARGER; | 101 | status = POWER_INPUT_MAIN_CHARGER; |
102 | 102 | ||
103 | return status; | 103 | return status; |
diff --git a/firmware/target/arm/system-pp502x.c b/firmware/target/arm/system-pp502x.c index 12ae7a9d3b..4735cd8d83 100644 --- a/firmware/target/arm/system-pp502x.c +++ b/firmware/target/arm/system-pp502x.c | |||
@@ -126,6 +126,10 @@ void __attribute__((interrupt("IRQ"))) irq_handler(void) | |||
126 | } | 126 | } |
127 | /* end MROBE_100 */ | 127 | /* end MROBE_100 */ |
128 | #elif defined(PHILIPS_SA9200) | 128 | #elif defined(PHILIPS_SA9200) |
129 | else if (CPU_HI_INT_STAT & GPIO0_MASK) { | ||
130 | if (GPIOD_INT_STAT & 0x02) | ||
131 | button_int(); | ||
132 | } | ||
129 | else if (CPU_HI_INT_STAT & GPIO1_MASK) { | 133 | else if (CPU_HI_INT_STAT & GPIO1_MASK) { |
130 | if (GPIOF_INT_STAT & 0x80) | 134 | if (GPIOF_INT_STAT & 0x80) |
131 | usb_insert_int(); | 135 | usb_insert_int(); |
@@ -421,6 +425,12 @@ void system_init(void) | |||
421 | DEV_RS2 = 0xffffffff; | 425 | DEV_RS2 = 0xffffffff; |
422 | DEV_RS = 0x00000000; | 426 | DEV_RS = 0x00000000; |
423 | DEV_RS2 = 0x00000000; | 427 | DEV_RS2 = 0x00000000; |
428 | #elif defined(PHILIPS_SA9200) | ||
429 | /* reset all allowed devices */ | ||
430 | DEV_RS = 0x3ffffef8; | ||
431 | DEV_RS2 = 0xffffffff; | ||
432 | DEV_RS = 0x00000000; | ||
433 | DEV_RS2 = 0x00000000; | ||
424 | #elif defined(IPOD_4G) | 434 | #elif defined(IPOD_4G) |
425 | /* set minimum startup configuration */ | 435 | /* set minimum startup configuration */ |
426 | DEV_EN = 0xc2020124; | 436 | DEV_EN = 0xc2020124; |