1/* 2 * linux/arch/arm/mach-omap2/board-2430sdp.c 3 * 4 * Copyright (C) 2006 Texas Instruments 5 * 6 * Modified from mach-omap2/board-generic.c 7 * 8 * Initial Code : Based on a patch from Komal Shah and Richard Woodruff 9 * Updated the Code for 2430 SDP : Syed Mohammed Khasim 10 * 11 * This program is free software; you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License version 2 as 13 * published by the Free Software Foundation. 14 */ 15 16#include <linux/kernel.h> 17#include <linux/init.h> 18#include <linux/platform_device.h> 19#include <linux/mtd/mtd.h> 20#include <linux/mtd/partitions.h> 21#include <linux/mtd/physmap.h> 22#include <linux/delay.h> 23#include <linux/i2c/twl.h> 24#include <linux/err.h> 25#include <linux/clk.h> 26#include <linux/io.h> 27 28#include <mach/hardware.h> 29#include <asm/mach-types.h> 30#include <asm/mach/arch.h> 31#include <asm/mach/map.h> 32 33#include <mach/gpio.h> 34#include <plat/board.h> 35#include <plat/common.h> 36#include <plat/gpmc.h> 37#include <plat/usb.h> 38#include <plat/gpmc-smc91x.h> 39 40#include "mux.h" 41#include "hsmmc.h" 42 43#define SDP2430_CS0_BASE 0x04000000 44#define SECONDARY_LCD_GPIO 147 45 46static struct mtd_partition sdp2430_partitions[] = { 47 /* bootloader (U-Boot, etc) in first sector */ 48 { 49 .name = "bootloader", 50 .offset = 0, 51 .size = SZ_256K, 52 .mask_flags = MTD_WRITEABLE, /* force read-only */ 53 }, 54 /* bootloader params in the next sector */ 55 { 56 .name = "params", 57 .offset = MTDPART_OFS_APPEND, 58 .size = SZ_128K, 59 .mask_flags = 0, 60 }, 61 /* kernel */ 62 { 63 .name = "kernel", 64 .offset = MTDPART_OFS_APPEND, 65 .size = SZ_2M, 66 .mask_flags = 0 67 }, 68 /* file system */ 69 { 70 .name = "filesystem", 71 .offset = MTDPART_OFS_APPEND, 72 .size = MTDPART_SIZ_FULL, 73 .mask_flags = 0 74 } 75}; 76 77static struct physmap_flash_data sdp2430_flash_data = { 78 .width = 2, 79 .parts = sdp2430_partitions, 80 .nr_parts = ARRAY_SIZE(sdp2430_partitions), 81}; 82 83static struct resource sdp2430_flash_resource = { 84 .start = SDP2430_CS0_BASE, 85 .end = SDP2430_CS0_BASE + SZ_64M - 1, 86 .flags = IORESOURCE_MEM, 87}; 88 89static struct platform_device sdp2430_flash_device = { 90 .name = "physmap-flash", 91 .id = 0, 92 .dev = { 93 .platform_data = &sdp2430_flash_data, 94 }, 95 .num_resources = 1, 96 .resource = &sdp2430_flash_resource, 97}; 98 99static struct platform_device sdp2430_lcd_device = { 100 .name = "sdp2430_lcd", 101 .id = -1, 102}; 103 104static struct platform_device *sdp2430_devices[] __initdata = { 105 &sdp2430_flash_device, 106 &sdp2430_lcd_device, 107}; 108 109static struct omap_lcd_config sdp2430_lcd_config __initdata = { 110 .ctrl_name = "internal", 111}; 112 113#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE) 114 115static struct omap_smc91x_platform_data board_smc91x_data = { 116 .cs = 5, 117 .gpio_irq = 149, 118 .flags = GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 | 119 IORESOURCE_IRQ_LOWLEVEL, 120 121}; 122 123static void __init board_smc91x_init(void) 124{ 125 omap_mux_init_gpio(149, OMAP_PIN_INPUT); 126 gpmc_smc91x_init(&board_smc91x_data); 127} 128 129#else 130 131static inline void board_smc91x_init(void) 132{ 133} 134 135#endif 136 137static struct omap_board_config_kernel sdp2430_config[] = { 138 {OMAP_TAG_LCD, &sdp2430_lcd_config}, 139}; 140 141static void __init omap_2430sdp_init_irq(void) 142{ 143 omap_board_config = sdp2430_config; 144 omap_board_config_size = ARRAY_SIZE(sdp2430_config); 145 omap2_init_common_hw(NULL, NULL); 146 omap_init_irq(); 147 omap_gpio_init(); 148} 149 150static struct twl4030_gpio_platform_data sdp2430_gpio_data = { 151 .gpio_base = OMAP_MAX_GPIO_LINES, 152 .irq_base = TWL4030_GPIO_IRQ_BASE, 153 .irq_end = TWL4030_GPIO_IRQ_END, 154}; 155 156static struct twl4030_platform_data sdp2430_twldata = { 157 .irq_base = TWL4030_IRQ_BASE, 158 .irq_end = TWL4030_IRQ_END, 159 160 /* platform_data for children goes here */ 161 .gpio = &sdp2430_gpio_data, 162}; 163 164static struct i2c_board_info __initdata sdp2430_i2c_boardinfo[] = { 165 { 166 I2C_BOARD_INFO("twl4030", 0x48), 167 .flags = I2C_CLIENT_WAKE, 168 .irq = INT_24XX_SYS_NIRQ, 169 .platform_data = &sdp2430_twldata, 170 }, 171}; 172 173static struct i2c_board_info __initdata sdp2430_i2c1_boardinfo[] = { 174 { 175 I2C_BOARD_INFO("isp1301_omap", 0x2D), 176 .flags = I2C_CLIENT_WAKE, 177 .irq = OMAP_GPIO_IRQ(78), 178 }, 179}; 180 181static int __init omap2430_i2c_init(void) 182{ 183 omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo, 184 ARRAY_SIZE(sdp2430_i2c1_boardinfo)); 185 omap_register_i2c_bus(2, 2600, sdp2430_i2c_boardinfo, 186 ARRAY_SIZE(sdp2430_i2c_boardinfo)); 187 return 0; 188} 189 190static struct omap2_hsmmc_info mmc[] __initdata = { 191 { 192 .mmc = 1, 193 .wires = 4, 194 .gpio_cd = -EINVAL, 195 .gpio_wp = -EINVAL, 196 .ext_clock = 1, 197 }, 198 {} /* Terminator */ 199}; 200 201static struct omap_musb_board_data musb_board_data = { 202 .interface_type = MUSB_INTERFACE_ULPI, 203 .mode = MUSB_OTG, 204 .power = 100, 205}; 206static struct omap_usb_config sdp2430_usb_config __initdata = { 207 .otg = 1, 208#ifdef CONFIG_USB_GADGET_OMAP 209 .hmc_mode = 0x0, 210#elif defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE) 211 .hmc_mode = 0x1, 212#endif 213 .pins[0] = 3, 214}; 215 216#ifdef CONFIG_OMAP_MUX 217static struct omap_board_mux board_mux[] __initdata = { 218 { .reg_offset = OMAP_MUX_TERMINATOR }, 219}; 220#else 221#define board_mux NULL 222#endif 223 224static void __init omap_2430sdp_init(void) 225{ 226 int ret; 227 228 omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC); 229 230 omap2430_i2c_init(); 231 232 platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices)); 233 omap_serial_init(); 234 omap2_hsmmc_init(mmc); 235 omap2_usbfs_init(&sdp2430_usb_config); 236 237 omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP); 238 usb_musb_init(&musb_board_data); 239 240 board_smc91x_init(); 241 242 /* Turn off secondary LCD backlight */ 243 ret = gpio_request(SECONDARY_LCD_GPIO, "Secondary LCD backlight"); 244 if (ret == 0) 245 gpio_direction_output(SECONDARY_LCD_GPIO, 0); 246} 247 248static void __init omap_2430sdp_map_io(void) 249{ 250 omap2_set_globals_243x(); 251 omap243x_map_common_io(); 252} 253 254MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board") 255 /* Maintainer: Syed Khasim - Texas Instruments Inc */ 256 .phys_io = 0x48000000, 257 .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, 258 .boot_params = 0x80000100, 259 .map_io = omap_2430sdp_map_io, 260 .reserve = omap_reserve, 261 .init_irq = omap_2430sdp_init_irq, 262 .init_machine = omap_2430sdp_init, 263 .timer = &omap_timer, 264MACHINE_END 265