]> git.karo-electronics.de Git - mv-sheeva.git/blob - arch/arm/mach-w90x900/mach-w90p910evb.c
[ARM] 5496/1: Add w90p910 touch screen driver relevant kernel parts[2/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 /*TouchScreen controller*/
139
140 static struct resource w90x900_ts_resource[] = {
141         [0] = {
142                 .start = W90X900_PA_ADC,
143                 .end   = W90X900_PA_ADC + W90X900_SZ_ADC-1,
144                 .flags = IORESOURCE_MEM,
145         },
146         [1] = {
147                 .start = IRQ_ADC,
148                 .end   = IRQ_ADC,
149                 .flags = IORESOURCE_IRQ,
150         },
151 };
152
153 struct platform_device w90x900_device_ts = {
154         .name           = "w90x900-ts",
155         .id             = -1,
156         .resource       = w90x900_ts_resource,
157         .num_resources  = ARRAY_SIZE(w90x900_ts_resource),
158 };
159 EXPORT_SYMBOL(w90x900_device_ts);
160
161 static struct map_desc w90p910_iodesc[] __initdata = {
162 };
163
164 /*Here should be your evb resourse,such as LCD*/
165
166 static struct platform_device *w90p910evb_dev[] __initdata = {
167         &w90p910_serial_device,
168         &w90p910_flash_device,
169         &w90x900_device_usb_ehci,
170         &w90x900_device_usb_ohci,
171         &w90x900_device_ts,
172 };
173
174 static void __init w90p910evb_map_io(void)
175 {
176         w90p910_map_io(w90p910_iodesc, ARRAY_SIZE(w90p910_iodesc));
177         w90p910_init_clocks(0);
178 }
179
180 static void __init w90p910evb_init(void)
181 {
182         platform_add_devices(w90p910evb_dev, ARRAY_SIZE(w90p910evb_dev));
183 }
184
185 MACHINE_START(W90P910EVB, "W90P910EVB")
186         /* Maintainer: Wan ZongShun */
187         .phys_io        = W90X900_PA_UART,
188         .io_pg_offst    = (((u32)W90X900_VA_UART) >> 18) & 0xfffc,
189         .boot_params    = 0,
190         .map_io         = w90p910evb_map_io,
191         .init_irq       = w90x900_init_irq,
192         .init_machine   = w90p910evb_init,
193         .timer          = &w90x900_timer,
194 MACHINE_END