mach-pcm038.c revision ae71a5622253708aa08df231e6415fe7a1e96b10
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> 266153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer#include <linux/regulator/machine.h> 276153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer#include <linux/mfd/mc13783.h> 286153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer#include <linux/spi/spi.h> 296153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer#include <linux/irq.h> 30a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer 317e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert#include <asm/mach-types.h> 32bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <asm/mach/arch.h> 33bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <asm/mach/time.h> 34bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer 35bff0b53bd77df7e44a1d6b1a13162e26def5d17aSascha Hauer#include <mach/board-pcm038.h> 36a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/common.h> 37a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/hardware.h> 38e835d88e71f54c048a8cc907cc34084f1dd5846bUwe Kleine-König#include <mach/iomux-mx27.h> 3901f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer#include <mach/mxc_nand.h> 40773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer#include <mach/mxc_ehci.h> 41773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer#include <mach/ulpi.h> 427e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 430e7a29a8d97c4ea86b9975e65f554c0398a8fdbfUwe Kleine-König#include "devices-imx27.h" 447e90534a8fde3a528606ada5dedfa244d8e0452dSascha Hauer#include "devices.h" 457e90534a8fde3a528606ada5dedfa244d8e0452dSascha Hauer 466c80ee51707ec9fcf137bc7b511d2853b772eae6Uwe Kleine-Königstatic const int pcm038_pins[] __initconst = { 47f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer /* UART1 */ 48f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE12_PF_UART1_TXD, 49f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE13_PF_UART1_RXD, 50f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE14_PF_UART1_CTS, 51f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE15_PF_UART1_RTS, 52f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer /* UART2 */ 53f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE3_PF_UART2_CTS, 54f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE4_PF_UART2_RTS, 55f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE6_PF_UART2_TXD, 56f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE7_PF_UART2_RXD, 57f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer /* UART3 */ 58f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE8_PF_UART3_TXD, 59f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE9_PF_UART3_RXD, 60f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE10_PF_UART3_CTS, 61f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PE11_PF_UART3_RTS, 62f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer /* FEC */ 63f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD0_AIN_FEC_TXD0, 64f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD1_AIN_FEC_TXD1, 65f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD2_AIN_FEC_TXD2, 66f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD3_AIN_FEC_TXD3, 67f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD4_AOUT_FEC_RX_ER, 68f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD5_AOUT_FEC_RXD1, 69f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD6_AOUT_FEC_RXD2, 70f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD7_AOUT_FEC_RXD3, 71f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD8_AF_FEC_MDIO, 72f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD9_AIN_FEC_MDC, 73f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD10_AOUT_FEC_CRS, 74f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD11_AOUT_FEC_TX_CLK, 75f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD12_AOUT_FEC_RXD0, 76f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD13_AOUT_FEC_RX_DV, 77f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD14_AOUT_FEC_RX_CLK, 78f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD15_AOUT_FEC_COL, 79f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD16_AIN_FEC_TX_ER, 80f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PF23_AIN_FEC_TX_EN, 81f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer /* I2C2 */ 82f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC5_PF_I2C2_SDA, 83f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC6_PF_I2C2_SCL, 84f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer /* SPI1 */ 85f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD25_PF_CSPI1_RDY, 86f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD29_PF_CSPI1_SCLK, 87f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD30_PF_CSPI1_MISO, 88f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PD31_PF_CSPI1_MOSI, 89f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer /* SSI1 */ 90f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC20_PF_SSI1_FS, 91f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC21_PF_SSI1_RXD, 92f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC22_PF_SSI1_TXD, 93f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC23_PF_SSI1_CLK, 94f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer /* SSI4 */ 95f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC16_PF_SSI4_FS, 96f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC17_PF_SSI4_RXD, 97f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC18_PF_SSI4_TXD, 98f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer PC19_PF_SSI4_CLK, 99773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer /* USB host */ 100773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PA0_PF_USBH2_CLK, 101773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PA1_PF_USBH2_DIR, 102773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PA2_PF_USBH2_DATA7, 103773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PA3_PF_USBH2_NXT, 104773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PA4_PF_USBH2_STP, 105773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PD19_AF_USBH2_DATA4, 106773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PD20_AF_USBH2_DATA3, 107773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PD21_AF_USBH2_DATA6, 108773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PD22_AF_USBH2_DATA0, 109773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PD23_AF_USBH2_DATA2, 110773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PD24_AF_USBH2_DATA1, 111773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer PD26_AF_USBH2_DATA5, 112f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer}; 113f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer 1147e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert/* 1153620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer * Phytec's PCM038 comes with 2MiB battery buffered SRAM, 1163620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer * 16 bit width 1173620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer */ 1183620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer 1193620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauerstatic struct platdata_mtd_ram pcm038_sram_data = { 1203620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer .bankwidth = 2, 1213620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer}; 1223620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer 1233620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauerstatic struct resource pcm038_sram_resource = { 1243f35d1f5e4507ea4eb7ff5feaf624737c1b47631Uwe Kleine-König .start = MX27_CS1_BASE_ADDR, 1253f35d1f5e4507ea4eb7ff5feaf624737c1b47631Uwe Kleine-König .end = MX27_CS1_BASE_ADDR + 512 * 1024 - 1, 1263620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer .flags = IORESOURCE_MEM, 1273620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer}; 1283620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer 1293620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauerstatic struct platform_device pcm038_sram_mtd_device = { 1303620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer .name = "mtd-ram", 1313620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer .id = 0, 1323620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer .dev = { 1333620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer .platform_data = &pcm038_sram_data, 1343620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer }, 1353620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer .num_resources = 1, 1363620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer .resource = &pcm038_sram_resource, 1373620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer}; 1383620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer 1393620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer/* 1407e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * Phytec's phyCORE-i.MX27 comes with 32MiB flash, 1417e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert * 16 bit width 1427e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert */ 1437e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct physmap_flash_data pcm038_flash_data = { 1447e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .width = 2, 1457e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert}; 1467e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 1477e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct resource pcm038_flash_resource = { 1487e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .start = 0xc0000000, 1497e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .end = 0xc1ffffff, 1507e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .flags = IORESOURCE_MEM, 1517e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert}; 1527e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 1537e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct platform_device pcm038_nor_mtd_device = { 1547e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .name = "physmap-flash", 1557e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .id = 0, 1567e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .dev = { 1577e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .platform_data = &pcm038_flash_data, 1587e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert }, 1597e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .num_resources = 1, 1607e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .resource = &pcm038_flash_resource, 1617e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert}; 1627e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 163d5dac4a69fe571ec12d999174e0425f2641325d4Uwe Kleine-Königstatic const struct imxuart_platform_data uart_pdata __initconst = { 164d5dac4a69fe571ec12d999174e0425f2641325d4Uwe Kleine-König .flags = IMXUART_HAVE_RTSCTS, 1657e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert}; 1667e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 1670e7a29a8d97c4ea86b9975e65f554c0398a8fdbfUwe Kleine-Königstatic const struct mxc_nand_platform_data 1680e7a29a8d97c4ea86b9975e65f554c0398a8fdbfUwe Kleine-Königpcm038_nand_board_info __initconst = { 16901f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer .width = 1, 17001f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer .hw_ecc = 1, 17101f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer}; 17201f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer 1737e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic struct platform_device *platform_devices[] __initdata = { 1747e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert &pcm038_nor_mtd_device, 1753620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer &pcm038_sram_mtd_device, 176f13899da00e1b815211cf246c7d2704db3c18e37Wolfram Sang &mxc_wdt, 1777e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert}; 1787e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 1793620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer/* On pcm038 there's a sram attached to CS1, we enable the chipselect here and 1803620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer * setup other stuffs to access the sram. */ 1813620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauerstatic void __init pcm038_init_sram(void) 1823620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer{ 183a8dfb6462a033984b99fee4122fe0799a31f5bb4Uwe Kleine-König mx27_setup_weimcs(1, 0x0000d843, 0x22252521, 0x22220a00); 1843620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer} 1853620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer 186c69871597dd173af2d7615429c0ee6aa10fae42bUwe Kleine-Königstatic const struct imxi2c_platform_data pcm038_i2c1_data __initconst = { 187a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer .bitrate = 100000, 188a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer}; 189a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer 190a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauerstatic struct at24_platform_data board_eeprom = { 191a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer .byte_len = 4096, 192a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer .page_size = 32, 193a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer .flags = AT24_FLAG_ADDR16, 194a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer}; 195a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer 196a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauerstatic struct i2c_board_info pcm038_i2c_devices[] = { 197cf87a6e2fe95891575c45ba1a0ecb8cf53c09732Sascha Hauer { 198a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer I2C_BOARD_INFO("at24", 0x52), /* E0=0, E1=1, E2=0 */ 199a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer .platform_data = &board_eeprom, 200cf87a6e2fe95891575c45ba1a0ecb8cf53c09732Sascha Hauer }, { 201cf87a6e2fe95891575c45ba1a0ecb8cf53c09732Sascha Hauer I2C_BOARD_INFO("pcf8563", 0x51), 202cf87a6e2fe95891575c45ba1a0ecb8cf53c09732Sascha Hauer }, { 203a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer I2C_BOARD_INFO("lm75", 0x4a), 204a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer } 205a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer}; 206a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer 2076153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauerstatic int pcm038_spi_cs[] = {GPIO_PORTD + 28}; 2086153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 2097536cf992f395cb431f723041183d14a91d89c84Uwe Kleine-Königstatic const struct spi_imx_master pcm038_spi0_data __initconst = { 2106153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .chipselect = pcm038_spi_cs, 2116153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .num_chipselect = ARRAY_SIZE(pcm038_spi_cs), 2126153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer}; 2136153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 2146153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauerstatic struct regulator_consumer_supply sdhc1_consumers[] = { 2156153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer { 2166153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .dev = &mxc_sdhc_device1.dev, 2176153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .supply = "sdhc_vcc", 2186153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer }, 2196153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer}; 2206153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 2216153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauerstatic struct regulator_init_data sdhc1_data = { 2226153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .constraints = { 2236153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .min_uV = 3000000, 2246153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .max_uV = 3400000, 2256153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | 2266153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, 2276153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .valid_modes_mask = REGULATOR_MODE_NORMAL | 2286153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer REGULATOR_MODE_FAST, 2296153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .always_on = 0, 2306153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .boot_on = 0, 2316153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer }, 2326153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .num_consumer_supplies = ARRAY_SIZE(sdhc1_consumers), 2336153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .consumer_supplies = sdhc1_consumers, 2346153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer}; 2356153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 2366153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauerstatic struct regulator_consumer_supply cam_consumers[] = { 2376153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer { 2386153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .dev = NULL, 2396153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .supply = "imx_cam_vcc", 2406153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer }, 2416153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer}; 2426153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 2436153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauerstatic struct regulator_init_data cam_data = { 2446153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .constraints = { 2456153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .min_uV = 3000000, 2466153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .max_uV = 3400000, 2476153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE | 2486153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer REGULATOR_CHANGE_MODE | REGULATOR_CHANGE_STATUS, 2496153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .valid_modes_mask = REGULATOR_MODE_NORMAL | 2506153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer REGULATOR_MODE_FAST, 2516153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .always_on = 0, 2526153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .boot_on = 0, 2536153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer }, 2546153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .num_consumer_supplies = ARRAY_SIZE(cam_consumers), 2556153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .consumer_supplies = cam_consumers, 2566153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer}; 2576153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 2587ad211e35b41166ccf8448345726f324f26260f7Uwe Kleine-Königstatic struct mc13783_regulator_init_data pcm038_regulators[] = { 2596153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer { 2606153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .id = MC13783_REGU_VCAM, 2616153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .init_data = &cam_data, 2626153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer }, { 2636153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .id = MC13783_REGU_VMMC1, 2646153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .init_data = &sdhc1_data, 2656153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer }, 2666153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer}; 2676153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 2686153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauerstatic struct mc13783_platform_data pcm038_pmic = { 2696153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .regulators = pcm038_regulators, 2706153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .num_regulators = ARRAY_SIZE(pcm038_regulators), 2716153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .flags = MC13783_USE_ADC | MC13783_USE_REGULATOR | 2726153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer MC13783_USE_TOUCHSCREEN, 2736153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer}; 2746153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 2756153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauerstatic struct spi_board_info pcm038_spi_board_info[] __initdata = { 2766153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer { 2776153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .modalias = "mc13783", 2786153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .irq = IRQ_GPIOB(23), 2796153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .max_speed_hz = 300000, 2806153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .bus_num = 0, 2816153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .chip_select = 0, 2826153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .platform_data = &pcm038_pmic, 2836153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer .mode = SPI_CS_HIGH, 2846153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer } 2856153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer}; 2866153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 287773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauerstatic struct mxc_usbh_platform_data usbh2_pdata = { 288773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer .portsc = MXC_EHCI_MODE_ULPI, 289773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer .flags = MXC_EHCI_POWER_PINS_ENABLED | MXC_EHCI_INTERFACE_DIFF_UNI, 290773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer}; 291773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer 2927e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic void __init pcm038_init(void) 2937e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert{ 294f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer mxc_gpio_setup_multiple_pins(pcm038_pins, ARRAY_SIZE(pcm038_pins), 295f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer "PCM038"); 296f231ea441a6e4b025d971b023ff010094626fdb0Sascha Hauer 2973620c0dccfd35cd39324508d8c962d10f9a44eadSascha Hauer pcm038_init_sram(); 2987e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 299d5dac4a69fe571ec12d999174e0425f2641325d4Uwe Kleine-König imx27_add_imx_uart0(&uart_pdata); 300d5dac4a69fe571ec12d999174e0425f2641325d4Uwe Kleine-König imx27_add_imx_uart1(&uart_pdata); 301d5dac4a69fe571ec12d999174e0425f2641325d4Uwe Kleine-König imx27_add_imx_uart2(&uart_pdata); 30201f71a371969c753add171991d8f5ecce3b368d4Sascha Hauer 303ccfe30a7c8329e85ae426813a1060e27e2547dd1Holger Schurig mxc_gpio_mode(PE16_AF_OWIRE); 3040e7a29a8d97c4ea86b9975e65f554c0398a8fdbfUwe Kleine-König imx27_add_mxc_nand(&pcm038_nand_board_info); 3057e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 306a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer /* only the i2c master 1 is used on this CPU card */ 307a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer i2c_register_board_info(1, pcm038_i2c_devices, 308a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer ARRAY_SIZE(pcm038_i2c_devices)); 309a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer 31077a406da5a5b76445a816d5f043fc9aef4026ff1Uwe Kleine-König imx27_add_imx_i2c(1, &pcm038_i2c1_data); 311a4e9a65a1f90e94eca3af1a69b42d039054ef9deSascha Hauer 3120160651a65d091f9fb3b7955347e04c1125765f8Luotao Fu /* PE18 for user-LED D40 */ 3130160651a65d091f9fb3b7955347e04c1125765f8Luotao Fu mxc_gpio_mode(GPIO_PORTE | 18 | GPIO_GPIO | GPIO_OUT); 3140160651a65d091f9fb3b7955347e04c1125765f8Luotao Fu 3156153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer mxc_gpio_mode(GPIO_PORTD | 28 | GPIO_GPIO | GPIO_OUT); 3166153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 3176153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer /* MC13783 IRQ */ 3186153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer mxc_gpio_mode(GPIO_PORTB | 23 | GPIO_GPIO | GPIO_IN); 3196153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 3207536cf992f395cb431f723041183d14a91d89c84Uwe Kleine-König imx27_add_spi_imx0(&pcm038_spi0_data); 3216153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer spi_register_board_info(pcm038_spi_board_info, 3226153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer ARRAY_SIZE(pcm038_spi_board_info)); 3236153384161222c855bb95ca3eee3b3d89ae2c9ddSascha Hauer 324773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer mxc_register_device(&mxc_usbh2, &usbh2_pdata); 325773f206b2f3745bde8ee17ec0f884c19db3917a5Sascha Hauer 3266bd96f3c332d422c0dda302f1b32c8e21dd75ee3Uwe Kleine-König imx27_add_fec(NULL); 3277e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert platform_add_devices(platform_devices, ARRAY_SIZE(platform_devices)); 328ae71a5622253708aa08df231e6415fe7a1e96b10Uwe Kleine-König imx27_add_mxc_w1(NULL); 329ff6552e4f3505da9c2886098773146be71c872e3Juergen Beisert 330ff6552e4f3505da9c2886098773146be71c872e3Juergen Beisert#ifdef CONFIG_MACH_PCM970_BASEBOARD 331ff6552e4f3505da9c2886098773146be71c872e3Juergen Beisert pcm970_baseboard_init(); 332ff6552e4f3505da9c2886098773146be71c872e3Juergen Beisert#endif 3337e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert} 3347e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 3357e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisertstatic void __init pcm038_timer_init(void) 3367e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert{ 33730c730f8f90b08d77a73998d2ee34cf1f56e95ccSascha Hauer mx27_clocks_init(26000000); 3387e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert} 3397e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 340058b7a6f465bebd87c1f295afdd56cc6a33dffbdHolger Schurigstatic struct sys_timer pcm038_timer = { 3417e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .init = pcm038_timer_init, 3427e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert}; 3437e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert 3447e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen BeisertMACHINE_START(PCM038, "phyCORE-i.MX27") 34534101237d975ba37d19cbfe9318984af78332816Uwe Kleine-König .boot_params = MX27_PHYS_OFFSET + 0x100, 346cd4a05f9df859e7cd2efa96e035444a3decb427aSascha Hauer .map_io = mx27_map_io, 347c5aa0ad0c557c63dcaf8c8d75a3dd4c5e90724b3Sascha Hauer .init_irq = mx27_init_irq, 3487e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .init_machine = pcm038_init, 3497e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen Beisert .timer = &pcm038_timer, 3507e5e9f5457f5cd019fd7e2f3da94e9fc72cc9ff6Juergen BeisertMACHINE_END 351