diff options
Diffstat (limited to 'arch/sh/boards/board-urquell.c')
-rw-r--r-- | arch/sh/boards/board-urquell.c | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/arch/sh/boards/board-urquell.c b/arch/sh/boards/board-urquell.c new file mode 100644 index 000000000000..17036ce20086 --- /dev/null +++ b/arch/sh/boards/board-urquell.c | |||
@@ -0,0 +1,162 @@ | |||
1 | /* | ||
2 | * Renesas Technology Corp. SH7786 Urquell Support. | ||
3 | * | ||
4 | * Copyright (C) 2008 Kuninori Morimoto <morimoto.kuninori@renesas.com> | ||
5 | * Copyright (C) 2008 Yoshihiro Shimoda | ||
6 | * | ||
7 | * This file is subject to the terms and conditions of the GNU General Public | ||
8 | * License. See the file "COPYING" in the main directory of this archive | ||
9 | * for more details. | ||
10 | */ | ||
11 | #include <linux/init.h> | ||
12 | #include <linux/platform_device.h> | ||
13 | #include <linux/fb.h> | ||
14 | #include <linux/smc91x.h> | ||
15 | #include <linux/mtd/physmap.h> | ||
16 | #include <linux/delay.h> | ||
17 | #include <linux/gpio.h> | ||
18 | #include <linux/irq.h> | ||
19 | #include <mach/urquell.h> | ||
20 | #include <cpu/sh7786.h> | ||
21 | #include <asm/heartbeat.h> | ||
22 | #include <asm/sizes.h> | ||
23 | |||
24 | static struct resource heartbeat_resources[] = { | ||
25 | [0] = { | ||
26 | .start = BOARDREG(SLEDR), | ||
27 | .end = BOARDREG(SLEDR), | ||
28 | .flags = IORESOURCE_MEM, | ||
29 | }, | ||
30 | }; | ||
31 | |||
32 | static struct heartbeat_data heartbeat_data = { | ||
33 | .regsize = 16, | ||
34 | }; | ||
35 | |||
36 | static struct platform_device heartbeat_device = { | ||
37 | .name = "heartbeat", | ||
38 | .id = -1, | ||
39 | .dev = { | ||
40 | .platform_data = &heartbeat_data, | ||
41 | }, | ||
42 | .num_resources = ARRAY_SIZE(heartbeat_resources), | ||
43 | .resource = heartbeat_resources, | ||
44 | }; | ||
45 | |||
46 | static struct smc91x_platdata smc91x_info = { | ||
47 | .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, | ||
48 | }; | ||
49 | |||
50 | static struct resource smc91x_eth_resources[] = { | ||
51 | [0] = { | ||
52 | .name = "SMC91C111" , | ||
53 | .start = 0x05800300, | ||
54 | .end = 0x0580030f, | ||
55 | .flags = IORESOURCE_MEM, | ||
56 | }, | ||
57 | [1] = { | ||
58 | .start = 11, | ||
59 | .flags = IORESOURCE_IRQ, | ||
60 | }, | ||
61 | }; | ||
62 | |||
63 | static struct platform_device smc91x_eth_device = { | ||
64 | .name = "smc91x", | ||
65 | .num_resources = ARRAY_SIZE(smc91x_eth_resources), | ||
66 | .resource = smc91x_eth_resources, | ||
67 | .dev = { | ||
68 | .platform_data = &smc91x_info, | ||
69 | }, | ||
70 | }; | ||
71 | |||
72 | static struct mtd_partition nor_flash_partitions[] = { | ||
73 | { | ||
74 | .name = "loader", | ||
75 | .offset = 0x00000000, | ||
76 | .size = SZ_512K, | ||
77 | .mask_flags = MTD_WRITEABLE, /* Read-only */ | ||
78 | }, | ||
79 | { | ||
80 | .name = "bootenv", | ||
81 | .offset = MTDPART_OFS_APPEND, | ||
82 | .size = SZ_512K, | ||
83 | .mask_flags = MTD_WRITEABLE, /* Read-only */ | ||
84 | }, | ||
85 | { | ||
86 | .name = "kernel", | ||
87 | .offset = MTDPART_OFS_APPEND, | ||
88 | .size = SZ_4M, | ||
89 | }, | ||
90 | { | ||
91 | .name = "data", | ||
92 | .offset = MTDPART_OFS_APPEND, | ||
93 | .size = MTDPART_SIZ_FULL, | ||
94 | }, | ||
95 | }; | ||
96 | |||
97 | static struct physmap_flash_data nor_flash_data = { | ||
98 | .width = 2, | ||
99 | .parts = nor_flash_partitions, | ||
100 | .nr_parts = ARRAY_SIZE(nor_flash_partitions), | ||
101 | }; | ||
102 | |||
103 | static struct resource nor_flash_resources[] = { | ||
104 | [0] = { | ||
105 | .start = NOR_FLASH_ADDR, | ||
106 | .end = NOR_FLASH_ADDR + NOR_FLASH_SIZE - 1, | ||
107 | .flags = IORESOURCE_MEM, | ||
108 | } | ||
109 | }; | ||
110 | |||
111 | static struct platform_device nor_flash_device = { | ||
112 | .name = "physmap-flash", | ||
113 | .dev = { | ||
114 | .platform_data = &nor_flash_data, | ||
115 | }, | ||
116 | .num_resources = ARRAY_SIZE(nor_flash_resources), | ||
117 | .resource = nor_flash_resources, | ||
118 | }; | ||
119 | |||
120 | static struct platform_device *urquell_devices[] __initdata = { | ||
121 | &heartbeat_device, | ||
122 | &smc91x_eth_device, | ||
123 | &nor_flash_device, | ||
124 | }; | ||
125 | |||
126 | static int __init urquell_devices_setup(void) | ||
127 | { | ||
128 | /* USB */ | ||
129 | gpio_request(GPIO_FN_USB_OVC0, NULL); | ||
130 | gpio_request(GPIO_FN_USB_PENC0, NULL); | ||
131 | |||
132 | return platform_add_devices(urquell_devices, | ||
133 | ARRAY_SIZE(urquell_devices)); | ||
134 | } | ||
135 | device_initcall(urquell_devices_setup); | ||
136 | |||
137 | static void urquell_power_off(void) | ||
138 | { | ||
139 | __raw_writew(0xa5a5, UBOARDREG(SRSTR)); | ||
140 | } | ||
141 | |||
142 | static void __init urquell_init_irq(void) | ||
143 | { | ||
144 | plat_irq_setup_pins(IRQ_MODE_IRL3210_MASK); | ||
145 | } | ||
146 | |||
147 | /* Initialize the board */ | ||
148 | static void __init urquell_setup(char **cmdline_p) | ||
149 | { | ||
150 | printk(KERN_INFO "Renesas Technology Corp. Urquell support.\n"); | ||
151 | |||
152 | pm_power_off = urquell_power_off; | ||
153 | } | ||
154 | |||
155 | /* | ||
156 | * The Machine Vector | ||
157 | */ | ||
158 | static struct sh_machine_vector mv_urquell __initmv = { | ||
159 | .mv_name = "Urquell", | ||
160 | .mv_setup = urquell_setup, | ||
161 | .mv_init_irq = urquell_init_irq, | ||
162 | }; | ||