1/* 2 * arch/arm/mach-imx/mach-mx1ads.c 3 * 4 * Initially based on: 5 * linux-2.6.7-imx/arch/arm/mach-imx/scb9328.c 6 * Copyright (c) 2004 Sascha Hauer <sascha@saschahauer.de> 7 * 8 * 2004 (c) MontaVista Software, Inc. 9 * 10 * This file is licensed under the terms of the GNU General Public 11 * License version 2. This program is licensed "as is" without any 12 * warranty of any kind, whether express or implied. 13 */ 14 15#include <linux/i2c.h> 16#include <linux/i2c/pcf857x.h> 17#include <linux/init.h> 18#include <linux/kernel.h> 19#include <linux/platform_device.h> 20#include <linux/mtd/physmap.h> 21 22#include <asm/mach-types.h> 23#include <asm/mach/arch.h> 24#include <asm/mach/time.h> 25 26#include <mach/common.h> 27#include <mach/hardware.h> 28#include <mach/i2c.h> 29#include <mach/iomux-mx1.h> 30#include <mach/irqs.h> 31 32#include "devices-imx1.h" 33#include "devices.h" 34 35static int mx1ads_pins[] = { 36 /* UART1 */ 37 PC9_PF_UART1_CTS, 38 PC10_PF_UART1_RTS, 39 PC11_PF_UART1_TXD, 40 PC12_PF_UART1_RXD, 41 /* UART2 */ 42 PB28_PF_UART2_CTS, 43 PB29_PF_UART2_RTS, 44 PB30_PF_UART2_TXD, 45 PB31_PF_UART2_RXD, 46 /* I2C */ 47 PA15_PF_I2C_SDA, 48 PA16_PF_I2C_SCL, 49 /* SPI */ 50 PC13_PF_SPI1_SPI_RDY, 51 PC14_PF_SPI1_SCLK, 52 PC15_PF_SPI1_SS, 53 PC16_PF_SPI1_MISO, 54 PC17_PF_SPI1_MOSI, 55}; 56 57/* 58 * UARTs platform data 59 */ 60 61static const struct imxuart_platform_data uart0_pdata __initconst = { 62 .flags = IMXUART_HAVE_RTSCTS, 63}; 64 65static const struct imxuart_platform_data uart1_pdata __initconst = { 66 .flags = IMXUART_HAVE_RTSCTS, 67}; 68 69/* 70 * Physmap flash 71 */ 72 73static struct physmap_flash_data mx1ads_flash_data = { 74 .width = 4, /* bankwidth in bytes */ 75}; 76 77static struct resource flash_resource = { 78 .start = MX1_CS0_PHYS, 79 .end = MX1_CS0_PHYS + SZ_32M - 1, 80 .flags = IORESOURCE_MEM, 81}; 82 83static struct platform_device flash_device = { 84 .name = "physmap-flash", 85 .id = 0, 86 .resource = &flash_resource, 87 .num_resources = 1, 88}; 89 90/* 91 * I2C 92 */ 93static struct pcf857x_platform_data pcf857x_data[] = { 94 { 95 .gpio_base = 4 * 32, 96 }, { 97 .gpio_base = 4 * 32 + 16, 98 } 99}; 100 101static const struct imxi2c_platform_data mx1ads_i2c_data __initconst = { 102 .bitrate = 100000, 103}; 104 105static struct i2c_board_info mx1ads_i2c_devices[] = { 106 { 107 I2C_BOARD_INFO("pcf8575", 0x22), 108 .platform_data = &pcf857x_data[0], 109 }, { 110 I2C_BOARD_INFO("pcf8575", 0x24), 111 .platform_data = &pcf857x_data[1], 112 }, 113}; 114 115/* 116 * Board init 117 */ 118static void __init mx1ads_init(void) 119{ 120 mxc_gpio_setup_multiple_pins(mx1ads_pins, 121 ARRAY_SIZE(mx1ads_pins), "mx1ads"); 122 123 /* UART */ 124 imx1_add_imx_uart0(&uart0_pdata); 125 imx1_add_imx_uart1(&uart1_pdata); 126 127 /* Physmap flash */ 128 mxc_register_device(&flash_device, &mx1ads_flash_data); 129 130 /* I2C */ 131 i2c_register_board_info(0, mx1ads_i2c_devices, 132 ARRAY_SIZE(mx1ads_i2c_devices)); 133 134 imx1_add_i2c_imx(&mx1ads_i2c_data); 135} 136 137static void __init mx1ads_timer_init(void) 138{ 139 mx1_clocks_init(32000); 140} 141 142struct sys_timer mx1ads_timer = { 143 .init = mx1ads_timer_init, 144}; 145 146MACHINE_START(MX1ADS, "Freescale MX1ADS") 147 /* Maintainer: Sascha Hauer, Pengutronix */ 148 .phys_io = MX1_IO_BASE_ADDR, 149 .io_pg_offst = (MX1_IO_BASE_ADDR_VIRT >> 18) & 0xfffc, 150 .boot_params = MX1_PHYS_OFFSET + 0x100, 151 .map_io = mx1_map_io, 152 .init_irq = mx1_init_irq, 153 .timer = &mx1ads_timer, 154 .init_machine = mx1ads_init, 155MACHINE_END 156 157MACHINE_START(MXLADS, "Freescale MXLADS") 158 .phys_io = MX1_IO_BASE_ADDR, 159 .io_pg_offst = (MX1_IO_BASE_ADDR_VIRT >> 18) & 0xfffc, 160 .boot_params = MX1_PHYS_OFFSET + 0x100, 161 .map_io = mx1_map_io, 162 .init_irq = mx1_init_irq, 163 .timer = &mx1ads_timer, 164 .init_machine = mx1ads_init, 165MACHINE_END 166