mach-pcm038.c revision bff0b53bd77df7e44a1d6b1a13162e26def5d17a
17e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert/*
27e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * Copyright 2007 Robert Schwebel <r.schwebel@pengutronix.de>, Pengutronix
37e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * Copyright (C) 2008 Juergen Beisert (kernel@pengutronix.de)
47e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert *
57e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * This program is free software; you can redistribute it and/or
67e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * modify it under the terms of the GNU General Public License
77e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * as published by the Free Software Foundation; either version 2
87e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * of the License, or (at your option) any later version.
97e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * This program is distributed in the hope that it will be useful,
107e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * but WITHOUT ANY WARRANTY; without even the implied warranty of
117e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
127e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * GNU General Public License for more details.
137e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert *
147e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * You should have received a copy of the GNU General Public License
157e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * along with this program; if not, write to the Free Software
167e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
177e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * MA 02110-1301, USA.
187e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert */
197e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
20a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer#include <linux/i2c.h>
21a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer#include <linux/i2c/at24.h>
22bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <linux/io.h>
23bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <linux/mtd/plat-ram.h>
24bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <linux/mtd/physmap.h>
25bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <linux/platform_device.h>
26a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer
277e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert#include <asm/mach-types.h>
28bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <asm/mach/arch.h>
29bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <asm/mach/time.h>
30bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer
31bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <mach/board-pcm038.h>
32a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/common.h>
33a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/hardware.h>
34a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer#include <mach/i2c.h>
35bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <mach/iomux.h>
36a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/imx-uart.h>
3701f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer#include <mach/mxc_nand.h>
387e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
397e90534a8fde3a528606ada5dedfa244d8e0452dSascha Hauer#include "devices.h"
407e90534a8fde3a528606ada5dedfa244d8e0452dSascha Hauer
41f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauerstatic int pcm038_pins[] = {
42f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	/* UART1 */
43f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE12_PF_UART1_TXD,
44f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE13_PF_UART1_RXD,
45f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE14_PF_UART1_CTS,
46f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE15_PF_UART1_RTS,
47f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	/* UART2 */
48f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE3_PF_UART2_CTS,
49f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE4_PF_UART2_RTS,
50f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE6_PF_UART2_TXD,
51f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE7_PF_UART2_RXD,
52f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	/* UART3 */
53f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE8_PF_UART3_TXD,
54f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE9_PF_UART3_RXD,
55f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE10_PF_UART3_CTS,
56f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PE11_PF_UART3_RTS,
57f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	/* FEC */
58f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD0_AIN_FEC_TXD0,
59f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD1_AIN_FEC_TXD1,
60f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD2_AIN_FEC_TXD2,
61f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD3_AIN_FEC_TXD3,
62f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD4_AOUT_FEC_RX_ER,
63f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD5_AOUT_FEC_RXD1,
64f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD6_AOUT_FEC_RXD2,
65f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD7_AOUT_FEC_RXD3,
66f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD8_AF_FEC_MDIO,
67f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD9_AIN_FEC_MDC,
68f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD10_AOUT_FEC_CRS,
69f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD11_AOUT_FEC_TX_CLK,
70f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD12_AOUT_FEC_RXD0,
71f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD13_AOUT_FEC_RX_DV,
72f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD14_AOUT_FEC_RX_CLK,
73f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD15_AOUT_FEC_COL,
74f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD16_AIN_FEC_TX_ER,
75f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PF23_AIN_FEC_TX_EN,
76f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	/* I2C2 */
77f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC5_PF_I2C2_SDA,
78f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC6_PF_I2C2_SCL,
79f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	/* SPI1 */
80f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD25_PF_CSPI1_RDY,
81f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD27_PF_CSPI1_SS1,
82f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD28_PF_CSPI1_SS0,
83f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD29_PF_CSPI1_SCLK,
84f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD30_PF_CSPI1_MISO,
85f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PD31_PF_CSPI1_MOSI,
86f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	/* SSI1 */
87f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC20_PF_SSI1_FS,
88f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC21_PF_SSI1_RXD,
89f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC22_PF_SSI1_TXD,
90f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC23_PF_SSI1_CLK,
91f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	/* SSI4 */
92f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC16_PF_SSI4_FS,
93f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC17_PF_SSI4_RXD,
94f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC18_PF_SSI4_TXD,
95f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	PC19_PF_SSI4_CLK,
96f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer};
97f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer
987e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert/*
993620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer * Phytec's PCM038 comes with 2MiB battery buffered SRAM,
1003620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer * 16 bit width
1013620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer */
1023620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer
1033620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauerstatic struct platdata_mtd_ram pcm038_sram_data = {
1043620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.bankwidth = 2,
1053620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer};
1063620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer
1073620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauerstatic struct resource pcm038_sram_resource = {
1083620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.start = CS1_BASE_ADDR,
1093620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.end   = CS1_BASE_ADDR + 512 * 1024 - 1,
1103620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.flags = IORESOURCE_MEM,
1113620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer};
1123620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer
1133620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauerstatic struct platform_device pcm038_sram_mtd_device = {
1143620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.name = "mtd-ram",
1153620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.id = 0,
1163620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.dev = {
1173620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer		.platform_data = &pcm038_sram_data,
1183620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	},
1193620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.num_resources = 1,
1203620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	.resource = &pcm038_sram_resource,
1213620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer};
1223620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer
1233620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer/*
1247e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * Phytec's phyCORE-i.MX27 comes with 32MiB flash,
1257e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * 16 bit width
1267e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert */
1277e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct physmap_flash_data pcm038_flash_data = {
1287e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.width = 2,
1297e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert};
1307e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
1317e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct resource pcm038_flash_resource = {
1327e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.start = 0xc0000000,
1337e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.end   = 0xc1ffffff,
1347e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.flags = IORESOURCE_MEM,
1357e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert};
1367e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
1377e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct platform_device pcm038_nor_mtd_device = {
1387e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.name = "physmap-flash",
1397e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.id = 0,
1407e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.dev = {
1417e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert		.platform_data = &pcm038_flash_data,
1427e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	},
1437e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.num_resources = 1,
1447e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.resource = &pcm038_flash_resource,
1457e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert};
1467e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
1477e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct imxuart_platform_data uart_pdata[] = {
1487e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	{
1497e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert		.flags = IMXUART_HAVE_RTSCTS,
1507e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	}, {
1517e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert		.flags = IMXUART_HAVE_RTSCTS,
1527e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	}, {
1537e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert		.flags = IMXUART_HAVE_RTSCTS,
1547e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	},
1557e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert};
1567e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
15701f71a371969c753add171991d8f5ecce3b368d4Sascha Hauerstatic struct mxc_nand_platform_data pcm038_nand_board_info = {
15801f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer	.width = 1,
15901f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer	.hw_ecc = 1,
16001f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer};
16101f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer
1627e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct platform_device *platform_devices[] __initdata = {
1637e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	&pcm038_nor_mtd_device,
164d40a09920be4d64414c3e5396c6399ac96ad0e00Sascha Hauer	&mxc_w1_master_device,
165879fea1b486d2b6fa399c40b8aed172b0dfdedb9Sascha Hauer	&mxc_fec_device,
1663620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	&pcm038_sram_mtd_device,
1677e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert};
1687e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
1693620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer/* On pcm038 there's a sram attached to CS1, we enable the chipselect here and
1703620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer * setup other stuffs to access the sram. */
1713620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauerstatic void __init pcm038_init_sram(void)
1723620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer{
1733620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	__raw_writel(0x0000d843, CSCR_U(1));
1743620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	__raw_writel(0x22252521, CSCR_L(1));
1753620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	__raw_writel(0x22220a00, CSCR_A(1));
1763620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer}
1773620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer
178a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauerstatic struct imxi2c_platform_data pcm038_i2c_1_data = {
179a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	.bitrate = 100000,
180a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer};
181a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer
182a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauerstatic struct at24_platform_data board_eeprom = {
183a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	.byte_len = 4096,
184a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	.page_size = 32,
185a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	.flags = AT24_FLAG_ADDR16,
186a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer};
187a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer
188a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauerstatic struct i2c_board_info pcm038_i2c_devices[] = {
189a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	[0] = {
190a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer		I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */
191a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer		.platform_data = &board_eeprom,
192a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	},
193a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	[1] = {
194a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer		I2C_BOARD_INFO("rtc-pcf8563", 0x51),
195a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer		.type = "pcf8563"
196a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	},
197a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	[2] = {
198a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer		I2C_BOARD_INFO("lm75", 0x4a),
199a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer		.type = "lm75"
200a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	}
201a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer};
202a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer
2037e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic void __init pcm038_init(void)
2047e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert{
205f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer	mxc_gpio_setup_multiple_pins(pcm038_pins, ARRAY_SIZE(pcm038_pins),
206f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer			"PCM038");
207f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer
2083620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer	pcm038_init_sram();
2097e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
2107e90534a8fde3a528606ada5dedfa244d8e0452dSascha Hauer	mxc_register_device(&mxc_uart_device0, &uart_pdata[0]);
2117e90534a8fde3a528606ada5dedfa244d8e0452dSascha Hauer	mxc_register_device(&mxc_uart_device1, &uart_pdata[1]);
2127e90534a8fde3a528606ada5dedfa244d8e0452dSascha Hauer	mxc_register_device(&mxc_uart_device2, &uart_pdata[2]);
21301f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer
214ccfe30a7c8329e85ae426813a1060e27e2547dd1Holger Schurig	mxc_gpio_mode(PE16_AF_OWIRE);
21501f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer	mxc_register_device(&mxc_nand_device, &pcm038_nand_board_info);
2167e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
217a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	/* only the i2c master 1 is used on this CPU card */
218a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	i2c_register_board_info(1, pcm038_i2c_devices,
219a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer				ARRAY_SIZE(pcm038_i2c_devices));
220a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer
221a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer	mxc_register_device(&mxc_i2c_device1, &pcm038_i2c_1_data);
222a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer
2237e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices));
224ff6552e4f3505da9c2886098773146be71c872e3Juergen Beisert
225ff6552e4f3505da9c2886098773146be71c872e3Juergen Beisert#ifdef CONFIG_MACH_PCM970_BASEBOARD
226ff6552e4f3505da9c2886098773146be71c872e3Juergen Beisert	pcm970_baseboard_init();
227ff6552e4f3505da9c2886098773146be71c872e3Juergen Beisert#endif
2287e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert}
2297e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
2307e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic void __init pcm038_timer_init(void)
2317e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert{
23230c730f8f90b08d77a73998d2ee34cf1f56e95ccSascha Hauer	mx27_clocks_init(26000000);
2337e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert}
2347e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
235058b7a6f465bebd87c1f295afdd56cc6a33dffbdHolger Schurigstatic struct sys_timer pcm038_timer = {
2367e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.init = pcm038_timer_init,
2377e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert};
2387e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert
2397e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen BeisertMACHINE_START(PCM038, "phyCORE-i.MX27")
2407e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.phys_io        = AIPI_BASE_ADDR,
2417e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.io_pg_offst    = ((AIPI_BASE_ADDR_VIRT) >> 18) & 0xfffc,
2427e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.boot_params    = PHYS_OFFSET + 0x100,
243cd4a05f9df859e7cd2efa96e035444a3decb427aSascha Hauer	.map_io         = mx27_map_io,
2447e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.init_irq       = mxc_init_irq,
2457e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.init_machine   = pcm038_init,
2467e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert	.timer          = &pcm038_timer,
2477e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen BeisertMACHINE_END
248