2 * linux/arch/arm/mach-omap2/board-rx51-peripherals.c
4 * Copyright (C) 2008-2009 Nokia
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.
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/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 #include <linux/power/isp1704_charger.h>
28 #include <plat/mcspi.h>
29 #include <plat/board.h>
30 #include <plat/common.h>
32 #include <plat/gpmc.h>
33 #include <plat/onenand.h>
34 #include <plat/gpmc-smc91x.h>
36 #include <mach/board-rx51.h>
38 #include <sound/tlv320aic3x.h>
39 #include <sound/tpa6130a2-plat.h>
40 #include <media/radio-si4713.h>
41 #include <media/si4713.h>
43 #include <../drivers/staging/iio/light/tsl2563.h>
48 #define SYSTEM_REV_B_USES_VAUX3 0x1699
49 #define SYSTEM_REV_S_USES_VAUX3 0x8
51 #define RX51_WL1251_POWER_GPIO 87
52 #define RX51_WL1251_IRQ_GPIO 42
53 #define RX51_FMTX_RESET_GPIO 163
54 #define RX51_FMTX_IRQ 53
56 #define RX51_USB_TRANSCEIVER_RST_GPIO 67
58 /* list all spi devices here */
61 RX51_SPI_MIPID, /* LCD panel */
62 RX51_SPI_TSC2005, /* Touch Controller */
65 static struct wl12xx_platform_data wl1251_pdata;
67 #if defined(CONFIG_SENSORS_TSL2563) || defined(CONFIG_SENSORS_TSL2563_MODULE)
68 static struct tsl2563_platform_data rx51_tsl2563_platform_data = {
69 .cover_comp_gain = 16,
73 static struct omap2_mcspi_device_config wl1251_mcspi_config = {
78 static struct omap2_mcspi_device_config mipid_mcspi_config = {
83 static struct omap2_mcspi_device_config tsc2005_mcspi_config = {
88 static struct spi_board_info rx51_peripherals_spi_board_info[] __initdata = {
93 .max_speed_hz = 48000000,
95 .controller_data = &wl1251_mcspi_config,
96 .platform_data = &wl1251_pdata,
99 .modalias = "acx565akm",
102 .max_speed_hz = 6000000,
103 .controller_data = &mipid_mcspi_config,
105 [RX51_SPI_TSC2005] = {
106 .modalias = "tsc2005",
109 /* .irq = OMAP_GPIO_IRQ(RX51_TSC2005_IRQ_GPIO),*/
110 .max_speed_hz = 6000000,
111 .controller_data = &tsc2005_mcspi_config,
112 /* .platform_data = &tsc2005_config,*/
116 static void rx51_charger_set_power(bool on)
118 gpio_set_value(RX51_USB_TRANSCEIVER_RST_GPIO, on);
121 static struct isp1704_charger_data rx51_charger_data = {
122 .set_power = rx51_charger_set_power,
125 static struct platform_device rx51_charger_device = {
126 .name = "isp1704_charger",
128 .platform_data = &rx51_charger_data,
132 static void __init rx51_charger_init(void)
134 WARN_ON(gpio_request_one(RX51_USB_TRANSCEIVER_RST_GPIO,
135 GPIOF_OUT_INIT_LOW, "isp1704_reset"));
137 platform_device_register(&rx51_charger_device);
140 #if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
142 #define RX51_GPIO_CAMERA_LENS_COVER 110
143 #define RX51_GPIO_CAMERA_FOCUS 68
144 #define RX51_GPIO_CAMERA_CAPTURE 69
145 #define RX51_GPIO_KEYPAD_SLIDE 71
146 #define RX51_GPIO_LOCK_BUTTON 113
147 #define RX51_GPIO_PROXIMITY 89
149 #define RX51_GPIO_DEBOUNCE_TIMEOUT 10
151 static struct gpio_keys_button rx51_gpio_keys[] = {
153 .desc = "Camera Lens Cover",
155 .code = SW_CAMERA_LENS_COVER,
156 .gpio = RX51_GPIO_CAMERA_LENS_COVER,
158 .debounce_interval = RX51_GPIO_DEBOUNCE_TIMEOUT,
160 .desc = "Camera Focus",
162 .code = KEY_CAMERA_FOCUS,
163 .gpio = RX51_GPIO_CAMERA_FOCUS,
165 .debounce_interval = RX51_GPIO_DEBOUNCE_TIMEOUT,
167 .desc = "Camera Capture",
170 .gpio = RX51_GPIO_CAMERA_CAPTURE,
172 .debounce_interval = RX51_GPIO_DEBOUNCE_TIMEOUT,
174 .desc = "Lock Button",
176 .code = KEY_SCREENLOCK,
177 .gpio = RX51_GPIO_LOCK_BUTTON,
179 .debounce_interval = RX51_GPIO_DEBOUNCE_TIMEOUT,
181 .desc = "Keypad Slide",
183 .code = SW_KEYPAD_SLIDE,
184 .gpio = RX51_GPIO_KEYPAD_SLIDE,
186 .debounce_interval = RX51_GPIO_DEBOUNCE_TIMEOUT,
188 .desc = "Proximity Sensor",
190 .code = SW_FRONT_PROXIMITY,
191 .gpio = RX51_GPIO_PROXIMITY,
193 .debounce_interval = RX51_GPIO_DEBOUNCE_TIMEOUT,
197 static struct gpio_keys_platform_data rx51_gpio_keys_data = {
198 .buttons = rx51_gpio_keys,
199 .nbuttons = ARRAY_SIZE(rx51_gpio_keys),
202 static struct platform_device rx51_gpio_keys_device = {
206 .platform_data = &rx51_gpio_keys_data,
210 static void __init rx51_add_gpio_keys(void)
212 platform_device_register(&rx51_gpio_keys_device);
215 static void __init rx51_add_gpio_keys(void)
218 #endif /* CONFIG_KEYBOARD_GPIO || CONFIG_KEYBOARD_GPIO_MODULE */
220 static uint32_t board_keymap[] = {
222 * Note that KEY(x, 8, KEY_XXX) entries represent "entrire row
223 * connected to the ground" matrix state.
228 KEY(0, 3, KEY_COMMA),
229 KEY(0, 4, KEY_BACKSPACE),
245 KEY(2, 3, KEY_ENTER),
256 KEY(3, 5, KEY_SPACE),
257 KEY(3, 6, KEY_SPACE),
262 KEY(4, 2, KEY_RIGHT),
263 KEY(4, 4, KEY_LEFTCTRL),
264 KEY(4, 5, KEY_RIGHTALT),
265 KEY(4, 6, KEY_LEFTSHIFT),
278 static struct matrix_keymap_data board_map_data = {
279 .keymap = board_keymap,
280 .keymap_size = ARRAY_SIZE(board_keymap),
283 static struct twl4030_keypad_data rx51_kp_data = {
284 .keymap_data = &board_map_data,
290 static struct twl4030_madc_platform_data rx51_madc_data = {
294 /* Enable input logic and pull all lines up when eMMC is on. */
295 static struct omap_board_mux rx51_mmc2_on_mux[] = {
296 OMAP3_MUX(SDMMC2_CMD, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
297 OMAP3_MUX(SDMMC2_DAT0, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
298 OMAP3_MUX(SDMMC2_DAT1, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
299 OMAP3_MUX(SDMMC2_DAT2, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
300 OMAP3_MUX(SDMMC2_DAT3, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
301 OMAP3_MUX(SDMMC2_DAT4, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
302 OMAP3_MUX(SDMMC2_DAT5, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
303 OMAP3_MUX(SDMMC2_DAT6, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
304 OMAP3_MUX(SDMMC2_DAT7, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
305 { .reg_offset = OMAP_MUX_TERMINATOR },
308 /* Disable input logic and pull all lines down when eMMC is off. */
309 static struct omap_board_mux rx51_mmc2_off_mux[] = {
310 OMAP3_MUX(SDMMC2_CMD, OMAP_PULL_ENA | OMAP_MUX_MODE0),
311 OMAP3_MUX(SDMMC2_DAT0, OMAP_PULL_ENA | OMAP_MUX_MODE0),
312 OMAP3_MUX(SDMMC2_DAT1, OMAP_PULL_ENA | OMAP_MUX_MODE0),
313 OMAP3_MUX(SDMMC2_DAT2, OMAP_PULL_ENA | OMAP_MUX_MODE0),
314 OMAP3_MUX(SDMMC2_DAT3, OMAP_PULL_ENA | OMAP_MUX_MODE0),
315 OMAP3_MUX(SDMMC2_DAT4, OMAP_PULL_ENA | OMAP_MUX_MODE0),
316 OMAP3_MUX(SDMMC2_DAT5, OMAP_PULL_ENA | OMAP_MUX_MODE0),
317 OMAP3_MUX(SDMMC2_DAT6, OMAP_PULL_ENA | OMAP_MUX_MODE0),
318 OMAP3_MUX(SDMMC2_DAT7, OMAP_PULL_ENA | OMAP_MUX_MODE0),
319 { .reg_offset = OMAP_MUX_TERMINATOR },
322 static struct omap_mux_partition *partition;
325 * Current flows to eMMC when eMMC is off and the data lines are pulled up,
326 * so pull them down. N.B. we pull 8 lines because we are using 8 lines.
328 static void rx51_mmc2_remux(struct device *dev, int slot, int power_on)
331 omap_mux_write_array(partition, rx51_mmc2_on_mux);
333 omap_mux_write_array(partition, rx51_mmc2_off_mux);
336 static struct omap2_hsmmc_info mmc[] __initdata = {
340 .caps = MMC_CAP_4_BIT_DATA,
344 .power_saving = true,
349 .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
350 /* See also rx51_mmc2_remux */
353 .nonremovable = true,
354 .power_saving = true,
355 .remux = rx51_mmc2_remux,
360 static struct regulator_consumer_supply rx51_vmmc1_supply =
361 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0");
363 static struct regulator_consumer_supply rx51_vaux3_supply =
364 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1");
366 static struct regulator_consumer_supply rx51_vsim_supply =
367 REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1");
369 static struct regulator_consumer_supply rx51_vmmc2_supplies[] = {
370 /* tlv320aic3x analog supplies */
371 REGULATOR_SUPPLY("AVDD", "2-0018"),
372 REGULATOR_SUPPLY("DRVDD", "2-0018"),
373 REGULATOR_SUPPLY("AVDD", "2-0019"),
374 REGULATOR_SUPPLY("DRVDD", "2-0019"),
376 REGULATOR_SUPPLY("Vdd", "2-0060"),
377 /* Keep vmmc as last item. It is not iterated for newer boards */
378 REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
381 static struct regulator_consumer_supply rx51_vio_supplies[] = {
382 /* tlv320aic3x digital supplies */
383 REGULATOR_SUPPLY("IOVDD", "2-0018"),
384 REGULATOR_SUPPLY("DVDD", "2-0018"),
385 REGULATOR_SUPPLY("IOVDD", "2-0019"),
386 REGULATOR_SUPPLY("DVDD", "2-0019"),
387 /* Si4713 IO supply */
388 REGULATOR_SUPPLY("vio", "2-0063"),
391 static struct regulator_consumer_supply rx51_vaux1_consumers[] = {
392 REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
394 REGULATOR_SUPPLY("vdd", "2-0063"),
397 static struct regulator_consumer_supply rx51_vdac_supply[] = {
398 REGULATOR_SUPPLY("vdda_dac", "omapdss_venc"),
401 static struct regulator_init_data rx51_vaux1 = {
406 .always_on = true, /* due battery cover sensor */
407 .valid_modes_mask = REGULATOR_MODE_NORMAL
408 | REGULATOR_MODE_STANDBY,
409 .valid_ops_mask = REGULATOR_CHANGE_MODE
410 | REGULATOR_CHANGE_STATUS,
412 .num_consumer_supplies = ARRAY_SIZE(rx51_vaux1_consumers),
413 .consumer_supplies = rx51_vaux1_consumers,
416 static struct regulator_init_data rx51_vaux2 = {
421 .valid_modes_mask = REGULATOR_MODE_NORMAL
422 | REGULATOR_MODE_STANDBY,
423 .valid_ops_mask = REGULATOR_CHANGE_MODE
424 | REGULATOR_CHANGE_STATUS,
428 /* VAUX3 - adds more power to VIO_18 rail */
429 static struct regulator_init_data rx51_vaux3_cam = {
431 .name = "VCAM_DIG_18",
435 .valid_modes_mask = REGULATOR_MODE_NORMAL
436 | REGULATOR_MODE_STANDBY,
437 .valid_ops_mask = REGULATOR_CHANGE_MODE
438 | REGULATOR_CHANGE_STATUS,
442 static struct regulator_init_data rx51_vaux3_mmc = {
448 .valid_modes_mask = REGULATOR_MODE_NORMAL
449 | REGULATOR_MODE_STANDBY,
450 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
451 | REGULATOR_CHANGE_MODE
452 | REGULATOR_CHANGE_STATUS,
454 .num_consumer_supplies = 1,
455 .consumer_supplies = &rx51_vaux3_supply,
458 static struct regulator_init_data rx51_vaux4 = {
460 .name = "VCAM_ANA_28",
464 .valid_modes_mask = REGULATOR_MODE_NORMAL
465 | REGULATOR_MODE_STANDBY,
466 .valid_ops_mask = REGULATOR_CHANGE_MODE
467 | REGULATOR_CHANGE_STATUS,
471 static struct regulator_init_data rx51_vmmc1 = {
475 .valid_modes_mask = REGULATOR_MODE_NORMAL
476 | REGULATOR_MODE_STANDBY,
477 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
478 | REGULATOR_CHANGE_MODE
479 | REGULATOR_CHANGE_STATUS,
481 .num_consumer_supplies = 1,
482 .consumer_supplies = &rx51_vmmc1_supply,
485 static struct regulator_init_data rx51_vmmc2 = {
491 .valid_modes_mask = REGULATOR_MODE_NORMAL
492 | REGULATOR_MODE_STANDBY,
493 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
494 | REGULATOR_CHANGE_MODE
495 | REGULATOR_CHANGE_STATUS,
497 .num_consumer_supplies = ARRAY_SIZE(rx51_vmmc2_supplies),
498 .consumer_supplies = rx51_vmmc2_supplies,
501 static struct regulator_init_data rx51_vsim = {
503 .name = "VMMC2_IO_18",
507 .valid_modes_mask = REGULATOR_MODE_NORMAL
508 | REGULATOR_MODE_STANDBY,
509 .valid_ops_mask = REGULATOR_CHANGE_MODE
510 | REGULATOR_CHANGE_STATUS,
512 .num_consumer_supplies = 1,
513 .consumer_supplies = &rx51_vsim_supply,
516 static struct regulator_init_data rx51_vdac = {
522 .valid_modes_mask = REGULATOR_MODE_NORMAL
523 | REGULATOR_MODE_STANDBY,
524 .valid_ops_mask = REGULATOR_CHANGE_MODE
525 | REGULATOR_CHANGE_STATUS,
527 .num_consumer_supplies = 1,
528 .consumer_supplies = rx51_vdac_supply,
531 static struct regulator_init_data rx51_vio = {
535 .valid_modes_mask = REGULATOR_MODE_NORMAL
536 | REGULATOR_MODE_STANDBY,
537 .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE
538 | REGULATOR_CHANGE_MODE
539 | REGULATOR_CHANGE_STATUS,
541 .num_consumer_supplies = ARRAY_SIZE(rx51_vio_supplies),
542 .consumer_supplies = rx51_vio_supplies,
545 static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = {
546 .gpio_reset = RX51_FMTX_RESET_GPIO,
549 static struct i2c_board_info rx51_si4713_board_info __initdata_or_module = {
550 I2C_BOARD_INFO("si4713", SI4713_I2C_ADDR_BUSEN_HIGH),
551 .platform_data = &rx51_si4713_i2c_data,
554 static struct radio_si4713_platform_data rx51_si4713_data __initdata_or_module = {
556 .subdev_board_info = &rx51_si4713_board_info,
559 static struct platform_device rx51_si4713_dev __initdata_or_module = {
560 .name = "radio-si4713",
563 .platform_data = &rx51_si4713_data,
567 static __init void rx51_init_si4713(void)
571 err = gpio_request_one(RX51_FMTX_IRQ, GPIOF_DIR_IN, "si4713 irq");
573 printk(KERN_ERR "Cannot request si4713 irq gpio. %d\n", err);
576 rx51_si4713_board_info.irq = gpio_to_irq(RX51_FMTX_IRQ);
577 platform_device_register(&rx51_si4713_dev);
580 static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
582 /* FIXME this gpio setup is just a placeholder for now */
583 gpio_request(gpio + 6, "backlight_pwm");
584 gpio_direction_output(gpio + 6, 0);
585 gpio_request(gpio + 7, "speaker_en");
586 gpio_direction_output(gpio + 7, 1);
591 static struct twl4030_gpio_platform_data rx51_gpio_data = {
592 .gpio_base = OMAP_MAX_GPIO_LINES,
593 .irq_base = TWL4030_GPIO_IRQ_BASE,
594 .irq_end = TWL4030_GPIO_IRQ_END,
595 .pulldowns = BIT(0) | BIT(1) | BIT(2) | BIT(3)
597 | BIT(8) | BIT(9) | BIT(10) | BIT(11)
598 | BIT(12) | BIT(13) | BIT(14) | BIT(15)
599 | BIT(16) | BIT(17) ,
600 .setup = rx51_twlgpio_setup,
603 static struct twl4030_usb_data rx51_usb_data = {
604 .usb_mode = T2_USB_MODE_ULPI,
607 static struct twl4030_ins sleep_on_seq[] __initdata = {
609 * Turn off everything
611 {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_SLEEP), 2},
614 static struct twl4030_script sleep_on_script __initdata = {
615 .script = sleep_on_seq,
616 .size = ARRAY_SIZE(sleep_on_seq),
617 .flags = TWL4030_SLEEP_SCRIPT,
620 static struct twl4030_ins wakeup_seq[] __initdata = {
622 * Reenable everything
624 {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_ACTIVE), 2},
627 static struct twl4030_script wakeup_script __initdata = {
628 .script = wakeup_seq,
629 .size = ARRAY_SIZE(wakeup_seq),
630 .flags = TWL4030_WAKEUP12_SCRIPT,
633 static struct twl4030_ins wakeup_p3_seq[] __initdata = {
635 * Reenable everything
637 {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_ACTIVE), 2},
640 static struct twl4030_script wakeup_p3_script __initdata = {
641 .script = wakeup_p3_seq,
642 .size = ARRAY_SIZE(wakeup_p3_seq),
643 .flags = TWL4030_WAKEUP3_SCRIPT,
646 static struct twl4030_ins wrst_seq[] __initdata = {
649 * Reset VDD1 regulator.
650 * Reset VDD2 regulator.
651 * Reset VPLL1 regulator.
652 * Enable sysclk output.
655 {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_OFF), 2},
656 {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 0, 1, RES_STATE_ACTIVE),
658 {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_PP, 0, 3, RES_STATE_OFF), 0x13},
659 {MSG_SINGULAR(DEV_GRP_NULL, RES_VDD1, RES_STATE_WRST), 0x13},
660 {MSG_SINGULAR(DEV_GRP_NULL, RES_VDD2, RES_STATE_WRST), 0x13},
661 {MSG_SINGULAR(DEV_GRP_NULL, RES_VPLL1, RES_STATE_WRST), 0x35},
662 {MSG_SINGULAR(DEV_GRP_P3, RES_HFCLKOUT, RES_STATE_ACTIVE), 2},
663 {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_ACTIVE), 2},
666 static struct twl4030_script wrst_script __initdata = {
668 .size = ARRAY_SIZE(wrst_seq),
669 .flags = TWL4030_WRST_SCRIPT,
672 static struct twl4030_script *twl4030_scripts[] __initdata = {
673 /* wakeup12 script should be loaded before sleep script, otherwise a
674 board might hit retention before loading of wakeup script is
675 completed. This can cause boot failures depending on timing issues.
683 static struct twl4030_resconfig twl4030_rconfig[] __initdata = {
684 { .resource = RES_VDD1, .devgroup = -1,
685 .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
686 .remap_sleep = RES_STATE_OFF
688 { .resource = RES_VDD2, .devgroup = -1,
689 .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
690 .remap_sleep = RES_STATE_OFF
692 { .resource = RES_VPLL1, .devgroup = -1,
693 .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
694 .remap_sleep = RES_STATE_OFF
696 { .resource = RES_VPLL2, .devgroup = -1,
697 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
699 { .resource = RES_VAUX1, .devgroup = -1,
700 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
702 { .resource = RES_VAUX2, .devgroup = -1,
703 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
705 { .resource = RES_VAUX3, .devgroup = -1,
706 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
708 { .resource = RES_VAUX4, .devgroup = -1,
709 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
711 { .resource = RES_VMMC1, .devgroup = -1,
712 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
714 { .resource = RES_VMMC2, .devgroup = -1,
715 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
717 { .resource = RES_VDAC, .devgroup = -1,
718 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
720 { .resource = RES_VSIM, .devgroup = -1,
721 .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
723 { .resource = RES_VINTANA1, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
724 .type = -1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
726 { .resource = RES_VINTANA2, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
727 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
729 { .resource = RES_VINTDIG, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
730 .type = -1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
732 { .resource = RES_VIO, .devgroup = DEV_GRP_P3,
733 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
735 { .resource = RES_CLKEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
736 .type = 1, .type2 = -1 , .remap_off = -1, .remap_sleep = -1
738 { .resource = RES_REGEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
739 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
741 { .resource = RES_NRES_PWRON, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
742 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
744 { .resource = RES_SYSEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
745 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
747 { .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3,
748 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
750 { .resource = RES_32KCLKOUT, .devgroup = -1,
751 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
753 { .resource = RES_RESET, .devgroup = -1,
754 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
756 { .resource = RES_Main_Ref, .devgroup = -1,
757 .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
762 static struct twl4030_power_data rx51_t2scripts_data __initdata = {
763 .scripts = twl4030_scripts,
764 .num = ARRAY_SIZE(twl4030_scripts),
765 .resource_config = twl4030_rconfig,
768 struct twl4030_codec_vibra_data rx51_vibra_data __initdata = {
772 struct twl4030_codec_data rx51_codec_data __initdata = {
773 .audio_mclk = 26000000,
774 .vibra = &rx51_vibra_data,
777 static struct twl4030_platform_data rx51_twldata __initdata = {
778 .irq_base = TWL4030_IRQ_BASE,
779 .irq_end = TWL4030_IRQ_END,
781 /* platform_data for children goes here */
782 .gpio = &rx51_gpio_data,
783 .keypad = &rx51_kp_data,
784 .madc = &rx51_madc_data,
785 .usb = &rx51_usb_data,
786 .power = &rx51_t2scripts_data,
787 .codec = &rx51_codec_data,
789 .vaux1 = &rx51_vaux1,
790 .vaux2 = &rx51_vaux2,
791 .vaux4 = &rx51_vaux4,
792 .vmmc1 = &rx51_vmmc1,
798 static struct tpa6130a2_platform_data rx51_tpa6130a2_data __initdata_or_module = {
803 static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_1[] = {
805 I2C_BOARD_INFO("twl5030", 0x48),
806 .flags = I2C_CLIENT_WAKE,
807 .irq = INT_34XX_SYS_NIRQ,
808 .platform_data = &rx51_twldata,
812 /* Audio setup data */
813 static struct aic3x_setup_data rx51_aic34_setup = {
814 .gpio_func[0] = AIC3X_GPIO1_FUNC_DISABLED,
815 .gpio_func[1] = AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT,
818 static struct aic3x_pdata rx51_aic3x_data = {
819 .setup = &rx51_aic34_setup,
823 static struct aic3x_pdata rx51_aic3x_data2 = {
827 static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
829 I2C_BOARD_INFO("tlv320aic3x", 0x18),
830 .platform_data = &rx51_aic3x_data,
833 I2C_BOARD_INFO("tlv320aic3x", 0x19),
834 .platform_data = &rx51_aic3x_data2,
836 #if defined(CONFIG_SENSORS_TSL2563) || defined(CONFIG_SENSORS_TSL2563_MODULE)
838 I2C_BOARD_INFO("tsl2563", 0x29),
839 .platform_data = &rx51_tsl2563_platform_data,
843 I2C_BOARD_INFO("tpa6130a2", 0x60),
844 .platform_data = &rx51_tpa6130a2_data,
848 static int __init rx51_i2c_init(void)
850 if ((system_rev >= SYSTEM_REV_S_USES_VAUX3 && system_rev < 0x100) ||
851 system_rev >= SYSTEM_REV_B_USES_VAUX3) {
852 rx51_twldata.vaux3 = &rx51_vaux3_mmc;
853 /* Only older boards use VMMC2 for internal MMC */
854 rx51_vmmc2.num_consumer_supplies--;
856 rx51_twldata.vaux3 = &rx51_vaux3_cam;
858 rx51_twldata.vmmc2 = &rx51_vmmc2;
859 omap_register_i2c_bus(1, 2200, rx51_peripherals_i2c_board_info_1,
860 ARRAY_SIZE(rx51_peripherals_i2c_board_info_1));
861 omap_register_i2c_bus(2, 100, rx51_peripherals_i2c_board_info_2,
862 ARRAY_SIZE(rx51_peripherals_i2c_board_info_2));
863 omap_register_i2c_bus(3, 400, NULL, 0);
867 #if defined(CONFIG_MTD_ONENAND_OMAP2) || \
868 defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
870 static struct mtd_partition onenand_partitions[] = {
872 .name = "bootloader",
875 .mask_flags = MTD_WRITEABLE, /* Force read-only */
879 .offset = MTDPART_OFS_APPEND,
884 .offset = MTDPART_OFS_APPEND,
889 .offset = MTDPART_OFS_APPEND,
894 .offset = MTDPART_OFS_APPEND,
899 .offset = MTDPART_OFS_APPEND,
900 .size = MTDPART_SIZ_FULL,
904 static struct omap_onenand_platform_data board_onenand_data[] = {
908 .parts = onenand_partitions,
909 .nr_parts = ARRAY_SIZE(onenand_partitions),
910 .flags = ONENAND_SYNC_READWRITE,
915 #if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
917 static struct omap_smc91x_platform_data board_smc91x_data = {
922 .flags = GPMC_TIMINGS_SMC91C96 | IORESOURCE_IRQ_HIGHLEVEL,
925 static void __init board_smc91x_init(void)
927 omap_mux_init_gpio(54, OMAP_PIN_INPUT_PULLDOWN);
928 omap_mux_init_gpio(86, OMAP_PIN_OUTPUT);
929 omap_mux_init_gpio(164, OMAP_PIN_OUTPUT);
931 gpmc_smc91x_init(&board_smc91x_data);
936 static inline void board_smc91x_init(void)
942 static void rx51_wl1251_set_power(bool enable)
944 gpio_set_value(RX51_WL1251_POWER_GPIO, enable);
947 static void __init rx51_init_wl1251(void)
951 ret = gpio_request(RX51_WL1251_POWER_GPIO, "wl1251 power");
955 ret = gpio_direction_output(RX51_WL1251_POWER_GPIO, 0);
959 ret = gpio_request(RX51_WL1251_IRQ_GPIO, "wl1251 irq");
963 ret = gpio_direction_input(RX51_WL1251_IRQ_GPIO);
967 irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO);
971 wl1251_pdata.set_power = rx51_wl1251_set_power;
972 rx51_peripherals_spi_board_info[RX51_SPI_WL1251].irq = irq;
977 gpio_free(RX51_WL1251_IRQ_GPIO);
980 gpio_free(RX51_WL1251_POWER_GPIO);
983 printk(KERN_ERR "wl1251 board initialisation failed\n");
984 wl1251_pdata.set_power = NULL;
987 * Now rx51_peripherals_spi_board_info[1].irq is zero and
988 * set_power is null, and wl1251_probe() will fail.
992 void __init rx51_peripherals_init(void)
995 gpmc_onenand_init(board_onenand_data);
997 rx51_add_gpio_keys();
1000 spi_register_board_info(rx51_peripherals_spi_board_info,
1001 ARRAY_SIZE(rx51_peripherals_spi_board_info));
1003 partition = omap_mux_get("core");
1005 omap2_hsmmc_init(mmc);
1007 rx51_charger_init();