2 * arch/arm/mach-kirkwood/openrd-setup.c
4 * Marvell OpenRD (Base|Client|Ultimate) Board Setup
6 * This file is licensed under the terms of the GNU General Public
7 * License version 2. This program is licensed "as is" without any
8 * warranty of any kind, whether express or implied.
11 #include <linux/kernel.h>
12 #include <linux/init.h>
13 #include <linux/platform_device.h>
14 #include <linux/mtd/nand.h>
15 #include <linux/mtd/partitions.h>
16 #include <linux/ata_platform.h>
17 #include <linux/mv643xx_eth.h>
18 #include <linux/i2c.h>
19 #include <linux/gpio.h>
20 #include <asm/mach-types.h>
21 #include <asm/mach/arch.h>
22 #include <mach/kirkwood.h>
23 #include <plat/mvsdio.h>
27 static struct mtd_partition openrd_nand_parts
[] = {
32 .mask_flags
= MTD_WRITEABLE
35 .offset
= MTDPART_OFS_NXTBLK
,
39 .offset
= MTDPART_OFS_NXTBLK
,
40 .size
= MTDPART_SIZ_FULL
44 static struct mv643xx_eth_platform_data openrd_ge00_data
= {
45 .phy_addr
= MV643XX_ETH_PHY_ADDR(8),
48 static struct mv643xx_eth_platform_data openrd_ge01_data
= {
49 .phy_addr
= MV643XX_ETH_PHY_ADDR(24),
52 static struct mv_sata_platform_data openrd_sata_data
= {
56 static struct mvsdio_platform_data openrd_mvsdio_data
= {
57 .gpio_card_detect
= 29, /* MPP29 used as SD card detect */
60 static unsigned int openrd_mpp_config
[] __initdata
= {
73 /* Configure MPP for UART1 */
74 static unsigned int openrd_uart1_mpp_config
[] __initdata
= {
80 static struct i2c_board_info i2c_board_info
[] __initdata
= {
82 I2C_BOARD_INFO("cs42l51", 0x4a),
86 static int __initdata uart1
;
88 static int __init
sd_uart_selection(char *str
)
92 /* Default is SD. Change if required, for UART */
96 if (!strncmp(str
, "232", 3)) {
98 } else if (!strncmp(str
, "485", 3)) {
99 /* OpenRD-Base doesn't have RS485. Treat is as an
100 * unknown argument & just have default setting -
102 if (machine_is_openrd_base()) {
111 /* Parse boot_command_line string kw_openrd_init_uart1=232/485 */
112 __setup("kw_openrd_init_uart1=", sd_uart_selection
);
114 static int __init
uart1_mpp_config(void)
116 kirkwood_mpp_conf(openrd_uart1_mpp_config
);
118 if (gpio_request(34, "SD_UART1_SEL")) {
119 printk(KERN_ERR
"GPIO request failed for SD/UART1 selection"
124 if (gpio_request(28, "RS232_RS485_SEL")) {
125 printk(KERN_ERR
"GPIO request failed for RS232/RS485 selection"
132 * Pin # 34: 0 => UART1, 1 => SD */
133 gpio_direction_output(34, 0);
135 /* Select RS232 OR RS485
136 * Pin # 28: 0 => RS232, 1 => RS485 */
138 gpio_direction_output(28, 0);
140 gpio_direction_output(28, 1);
148 static void __init
openrd_init(void)
151 * Basic setup. Needs to be called early.
154 kirkwood_mpp_conf(openrd_mpp_config
);
156 kirkwood_uart0_init();
157 kirkwood_nand_init(ARRAY_AND_SIZE(openrd_nand_parts
), 25);
159 kirkwood_ehci_init();
161 if (machine_is_openrd_ultimate()) {
162 openrd_ge00_data
.phy_addr
= MV643XX_ETH_PHY_ADDR(0);
163 openrd_ge01_data
.phy_addr
= MV643XX_ETH_PHY_ADDR(1);
166 kirkwood_ge00_init(&openrd_ge00_data
);
167 if (!machine_is_openrd_base())
168 kirkwood_ge01_init(&openrd_ge01_data
);
170 kirkwood_sata_init(&openrd_sata_data
);
174 if (machine_is_openrd_client() || machine_is_openrd_ultimate()) {
175 i2c_register_board_info(0, i2c_board_info
,
176 ARRAY_SIZE(i2c_board_info
));
177 kirkwood_audio_init();
182 printk(KERN_ERR
"Invalid kernel parameter to select "
183 "UART1. Defaulting to SD. ERROR CODE: %d\n",
187 * Pin # 34: 0 => UART1, 1 => SD */
188 if (gpio_request(34, "SD_UART1_SEL")) {
189 printk(KERN_ERR
"GPIO request failed for SD/UART1 "
190 "selection, gpio: 34\n");
193 gpio_direction_output(34, 1);
195 kirkwood_sdio_init(&openrd_mvsdio_data
);
198 if (!uart1_mpp_config())
199 kirkwood_uart1_init();
203 static int __init
openrd_pci_init(void)
205 if (machine_is_openrd_base() ||
206 machine_is_openrd_client() ||
207 machine_is_openrd_ultimate())
208 kirkwood_pcie_init(KW_PCIE0
);
212 subsys_initcall(openrd_pci_init
);
214 #ifdef CONFIG_MACH_OPENRD_BASE
215 MACHINE_START(OPENRD_BASE
, "Marvell OpenRD Base Board")
216 /* Maintainer: Dhaval Vasa <dhaval.vasa@einfochips.com> */
217 .atag_offset
= 0x100,
218 .init_machine
= openrd_init
,
219 .map_io
= kirkwood_map_io
,
220 .init_early
= kirkwood_init_early
,
221 .init_irq
= kirkwood_init_irq
,
222 .timer
= &kirkwood_timer
,
226 #ifdef CONFIG_MACH_OPENRD_CLIENT
227 MACHINE_START(OPENRD_CLIENT
, "Marvell OpenRD Client Board")
228 /* Maintainer: Dhaval Vasa <dhaval.vasa@einfochips.com> */
229 .atag_offset
= 0x100,
230 .init_machine
= openrd_init
,
231 .map_io
= kirkwood_map_io
,
232 .init_early
= kirkwood_init_early
,
233 .init_irq
= kirkwood_init_irq
,
234 .timer
= &kirkwood_timer
,
238 #ifdef CONFIG_MACH_OPENRD_ULTIMATE
239 MACHINE_START(OPENRD_ULTIMATE
, "Marvell OpenRD Ultimate Board")
240 /* Maintainer: Dhaval Vasa <dhaval.vasa@einfochips.com> */
241 .atag_offset
= 0x100,
242 .init_machine
= openrd_init
,
243 .map_io
= kirkwood_map_io
,
244 .init_early
= kirkwood_init_early
,
245 .init_irq
= kirkwood_init_irq
,
246 .timer
= &kirkwood_timer
,