• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/arch/arm/mach-omap2/
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