blob: 39711c123dd68da3a6a85f8aab5ae3acef32e0bf [file] [log] [blame]
Mark A. Greer85937902009-06-03 18:41:53 -07001/*
2 * TI DA830/OMAP L137 EVM board
3 *
4 * Author: Mark A. Greer <mgreer@mvista.com>
5 * Derived from: arch/arm/mach-davinci/board-dm644x-evm.c
6 *
7 * 2007, 2009 (c) MontaVista Software, Inc. This file is licensed under
8 * the terms of the GNU General Public License version 2. This program
9 * is licensed "as is" without any warranty of any kind, whether express
10 * or implied.
11 */
12#include <linux/kernel.h>
13#include <linux/module.h>
14#include <linux/init.h>
15#include <linux/console.h>
16#include <linux/i2c.h>
17#include <linux/i2c/at24.h>
18
19#include <asm/mach-types.h>
20#include <asm/mach/arch.h>
21
22#include <mach/common.h>
23#include <mach/irqs.h>
24#include <mach/cp_intc.h>
Mark A. Greer32bf0782009-08-28 15:05:21 -070025#include <mach/mux.h>
Mark A. Greer85937902009-06-03 18:41:53 -070026#include <mach/da8xx.h>
Chaithrika U Se33ef5e2009-08-11 17:01:59 -040027#include <mach/asp.h>
Mark A. Greer85937902009-06-03 18:41:53 -070028
29#define DA830_EVM_PHY_MASK 0x0
30#define DA830_EVM_MDIO_FREQUENCY 2200000 /* PHY bus frequency */
31
32static struct at24_platform_data da830_evm_i2c_eeprom_info = {
33 .byte_len = SZ_256K / 8,
34 .page_size = 64,
35 .flags = AT24_FLAG_ADDR16,
36 .setup = davinci_get_mac_addr,
37 .context = (void *)0x7f00,
38};
39
40static struct i2c_board_info __initdata da830_evm_i2c_devices[] = {
41 {
42 I2C_BOARD_INFO("24c256", 0x50),
43 .platform_data = &da830_evm_i2c_eeprom_info,
44 },
Chaithrika U S1a7ff8f2009-08-25 15:20:05 +030045 {
46 I2C_BOARD_INFO("tlv320aic3x", 0x18),
47 }
Mark A. Greer85937902009-06-03 18:41:53 -070048};
49
50static struct davinci_i2c_platform_data da830_evm_i2c_0_pdata = {
51 .bus_freq = 100, /* kHz */
52 .bus_delay = 0, /* usec */
53};
54
55static struct davinci_uart_config da830_evm_uart_config __initdata = {
56 .enabled_uarts = 0x7,
57};
58
Mark A. Greer32bf0782009-08-28 15:05:21 -070059static const short da830_evm_mcasp1_pins[] = {
60 DA830_AHCLKX1, DA830_ACLKX1, DA830_AFSX1, DA830_AHCLKR1, DA830_AFSR1,
61 DA830_AMUTE1, DA830_AXR1_0, DA830_AXR1_1, DA830_AXR1_2, DA830_AXR1_5,
62 DA830_ACLKR1, DA830_AXR1_6, DA830_AXR1_7, DA830_AXR1_8, DA830_AXR1_10,
63 DA830_AXR1_11,
64 -1
65};
66
Chaithrika U Se33ef5e2009-08-11 17:01:59 -040067static u8 da830_iis_serializer_direction[] = {
68 RX_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
69 INACTIVE_MODE, TX_MODE, INACTIVE_MODE, INACTIVE_MODE,
70 INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
71};
72
73static struct snd_platform_data da830_evm_snd_data = {
74 .tx_dma_offset = 0x2000,
75 .rx_dma_offset = 0x2000,
76 .op_mode = DAVINCI_MCASP_IIS_MODE,
77 .num_serializer = ARRAY_SIZE(da830_iis_serializer_direction),
78 .tdm_slots = 2,
79 .serial_dir = da830_iis_serializer_direction,
80 .eventq_no = EVENTQ_0,
81 .version = MCASP_VERSION_2,
82 .txnumevt = 1,
83 .rxnumevt = 1,
84};
85
Mark A. Greer85937902009-06-03 18:41:53 -070086static __init void da830_evm_init(void)
87{
88 struct davinci_soc_info *soc_info = &davinci_soc_info;
89 int ret;
90
91 ret = da8xx_register_edma();
92 if (ret)
93 pr_warning("da830_evm_init: edma registration failed: %d\n",
94 ret);
95
Sudhakar Rajashekharac96b56c2009-07-16 05:45:32 -040096 ret = da8xx_pinmux_setup(da830_i2c0_pins);
Mark A. Greer85937902009-06-03 18:41:53 -070097 if (ret)
98 pr_warning("da830_evm_init: i2c0 mux setup failed: %d\n",
99 ret);
100
101 ret = da8xx_register_i2c(0, &da830_evm_i2c_0_pdata);
102 if (ret)
103 pr_warning("da830_evm_init: i2c0 registration failed: %d\n",
104 ret);
105
106 soc_info->emac_pdata->phy_mask = DA830_EVM_PHY_MASK;
107 soc_info->emac_pdata->mdio_max_freq = DA830_EVM_MDIO_FREQUENCY;
108 soc_info->emac_pdata->rmii_en = 1;
109
Sudhakar Rajashekharac96b56c2009-07-16 05:45:32 -0400110 ret = da8xx_pinmux_setup(da830_cpgmac_pins);
Mark A. Greer85937902009-06-03 18:41:53 -0700111 if (ret)
112 pr_warning("da830_evm_init: cpgmac mux setup failed: %d\n",
113 ret);
114
115 ret = da8xx_register_emac();
116 if (ret)
117 pr_warning("da830_evm_init: emac registration failed: %d\n",
118 ret);
119
120 ret = da8xx_register_watchdog();
121 if (ret)
122 pr_warning("da830_evm_init: watchdog registration failed: %d\n",
123 ret);
124
125 davinci_serial_init(&da830_evm_uart_config);
126 i2c_register_board_info(1, da830_evm_i2c_devices,
127 ARRAY_SIZE(da830_evm_i2c_devices));
Chaithrika U Se33ef5e2009-08-11 17:01:59 -0400128
Mark A. Greer32bf0782009-08-28 15:05:21 -0700129 ret = da8xx_pinmux_setup(da830_evm_mcasp1_pins);
Chaithrika U Se33ef5e2009-08-11 17:01:59 -0400130 if (ret)
131 pr_warning("da830_evm_init: mcasp1 mux setup failed: %d\n",
132 ret);
133
Mark A. Greerb8864aa2009-08-28 15:05:02 -0700134 da8xx_register_mcasp(1, &da830_evm_snd_data);
Mark A. Greer85937902009-06-03 18:41:53 -0700135}
136
137#ifdef CONFIG_SERIAL_8250_CONSOLE
138static int __init da830_evm_console_init(void)
139{
140 return add_preferred_console("ttyS", 2, "115200");
141}
142console_initcall(da830_evm_console_init);
143#endif
144
145static __init void da830_evm_irq_init(void)
146{
147 struct davinci_soc_info *soc_info = &davinci_soc_info;
148
149 cp_intc_init((void __iomem *)DA8XX_CP_INTC_VIRT, DA830_N_CP_INTC_IRQ,
150 soc_info->intc_irq_prios);
151}
152
153static void __init da830_evm_map_io(void)
154{
155 da830_init();
156}
157
Kevin Hilmanbaf09a42009-07-08 08:32:27 -0700158MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP L137 EVM")
Mark A. Greer85937902009-06-03 18:41:53 -0700159 .phys_io = IO_PHYS,
160 .io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc,
161 .boot_params = (DA8XX_DDR_BASE + 0x100),
162 .map_io = da830_evm_map_io,
163 .init_irq = da830_evm_irq_init,
164 .timer = &davinci_timer,
165 .init_machine = da830_evm_init,
166MACHINE_END