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