]> git.karo-electronics.de Git - mv-sheeva.git/blob - arch/arm/mach-w90x900/mach-w90p910evb.c
[ARM] 5495/1: Add w90p910 usb host driver relevant kernel parts[1/2]
[mv-sheeva.git] / arch / arm / mach-w90x900 / mach-w90p910evb.c
1 /*
2  * linux/arch/arm/mach-w90x900/mach-w90p910evb.c
3  *
4  * Based on mach-s3c2410/mach-smdk2410.c by Jonas Dietsche
5  *
6  * Copyright (C) 2008 Nuvoton technology corporation.
7  *
8  * Wan ZongShun <mcuos.com@gmail.com>
9  *
10  * This program is free software; you can redistribute it and/or
11  * modify it under the terms of the GNU General Public License as
12  * published by the Free Software Foundation;version 2 of the License.
13  *
14  */
15
16 #include <linux/kernel.h>
17 #include <linux/types.h>
18 #include <linux/interrupt.h>
19 #include <linux/list.h>
20 #include <linux/timer.h>
21 #include <linux/init.h>
22 #include <linux/platform_device.h>
23 #include <linux/mtd/physmap.h>
24
25 #include <asm/mach/arch.h>
26 #include <asm/mach/map.h>
27 #include <asm/mach/irq.h>
28 #include <asm/mach-types.h>
29
30 #include <mach/regs-serial.h>
31 #include <mach/map.h>
32
33 #include "cpu.h"
34 /*w90p910 evb norflash driver data */
35
36 #define W90P910_FLASH_BASE      0xA0000000
37 #define W90P910_FLASH_SIZE      0x400000
38
39 static struct mtd_partition w90p910_flash_partitions[] = {
40         {
41                 .name   =       "NOR Partition 1 for kernel (960K)",
42                 .size   =       0xF0000,
43                 .offset =       0x10000,
44         },
45         {
46                 .name   =       "NOR Partition 2 for image (1M)",
47                 .size   =       0x100000,
48                 .offset =       0x100000,
49         },
50         {
51                 .name   =       "NOR Partition 3 for user (2M)",
52                 .size   =       0x200000,
53                 .offset =       0x00200000,
54         }
55 };
56
57 static struct physmap_flash_data w90p910_flash_data = {
58         .width          =       2,
59         .parts          =       w90p910_flash_partitions,
60         .nr_parts       =       ARRAY_SIZE(w90p910_flash_partitions),
61 };
62
63 static struct resource w90p910_flash_resources[] = {
64         {
65                 .start  =       W90P910_FLASH_BASE,
66                 .end    =       W90P910_FLASH_BASE + W90P910_FLASH_SIZE - 1,
67                 .flags  =       IORESOURCE_MEM,
68         }
69 };
70
71 static struct platform_device w90p910_flash_device = {
72         .name           =       "physmap-flash",
73         .id             =       0,
74         .dev            = {
75                                 .platform_data = &w90p910_flash_data,
76                         },
77         .resource       =       w90p910_flash_resources,
78         .num_resources  =       ARRAY_SIZE(w90p910_flash_resources),
79 };
80
81 /* USB EHCI Host Controller */
82
83 static struct resource w90x900_usb_ehci_resource[] = {
84         [0] = {
85                 .start = W90X900_PA_USBEHCIHOST,
86                 .end   = W90X900_PA_USBEHCIHOST + W90X900_SZ_USBEHCIHOST - 1,
87                 .flags = IORESOURCE_MEM,
88         },
89         [1] = {
90                 .start = IRQ_USBH,
91                 .end   = IRQ_USBH,
92                 .flags = IORESOURCE_IRQ,
93         }
94 };
95
96 static u64 w90x900_device_usb_ehci_dmamask = 0xffffffffUL;
97
98 struct platform_device w90x900_device_usb_ehci = {
99         .name             = "w90x900-ehci",
100         .id               = -1,
101         .num_resources    = ARRAY_SIZE(w90x900_usb_ehci_resource),
102         .resource         = w90x900_usb_ehci_resource,
103         .dev              = {
104                 .dma_mask = &w90x900_device_usb_ehci_dmamask,
105                 .coherent_dma_mask = 0xffffffffUL
106         }
107 };
108 EXPORT_SYMBOL(w90x900_device_usb_ehci);
109
110 /* USB OHCI Host Controller */
111
112 static struct resource w90x900_usb_ohci_resource[] = {
113         [0] = {
114                 .start = W90X900_PA_USBOHCIHOST,
115                 .end   = W90X900_PA_USBOHCIHOST + W90X900_SZ_USBOHCIHOST - 1,
116                 .flags = IORESOURCE_MEM,
117         },
118         [1] = {
119                 .start = IRQ_USBH,
120                 .end   = IRQ_USBH,
121                 .flags = IORESOURCE_IRQ,
122         }
123 };
124
125 static u64 w90x900_device_usb_ohci_dmamask = 0xffffffffUL;
126 struct platform_device w90x900_device_usb_ohci = {
127         .name             = "w90x900-ohci",
128         .id               = -1,
129         .num_resources    = ARRAY_SIZE(w90x900_usb_ohci_resource),
130         .resource         = w90x900_usb_ohci_resource,
131         .dev              = {
132                 .dma_mask = &w90x900_device_usb_ohci_dmamask,
133                 .coherent_dma_mask = 0xffffffffUL
134         }
135 };
136 EXPORT_SYMBOL(w90x900_device_usb_ohci);
137
138 static struct map_desc w90p910_iodesc[] __initdata = {
139 };
140
141 /*Here should be your evb resourse,such as LCD*/
142
143 static struct platform_device *w90p910evb_dev[] __initdata = {
144         &w90p910_serial_device,
145         &w90p910_flash_device,
146         &w90x900_device_usb_ehci,
147         &w90x900_device_usb_ohci,
148 };
149
150 static void __init w90p910evb_map_io(void)
151 {
152         w90p910_map_io(w90p910_iodesc, ARRAY_SIZE(w90p910_iodesc));
153         w90p910_init_clocks(0);
154 }
155
156 static void __init w90p910evb_init(void)
157 {
158         platform_add_devices(w90p910evb_dev, ARRAY_SIZE(w90p910evb_dev));
159 }
160
161 MACHINE_START(W90P910EVB, "W90P910EVB")
162         /* Maintainer: Wan ZongShun */
163         .phys_io        = W90X900_PA_UART,
164         .io_pg_offst    = (((u32)W90X900_VA_UART) >> 18) & 0xfffc,
165         .boot_params    = 0,
166         .map_io         = w90p910evb_map_io,
167         .init_irq       = w90x900_init_irq,
168         .init_machine   = w90p910evb_init,
169         .timer          = &w90x900_timer,
170 MACHINE_END