• 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-rx51-peripherals.c
3 *
4 * Copyright (C) 2008-2009 Nokia
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <linux/kernel.h>
12#include <linux/init.h>
13#include <linux/platform_device.h>
14#include <linux/input.h>
15#include <linux/input/matrix_keypad.h>
16#include <linux/spi/spi.h>
17#include <linux/spi/wl12xx.h>
18#include <linux/i2c.h>
19#include <linux/i2c/twl.h>
20#include <linux/clk.h>
21#include <linux/delay.h>
22#include <linux/regulator/machine.h>
23#include <linux/gpio.h>
24#include <linux/gpio_keys.h>
25#include <linux/mmc/host.h>
26
27#include <plat/mcspi.h>
28#include <plat/board.h>
29#include <plat/common.h>
30#include <plat/dma.h>
31#include <plat/gpmc.h>
32#include <plat/onenand.h>
33#include <plat/gpmc-smc91x.h>
34
35#include <sound/tlv320aic3x.h>
36#include <sound/tpa6130a2-plat.h>
37
38#include <../drivers/staging/iio/light/tsl2563.h>
39
40#include "mux.h"
41#include "hsmmc.h"
42
43#define SYSTEM_REV_B_USES_VAUX3	0x1699
44#define SYSTEM_REV_S_USES_VAUX3 0x8
45
46#define RX51_WL1251_POWER_GPIO		87
47#define RX51_WL1251_IRQ_GPIO		42
48
49/* list all spi devices here */
50enum {
51	RX51_SPI_WL1251,
52	RX51_SPI_MIPID,		/* LCD panel */
53	RX51_SPI_TSC2005,	/* Touch Controller */
54};
55
56static struct wl12xx_platform_data wl1251_pdata;
57
58#if defined(CONFIG_SENSORS_TSL2563) || defined(CONFIG_SENSORS_TSL2563_MODULE)
59static struct tsl2563_platform_data rx51_tsl2563_platform_data = {
60	.cover_comp_gain = 16,
61};
62#endif
63
64static struct omap2_mcspi_device_config wl1251_mcspi_config = {
65	.turbo_mode	= 0,
66	.single_channel	= 1,
67};
68
69static struct omap2_mcspi_device_config mipid_mcspi_config = {
70	.turbo_mode	= 0,
71	.single_channel	= 1,
72};
73
74static struct omap2_mcspi_device_config tsc2005_mcspi_config = {
75	.turbo_mode	= 0,
76	.single_channel	= 1,
77};
78
79static struct spi_board_info rx51_peripherals_spi_board_info[] __initdata = {
80	[RX51_SPI_WL1251] = {
81		.modalias		= "wl1251",
82		.bus_num		= 4,
83		.chip_select		= 0,
84		.max_speed_hz   	= 48000000,
85		.mode                   = SPI_MODE_3,
86		.controller_data	= &wl1251_mcspi_config,
87		.platform_data		= &wl1251_pdata,
88	},
89	[RX51_SPI_MIPID] = {
90		.modalias		= "acx565akm",
91		.bus_num		= 1,
92		.chip_select		= 2,
93		.max_speed_hz		= 6000000,
94		.controller_data	= &mipid_mcspi_config,
95	},
96	[RX51_SPI_TSC2005] = {
97		.modalias		= "tsc2005",
98		.bus_num		= 1,
99		.chip_select		= 0,
100		/* .irq = OMAP_GPIO_IRQ(RX51_TSC2005_IRQ_GPIO),*/
101		.max_speed_hz		= 6000000,
102		.controller_data	= &tsc2005_mcspi_config,
103		/* .platform_data = &tsc2005_config,*/
104	},
105};
106
107#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
108
109#define RX51_GPIO_CAMERA_LENS_COVER	110
110#define RX51_GPIO_CAMERA_FOCUS		68
111#define RX51_GPIO_CAMERA_CAPTURE	69
112#define RX51_GPIO_KEYPAD_SLIDE		71
113#define RX51_GPIO_LOCK_BUTTON		113
114#define RX51_GPIO_PROXIMITY		89
115
116#define RX51_GPIO_DEBOUNCE_TIMEOUT	10
117
118static struct gpio_keys_button rx51_gpio_keys[] = {
119	{
120		.desc			= "Camera Lens Cover",
121		.type			= EV_SW,
122		.code			= SW_CAMERA_LENS_COVER,
123		.gpio			= RX51_GPIO_CAMERA_LENS_COVER,
124		.active_low		= 1,
125		.debounce_interval	= RX51_GPIO_DEBOUNCE_TIMEOUT,
126	}, {
127		.desc			= "Camera Focus",
128		.type			= EV_KEY,
129		.code			= KEY_CAMERA_FOCUS,
130		.gpio			= RX51_GPIO_CAMERA_FOCUS,
131		.active_low		= 1,
132		.debounce_interval	= RX51_GPIO_DEBOUNCE_TIMEOUT,
133	}, {
134		.desc			= "Camera Capture",
135		.type			= EV_KEY,
136		.code			= KEY_CAMERA,
137		.gpio			= RX51_GPIO_CAMERA_CAPTURE,
138		.active_low		= 1,
139		.debounce_interval	= RX51_GPIO_DEBOUNCE_TIMEOUT,
140	}, {
141		.desc			= "Lock Button",
142		.type			= EV_KEY,
143		.code			= KEY_SCREENLOCK,
144		.gpio			= RX51_GPIO_LOCK_BUTTON,
145		.active_low		= 1,
146		.debounce_interval	= RX51_GPIO_DEBOUNCE_TIMEOUT,
147	}, {
148		.desc			= "Keypad Slide",
149		.type			= EV_SW,
150		.code			= SW_KEYPAD_SLIDE,
151		.gpio			= RX51_GPIO_KEYPAD_SLIDE,
152		.active_low		= 1,
153		.debounce_interval	= RX51_GPIO_DEBOUNCE_TIMEOUT,
154	}, {
155		.desc			= "Proximity Sensor",
156		.type			= EV_SW,
157		.code			= SW_FRONT_PROXIMITY,
158		.gpio			= RX51_GPIO_PROXIMITY,
159		.active_low		= 0,
160		.debounce_interval	= RX51_GPIO_DEBOUNCE_TIMEOUT,
161	}
162};
163
164static struct gpio_keys_platform_data rx51_gpio_keys_data = {
165	.buttons	= rx51_gpio_keys,
166	.nbuttons	= ARRAY_SIZE(rx51_gpio_keys),
167};
168
169static struct platform_device rx51_gpio_keys_device = {
170	.name	= "gpio-keys",
171	.id	= -1,
172	.dev	= {
173		.platform_data	= &rx51_gpio_keys_data,
174	},
175};
176
177static void __init rx51_add_gpio_keys(void)
178{
179	platform_device_register(&rx51_gpio_keys_device);
180}
181#else
182static void __init rx51_add_gpio_keys(void)
183{
184}
185#endif /* CONFIG_KEYBOARD_GPIO || CONFIG_KEYBOARD_GPIO_MODULE */
186
187static int board_keymap[] = {
188	/*
189	 * Note that KEY(x, 8, KEY_XXX) entries represent "entrire row
190	 * connected to the ground" matrix state.
191	 */
192	KEY(0, 0, KEY_Q),
193	KEY(0, 1, KEY_O),
194	KEY(0, 2, KEY_P),
195	KEY(0, 3, KEY_COMMA),
196	KEY(0, 4, KEY_BACKSPACE),
197	KEY(0, 6, KEY_A),
198	KEY(0, 7, KEY_S),
199
200	KEY(1, 0, KEY_W),
201	KEY(1, 1, KEY_D),
202	KEY(1, 2, KEY_F),
203	KEY(1, 3, KEY_G),
204	KEY(1, 4, KEY_H),
205	KEY(1, 5, KEY_J),
206	KEY(1, 6, KEY_K),
207	KEY(1, 7, KEY_L),
208
209	KEY(2, 0, KEY_E),
210	KEY(2, 1, KEY_DOT),
211	KEY(2, 2, KEY_UP),
212	KEY(2, 3, KEY_ENTER),
213	KEY(2, 5, KEY_Z),
214	KEY(2, 6, KEY_X),
215	KEY(2, 7, KEY_C),
216	KEY(2, 8, KEY_F9),
217
218	KEY(3, 0, KEY_R),
219	KEY(3, 1, KEY_V),
220	KEY(3, 2, KEY_B),
221	KEY(3, 3, KEY_N),
222	KEY(3, 4, KEY_M),
223	KEY(3, 5, KEY_SPACE),
224	KEY(3, 6, KEY_SPACE),
225	KEY(3, 7, KEY_LEFT),
226
227	KEY(4, 0, KEY_T),
228	KEY(4, 1, KEY_DOWN),
229	KEY(4, 2, KEY_RIGHT),
230	KEY(4, 4, KEY_LEFTCTRL),
231	KEY(4, 5, KEY_RIGHTALT),
232	KEY(4, 6, KEY_LEFTSHIFT),
233	KEY(4, 8, KEY_F10),
234
235	KEY(5, 0, KEY_Y),
236	KEY(5, 8, KEY_F11),
237
238	KEY(6, 0, KEY_U),
239
240	KEY(7, 0, KEY_I),
241	KEY(7, 1, KEY_F7),
242	KEY(7, 2, KEY_F8),
243};
244
245static struct matrix_keymap_data board_map_data = {
246	.keymap			= board_keymap,
247	.keymap_size		= ARRAY_SIZE(board_keymap),
248};
249
250static struct twl4030_keypad_data rx51_kp_data = {
251	.keymap_data	= &board_map_data,
252	.rows		= 8,
253	.cols		= 8,
254	.rep		= 1,
255};
256
257static struct twl4030_madc_platform_data rx51_madc_data = {
258	.irq_line		= 1,
259};
260
261/* Enable input logic and pull all lines up when eMMC is on. */
262static struct omap_board_mux rx51_mmc2_on_mux[] = {
263	OMAP3_MUX(SDMMC2_CMD, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
264	OMAP3_MUX(SDMMC2_DAT0, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
265	OMAP3_MUX(SDMMC2_DAT1, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
266	OMAP3_MUX(SDMMC2_DAT2, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
267	OMAP3_MUX(SDMMC2_DAT3, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
268	OMAP3_MUX(SDMMC2_DAT4, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
269	OMAP3_MUX(SDMMC2_DAT5, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
270	OMAP3_MUX(SDMMC2_DAT6, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
271	OMAP3_MUX(SDMMC2_DAT7, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
272	{ .reg_offset = OMAP_MUX_TERMINATOR },
273};
274
275/* Disable input logic and pull all lines down when eMMC is off. */
276static struct omap_board_mux rx51_mmc2_off_mux[] = {
277	OMAP3_MUX(SDMMC2_CMD, OMAP_PULL_ENA | OMAP_MUX_MODE0),
278	OMAP3_MUX(SDMMC2_DAT0, OMAP_PULL_ENA | OMAP_MUX_MODE0),
279	OMAP3_MUX(SDMMC2_DAT1, OMAP_PULL_ENA | OMAP_MUX_MODE0),
280	OMAP3_MUX(SDMMC2_DAT2, OMAP_PULL_ENA | OMAP_MUX_MODE0),
281	OMAP3_MUX(SDMMC2_DAT3, OMAP_PULL_ENA | OMAP_MUX_MODE0),
282	OMAP3_MUX(SDMMC2_DAT4, OMAP_PULL_ENA | OMAP_MUX_MODE0),
283	OMAP3_MUX(SDMMC2_DAT5, OMAP_PULL_ENA | OMAP_MUX_MODE0),
284	OMAP3_MUX(SDMMC2_DAT6, OMAP_PULL_ENA | OMAP_MUX_MODE0),
285	OMAP3_MUX(SDMMC2_DAT7, OMAP_PULL_ENA | OMAP_MUX_MODE0),
286	{ .reg_offset = OMAP_MUX_TERMINATOR },
287};
288
289/*
290 * Current flows to eMMC when eMMC is off and the data lines are pulled up,
291 * so pull them down. N.B. we pull 8 lines because we are using 8 lines.
292 */
293static void rx51_mmc2_remux(struct device *dev, int slot, int power_on)
294{
295	if (power_on)
296		omap_mux_write_array(rx51_mmc2_on_mux);
297	else
298		omap_mux_write_array(rx51_mmc2_off_mux);
299}
300
301static struct omap2_hsmmc_info mmc[] __initdata = {
302	{
303		.name		= "external",
304		.mmc		= 1,
305		.wires		= 4,
306		.cover_only	= true,
307		.gpio_cd	= 160,
308		.gpio_wp	= -EINVAL,
309		.power_saving	= true,
310	},
311	{
312		.name		= "internal",
313		.mmc		= 2,
314		.wires		= 8, /* See also rx51_mmc2_remux */
315		.gpio_cd	= -EINVAL,
316		.gpio_wp	= -EINVAL,
317		.nonremovable	= true,
318		.power_saving	= true,
319		.remux		= rx51_mmc2_remux,
320	},
321	{}	/* Terminator */
322};
323
324static struct regulator_consumer_supply rx51_vmmc1_supply =
325	REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.0");
326
327static struct regulator_consumer_supply rx51_vaux3_supply =
328	REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1");
329
330static struct regulator_consumer_supply rx51_vsim_supply =
331	REGULATOR_SUPPLY("vmmc_aux", "mmci-omap-hs.1");
332
333static struct regulator_consumer_supply rx51_vmmc2_supplies[] = {
334	/* tlv320aic3x analog supplies */
335	REGULATOR_SUPPLY("AVDD", "2-0018"),
336	REGULATOR_SUPPLY("DRVDD", "2-0018"),
337	/* tpa6130a2 */
338	REGULATOR_SUPPLY("Vdd", "2-0060"),
339	/* Keep vmmc as last item. It is not iterated for newer boards */
340	REGULATOR_SUPPLY("vmmc", "mmci-omap-hs.1"),
341};
342
343static struct regulator_consumer_supply rx51_vio_supplies[] = {
344	/* tlv320aic3x digital supplies */
345	REGULATOR_SUPPLY("IOVDD", "2-0018"),
346	REGULATOR_SUPPLY("DVDD", "2-0018"),
347};
348
349#if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE)
350extern struct platform_device rx51_display_device;
351#endif
352
353static struct regulator_consumer_supply rx51_vaux1_consumers[] = {
354#if defined(CONFIG_FB_OMAP2) || defined(CONFIG_FB_OMAP2_MODULE)
355	{
356		.supply	= "vdds_sdi",
357		.dev	= &rx51_display_device.dev,
358	},
359#endif
360};
361
362static struct regulator_init_data rx51_vaux1 = {
363	.constraints = {
364		.name			= "V28",
365		.min_uV			= 2800000,
366		.max_uV			= 2800000,
367		.always_on		= true, /* due battery cover sensor */
368		.valid_modes_mask	= REGULATOR_MODE_NORMAL
369					| REGULATOR_MODE_STANDBY,
370		.valid_ops_mask		= REGULATOR_CHANGE_MODE
371					| REGULATOR_CHANGE_STATUS,
372	},
373	.num_consumer_supplies	= ARRAY_SIZE(rx51_vaux1_consumers),
374	.consumer_supplies	= rx51_vaux1_consumers,
375};
376
377static struct regulator_init_data rx51_vaux2 = {
378	.constraints = {
379		.name			= "VCSI",
380		.min_uV			= 1800000,
381		.max_uV			= 1800000,
382		.valid_modes_mask	= REGULATOR_MODE_NORMAL
383					| REGULATOR_MODE_STANDBY,
384		.valid_ops_mask		= REGULATOR_CHANGE_MODE
385					| REGULATOR_CHANGE_STATUS,
386	},
387};
388
389/* VAUX3 - adds more power to VIO_18 rail */
390static struct regulator_init_data rx51_vaux3_cam = {
391	.constraints = {
392		.name			= "VCAM_DIG_18",
393		.min_uV			= 1800000,
394		.max_uV			= 1800000,
395		.apply_uV		= true,
396		.valid_modes_mask	= REGULATOR_MODE_NORMAL
397					| REGULATOR_MODE_STANDBY,
398		.valid_ops_mask		= REGULATOR_CHANGE_MODE
399					| REGULATOR_CHANGE_STATUS,
400	},
401};
402
403static struct regulator_init_data rx51_vaux3_mmc = {
404	.constraints = {
405		.name			= "VMMC2_30",
406		.min_uV			= 2800000,
407		.max_uV			= 3000000,
408		.apply_uV		= true,
409		.valid_modes_mask	= REGULATOR_MODE_NORMAL
410					| REGULATOR_MODE_STANDBY,
411		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
412					| REGULATOR_CHANGE_MODE
413					| REGULATOR_CHANGE_STATUS,
414	},
415	.num_consumer_supplies	= 1,
416	.consumer_supplies	= &rx51_vaux3_supply,
417};
418
419static struct regulator_init_data rx51_vaux4 = {
420	.constraints = {
421		.name			= "VCAM_ANA_28",
422		.min_uV			= 2800000,
423		.max_uV			= 2800000,
424		.apply_uV		= true,
425		.valid_modes_mask	= REGULATOR_MODE_NORMAL
426					| REGULATOR_MODE_STANDBY,
427		.valid_ops_mask		= REGULATOR_CHANGE_MODE
428					| REGULATOR_CHANGE_STATUS,
429	},
430};
431
432static struct regulator_init_data rx51_vmmc1 = {
433	.constraints = {
434		.min_uV			= 1850000,
435		.max_uV			= 3150000,
436		.valid_modes_mask	= REGULATOR_MODE_NORMAL
437					| REGULATOR_MODE_STANDBY,
438		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
439					| REGULATOR_CHANGE_MODE
440					| REGULATOR_CHANGE_STATUS,
441	},
442	.num_consumer_supplies	= 1,
443	.consumer_supplies	= &rx51_vmmc1_supply,
444};
445
446static struct regulator_init_data rx51_vmmc2 = {
447	.constraints = {
448		.name			= "V28_A",
449		.min_uV			= 2800000,
450		.max_uV			= 3000000,
451		.apply_uV		= true,
452		.valid_modes_mask	= REGULATOR_MODE_NORMAL
453					| REGULATOR_MODE_STANDBY,
454		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
455					| REGULATOR_CHANGE_MODE
456					| REGULATOR_CHANGE_STATUS,
457	},
458	.num_consumer_supplies	= ARRAY_SIZE(rx51_vmmc2_supplies),
459	.consumer_supplies	= rx51_vmmc2_supplies,
460};
461
462static struct regulator_init_data rx51_vsim = {
463	.constraints = {
464		.name			= "VMMC2_IO_18",
465		.min_uV			= 1800000,
466		.max_uV			= 1800000,
467		.apply_uV		= true,
468		.valid_modes_mask	= REGULATOR_MODE_NORMAL
469					| REGULATOR_MODE_STANDBY,
470		.valid_ops_mask		= REGULATOR_CHANGE_MODE
471					| REGULATOR_CHANGE_STATUS,
472	},
473	.num_consumer_supplies	= 1,
474	.consumer_supplies	= &rx51_vsim_supply,
475};
476
477static struct regulator_init_data rx51_vdac = {
478	.constraints = {
479		.min_uV			= 1800000,
480		.max_uV			= 1800000,
481		.valid_modes_mask	= REGULATOR_MODE_NORMAL
482					| REGULATOR_MODE_STANDBY,
483		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
484					| REGULATOR_CHANGE_MODE
485					| REGULATOR_CHANGE_STATUS,
486	},
487};
488
489static struct regulator_init_data rx51_vio = {
490	.constraints = {
491		.min_uV			= 1800000,
492		.max_uV			= 1800000,
493		.valid_modes_mask	= REGULATOR_MODE_NORMAL
494					| REGULATOR_MODE_STANDBY,
495		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
496					| REGULATOR_CHANGE_MODE
497					| REGULATOR_CHANGE_STATUS,
498	},
499	.num_consumer_supplies	= ARRAY_SIZE(rx51_vio_supplies),
500	.consumer_supplies	= rx51_vio_supplies,
501};
502
503static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
504{
505	gpio_request(gpio + 6, "backlight_pwm");
506	gpio_direction_output(gpio + 6, 0);
507	gpio_request(gpio + 7, "speaker_en");
508	gpio_direction_output(gpio + 7, 1);
509
510	return 0;
511}
512
513static struct twl4030_gpio_platform_data rx51_gpio_data = {
514	.gpio_base		= OMAP_MAX_GPIO_LINES,
515	.irq_base		= TWL4030_GPIO_IRQ_BASE,
516	.irq_end		= TWL4030_GPIO_IRQ_END,
517	.pulldowns		= BIT(0) | BIT(1) | BIT(2) | BIT(3)
518				| BIT(4) | BIT(5)
519				| BIT(8) | BIT(9) | BIT(10) | BIT(11)
520				| BIT(12) | BIT(13) | BIT(14) | BIT(15)
521				| BIT(16) | BIT(17) ,
522	.setup			= rx51_twlgpio_setup,
523};
524
525static struct twl4030_usb_data rx51_usb_data = {
526	.usb_mode		= T2_USB_MODE_ULPI,
527};
528
529static struct twl4030_ins sleep_on_seq[] __initdata = {
530/*
531 * Turn off everything
532 */
533	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_SLEEP), 2},
534};
535
536static struct twl4030_script sleep_on_script __initdata = {
537	.script = sleep_on_seq,
538	.size   = ARRAY_SIZE(sleep_on_seq),
539	.flags  = TWL4030_SLEEP_SCRIPT,
540};
541
542static struct twl4030_ins wakeup_seq[] __initdata = {
543/*
544 * Reenable everything
545 */
546	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_ACTIVE), 2},
547};
548
549static struct twl4030_script wakeup_script __initdata = {
550	.script	= wakeup_seq,
551	.size	= ARRAY_SIZE(wakeup_seq),
552	.flags	= TWL4030_WAKEUP12_SCRIPT,
553};
554
555static struct twl4030_ins wakeup_p3_seq[] __initdata = {
556/*
557 * Reenable everything
558 */
559	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_ACTIVE), 2},
560};
561
562static struct twl4030_script wakeup_p3_script __initdata = {
563	.script	= wakeup_p3_seq,
564	.size	= ARRAY_SIZE(wakeup_p3_seq),
565	.flags	= TWL4030_WAKEUP3_SCRIPT,
566};
567
568static struct twl4030_ins wrst_seq[] __initdata = {
569/*
570 * Reset twl4030.
571 * Reset VDD1 regulator.
572 * Reset VDD2 regulator.
573 * Reset VPLL1 regulator.
574 * Enable sysclk output.
575 * Reenable twl4030.
576 */
577	{MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_OFF), 2},
578	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 0, 1, RES_STATE_ACTIVE),
579		0x13},
580	{MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_PP, 0, 3, RES_STATE_OFF), 0x13},
581	{MSG_SINGULAR(DEV_GRP_NULL, RES_VDD1, RES_STATE_WRST), 0x13},
582	{MSG_SINGULAR(DEV_GRP_NULL, RES_VDD2, RES_STATE_WRST), 0x13},
583	{MSG_SINGULAR(DEV_GRP_NULL, RES_VPLL1, RES_STATE_WRST), 0x35},
584	{MSG_SINGULAR(DEV_GRP_P3, RES_HFCLKOUT, RES_STATE_ACTIVE), 2},
585	{MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_ACTIVE), 2},
586};
587
588static struct twl4030_script wrst_script __initdata = {
589	.script = wrst_seq,
590	.size   = ARRAY_SIZE(wrst_seq),
591	.flags  = TWL4030_WRST_SCRIPT,
592};
593
594static struct twl4030_script *twl4030_scripts[] __initdata = {
595	/* wakeup12 script should be loaded before sleep script, otherwise a
596	   board might hit retention before loading of wakeup script is
597	   completed. This can cause boot failures depending on timing issues.
598	*/
599	&wakeup_script,
600	&sleep_on_script,
601	&wakeup_p3_script,
602	&wrst_script,
603};
604
605static struct twl4030_resconfig twl4030_rconfig[] __initdata = {
606	{ .resource = RES_VDD1, .devgroup = -1,
607	  .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
608	  .remap_sleep = RES_STATE_OFF
609	},
610	{ .resource = RES_VDD2, .devgroup = -1,
611	  .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
612	  .remap_sleep = RES_STATE_OFF
613	},
614	{ .resource = RES_VPLL1, .devgroup = -1,
615	  .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
616	  .remap_sleep = RES_STATE_OFF
617	},
618	{ .resource = RES_VPLL2, .devgroup = -1,
619	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
620	},
621	{ .resource = RES_VAUX1, .devgroup = -1,
622	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
623	},
624	{ .resource = RES_VAUX2, .devgroup = -1,
625	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
626	},
627	{ .resource = RES_VAUX3, .devgroup = -1,
628	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
629	},
630	{ .resource = RES_VAUX4, .devgroup = -1,
631	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
632	},
633	{ .resource = RES_VMMC1, .devgroup = -1,
634	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
635	},
636	{ .resource = RES_VMMC2, .devgroup = -1,
637	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
638	},
639	{ .resource = RES_VDAC, .devgroup = -1,
640	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
641	},
642	{ .resource = RES_VSIM, .devgroup = -1,
643	  .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
644	},
645	{ .resource = RES_VINTANA1, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
646	  .type = -1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
647	},
648	{ .resource = RES_VINTANA2, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
649	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
650	},
651	{ .resource = RES_VINTDIG, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
652	  .type = -1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
653	},
654	{ .resource = RES_VIO, .devgroup = DEV_GRP_P3,
655	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
656	},
657	{ .resource = RES_CLKEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
658	  .type = 1, .type2 = -1 , .remap_off = -1, .remap_sleep = -1
659	},
660	{ .resource = RES_REGEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
661	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
662	},
663	{ .resource = RES_NRES_PWRON, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
664	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
665	},
666	{ .resource = RES_SYSEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
667	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
668	},
669	{ .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3,
670	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
671	},
672	{ .resource = RES_32KCLKOUT, .devgroup = -1,
673	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
674	},
675	{ .resource = RES_RESET, .devgroup = -1,
676	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
677	},
678	{ .resource = RES_Main_Ref, .devgroup = -1,
679	  .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
680	},
681	{ 0, 0},
682};
683
684static struct twl4030_power_data rx51_t2scripts_data __initdata = {
685	.scripts        = twl4030_scripts,
686	.num = ARRAY_SIZE(twl4030_scripts),
687	.resource_config = twl4030_rconfig,
688};
689
690
691
692static struct twl4030_platform_data rx51_twldata __initdata = {
693	.irq_base		= TWL4030_IRQ_BASE,
694	.irq_end		= TWL4030_IRQ_END,
695
696	/* platform_data for children goes here */
697	.gpio			= &rx51_gpio_data,
698	.keypad			= &rx51_kp_data,
699	.madc			= &rx51_madc_data,
700	.usb			= &rx51_usb_data,
701	.power			= &rx51_t2scripts_data,
702
703	.vaux1			= &rx51_vaux1,
704	.vaux2			= &rx51_vaux2,
705	.vaux4			= &rx51_vaux4,
706	.vmmc1			= &rx51_vmmc1,
707	.vsim			= &rx51_vsim,
708	.vdac			= &rx51_vdac,
709	.vio			= &rx51_vio,
710};
711
712static struct aic3x_pdata rx51_aic3x_data __initdata = {
713	.gpio_reset		= 60,
714};
715
716static struct tpa6130a2_platform_data rx51_tpa6130a2_data __initdata = {
717	.id			= TPA6130A2,
718	.power_gpio		= 98,
719};
720
721static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_1[] = {
722	{
723		I2C_BOARD_INFO("twl5030", 0x48),
724		.flags = I2C_CLIENT_WAKE,
725		.irq = INT_34XX_SYS_NIRQ,
726		.platform_data = &rx51_twldata,
727	},
728};
729
730static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
731	{
732		I2C_BOARD_INFO("tlv320aic3x", 0x18),
733		.platform_data = &rx51_aic3x_data,
734	},
735#if defined(CONFIG_SENSORS_TSL2563) || defined(CONFIG_SENSORS_TSL2563_MODULE)
736	{
737		I2C_BOARD_INFO("tsl2563", 0x29),
738		.platform_data = &rx51_tsl2563_platform_data,
739	},
740#endif
741	{
742		I2C_BOARD_INFO("tpa6130a2", 0x60),
743		.platform_data = &rx51_tpa6130a2_data,
744	}
745};
746
747static int __init rx51_i2c_init(void)
748{
749	if ((system_rev >= SYSTEM_REV_S_USES_VAUX3 && system_rev < 0x100) ||
750	    system_rev >= SYSTEM_REV_B_USES_VAUX3) {
751		rx51_twldata.vaux3 = &rx51_vaux3_mmc;
752		/* Only older boards use VMMC2 for internal MMC */
753		rx51_vmmc2.num_consumer_supplies--;
754	} else {
755		rx51_twldata.vaux3 = &rx51_vaux3_cam;
756	}
757	rx51_twldata.vmmc2 = &rx51_vmmc2;
758	omap_register_i2c_bus(1, 2200, rx51_peripherals_i2c_board_info_1,
759			      ARRAY_SIZE(rx51_peripherals_i2c_board_info_1));
760	omap_register_i2c_bus(2, 100, rx51_peripherals_i2c_board_info_2,
761			      ARRAY_SIZE(rx51_peripherals_i2c_board_info_2));
762	omap_register_i2c_bus(3, 400, NULL, 0);
763	return 0;
764}
765
766#if defined(CONFIG_MTD_ONENAND_OMAP2) || defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
767
768static struct mtd_partition onenand_partitions[] = {
769	{
770		.name           = "bootloader",
771		.offset         = 0,
772		.size           = 0x20000,
773		.mask_flags     = MTD_WRITEABLE,	/* Force read-only */
774	},
775	{
776		.name           = "config",
777		.offset         = MTDPART_OFS_APPEND,
778		.size           = 0x60000,
779	},
780	{
781		.name           = "log",
782		.offset         = MTDPART_OFS_APPEND,
783		.size           = 0x40000,
784	},
785	{
786		.name           = "kernel",
787		.offset         = MTDPART_OFS_APPEND,
788		.size           = 0x200000,
789	},
790	{
791		.name           = "initfs",
792		.offset         = MTDPART_OFS_APPEND,
793		.size           = 0x200000,
794	},
795	{
796		.name           = "rootfs",
797		.offset         = MTDPART_OFS_APPEND,
798		.size           = MTDPART_SIZ_FULL,
799	},
800};
801
802static struct omap_onenand_platform_data board_onenand_data = {
803	.cs		= 0,
804	.gpio_irq	= 65,
805	.parts		= onenand_partitions,
806	.nr_parts	= ARRAY_SIZE(onenand_partitions),
807	.flags		= ONENAND_SYNC_READWRITE,
808};
809
810static void __init board_onenand_init(void)
811{
812	gpmc_onenand_init(&board_onenand_data);
813}
814
815#else
816
817static inline void board_onenand_init(void)
818{
819}
820
821#endif
822
823#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
824
825static struct omap_smc91x_platform_data board_smc91x_data = {
826	.cs		= 1,
827	.gpio_irq	= 54,
828	.gpio_pwrdwn	= 86,
829	.gpio_reset	= 164,
830	.flags		= GPMC_TIMINGS_SMC91C96 | IORESOURCE_IRQ_HIGHLEVEL,
831};
832
833static void __init board_smc91x_init(void)
834{
835	omap_mux_init_gpio(54, OMAP_PIN_INPUT_PULLDOWN);
836	omap_mux_init_gpio(86, OMAP_PIN_OUTPUT);
837	omap_mux_init_gpio(164, OMAP_PIN_OUTPUT);
838
839	gpmc_smc91x_init(&board_smc91x_data);
840}
841
842#else
843
844static inline void board_smc91x_init(void)
845{
846}
847
848#endif
849
850static void rx51_wl1251_set_power(bool enable)
851{
852	gpio_set_value(RX51_WL1251_POWER_GPIO, enable);
853}
854
855static void __init rx51_init_wl1251(void)
856{
857	int irq, ret;
858
859	ret = gpio_request(RX51_WL1251_POWER_GPIO, "wl1251 power");
860	if (ret < 0)
861		goto error;
862
863	ret = gpio_direction_output(RX51_WL1251_POWER_GPIO, 0);
864	if (ret < 0)
865		goto err_power;
866
867	ret = gpio_request(RX51_WL1251_IRQ_GPIO, "wl1251 irq");
868	if (ret < 0)
869		goto err_power;
870
871	ret = gpio_direction_input(RX51_WL1251_IRQ_GPIO);
872	if (ret < 0)
873		goto err_irq;
874
875	irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO);
876	if (irq < 0)
877		goto err_irq;
878
879	wl1251_pdata.set_power = rx51_wl1251_set_power;
880	rx51_peripherals_spi_board_info[RX51_SPI_WL1251].irq = irq;
881
882	return;
883
884err_irq:
885	gpio_free(RX51_WL1251_IRQ_GPIO);
886
887err_power:
888	gpio_free(RX51_WL1251_POWER_GPIO);
889
890error:
891	printk(KERN_ERR "wl1251 board initialisation failed\n");
892	wl1251_pdata.set_power = NULL;
893
894	/*
895	 * Now rx51_peripherals_spi_board_info[1].irq is zero and
896	 * set_power is null, and wl1251_probe() will fail.
897	 */
898}
899
900void __init rx51_peripherals_init(void)
901{
902	rx51_i2c_init();
903	board_onenand_init();
904	board_smc91x_init();
905	rx51_add_gpio_keys();
906	rx51_init_wl1251();
907	spi_register_board_info(rx51_peripherals_spi_board_info,
908				ARRAY_SIZE(rx51_peripherals_spi_board_info));
909	omap2_hsmmc_init(mmc);
910}
911