diff options
-rw-r--r-- | arch/mips/au1000/common/platform.c | 118 | ||||
-rw-r--r-- | arch/mips/au1000/pb1200/board_setup.c | 74 |
2 files changed, 160 insertions, 32 deletions
diff --git a/arch/mips/au1000/common/platform.c b/arch/mips/au1000/common/platform.c index 3ca3cb8a8a73..0c3fd726c3d6 100644 --- a/arch/mips/au1000/common/platform.c +++ b/arch/mips/au1000/common/platform.c | |||
@@ -14,6 +14,7 @@ | |||
14 | 14 | ||
15 | #include <asm/mach-au1x00/au1000.h> | 15 | #include <asm/mach-au1x00/au1000.h> |
16 | 16 | ||
17 | /* OHCI (USB full speed host controller) */ | ||
17 | static struct resource au1xxx_usb_ohci_resources[] = { | 18 | static struct resource au1xxx_usb_ohci_resources[] = { |
18 | [0] = { | 19 | [0] = { |
19 | .start = USB_OHCI_BASE, | 20 | .start = USB_OHCI_BASE, |
@@ -71,12 +72,129 @@ static struct platform_device au1100_lcd_device = { | |||
71 | }; | 72 | }; |
72 | #endif | 73 | #endif |
73 | 74 | ||
75 | #ifdef CONFIG_SOC_AU1200 | ||
76 | /* EHCI (USB high speed host controller) */ | ||
77 | static struct resource au1xxx_usb_ehci_resources[] = { | ||
78 | [0] = { | ||
79 | .start = USB_EHCI_BASE, | ||
80 | .end = USB_EHCI_BASE + USB_EHCI_LEN - 1, | ||
81 | .flags = IORESOURCE_MEM, | ||
82 | }, | ||
83 | [1] = { | ||
84 | .start = AU1000_USB_HOST_INT, | ||
85 | .end = AU1000_USB_HOST_INT, | ||
86 | .flags = IORESOURCE_IRQ, | ||
87 | }, | ||
88 | }; | ||
89 | |||
90 | static u64 ehci_dmamask = ~(u32)0; | ||
91 | |||
92 | static struct platform_device au1xxx_usb_ehci_device = { | ||
93 | .name = "au1xxx-ehci", | ||
94 | .id = 0, | ||
95 | .dev = { | ||
96 | .dma_mask = &ehci_dmamask, | ||
97 | .coherent_dma_mask = 0xffffffff, | ||
98 | }, | ||
99 | .num_resources = ARRAY_SIZE(au1xxx_usb_ehci_resources), | ||
100 | .resource = au1xxx_usb_ehci_resources, | ||
101 | }; | ||
102 | |||
103 | /* Au1200 UDC (USB gadget controller) */ | ||
104 | static struct resource au1xxx_usb_gdt_resources[] = { | ||
105 | [0] = { | ||
106 | .start = USB_UDC_BASE, | ||
107 | .end = USB_UDC_BASE + USB_UDC_LEN - 1, | ||
108 | .flags = IORESOURCE_MEM, | ||
109 | }, | ||
110 | [1] = { | ||
111 | .start = AU1200_USB_INT, | ||
112 | .end = AU1200_USB_INT, | ||
113 | .flags = IORESOURCE_IRQ, | ||
114 | }, | ||
115 | }; | ||
116 | |||
117 | static u64 udc_dmamask = ~(u32)0; | ||
118 | |||
119 | static struct platform_device au1xxx_usb_gdt_device = { | ||
120 | .name = "au1xxx-udc", | ||
121 | .id = 0, | ||
122 | .dev = { | ||
123 | .dma_mask = &udc_dmamask, | ||
124 | .coherent_dma_mask = 0xffffffff, | ||
125 | }, | ||
126 | .num_resources = ARRAY_SIZE(au1xxx_usb_gdt_resources), | ||
127 | .resource = au1xxx_usb_gdt_resources, | ||
128 | }; | ||
129 | |||
130 | /* Au1200 UOC (USB OTG controller) */ | ||
131 | static struct resource au1xxx_usb_otg_resources[] = { | ||
132 | [0] = { | ||
133 | .start = USB_UOC_BASE, | ||
134 | .end = USB_UOC_BASE + USB_UOC_LEN - 1, | ||
135 | .flags = IORESOURCE_MEM, | ||
136 | }, | ||
137 | [1] = { | ||
138 | .start = AU1200_USB_INT, | ||
139 | .end = AU1200_USB_INT, | ||
140 | .flags = IORESOURCE_IRQ, | ||
141 | }, | ||
142 | }; | ||
143 | |||
144 | static u64 uoc_dmamask = ~(u32)0; | ||
145 | |||
146 | static struct platform_device au1xxx_usb_otg_device = { | ||
147 | .name = "au1xxx-uoc", | ||
148 | .id = 0, | ||
149 | .dev = { | ||
150 | .dma_mask = &uoc_dmamask, | ||
151 | .coherent_dma_mask = 0xffffffff, | ||
152 | }, | ||
153 | .num_resources = ARRAY_SIZE(au1xxx_usb_otg_resources), | ||
154 | .resource = au1xxx_usb_otg_resources, | ||
155 | }; | ||
156 | |||
157 | /*** AU1200 LCD controller ***/ | ||
158 | static struct resource au1200_lcd_resources[] = { | ||
159 | [0] = { | ||
160 | .start = LCD_PHYS_ADDR, | ||
161 | .end = LCD_PHYS_ADDR + 0x800 - 1, | ||
162 | .flags = IORESOURCE_MEM, | ||
163 | }, | ||
164 | [1] = { | ||
165 | .start = AU1200_LCD_INT, | ||
166 | .end = AU1200_LCD_INT, | ||
167 | .flags = IORESOURCE_IRQ, | ||
168 | } | ||
169 | }; | ||
170 | |||
171 | static u64 au1200_lcd_dmamask = ~(u32)0; | ||
172 | |||
173 | static struct platform_device au1200_lcd_device = { | ||
174 | .name = "au1200-lcd", | ||
175 | .id = 0, | ||
176 | .dev = { | ||
177 | .dma_mask = &au1200_lcd_dmamask, | ||
178 | .coherent_dma_mask = 0xffffffff, | ||
179 | }, | ||
180 | .num_resources = ARRAY_SIZE(au1200_lcd_resources), | ||
181 | .resource = au1200_lcd_resources, | ||
182 | }; | ||
183 | #endif | ||
74 | 184 | ||
75 | static struct platform_device *au1xxx_platform_devices[] __initdata = { | 185 | static struct platform_device *au1xxx_platform_devices[] __initdata = { |
76 | &au1xxx_usb_ohci_device, | 186 | &au1xxx_usb_ohci_device, |
77 | #ifdef CONFIG_FB_AU1100 | 187 | #ifdef CONFIG_FB_AU1100 |
78 | &au1100_lcd_device, | 188 | &au1100_lcd_device, |
79 | #endif | 189 | #endif |
190 | #ifdef CONFIG_SOC_AU1200 | ||
191 | #if 0 /* fixme */ | ||
192 | &au1xxx_usb_ehci_device, | ||
193 | #endif | ||
194 | &au1xxx_usb_gdt_device, | ||
195 | &au1xxx_usb_otg_device, | ||
196 | &au1200_lcd_device, | ||
197 | #endif | ||
80 | }; | 198 | }; |
81 | 199 | ||
82 | int au1xxx_platform_init(void) | 200 | int au1xxx_platform_init(void) |
diff --git a/arch/mips/au1000/pb1200/board_setup.c b/arch/mips/au1000/pb1200/board_setup.c index 9c5d48dd7121..a45b17538ac9 100644 --- a/arch/mips/au1000/pb1200/board_setup.c +++ b/arch/mips/au1000/pb1200/board_setup.c | |||
@@ -58,22 +58,10 @@ | |||
58 | extern void _board_init_irq(void); | 58 | extern void _board_init_irq(void); |
59 | extern void (*board_init_irq)(void); | 59 | extern void (*board_init_irq)(void); |
60 | 60 | ||
61 | #ifdef CONFIG_BLK_DEV_IDE_AU1XXX | ||
62 | extern u32 au1xxx_ide_virtbase; | ||
63 | extern u64 au1xxx_ide_physbase; | ||
64 | extern int au1xxx_ide_irq; | ||
65 | |||
66 | u32 led_base_addr; | ||
67 | /* Ddma */ | ||
68 | chan_tab_t *ide_read_ch, *ide_write_ch; | ||
69 | u32 au1xxx_ide_ddma_enable = 0, switch4ddma = 1; // PIO+ddma | ||
70 | |||
71 | dbdev_tab_t new_dbdev_tab_element = { DSCR_CMD0_THROTTLE, DEV_FLAGS_ANYUSE, 0, 0, 0x00000000, 0, 0 }; | ||
72 | #endif /* end CONFIG_BLK_DEV_IDE_AU1XXX */ | ||
73 | |||
74 | void board_reset (void) | 61 | void board_reset (void) |
75 | { | 62 | { |
76 | bcsr->resets = 0; | 63 | bcsr->resets = 0; |
64 | bcsr->system = 0; | ||
77 | } | 65 | } |
78 | 66 | ||
79 | void __init board_setup(void) | 67 | void __init board_setup(void) |
@@ -94,7 +82,7 @@ void __init board_setup(void) | |||
94 | au_sync(); | 82 | au_sync(); |
95 | #endif | 83 | #endif |
96 | 84 | ||
97 | #if defined( CONFIG_I2C_ALGO_AU1550 ) | 85 | #if defined(CONFIG_I2C_AU1550) |
98 | { | 86 | { |
99 | u32 freq0, clksrc; | 87 | u32 freq0, clksrc; |
100 | 88 | ||
@@ -134,35 +122,24 @@ void __init board_setup(void) | |||
134 | #ifdef CONFIG_FB_AU1200 | 122 | #ifdef CONFIG_FB_AU1200 |
135 | argptr = prom_getcmdline(); | 123 | argptr = prom_getcmdline(); |
136 | #ifdef CONFIG_MIPS_PB1200 | 124 | #ifdef CONFIG_MIPS_PB1200 |
137 | strcat(argptr, " video=au1200fb:panel:s11"); | 125 | strcat(argptr, " video=au1200fb:panel:bs"); |
138 | #endif | 126 | #endif |
139 | #ifdef CONFIG_MIPS_DB1200 | 127 | #ifdef CONFIG_MIPS_DB1200 |
140 | strcat(argptr, " video=au1200fb:panel:s7"); | 128 | strcat(argptr, " video=au1200fb:panel:bs"); |
141 | #endif | 129 | #endif |
142 | #endif | 130 | #endif |
143 | 131 | ||
144 | #if defined(CONFIG_BLK_DEV_IDE_AU1XXX) | ||
145 | /* | ||
146 | * Iniz IDE parameters | ||
147 | */ | ||
148 | au1xxx_ide_irq = PB1200_IDE_INT; | ||
149 | au1xxx_ide_physbase = AU1XXX_ATA_PHYS_ADDR; | ||
150 | au1xxx_ide_virtbase = KSEG1ADDR(AU1XXX_ATA_PHYS_ADDR); | ||
151 | /* | ||
152 | * change PIO or PIO+Ddma | ||
153 | * check the GPIO-5 pin condition. pb1200:s18_dot */ | ||
154 | switch4ddma = (au_readl(SYS_PINSTATERD) & (1 << 5)) ? 1 : 0; | ||
155 | #endif | ||
156 | |||
157 | /* The Pb1200 development board uses external MUX for PSC0 to | 132 | /* The Pb1200 development board uses external MUX for PSC0 to |
158 | support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI | 133 | support SMB/SPI. bcsr->resets bit 12: 0=SMB 1=SPI |
159 | */ | 134 | */ |
160 | #if defined(CONFIG_AU1550_PSC_SPI) && defined(CONFIG_I2C_ALGO_AU1550) | 135 | #if defined(CONFIG_AU1XXX_PSC_SPI) && defined(CONFIG_I2C_AU1550) |
161 | #error I2C and SPI are mutually exclusive. Both are physically connected to PSC0.\ | 136 | #error I2C and SPI are mutually exclusive. Both are physically connected to PSC0.\ |
162 | Refer to Pb1200/Db1200 documentation. | 137 | Refer to Pb1200/Db1200 documentation. |
163 | #elif defined( CONFIG_AU1550_PSC_SPI ) | 138 | #elif defined( CONFIG_AU1XXX_PSC_SPI ) |
164 | bcsr->resets |= BCSR_RESETS_PCS0MUX; | 139 | bcsr->resets |= BCSR_RESETS_PCS0MUX; |
165 | #elif defined( CONFIG_I2C_ALGO_AU1550 ) | 140 | /*Hard Coding Value to enable Temp Sensors [bit 14] Value for SOC Au1200. Pls refer documentation*/ |
141 | bcsr->resets =0x900f; | ||
142 | #elif defined( CONFIG_I2C_AU1550 ) | ||
166 | bcsr->resets &= (~BCSR_RESETS_PCS0MUX); | 143 | bcsr->resets &= (~BCSR_RESETS_PCS0MUX); |
167 | #endif | 144 | #endif |
168 | au_sync(); | 145 | au_sync(); |
@@ -181,3 +158,36 @@ void __init board_setup(void) | |||
181 | board_init_irq = _board_init_irq; | 158 | board_init_irq = _board_init_irq; |
182 | } | 159 | } |
183 | } | 160 | } |
161 | |||
162 | int | ||
163 | board_au1200fb_panel (void) | ||
164 | { | ||
165 | BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; | ||
166 | int p; | ||
167 | |||
168 | p = bcsr->switches; | ||
169 | p >>= 8; | ||
170 | p &= 0x0F; | ||
171 | return p; | ||
172 | } | ||
173 | |||
174 | int | ||
175 | board_au1200fb_panel_init (void) | ||
176 | { | ||
177 | /* Apply power */ | ||
178 | BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; | ||
179 | bcsr->board |= (BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL); | ||
180 | /*printk("board_au1200fb_panel_init()\n"); */ | ||
181 | return 0; | ||
182 | } | ||
183 | |||
184 | int | ||
185 | board_au1200fb_panel_shutdown (void) | ||
186 | { | ||
187 | /* Remove power */ | ||
188 | BCSR *bcsr = (BCSR *)BCSR_KSEG1_ADDR; | ||
189 | bcsr->board &= ~(BCSR_BOARD_LCDVEE | BCSR_BOARD_LCDVDD | BCSR_BOARD_LCDBL); | ||
190 | /*printk("board_au1200fb_panel_shutdown()\n"); */ | ||
191 | return 0; | ||
192 | } | ||
193 | |||