board-2430sdp.c 6.34 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
 * linux/arch/arm/mach-omap2/board-2430sdp.c
 *
 * Copyright (C) 2006 Texas Instruments
 *
 * Modified from mach-omap2/board-generic.c
 *
 * Initial Code : Based on a patch from Komal Shah and Richard Woodruff
 * Updated the Code for 2430 SDP : Syed Mohammed Khasim
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/mtd/mtd.h>
#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>
Balaji T K's avatar
Balaji T K committed
25
#include <linux/regulator/machine.h>
26
27
#include <linux/err.h>
#include <linux/clk.h>
28
#include <linux/io.h>
29

30
#include <mach/hardware.h>
31
32
33
34
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
#include <asm/mach/map.h>

35
#include <mach/gpio.h>
36
37
38
39
40
#include <plat/board.h>
#include <plat/common.h>
#include <plat/gpmc.h>
#include <plat/usb.h>
#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

49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
static struct mtd_partition sdp2430_partitions[] = {
	/* bootloader (U-Boot, etc) in first sector */
	{
		.name		= "bootloader",
		.offset		= 0,
		.size		= SZ_256K,
		.mask_flags	= MTD_WRITEABLE,	/* force read-only */
	 },
	/* bootloader params in the next sector */
	{
		.name		= "params",
		.offset		= MTDPART_OFS_APPEND,
		.size		= SZ_128K,
		.mask_flags	= 0,
	 },
	/* kernel */
	{
		.name		= "kernel",
		.offset		= MTDPART_OFS_APPEND,
		.size		= SZ_2M,
		.mask_flags	= 0
	},
	/* file system */
	{
		.name		= "filesystem",
		.offset		= MTDPART_OFS_APPEND,
		.size		= MTDPART_SIZ_FULL,
		.mask_flags	= 0
	}
};

80
static struct physmap_flash_data sdp2430_flash_data = {
81
82
83
84
85
86
87
88
89
90
91
92
	.width		= 2,
	.parts		= sdp2430_partitions,
	.nr_parts	= ARRAY_SIZE(sdp2430_partitions),
};

static struct resource sdp2430_flash_resource = {
	.start		= SDP2430_CS0_BASE,
	.end		= SDP2430_CS0_BASE + SZ_64M - 1,
	.flags		= IORESOURCE_MEM,
};

static struct platform_device sdp2430_flash_device = {
93
	.name		= "physmap-flash",
94
95
96
97
98
99
100
101
	.id		= 0,
	.dev = {
		.platform_data	= &sdp2430_flash_data,
	},
	.num_resources	= 1,
	.resource	= &sdp2430_flash_resource,
};

102
103
104
105
106
static struct platform_device sdp2430_lcd_device = {
	.name		= "sdp2430_lcd",
	.id		= -1,
};

107
108
static struct platform_device *sdp2430_devices[] __initdata = {
	&sdp2430_flash_device,
109
110
111
112
113
	&sdp2430_lcd_device,
};

static struct omap_lcd_config sdp2430_lcd_config __initdata = {
	.ctrl_name	= "internal",
114
115
};

116
#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91x_MODULE)
117

118
119
120
121
122
static struct omap_smc91x_platform_data board_smc91x_data = {
	.cs		= 5,
	.gpio_irq	= 149,
	.flags		= GPMC_MUX_ADD_DATA | GPMC_TIMINGS_SMC91C96 |
				IORESOURCE_IRQ_LOWLEVEL,
123

124
};
125

126
127
static void __init board_smc91x_init(void)
{
128
	omap_mux_init_gpio(149, OMAP_PIN_INPUT);
129
130
	gpmc_smc91x_init(&board_smc91x_data);
}
131

132
#else
133

134
135
static inline void board_smc91x_init(void)
{
136
137
}

138
139
#endif

140
static struct omap_board_config_kernel sdp2430_config[] __initdata = {
141
142
143
	{OMAP_TAG_LCD, &sdp2430_lcd_config},
};

144
static void __init omap_2430sdp_init_early(void)
145
{
146
147
	omap2_init_common_infrastructure();
	omap2_init_common_devices(NULL, NULL);
148
149
}

Balaji T K's avatar
Balaji T K committed
150
static struct regulator_consumer_supply sdp2430_vmmc1_supplies[] = {
151
	REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
Balaji T K's avatar
Balaji T K committed
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
};

/* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
static struct regulator_init_data sdp2430_vmmc1 = {
	.constraints = {
		.min_uV			= 1850000,
		.max_uV			= 3150000,
		.valid_modes_mask	= REGULATOR_MODE_NORMAL
					| REGULATOR_MODE_STANDBY,
		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
					| REGULATOR_CHANGE_MODE
					| REGULATOR_CHANGE_STATUS,
	},
	.num_consumer_supplies	= ARRAY_SIZE(sdp2430_vmmc1_supplies),
	.consumer_supplies	= &sdp2430_vmmc1_supplies[0],
};

169
170
171
172
173
174
175
176
177
178
179
180
static struct twl4030_gpio_platform_data sdp2430_gpio_data = {
	.gpio_base	= OMAP_MAX_GPIO_LINES,
	.irq_base	= TWL4030_GPIO_IRQ_BASE,
	.irq_end	= TWL4030_GPIO_IRQ_END,
};

static struct twl4030_platform_data sdp2430_twldata = {
	.irq_base	= TWL4030_IRQ_BASE,
	.irq_end	= TWL4030_IRQ_END,

	/* platform_data for children goes here */
	.gpio		= &sdp2430_gpio_data,
Balaji T K's avatar
Balaji T K committed
181
	.vmmc1		= &sdp2430_vmmc1,
182
183
};

184
185
186
187
188
189
190
191
static struct i2c_board_info __initdata sdp2430_i2c1_boardinfo[] = {
	{
		I2C_BOARD_INFO("isp1301_omap", 0x2D),
		.flags = I2C_CLIENT_WAKE,
		.irq = OMAP_GPIO_IRQ(78),
	},
};

192
193
static int __init omap2430_i2c_init(void)
{
194
195
	omap_register_i2c_bus(1, 100, sdp2430_i2c1_boardinfo,
			ARRAY_SIZE(sdp2430_i2c1_boardinfo));
196
	omap2_pmic_init("twl4030", &sdp2430_twldata);
197
198
199
	return 0;
}

200
static struct omap2_hsmmc_info mmc[] __initdata = {
201
202
	{
		.mmc		= 1,
203
		.caps		= MMC_CAP_4_BIT_DATA,
204
205
206
207
208
209
210
		.gpio_cd	= -EINVAL,
		.gpio_wp	= -EINVAL,
		.ext_clock	= 1,
	},
	{}	/* Terminator */
};

211
212
213
214
215
static struct omap_musb_board_data musb_board_data = {
	.interface_type		= MUSB_INTERFACE_ULPI,
	.mode			= MUSB_OTG,
	.power			= 100,
};
216
217
218
219
220
221
222
223
224
static struct omap_usb_config sdp2430_usb_config __initdata = {
	.otg		= 1,
#ifdef  CONFIG_USB_GADGET_OMAP
	.hmc_mode	= 0x0,
#elif   defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
	.hmc_mode	= 0x1,
#endif
	.pins[0]	= 3,
};
225

226
227
228
229
230
231
#ifdef CONFIG_OMAP_MUX
static struct omap_board_mux board_mux[] __initdata = {
	{ .reg_offset = OMAP_MUX_TERMINATOR },
};
#endif

232
233
static void __init omap_2430sdp_init(void)
{
234
235
	int ret;

236
237
	omap2430_mux_init(board_mux, OMAP_PACKAGE_ZAC);

238
239
240
	omap_board_config = sdp2430_config;
	omap_board_config_size = ARRAY_SIZE(sdp2430_config);

241
242
	omap2430_i2c_init();

243
244
	platform_add_devices(sdp2430_devices, ARRAY_SIZE(sdp2430_devices));
	omap_serial_init();
245
	omap2_hsmmc_init(mmc);
246
	omap2_usbfs_init(&sdp2430_usb_config);
247
248

	omap_mux_init_signal("usb0hs_stp", OMAP_PULL_ENA | OMAP_PULL_UP);
249
	usb_musb_init(&musb_board_data);
250

251
	board_smc91x_init();
252
253
254
255
256

	/* Turn off secondary LCD backlight */
	ret = gpio_request(SECONDARY_LCD_GPIO, "Secondary LCD backlight");
	if (ret == 0)
		gpio_direction_output(SECONDARY_LCD_GPIO, 0);
257
258
259
260
}

static void __init omap_2430sdp_map_io(void)
{
261
	omap2_set_globals_243x();
262
	omap243x_map_common_io();
263
264
265
266
267
}

MACHINE_START(OMAP_2430SDP, "OMAP2430 sdp2430 board")
	/* Maintainer: Syed Khasim - Texas Instruments Inc */
	.boot_params	= 0x80000100,
268
	.reserve	= omap_reserve,
269
270
271
	.map_io		= omap_2430sdp_map_io,
	.init_early	= omap_2430sdp_init_early,
	.init_irq	= omap_init_irq,
272
273
274
	.init_machine	= omap_2430sdp_init,
	.timer		= &omap_timer,
MACHINE_END