Commit | Line | Data |
---|---|---|
a98253e8 WS |
1 | /* |
2 | * board setup for STMP378x-Development-Board | |
3 | * | |
4 | * based on mx23evk board setup and information gained form the original | |
5 | * plat-stmp based board setup, now converted to mach-mxs. | |
6 | * | |
7 | * Copyright 2010 Freescale Semiconductor, Inc. All Rights Reserved. | |
8 | * Copyright (C) 2011 Wolfram Sang, Pengutronix e.K. | |
9 | * | |
10 | * This program is free software; you can redistribute it and/or modify | |
11 | * it under the terms of the GNU General Public License as published by | |
12 | * the Free Software Foundation; version 2 of the License. | |
13 | * | |
14 | * This program is distributed in the hope that it will be useful, | |
15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
17 | * GNU General Public License for more details. | |
18 | */ | |
19 | ||
20 | #include <linux/platform_device.h> | |
21 | #include <linux/gpio.h> | |
a98253e8 WS |
22 | #include <linux/spi/spi.h> |
23 | ||
24 | #include <asm/mach-types.h> | |
25 | #include <asm/mach/arch.h> | |
26 | #include <asm/mach/time.h> | |
27 | ||
28 | #include <mach/common.h> | |
29 | #include <mach/iomux-mx23.h> | |
30 | ||
31 | #include "devices-mx23.h" | |
32 | ||
33 | #define STMP378X_DEVB_MMC0_WRITE_PROTECT MXS_GPIO_NR(1, 30) | |
34 | #define STMP378X_DEVB_MMC0_SLOT_POWER MXS_GPIO_NR(1, 29) | |
35 | ||
36 | #define STMP378X_DEVB_PAD_AUART (MXS_PAD_4MA | MXS_PAD_1V8 | MXS_PAD_NOPULL) | |
37 | ||
38 | static const iomux_cfg_t stmp378x_dvb_pads[] __initconst = { | |
39 | /* duart (extended setup missing in old boardcode, too */ | |
40 | MX23_PAD_PWM0__DUART_RX, | |
41 | MX23_PAD_PWM1__DUART_TX, | |
42 | ||
43 | /* auart */ | |
44 | MX23_PAD_AUART1_RX__AUART1_RX | STMP378X_DEVB_PAD_AUART, | |
45 | MX23_PAD_AUART1_TX__AUART1_TX | STMP378X_DEVB_PAD_AUART, | |
46 | MX23_PAD_AUART1_CTS__AUART1_CTS | STMP378X_DEVB_PAD_AUART, | |
47 | MX23_PAD_AUART1_RTS__AUART1_RTS | STMP378X_DEVB_PAD_AUART, | |
48 | ||
49 | /* mmc */ | |
50 | MX23_PAD_SSP1_DATA0__SSP1_DATA0 | | |
51 | (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), | |
52 | MX23_PAD_SSP1_DATA1__SSP1_DATA1 | | |
53 | (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), | |
54 | MX23_PAD_SSP1_DATA2__SSP1_DATA2 | | |
55 | (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), | |
56 | MX23_PAD_SSP1_DATA3__SSP1_DATA3 | | |
57 | (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), | |
58 | MX23_PAD_SSP1_CMD__SSP1_CMD | | |
59 | (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_PULLUP), | |
60 | MX23_PAD_SSP1_DETECT__SSP1_DETECT | | |
61 | (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_NOPULL), | |
62 | MX23_PAD_SSP1_SCK__SSP1_SCK | | |
63 | (MXS_PAD_8MA | MXS_PAD_3V3 | MXS_PAD_NOPULL), | |
64 | MX23_PAD_PWM4__GPIO_1_30 | MXS_PAD_CTRL, /* write protect */ | |
65 | MX23_PAD_PWM3__GPIO_1_29 | MXS_PAD_CTRL, /* power enable */ | |
66 | }; | |
67 | ||
68 | static struct mxs_mmc_platform_data stmp378x_dvb_mmc_pdata __initdata = { | |
69 | .wp_gpio = STMP378X_DEVB_MMC0_WRITE_PROTECT, | |
70 | }; | |
71 | ||
72 | static struct spi_board_info spi_board_info[] __initdata = { | |
73 | #if defined(CONFIG_ENC28J60) || defined(CONFIG_ENC28J60_MODULE) | |
74 | { | |
75 | .modalias = "enc28j60", | |
76 | .max_speed_hz = 6 * 1000 * 1000, | |
77 | .bus_num = 1, | |
78 | .chip_select = 0, | |
79 | .platform_data = NULL, | |
80 | }, | |
81 | #endif | |
82 | }; | |
83 | ||
84 | static void __init stmp378x_dvb_init(void) | |
85 | { | |
86 | int ret; | |
87 | ||
88 | mxs_iomux_setup_multiple_pads(stmp378x_dvb_pads, | |
89 | ARRAY_SIZE(stmp378x_dvb_pads)); | |
90 | ||
91 | mx23_add_duart(); | |
92 | mx23_add_auart0(); | |
87d022cc | 93 | mx23_add_rtc_stmp3xxx(); |
a98253e8 WS |
94 | |
95 | /* power on mmc slot */ | |
96 | ret = gpio_request_one(STMP378X_DEVB_MMC0_SLOT_POWER, | |
97 | GPIOF_OUT_INIT_LOW, "mmc0-slot-power"); | |
98 | if (ret) | |
99 | pr_warn("could not power mmc (%d)\n", ret); | |
100 | ||
101 | mx23_add_mxs_mmc(0, &stmp378x_dvb_mmc_pdata); | |
102 | ||
103 | spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); | |
104 | } | |
105 | ||
106 | static void __init stmp378x_dvb_timer_init(void) | |
107 | { | |
108 | mx23_clocks_init(); | |
109 | } | |
110 | ||
111 | static struct sys_timer stmp378x_dvb_timer = { | |
112 | .init = stmp378x_dvb_timer_init, | |
113 | }; | |
114 | ||
115 | MACHINE_START(STMP378X, "STMP378X") | |
116 | .map_io = mx23_map_io, | |
117 | .init_irq = mx23_init_irq, | |
a98253e8 | 118 | .timer = &stmp378x_dvb_timer, |
8d2d2d1d | 119 | .init_machine = stmp378x_dvb_init, |
a98253e8 | 120 | MACHINE_END |