aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-mx5/board-mx53_evk.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-mx5/board-mx53_evk.c')
-rw-r--r--arch/arm/mach-mx5/board-mx53_evk.c74
1 files changed, 74 insertions, 0 deletions
diff --git a/arch/arm/mach-mx5/board-mx53_evk.c b/arch/arm/mach-mx5/board-mx53_evk.c
index fa97d0d5dd05..caee04c08238 100644
--- a/arch/arm/mach-mx5/board-mx53_evk.c
+++ b/arch/arm/mach-mx5/board-mx53_evk.c
@@ -21,6 +21,11 @@
21 21
22#include <linux/init.h> 22#include <linux/init.h>
23#include <linux/clk.h> 23#include <linux/clk.h>
24#include <linux/fec.h>
25#include <linux/delay.h>
26#include <linux/gpio.h>
27#include <linux/spi/flash.h>
28#include <linux/spi/spi.h>
24#include <mach/common.h> 29#include <mach/common.h>
25#include <mach/hardware.h> 30#include <mach/hardware.h>
26#include <asm/mach-types.h> 31#include <asm/mach-types.h>
@@ -29,6 +34,10 @@
29#include <mach/imx-uart.h> 34#include <mach/imx-uart.h>
30#include <mach/iomux-mx53.h> 35#include <mach/iomux-mx53.h>
31 36
37#define SMD_FEC_PHY_RST IMX_GPIO_NR(7, 6)
38#define EVK_ECSPI1_CS0 IMX_GPIO_NR(2, 30)
39#define EVK_ECSPI1_CS1 IMX_GPIO_NR(3, 19)
40
32#include "crm_regs.h" 41#include "crm_regs.h"
33#include "devices-imx53.h" 42#include "devices-imx53.h"
34 43
@@ -47,6 +56,14 @@ static iomux_v3_cfg_t mx53_evk_pads[] = {
47 MX53_PAD_ATA_CS_1__UART3_RXD, 56 MX53_PAD_ATA_CS_1__UART3_RXD,
48 MX53_PAD_ATA_DA_1__UART3_CTS, 57 MX53_PAD_ATA_DA_1__UART3_CTS,
49 MX53_PAD_ATA_DA_2__UART3_RTS, 58 MX53_PAD_ATA_DA_2__UART3_RTS,
59
60 MX53_PAD_EIM_D16__CSPI1_SCLK,
61 MX53_PAD_EIM_D17__CSPI1_MISO,
62 MX53_PAD_EIM_D18__CSPI1_MOSI,
63
64 /* ecspi chip select lines */
65 MX53_PAD_EIM_EB2__GPIO_2_30,
66 MX53_PAD_EIM_D19__GPIO_3_19,
50}; 67};
51 68
52static const struct imxuart_platform_data mx53_evk_uart_pdata __initconst = { 69static const struct imxuart_platform_data mx53_evk_uart_pdata __initconst = {
@@ -60,11 +77,68 @@ static inline void mx53_evk_init_uart(void)
60 imx53_add_imx_uart(2, &mx53_evk_uart_pdata); 77 imx53_add_imx_uart(2, &mx53_evk_uart_pdata);
61} 78}
62 79
80static const struct imxi2c_platform_data mx53_evk_i2c_data __initconst = {
81 .bitrate = 100000,
82};
83
84static inline void mx53_evk_fec_reset(void)
85{
86 int ret;
87
88 /* reset FEC PHY */
89 ret = gpio_request(SMD_FEC_PHY_RST, "fec-phy-reset");
90 if (ret) {
91 printk(KERN_ERR"failed to get GPIO_FEC_PHY_RESET: %d\n", ret);
92 return;
93 }
94 gpio_direction_output(SMD_FEC_PHY_RST, 0);
95 gpio_set_value(SMD_FEC_PHY_RST, 0);
96 msleep(1);
97 gpio_set_value(SMD_FEC_PHY_RST, 1);
98}
99
100static struct fec_platform_data mx53_evk_fec_pdata = {
101 .phy = PHY_INTERFACE_MODE_RMII,
102};
103
104static struct spi_board_info mx53_evk_spi_board_info[] __initdata = {
105 {
106 .modalias = "mtd_dataflash",
107 .max_speed_hz = 25000000,
108 .bus_num = 0,
109 .chip_select = 1,
110 .mode = SPI_MODE_0,
111 .platform_data = NULL,
112 },
113};
114
115static int mx53_evk_spi_cs[] = {
116 EVK_ECSPI1_CS0,
117 EVK_ECSPI1_CS1,
118};
119
120static const struct spi_imx_master mx53_evk_spi_data __initconst = {
121 .chipselect = mx53_evk_spi_cs,
122 .num_chipselect = ARRAY_SIZE(mx53_evk_spi_cs),
123};
124
63static void __init mx53_evk_board_init(void) 125static void __init mx53_evk_board_init(void)
64{ 126{
65 mxc_iomux_v3_setup_multiple_pads(mx53_evk_pads, 127 mxc_iomux_v3_setup_multiple_pads(mx53_evk_pads,
66 ARRAY_SIZE(mx53_evk_pads)); 128 ARRAY_SIZE(mx53_evk_pads));
67 mx53_evk_init_uart(); 129 mx53_evk_init_uart();
130 mx53_evk_fec_reset();
131 imx53_add_fec(&mx53_evk_fec_pdata);
132
133 imx53_add_imx_i2c(0, &mx53_evk_i2c_data);
134 imx53_add_imx_i2c(1, &mx53_evk_i2c_data);
135
136 imx53_add_sdhci_esdhc_imx(0, NULL);
137 imx53_add_sdhci_esdhc_imx(1, NULL);
138
139 spi_register_board_info(mx53_evk_spi_board_info,
140 ARRAY_SIZE(mx53_evk_spi_board_info));
141 imx53_add_ecspi(0, &mx53_evk_spi_data);
68} 142}
69 143
70static void __init mx53_evk_timer_init(void) 144static void __init mx53_evk_timer_init(void)