PageRenderTime 26ms CodeModel.GetById 15ms app.highlight 8ms RepoModel.GetById 1ms app.codeStats 1ms

/arch/arm/mach-omap2/board-2430sdp.c

https://github.com/AICP/kernel_asus_grouper
C | 267 lines | 205 code | 40 blank | 22 comment | 2 complexity | ca12d1bf00a8430dc66ff9838f071902 MD5 | raw file
  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/mmc/host.h>
 23#include <linux/delay.h>
 24#include <linux/i2c/twl.h>
 25#include <linux/regulator/machine.h>
 26#include <linux/err.h>
 27#include <linux/clk.h>
 28#include <linux/io.h>
 29#include <linux/gpio.h>
 30
 31#include <mach/hardware.h>
 32#include <asm/mach-types.h>
 33#include <asm/mach/arch.h>
 34#include <asm/mach/map.h>
 35
 36#include <plat/board.h>
 37#include <plat/common.h>
 38#include <plat/gpmc.h>
 39#include <plat/usb.h>
 40#include <plat/gpmc-smc91x.h>
 41
 42#include "mux.h"
 43#include "hsmmc.h"
 44#include "common-board-devices.h"
 45
 46#define SDP2430_CS0_BASE	0x04000000
 47#define SECONDARY_LCD_GPIO		147
 48
 49static struct mtd_partition sdp2430_partitions[] = {
 50	/* bootloader (U-Boot, etc) in first sector */
 51	{
 52		.name		= "bootloader",
 53		.offset		= 0,
 54		.size		= SZ_256K,
 55		.mask_flags	= MTD_WRITEABLE,	/* force read-only */
 56	 },
 57	/* bootloader params in the next sector */
 58	{
 59		.name		= "params",
 60		.offset		= MTDPART_OFS_APPEND,
 61		.size		= SZ_128K,
 62		.mask_flags	= 0,
 63	 },
 64	/* kernel */
 65	{
 66		.name		= "kernel",
 67		.offset		= MTDPART_OFS_APPEND,
 68		.size		= SZ_2M,
 69		.mask_flags	= 0
 70	},
 71	/* file system */
 72	{
 73		.name		= "filesystem",
 74		.offset		= MTDPART_OFS_APPEND,
 75		.size		= MTDPART_SIZ_FULL,
 76		.mask_flags	= 0
 77	}
 78};
 79
 80static struct physmap_flash_data sdp2430_flash_data = {
 81	.width		= 2,
 82	.parts		= sdp2430_partitions,
 83	.nr_parts	= ARRAY_SIZE(sdp2430_partitions),
 84};
 85
 86static struct resource sdp2430_flash_resource = {
 87	.start		= SDP2430_CS0_BASE,
 88	.end		= SDP2430_CS0_BASE + SZ_64M - 1,
 89	.flags		= IORESOURCE_MEM,
 90};
 91
 92static struct platform_device sdp2430_flash_device = {
 93	.name		= "physmap-flash",
 94	.id		= 0,
 95	.dev = {
 96		.platform_data	= &sdp2430_flash_data,
 97	},
 98	.num_resources	= 1,
 99	.resource	= &sdp2430_flash_resource,
100};
101
102static struct platform_device sdp2430_lcd_device = {
103	.name		= "sdp2430_lcd",
104	.id		= -1,
105};
106
107static struct platform_device *sdp2430_devices[] __initdata = {
108	&sdp2430_flash_device,
109	&sdp2430_lcd_device,
110};
111
112static struct omap_lcd_config sdp2430_lcd_config __initdata = {
113	.ctrl_name	= "internal",
114};
115
116#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE)
117
118static struct omap_smc91x_platform_data board_smc91x_data = {
119	.cs		= 5,
120	.gpio_irq	= 149,
121	.flags		= GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 |
122				IORESOURCE_IRQ_LOWLEVEL,
123
124};
125
126static void __init board_smc91x_init(void)
127{
128	omap_mux_init_gpio(149, OMAP_PIN_INPUT);
129	gpmc_smc91x_init(&board_smc91x_data);
130}
131
132#else
133
134static inline void board_smc91x_init(void)
135{
136}
137
138#endif
139
140static struct omap_board_config_kernel sdp2430_config[] __initdata = {
141	{OMAP_TAG_LCD, &sdp2430_lcd_config},
142};
143
144static void __init omap_2430sdp_init_early(void)
145{
146	omap2_init_common_infrastructure();
147	omap2_init_common_devices(NULL, NULL);
148}
149
150static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = {
151	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
152};
153
154/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
155static struct regulator_init_data sdp2430_vmmc1 = {
156	.constraints = {
157		.min_uV			= 1850000,
158		.max_uV			= 3150000,
159		.valid_modes_mask	= REGULATOR_MODE_NORMAL
160					| REGULATOR_MODE_STANDBY,
161		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
162					| REGULATOR_CHANGE_MODE
163					| REGULATOR_CHANGE_STATUS,
164	},
165	.num_consumer_supplies	= ARRAY_SIZE(sdp2430_vmmc1_supplies),
166	.consumer_supplies	= &sdp2430_vmmc1_supplies[0],
167};
168
169static struct twl4030_gpio_platform_data sdp2430_gpio_data = {
170	.gpio_base	= OMAP_MAX_GPIO_LINES,
171	.irq_base	= TWL4030_GPIO_IRQ_BASE,
172	.irq_end	= TWL4030_GPIO_IRQ_END,
173};
174
175static struct twl4030_platform_data sdp2430_twldata = {
176	.irq_base	= TWL4030_IRQ_BASE,
177	.irq_end	= TWL4030_IRQ_END,
178
179	/* platform_data for children goes here */
180	.gpio		= &sdp2430_gpio_data,
181	.vmmc1		= &sdp2430_vmmc1,
182};
183
184static struct i2c_board_info __initdata sdp2430_i2c1_boardinfo[] = {
185	{
186		I2C_BOARD_INFO("isp1301_omap", 0x2D),
187		.flags = I2C_CLIENT_WAKE,
188		.irq = OMAP_GPIO_IRQ(78),
189	},
190};
191
192static int __init omap2430_i2c_init(void)
193{
194	omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo,
195			ARRAY_SIZE(sdp2430_i2c1_boardinfo));
196	omap_pmic_init(2, 100, "twl4030", INT_24XX_SYS_NIRQ,
197			&sdp2430_twldata);
198	return 0;
199}
200
201static struct omap2_hsmmc_info mmc[] __initdata = {
202	{
203		.mmc		= 1,
204		.caps		= MMC_CAP_4_BIT_DATA,
205		.gpio_cd	= -EINVAL,
206		.gpio_wp	= -EINVAL,
207		.ext_clock	= 1,
208	},
209	{}	/* Terminator */
210};
211
212static struct omap_usb_config sdp2430_usb_config __initdata = {
213	.otg		= 1,
214#ifdef  CONFIG_USB_GADGET_OMAP
215	.hmc_mode	= 0x0,
216#elif   defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
217	.hmc_mode	= 0x1,
218#endif
219	.pins[0]	= 3,
220};
221
222#ifdef CONFIG_OMAP_MUX
223static struct omap_board_mux board_mux[] __initdata = {
224	{ .reg_offset = OMAP_MUX_TERMINATOR },
225};
226#endif
227
228static void __init omap_2430sdp_init(void)
229{
230	omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);
231
232	omap_board_config = sdp2430_config;
233	omap_board_config_size = ARRAY_SIZE(sdp2430_config);
234
235	omap2430_i2c_init();
236
237	platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
238	omap_serial_init();
239	omap2_hsmmc_init(mmc);
240	omap2_usbfs_init(&sdp2430_usb_config);
241
242	omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);
243	usb_musb_init(NULL);
244
245	board_smc91x_init();
246
247	/* Turn off secondary LCD backlight */
248	gpio_request_one(SECONDARY_LCD_GPIO, GPIOF_OUT_INIT_LOW,
249			 "Secondary LCD backlight");
250}
251
252static void __init omap_2430sdp_map_io(void)
253{
254	omap2_set_globals_243x();
255	omap243x_map_common_io();
256}
257
258MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
259	/* Maintainer: Syed Khasim - Texas Instruments Inc */
260	.boot_params	= 0x80000100,
261	.reserve	= omap_reserve,
262	.map_io		= omap_2430sdp_map_io,
263	.init_early	= omap_2430sdp_init_early,
264	.init_irq	= omap2_init_irq,
265	.init_machine	= omap_2430sdp_init,
266	.timer		= &omap2_timer,
267MACHINE_END