linux/arch/arm/mach-omap2/board-rx51-peripherals.c
<<
>>
Prefs
   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/wl12xx.h>
  18#include <linux/spi/tsc2005.h>
  19#include <linux/i2c.h>
  20#include <linux/i2c/twl.h>
  21#include <linux/clk.h>
  22#include <linux/delay.h>
  23#include <linux/regulator/machine.h>
  24#include <linux/gpio.h>
  25#include <linux/gpio_keys.h>
  26#include <linux/mmc/host.h>
  27#include <linux/power/isp1704_charger.h>
  28#include <linux/platform_data/spi-omap2-mcspi.h>
  29#include <linux/platform_data/mtd-onenand-omap2.h>
  30
  31#include <asm/system_info.h>
  32
  33#include "common.h"
  34#include <linux/omap-dma.h>
  35#include "gpmc-smc91x.h"
  36
  37#include "board-rx51.h"
  38
  39#include <sound/tlv320aic3x.h>
  40#include <sound/tpa6130a2-plat.h>
  41#include <media/radio-si4713.h>
  42#include <media/si4713.h>
  43#include <linux/platform_data/leds-lp55xx.h>
  44
  45#include <linux/platform_data/tsl2563.h>
  46#include <linux/lis3lv02d.h>
  47
  48#include <video/omap-panel-data.h>
  49
  50#if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE)
  51#include <media/ir-rx51.h>
  52#endif
  53
  54#include "mux.h"
  55#include "omap-pm.h"
  56#include "hsmmc.h"
  57#include "common-board-devices.h"
  58#include "gpmc.h"
  59#include "gpmc-onenand.h"
  60
  61#define SYSTEM_REV_B_USES_VAUX3 0x1699
  62#define SYSTEM_REV_S_USES_VAUX3 0x8
  63
  64#define RX51_WL1251_POWER_GPIO          87
  65#define RX51_WL1251_IRQ_GPIO            42
  66#define RX51_FMTX_RESET_GPIO            163
  67#define RX51_FMTX_IRQ                   53
  68#define RX51_LP5523_CHIP_EN_GPIO        41
  69
  70#define RX51_USB_TRANSCEIVER_RST_GPIO   67
  71
  72#define RX51_TSC2005_RESET_GPIO         104
  73#define RX51_TSC2005_IRQ_GPIO           100
  74
  75#define LIS302_IRQ1_GPIO 181
  76#define LIS302_IRQ2_GPIO 180  /* Not yet in use */
  77
  78/* List all SPI devices here. Note that the list/probe order seems to matter! */
  79enum {
  80        RX51_SPI_WL1251,
  81        RX51_SPI_TSC2005,       /* Touch Controller */
  82        RX51_SPI_MIPID,         /* LCD panel */
  83};
  84
  85static struct wl12xx_platform_data wl1251_pdata;
  86static struct tsc2005_platform_data tsc2005_pdata;
  87
  88#if defined(CONFIG_SENSORS_LIS3_I2C) || defined(CONFIG_SENSORS_LIS3_I2C_MODULE)
  89static int lis302_setup(void)
  90{
  91        int err;
  92        int irq1 = LIS302_IRQ1_GPIO;
  93        int irq2 = LIS302_IRQ2_GPIO;
  94
  95        /* gpio for interrupt pin 1 */
  96        err = gpio_request(irq1, "lis3lv02dl_irq1");
  97        if (err) {
  98                printk(KERN_ERR "lis3lv02dl: gpio request failed\n");
  99                goto out;
 100        }
 101
 102        /* gpio for interrupt pin 2 */
 103        err = gpio_request(irq2, "lis3lv02dl_irq2");
 104        if (err) {
 105                gpio_free(irq1);
 106                printk(KERN_ERR "lis3lv02dl: gpio request failed\n");
 107                goto out;
 108        }
 109
 110        gpio_direction_input(irq1);
 111        gpio_direction_input(irq2);
 112
 113out:
 114        return err;
 115}
 116
 117static int lis302_release(void)
 118{
 119        gpio_free(LIS302_IRQ1_GPIO);
 120        gpio_free(LIS302_IRQ2_GPIO);
 121
 122        return 0;
 123}
 124
 125static struct lis3lv02d_platform_data rx51_lis3lv02d_data = {
 126        .click_flags    = LIS3_CLICK_SINGLE_X | LIS3_CLICK_SINGLE_Y |
 127                          LIS3_CLICK_SINGLE_Z,
 128        /* Limits are 0.5g * value */
 129        .click_thresh_x = 8,
 130        .click_thresh_y = 8,
 131        .click_thresh_z = 10,
 132        /* Click must be longer than time limit */
 133        .click_time_limit = 9,
 134        /* Kind of debounce filter */
 135        .click_latency    = 50,
 136
 137        /* Limits for all axis. millig-value / 18 to get HW values */
 138        .wakeup_flags = LIS3_WAKEUP_X_HI | LIS3_WAKEUP_Y_HI,
 139        .wakeup_thresh = 800 / 18,
 140        .wakeup_flags2 = LIS3_WAKEUP_Z_HI ,
 141        .wakeup_thresh2 = 900 / 18,
 142
 143        .hipass_ctrl = LIS3_HIPASS1_DISABLE | LIS3_HIPASS2_DISABLE,
 144
 145        /* Interrupt line 2 for click detection, line 1 for thresholds */
 146        .irq_cfg = LIS3_IRQ2_CLICK | LIS3_IRQ1_FF_WU_12,
 147
 148        .axis_x = LIS3_DEV_X,
 149        .axis_y = LIS3_INV_DEV_Y,
 150        .axis_z = LIS3_INV_DEV_Z,
 151        .setup_resources = lis302_setup,
 152        .release_resources = lis302_release,
 153        .st_min_limits = {-32, 3, 3},
 154        .st_max_limits = {-3, 32, 32},
 155};
 156#endif
 157
 158#if defined(CONFIG_SENSORS_TSL2563) || defined(CONFIG_SENSORS_TSL2563_MODULE)
 159static struct tsl2563_platform_data rx51_tsl2563_platform_data = {
 160        .cover_comp_gain = 16,
 161};
 162#endif
 163
 164#if defined(CONFIG_LEDS_LP5523) || defined(CONFIG_LEDS_LP5523_MODULE)
 165static struct lp55xx_led_config rx51_lp5523_led_config[] = {
 166        {
 167                .name           = "lp5523:kb1",
 168                .chan_nr        = 0,
 169                .led_current    = 50,
 170                .max_current    = 100,
 171        }, {
 172                .name           = "lp5523:kb2",
 173                .chan_nr        = 1,
 174                .led_current    = 50,
 175                .max_current    = 100,
 176        }, {
 177                .name           = "lp5523:kb3",
 178                .chan_nr        = 2,
 179                .led_current    = 50,
 180                .max_current    = 100,
 181        }, {
 182                .name           = "lp5523:kb4",
 183                .chan_nr        = 3,
 184                .led_current    = 50,
 185                .max_current    = 100,
 186        }, {
 187                .name           = "lp5523:b",
 188                .chan_nr        = 4,
 189                .led_current    = 50,
 190                .max_current    = 100,
 191        }, {
 192                .name           = "lp5523:g",
 193                .chan_nr        = 5,
 194                .led_current    = 50,
 195                .max_current    = 100,
 196        }, {
 197                .name           = "lp5523:r",
 198                .chan_nr        = 6,
 199                .led_current    = 50,
 200                .max_current    = 100,
 201        }, {
 202                .name           = "lp5523:kb5",
 203                .chan_nr        = 7,
 204                .led_current    = 50,
 205                .max_current    = 100,
 206        }, {
 207                .name           = "lp5523:kb6",
 208                .chan_nr        = 8,
 209                .led_current    = 50,
 210                .max_current    = 100,
 211        }
 212};
 213
 214static int rx51_lp5523_setup(void)
 215{
 216        return gpio_request_one(RX51_LP5523_CHIP_EN_GPIO, GPIOF_DIR_OUT,
 217                        "lp5523_enable");
 218}
 219
 220static void rx51_lp5523_release(void)
 221{
 222        gpio_free(RX51_LP5523_CHIP_EN_GPIO);
 223}
 224
 225static void rx51_lp5523_enable(bool state)
 226{
 227        gpio_set_value(RX51_LP5523_CHIP_EN_GPIO, !!state);
 228}
 229
 230static struct lp55xx_platform_data rx51_lp5523_platform_data = {
 231        .led_config             = rx51_lp5523_led_config,
 232        .num_channels           = ARRAY_SIZE(rx51_lp5523_led_config),
 233        .clock_mode             = LP55XX_CLOCK_AUTO,
 234        .setup_resources        = rx51_lp5523_setup,
 235        .release_resources      = rx51_lp5523_release,
 236        .enable                 = rx51_lp5523_enable,
 237};
 238#endif
 239
 240#define RX51_LCD_RESET_GPIO     90
 241
 242static struct panel_acx565akm_platform_data acx_pdata = {
 243        .name           = "lcd",
 244        .source         = "sdi.0",
 245        .reset_gpio     = RX51_LCD_RESET_GPIO,
 246        .datapairs      = 2,
 247};
 248
 249static struct omap2_mcspi_device_config wl1251_mcspi_config = {
 250        .turbo_mode     = 0,
 251};
 252
 253static struct omap2_mcspi_device_config mipid_mcspi_config = {
 254        .turbo_mode     = 0,
 255};
 256
 257static struct omap2_mcspi_device_config tsc2005_mcspi_config = {
 258        .turbo_mode     = 0,
 259};
 260
 261static struct spi_board_info rx51_peripherals_spi_board_info[] __initdata = {
 262        [RX51_SPI_WL1251] = {
 263                .modalias               = "wl1251",
 264                .bus_num                = 4,
 265                .chip_select            = 0,
 266                .max_speed_hz           = 48000000,
 267                .mode                   = SPI_MODE_3,
 268                .controller_data        = &wl1251_mcspi_config,
 269                .platform_data          = &wl1251_pdata,
 270        },
 271        [RX51_SPI_MIPID] = {
 272                .modalias               = "acx565akm",
 273                .bus_num                = 1,
 274                .chip_select            = 2,
 275                .max_speed_hz           = 6000000,
 276                .controller_data        = &mipid_mcspi_config,
 277                .platform_data          = &acx_pdata,
 278        },
 279        [RX51_SPI_TSC2005] = {
 280                .modalias               = "tsc2005",
 281                .bus_num                = 1,
 282                .chip_select            = 0,
 283                .max_speed_hz           = 6000000,
 284                .controller_data        = &tsc2005_mcspi_config,
 285                .platform_data          = &tsc2005_pdata,
 286        },
 287};
 288
 289static struct platform_device rx51_battery_device = {
 290        .name   = "rx51-battery",
 291        .id     = -1,
 292};
 293
 294static void rx51_charger_set_power(bool on)
 295{
 296        gpio_set_value(RX51_USB_TRANSCEIVER_RST_GPIO, on);
 297}
 298
 299static struct isp1704_charger_data rx51_charger_data = {
 300        .set_power      = rx51_charger_set_power,
 301};
 302
 303static struct platform_device rx51_charger_device = {
 304        .name   = "isp1704_charger",
 305        .dev    = {
 306                .platform_data = &rx51_charger_data,
 307        },
 308};
 309
 310static void __init rx51_charger_init(void)
 311{
 312        WARN_ON(gpio_request_one(RX51_USB_TRANSCEIVER_RST_GPIO,
 313                GPIOF_OUT_INIT_HIGH, "isp1704_reset"));
 314
 315        platform_device_register(&rx51_battery_device);
 316        platform_device_register(&rx51_charger_device);
 317}
 318
 319#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
 320
 321#define RX51_GPIO_CAMERA_LENS_COVER     110
 322#define RX51_GPIO_CAMERA_FOCUS          68
 323#define RX51_GPIO_CAMERA_CAPTURE        69
 324#define RX51_GPIO_KEYPAD_SLIDE          71
 325#define RX51_GPIO_LOCK_BUTTON           113
 326#define RX51_GPIO_PROXIMITY             89
 327
 328#define RX51_GPIO_DEBOUNCE_TIMEOUT      10
 329
 330static struct gpio_keys_button rx51_gpio_keys[] = {
 331        {
 332                .desc                   = "Camera Lens Cover",
 333                .type                   = EV_SW,
 334                .code                   = SW_CAMERA_LENS_COVER,
 335                .gpio                   = RX51_GPIO_CAMERA_LENS_COVER,
 336                .active_low             = 1,
 337                .debounce_interval      = RX51_GPIO_DEBOUNCE_TIMEOUT,
 338        }, {
 339                .desc                   = "Camera Focus",
 340                .type                   = EV_KEY,
 341                .code                   = KEY_CAMERA_FOCUS,
 342                .gpio                   = RX51_GPIO_CAMERA_FOCUS,
 343                .active_low             = 1,
 344                .debounce_interval      = RX51_GPIO_DEBOUNCE_TIMEOUT,
 345        }, {
 346                .desc                   = "Camera Capture",
 347                .type                   = EV_KEY,
 348                .code                   = KEY_CAMERA,
 349                .gpio                   = RX51_GPIO_CAMERA_CAPTURE,
 350                .active_low             = 1,
 351                .debounce_interval      = RX51_GPIO_DEBOUNCE_TIMEOUT,
 352        }, {
 353                .desc                   = "Lock Button",
 354                .type                   = EV_KEY,
 355                .code                   = KEY_SCREENLOCK,
 356                .gpio                   = RX51_GPIO_LOCK_BUTTON,
 357                .active_low             = 1,
 358                .debounce_interval      = RX51_GPIO_DEBOUNCE_TIMEOUT,
 359        }, {
 360                .desc                   = "Keypad Slide",
 361                .type                   = EV_SW,
 362                .code                   = SW_KEYPAD_SLIDE,
 363                .gpio                   = RX51_GPIO_KEYPAD_SLIDE,
 364                .active_low             = 1,
 365                .debounce_interval      = RX51_GPIO_DEBOUNCE_TIMEOUT,
 366        }, {
 367                .desc                   = "Proximity Sensor",
 368                .type                   = EV_SW,
 369                .code                   = SW_FRONT_PROXIMITY,
 370                .gpio                   = RX51_GPIO_PROXIMITY,
 371                .active_low             = 0,
 372                .debounce_interval      = RX51_GPIO_DEBOUNCE_TIMEOUT,
 373        }
 374};
 375
 376static struct gpio_keys_platform_data rx51_gpio_keys_data = {
 377        .buttons        = rx51_gpio_keys,
 378        .nbuttons       = ARRAY_SIZE(rx51_gpio_keys),
 379};
 380
 381static struct platform_device rx51_gpio_keys_device = {
 382        .name   = "gpio-keys",
 383        .id     = -1,
 384        .dev    = {
 385                .platform_data  = &rx51_gpio_keys_data,
 386        },
 387};
 388
 389static void __init rx51_add_gpio_keys(void)
 390{
 391        platform_device_register(&rx51_gpio_keys_device);
 392}
 393#else
 394static void __init rx51_add_gpio_keys(void)
 395{
 396}
 397#endif /* CONFIG_KEYBOARD_GPIO || CONFIG_KEYBOARD_GPIO_MODULE */
 398
 399static uint32_t board_keymap[] = {
 400        /*
 401         * Note that KEY(x, 8, KEY_XXX) entries represent "entrire row
 402         * connected to the ground" matrix state.
 403         */
 404        KEY(0, 0, KEY_Q),
 405        KEY(0, 1, KEY_O),
 406        KEY(0, 2, KEY_P),
 407        KEY(0, 3, KEY_COMMA),
 408        KEY(0, 4, KEY_BACKSPACE),
 409        KEY(0, 6, KEY_A),
 410        KEY(0, 7, KEY_S),
 411
 412        KEY(1, 0, KEY_W),
 413        KEY(1, 1, KEY_D),
 414        KEY(1, 2, KEY_F),
 415        KEY(1, 3, KEY_G),
 416        KEY(1, 4, KEY_H),
 417        KEY(1, 5, KEY_J),
 418        KEY(1, 6, KEY_K),
 419        KEY(1, 7, KEY_L),
 420
 421        KEY(2, 0, KEY_E),
 422        KEY(2, 1, KEY_DOT),
 423        KEY(2, 2, KEY_UP),
 424        KEY(2, 3, KEY_ENTER),
 425        KEY(2, 5, KEY_Z),
 426        KEY(2, 6, KEY_X),
 427        KEY(2, 7, KEY_C),
 428        KEY(2, 8, KEY_F9),
 429
 430        KEY(3, 0, KEY_R),
 431        KEY(3, 1, KEY_V),
 432        KEY(3, 2, KEY_B),
 433        KEY(3, 3, KEY_N),
 434        KEY(3, 4, KEY_M),
 435        KEY(3, 5, KEY_SPACE),
 436        KEY(3, 6, KEY_SPACE),
 437        KEY(3, 7, KEY_LEFT),
 438
 439        KEY(4, 0, KEY_T),
 440        KEY(4, 1, KEY_DOWN),
 441        KEY(4, 2, KEY_RIGHT),
 442        KEY(4, 4, KEY_LEFTCTRL),
 443        KEY(4, 5, KEY_RIGHTALT),
 444        KEY(4, 6, KEY_LEFTSHIFT),
 445        KEY(4, 8, KEY_F10),
 446
 447        KEY(5, 0, KEY_Y),
 448        KEY(5, 8, KEY_F11),
 449
 450        KEY(6, 0, KEY_U),
 451
 452        KEY(7, 0, KEY_I),
 453        KEY(7, 1, KEY_F7),
 454        KEY(7, 2, KEY_F8),
 455};
 456
 457static struct matrix_keymap_data board_map_data = {
 458        .keymap                 = board_keymap,
 459        .keymap_size            = ARRAY_SIZE(board_keymap),
 460};
 461
 462static struct twl4030_keypad_data rx51_kp_data = {
 463        .keymap_data    = &board_map_data,
 464        .rows           = 8,
 465        .cols           = 8,
 466        .rep            = 1,
 467};
 468
 469/* Enable input logic and pull all lines up when eMMC is on. */
 470static struct omap_board_mux rx51_mmc2_on_mux[] = {
 471        OMAP3_MUX(SDMMC2_CMD, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 472        OMAP3_MUX(SDMMC2_DAT0, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 473        OMAP3_MUX(SDMMC2_DAT1, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 474        OMAP3_MUX(SDMMC2_DAT2, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 475        OMAP3_MUX(SDMMC2_DAT3, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 476        OMAP3_MUX(SDMMC2_DAT4, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 477        OMAP3_MUX(SDMMC2_DAT5, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 478        OMAP3_MUX(SDMMC2_DAT6, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 479        OMAP3_MUX(SDMMC2_DAT7, OMAP_PIN_INPUT_PULLUP | OMAP_MUX_MODE0),
 480        { .reg_offset = OMAP_MUX_TERMINATOR },
 481};
 482
 483/* Disable input logic and pull all lines down when eMMC is off. */
 484static struct omap_board_mux rx51_mmc2_off_mux[] = {
 485        OMAP3_MUX(SDMMC2_CMD, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 486        OMAP3_MUX(SDMMC2_DAT0, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 487        OMAP3_MUX(SDMMC2_DAT1, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 488        OMAP3_MUX(SDMMC2_DAT2, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 489        OMAP3_MUX(SDMMC2_DAT3, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 490        OMAP3_MUX(SDMMC2_DAT4, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 491        OMAP3_MUX(SDMMC2_DAT5, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 492        OMAP3_MUX(SDMMC2_DAT6, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 493        OMAP3_MUX(SDMMC2_DAT7, OMAP_PULL_ENA | OMAP_MUX_MODE0),
 494        { .reg_offset = OMAP_MUX_TERMINATOR },
 495};
 496
 497static struct omap_mux_partition *partition;
 498
 499/*
 500 * Current flows to eMMC when eMMC is off and the data lines are pulled up,
 501 * so pull them down. N.B. we pull 8 lines because we are using 8 lines.
 502 */
 503static void rx51_mmc2_remux(struct device *dev, int slot, int power_on)
 504{
 505        if (power_on)
 506                omap_mux_write_array(partition, rx51_mmc2_on_mux);
 507        else
 508                omap_mux_write_array(partition, rx51_mmc2_off_mux);
 509}
 510
 511static struct omap2_hsmmc_info mmc[] __initdata = {
 512        {
 513                .name           = "external",
 514                .mmc            = 1,
 515                .caps           = MMC_CAP_4_BIT_DATA,
 516                .cover_only     = true,
 517                .gpio_cd        = 160,
 518                .gpio_wp        = -EINVAL,
 519                .power_saving   = true,
 520        },
 521        {
 522                .name           = "internal",
 523                .mmc            = 2,
 524                .caps           = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
 525                                                /* See also rx51_mmc2_remux */
 526                .gpio_cd        = -EINVAL,
 527                .gpio_wp        = -EINVAL,
 528                .nonremovable   = true,
 529                .power_saving   = true,
 530                .remux          = rx51_mmc2_remux,
 531        },
 532        {}      /* Terminator */
 533};
 534
 535static struct regulator_consumer_supply rx51_vmmc1_supply[] = {
 536        REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"),
 537};
 538
 539static struct regulator_consumer_supply rx51_vaux2_supply[] = {
 540        REGULATOR_SUPPLY("vdds_csib", "omap3isp"),
 541};
 542
 543static struct regulator_consumer_supply rx51_vaux3_supply[] = {
 544        REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
 545};
 546
 547static struct regulator_consumer_supply rx51_vsim_supply[] = {
 548        REGULATOR_SUPPLY("vmmc_aux", "omap_hsmmc.1"),
 549};
 550
 551static struct regulator_consumer_supply rx51_vmmc2_supplies[] = {
 552        /* tlv320aic3x analog supplies */
 553        REGULATOR_SUPPLY("AVDD", "2-0018"),
 554        REGULATOR_SUPPLY("DRVDD", "2-0018"),
 555        REGULATOR_SUPPLY("AVDD", "2-0019"),
 556        REGULATOR_SUPPLY("DRVDD", "2-0019"),
 557        /* tpa6130a2 */
 558        REGULATOR_SUPPLY("Vdd", "2-0060"),
 559        /* Keep vmmc as last item. It is not iterated for newer boards */
 560        REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1"),
 561};
 562
 563static struct regulator_consumer_supply rx51_vio_supplies[] = {
 564        /* tlv320aic3x digital supplies */
 565        REGULATOR_SUPPLY("IOVDD", "2-0018"),
 566        REGULATOR_SUPPLY("DVDD", "2-0018"),
 567        REGULATOR_SUPPLY("IOVDD", "2-0019"),
 568        REGULATOR_SUPPLY("DVDD", "2-0019"),
 569        /* Si4713 IO supply */
 570        REGULATOR_SUPPLY("vio", "2-0063"),
 571        /* lis3lv02d */
 572        REGULATOR_SUPPLY("Vdd_IO", "3-001d"),
 573};
 574
 575static struct regulator_consumer_supply rx51_vaux1_consumers[] = {
 576        REGULATOR_SUPPLY("vdds_sdi", "omapdss"),
 577        REGULATOR_SUPPLY("vdds_sdi", "omapdss_sdi.0"),
 578        /* Si4713 supply */
 579        REGULATOR_SUPPLY("vdd", "2-0063"),
 580        /* lis3lv02d */
 581        REGULATOR_SUPPLY("Vdd", "3-001d"),
 582};
 583
 584static struct regulator_init_data rx51_vaux1 = {
 585        .constraints = {
 586                .name                   = "V28",
 587                .min_uV                 = 2800000,
 588                .max_uV                 = 2800000,
 589                .always_on              = true, /* due battery cover sensor */
 590                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 591                                        | REGULATOR_MODE_STANDBY,
 592                .valid_ops_mask         = REGULATOR_CHANGE_MODE
 593                                        | REGULATOR_CHANGE_STATUS,
 594        },
 595        .num_consumer_supplies  = ARRAY_SIZE(rx51_vaux1_consumers),
 596        .consumer_supplies      = rx51_vaux1_consumers,
 597};
 598
 599static struct regulator_init_data rx51_vaux2 = {
 600        .constraints = {
 601                .name                   = "VCSI",
 602                .min_uV                 = 1800000,
 603                .max_uV                 = 1800000,
 604                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 605                                        | REGULATOR_MODE_STANDBY,
 606                .valid_ops_mask         = REGULATOR_CHANGE_MODE
 607                                        | REGULATOR_CHANGE_STATUS,
 608        },
 609        .num_consumer_supplies  = ARRAY_SIZE(rx51_vaux2_supply),
 610        .consumer_supplies      = rx51_vaux2_supply,
 611};
 612
 613/* VAUX3 - adds more power to VIO_18 rail */
 614static struct regulator_init_data rx51_vaux3_cam = {
 615        .constraints = {
 616                .name                   = "VCAM_DIG_18",
 617                .min_uV                 = 1800000,
 618                .max_uV                 = 1800000,
 619                .apply_uV               = true,
 620                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 621                                        | REGULATOR_MODE_STANDBY,
 622                .valid_ops_mask         = REGULATOR_CHANGE_MODE
 623                                        | REGULATOR_CHANGE_STATUS,
 624        },
 625};
 626
 627static struct regulator_init_data rx51_vaux3_mmc = {
 628        .constraints = {
 629                .name                   = "VMMC2_30",
 630                .min_uV                 = 2800000,
 631                .max_uV                 = 3000000,
 632                .apply_uV               = true,
 633                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 634                                        | REGULATOR_MODE_STANDBY,
 635                .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
 636                                        | REGULATOR_CHANGE_MODE
 637                                        | REGULATOR_CHANGE_STATUS,
 638        },
 639        .num_consumer_supplies  = ARRAY_SIZE(rx51_vaux3_supply),
 640        .consumer_supplies      = rx51_vaux3_supply,
 641};
 642
 643static struct regulator_init_data rx51_vaux4 = {
 644        .constraints = {
 645                .name                   = "VCAM_ANA_28",
 646                .min_uV                 = 2800000,
 647                .max_uV                 = 2800000,
 648                .apply_uV               = true,
 649                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 650                                        | REGULATOR_MODE_STANDBY,
 651                .valid_ops_mask         = REGULATOR_CHANGE_MODE
 652                                        | REGULATOR_CHANGE_STATUS,
 653        },
 654};
 655
 656static struct regulator_init_data rx51_vmmc1 = {
 657        .constraints = {
 658                .min_uV                 = 1850000,
 659                .max_uV                 = 3150000,
 660                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 661                                        | REGULATOR_MODE_STANDBY,
 662                .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
 663                                        | REGULATOR_CHANGE_MODE
 664                                        | REGULATOR_CHANGE_STATUS,
 665        },
 666        .num_consumer_supplies  = ARRAY_SIZE(rx51_vmmc1_supply),
 667        .consumer_supplies      = rx51_vmmc1_supply,
 668};
 669
 670static struct regulator_init_data rx51_vmmc2 = {
 671        .constraints = {
 672                .name                   = "V28_A",
 673                .min_uV                 = 2800000,
 674                .max_uV                 = 3000000,
 675                .always_on              = true, /* due VIO leak to AIC34 VDDs */
 676                .apply_uV               = true,
 677                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 678                                        | REGULATOR_MODE_STANDBY,
 679                .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
 680                                        | REGULATOR_CHANGE_MODE
 681                                        | REGULATOR_CHANGE_STATUS,
 682        },
 683        .num_consumer_supplies  = ARRAY_SIZE(rx51_vmmc2_supplies),
 684        .consumer_supplies      = rx51_vmmc2_supplies,
 685};
 686
 687static struct regulator_init_data rx51_vpll1 = {
 688        .constraints = {
 689                .name                   = "VPLL",
 690                .min_uV                 = 1800000,
 691                .max_uV                 = 1800000,
 692                .apply_uV               = true,
 693                .always_on              = true,
 694                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 695                                        | REGULATOR_MODE_STANDBY,
 696                .valid_ops_mask         = REGULATOR_CHANGE_MODE,
 697        },
 698};
 699
 700static struct regulator_init_data rx51_vpll2 = {
 701        .constraints = {
 702                .name                   = "VSDI_CSI",
 703                .min_uV                 = 1800000,
 704                .max_uV                 = 1800000,
 705                .apply_uV               = true,
 706                .always_on              = true,
 707                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 708                                        | REGULATOR_MODE_STANDBY,
 709                .valid_ops_mask         = REGULATOR_CHANGE_MODE,
 710        },
 711};
 712
 713static struct regulator_init_data rx51_vsim = {
 714        .constraints = {
 715                .name                   = "VMMC2_IO_18",
 716                .min_uV                 = 1800000,
 717                .max_uV                 = 1800000,
 718                .apply_uV               = true,
 719                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 720                                        | REGULATOR_MODE_STANDBY,
 721                .valid_ops_mask         = REGULATOR_CHANGE_MODE
 722                                        | REGULATOR_CHANGE_STATUS,
 723        },
 724        .num_consumer_supplies  = ARRAY_SIZE(rx51_vsim_supply),
 725        .consumer_supplies      = rx51_vsim_supply,
 726};
 727
 728static struct regulator_init_data rx51_vio = {
 729        .constraints = {
 730                .min_uV                 = 1800000,
 731                .max_uV                 = 1800000,
 732                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 733                                        | REGULATOR_MODE_STANDBY,
 734                .valid_ops_mask         = REGULATOR_CHANGE_VOLTAGE
 735                                        | REGULATOR_CHANGE_MODE
 736                                        | REGULATOR_CHANGE_STATUS,
 737        },
 738        .num_consumer_supplies  = ARRAY_SIZE(rx51_vio_supplies),
 739        .consumer_supplies      = rx51_vio_supplies,
 740};
 741
 742static struct regulator_init_data rx51_vintana1 = {
 743        .constraints = {
 744                .name                   = "VINTANA1",
 745                .min_uV                 = 1500000,
 746                .max_uV                 = 1500000,
 747                .always_on              = true,
 748                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 749                                        | REGULATOR_MODE_STANDBY,
 750                .valid_ops_mask         = REGULATOR_CHANGE_MODE,
 751        },
 752};
 753
 754static struct regulator_init_data rx51_vintana2 = {
 755        .constraints = {
 756                .name                   = "VINTANA2",
 757                .min_uV                 = 2750000,
 758                .max_uV                 = 2750000,
 759                .apply_uV               = true,
 760                .always_on              = true,
 761                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 762                                        | REGULATOR_MODE_STANDBY,
 763                .valid_ops_mask         = REGULATOR_CHANGE_MODE,
 764        },
 765};
 766
 767static struct regulator_init_data rx51_vintdig = {
 768        .constraints = {
 769                .name                   = "VINTDIG",
 770                .min_uV                 = 1500000,
 771                .max_uV                 = 1500000,
 772                .always_on              = true,
 773                .valid_modes_mask       = REGULATOR_MODE_NORMAL
 774                                        | REGULATOR_MODE_STANDBY,
 775                .valid_ops_mask         = REGULATOR_CHANGE_MODE,
 776        },
 777};
 778
 779static struct si4713_platform_data rx51_si4713_i2c_data __initdata_or_module = {
 780        .gpio_reset     = RX51_FMTX_RESET_GPIO,
 781};
 782
 783static struct i2c_board_info rx51_si4713_board_info __initdata_or_module = {
 784        I2C_BOARD_INFO("si4713", SI4713_I2C_ADDR_BUSEN_HIGH),
 785        .platform_data  = &rx51_si4713_i2c_data,
 786};
 787
 788static struct radio_si4713_platform_data rx51_si4713_data __initdata_or_module = {
 789        .i2c_bus        = 2,
 790        .subdev_board_info = &rx51_si4713_board_info,
 791};
 792
 793static struct platform_device rx51_si4713_dev __initdata_or_module = {
 794        .name   = "radio-si4713",
 795        .id     = -1,
 796        .dev    = {
 797                .platform_data  = &rx51_si4713_data,
 798        },
 799};
 800
 801static __init void rx51_init_si4713(void)
 802{
 803        int err;
 804
 805        err = gpio_request_one(RX51_FMTX_IRQ, GPIOF_DIR_IN, "si4713 irq");
 806        if (err) {
 807                printk(KERN_ERR "Cannot request si4713 irq gpio. %d\n", err);
 808                return;
 809        }
 810        rx51_si4713_board_info.irq = gpio_to_irq(RX51_FMTX_IRQ);
 811        platform_device_register(&rx51_si4713_dev);
 812}
 813
 814static int rx51_twlgpio_setup(struct device *dev, unsigned gpio, unsigned n)
 815{
 816        /* FIXME this gpio setup is just a placeholder for now */
 817        gpio_request_one(gpio + 6, GPIOF_OUT_INIT_LOW, "backlight_pwm");
 818        gpio_request_one(gpio + 7, GPIOF_OUT_INIT_LOW, "speaker_en");
 819
 820        return 0;
 821}
 822
 823static struct twl4030_gpio_platform_data rx51_gpio_data = {
 824        .pulldowns              = BIT(0) | BIT(1) | BIT(2) | BIT(3)
 825                                | BIT(4) | BIT(5)
 826                                | BIT(8) | BIT(9) | BIT(10) | BIT(11)
 827                                | BIT(12) | BIT(13) | BIT(14) | BIT(15)
 828                                | BIT(16) | BIT(17) ,
 829        .setup                  = rx51_twlgpio_setup,
 830};
 831
 832static struct twl4030_ins sleep_on_seq[] __initdata = {
 833/*
 834 * Turn off everything
 835 */
 836        {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_SLEEP), 2},
 837};
 838
 839static struct twl4030_script sleep_on_script __initdata = {
 840        .script = sleep_on_seq,
 841        .size   = ARRAY_SIZE(sleep_on_seq),
 842        .flags  = TWL4030_SLEEP_SCRIPT,
 843};
 844
 845static struct twl4030_ins wakeup_seq[] __initdata = {
 846/*
 847 * Reenable everything
 848 */
 849        {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_ACTIVE), 2},
 850};
 851
 852static struct twl4030_script wakeup_script __initdata = {
 853        .script = wakeup_seq,
 854        .size   = ARRAY_SIZE(wakeup_seq),
 855        .flags  = TWL4030_WAKEUP12_SCRIPT,
 856};
 857
 858static struct twl4030_ins wakeup_p3_seq[] __initdata = {
 859/*
 860 * Reenable everything
 861 */
 862        {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 1, 0, RES_STATE_ACTIVE), 2},
 863};
 864
 865static struct twl4030_script wakeup_p3_script __initdata = {
 866        .script = wakeup_p3_seq,
 867        .size   = ARRAY_SIZE(wakeup_p3_seq),
 868        .flags  = TWL4030_WAKEUP3_SCRIPT,
 869};
 870
 871static struct twl4030_ins wrst_seq[] __initdata = {
 872/*
 873 * Reset twl4030.
 874 * Reset VDD1 regulator.
 875 * Reset VDD2 regulator.
 876 * Reset VPLL1 regulator.
 877 * Enable sysclk output.
 878 * Reenable twl4030.
 879 */
 880        {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_OFF), 2},
 881        {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_ALL, 0, 1, RES_STATE_ACTIVE),
 882                0x13},
 883        {MSG_BROADCAST(DEV_GRP_NULL, RES_GRP_PP, 0, 3, RES_STATE_OFF), 0x13},
 884        {MSG_SINGULAR(DEV_GRP_NULL, RES_VDD1, RES_STATE_WRST), 0x13},
 885        {MSG_SINGULAR(DEV_GRP_NULL, RES_VDD2, RES_STATE_WRST), 0x13},
 886        {MSG_SINGULAR(DEV_GRP_NULL, RES_VPLL1, RES_STATE_WRST), 0x35},
 887        {MSG_SINGULAR(DEV_GRP_P3, RES_HFCLKOUT, RES_STATE_ACTIVE), 2},
 888        {MSG_SINGULAR(DEV_GRP_NULL, RES_RESET, RES_STATE_ACTIVE), 2},
 889};
 890
 891static struct twl4030_script wrst_script __initdata = {
 892        .script = wrst_seq,
 893        .size   = ARRAY_SIZE(wrst_seq),
 894        .flags  = TWL4030_WRST_SCRIPT,
 895};
 896
 897static struct twl4030_script *twl4030_scripts[] __initdata = {
 898        /* wakeup12 script should be loaded before sleep script, otherwise a
 899           board might hit retention before loading of wakeup script is
 900           completed. This can cause boot failures depending on timing issues.
 901        */
 902        &wakeup_script,
 903        &sleep_on_script,
 904        &wakeup_p3_script,
 905        &wrst_script,
 906};
 907
 908static struct twl4030_resconfig twl4030_rconfig[] __initdata = {
 909        { .resource = RES_VDD1, .devgroup = -1,
 910          .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
 911          .remap_sleep = RES_STATE_OFF
 912        },
 913        { .resource = RES_VDD2, .devgroup = -1,
 914          .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
 915          .remap_sleep = RES_STATE_OFF
 916        },
 917        { .resource = RES_VPLL1, .devgroup = -1,
 918          .type = 1, .type2 = -1, .remap_off = RES_STATE_OFF,
 919          .remap_sleep = RES_STATE_OFF
 920        },
 921        { .resource = RES_VPLL2, .devgroup = -1,
 922          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 923        },
 924        { .resource = RES_VAUX1, .devgroup = -1,
 925          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 926        },
 927        { .resource = RES_VAUX2, .devgroup = -1,
 928          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 929        },
 930        { .resource = RES_VAUX3, .devgroup = -1,
 931          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 932        },
 933        { .resource = RES_VAUX4, .devgroup = -1,
 934          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 935        },
 936        { .resource = RES_VMMC1, .devgroup = -1,
 937          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 938        },
 939        { .resource = RES_VMMC2, .devgroup = -1,
 940          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 941        },
 942        { .resource = RES_VDAC, .devgroup = -1,
 943          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 944        },
 945        { .resource = RES_VSIM, .devgroup = -1,
 946          .type = -1, .type2 = 3, .remap_off = -1, .remap_sleep = -1
 947        },
 948        { .resource = RES_VINTANA1, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
 949          .type = -1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 950        },
 951        { .resource = RES_VINTANA2, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
 952          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 953        },
 954        { .resource = RES_VINTDIG, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
 955          .type = -1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 956        },
 957        { .resource = RES_VIO, .devgroup = DEV_GRP_P3,
 958          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 959        },
 960        { .resource = RES_CLKEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
 961          .type = 1, .type2 = -1 , .remap_off = -1, .remap_sleep = -1
 962        },
 963        { .resource = RES_REGEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
 964          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 965        },
 966        { .resource = RES_NRES_PWRON, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
 967          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 968        },
 969        { .resource = RES_SYSEN, .devgroup = DEV_GRP_P1 | DEV_GRP_P3,
 970          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 971        },
 972        { .resource = RES_HFCLKOUT, .devgroup = DEV_GRP_P3,
 973          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 974        },
 975        { .resource = RES_32KCLKOUT, .devgroup = -1,
 976          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 977        },
 978        { .resource = RES_RESET, .devgroup = -1,
 979          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 980        },
 981        { .resource = RES_MAIN_REF, .devgroup = -1,
 982          .type = 1, .type2 = -1, .remap_off = -1, .remap_sleep = -1
 983        },
 984        { 0, 0},
 985};
 986
 987static struct twl4030_power_data rx51_t2scripts_data __initdata = {
 988        .scripts        = twl4030_scripts,
 989        .num = ARRAY_SIZE(twl4030_scripts),
 990        .resource_config = twl4030_rconfig,
 991};
 992
 993static struct twl4030_vibra_data rx51_vibra_data __initdata = {
 994        .coexist        = 0,
 995};
 996
 997static struct twl4030_audio_data rx51_audio_data __initdata = {
 998        .audio_mclk     = 26000000,
 999        .vibra          = &rx51_vibra_data,
1000};
1001
1002static struct twl4030_platform_data rx51_twldata __initdata = {
1003        /* platform_data for children goes here */
1004        .gpio                   = &rx51_gpio_data,
1005        .keypad                 = &rx51_kp_data,
1006        .power                  = &rx51_t2scripts_data,
1007        .audio                  = &rx51_audio_data,
1008
1009        .vaux1                  = &rx51_vaux1,
1010        .vaux2                  = &rx51_vaux2,
1011        .vaux4                  = &rx51_vaux4,
1012        .vmmc1                  = &rx51_vmmc1,
1013        .vpll1                  = &rx51_vpll1,
1014        .vpll2                  = &rx51_vpll2,
1015        .vsim                   = &rx51_vsim,
1016        .vintana1               = &rx51_vintana1,
1017        .vintana2               = &rx51_vintana2,
1018        .vintdig                = &rx51_vintdig,
1019        .vio                    = &rx51_vio,
1020};
1021
1022static struct tpa6130a2_platform_data rx51_tpa6130a2_data __initdata_or_module = {
1023        .power_gpio             = 98,
1024};
1025
1026/* Audio setup data */
1027static struct aic3x_setup_data rx51_aic34_setup = {
1028        .gpio_func[0] = AIC3X_GPIO1_FUNC_DISABLED,
1029        .gpio_func[1] = AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT,
1030};
1031
1032static struct aic3x_pdata rx51_aic3x_data = {
1033        .setup = &rx51_aic34_setup,
1034        .gpio_reset = 60,
1035};
1036
1037static struct aic3x_pdata rx51_aic3x_data2 = {
1038        .gpio_reset = 60,
1039};
1040
1041static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_2[] = {
1042        {
1043                I2C_BOARD_INFO("tlv320aic3x", 0x18),
1044                .platform_data = &rx51_aic3x_data,
1045        },
1046        {
1047                I2C_BOARD_INFO("tlv320aic3x", 0x19),
1048                .platform_data = &rx51_aic3x_data2,
1049        },
1050#if defined(CONFIG_SENSORS_TSL2563) || defined(CONFIG_SENSORS_TSL2563_MODULE)
1051        {
1052                I2C_BOARD_INFO("tsl2563", 0x29),
1053                .platform_data = &rx51_tsl2563_platform_data,
1054        },
1055#endif
1056#if defined(CONFIG_LEDS_LP5523) || defined(CONFIG_LEDS_LP5523_MODULE)
1057        {
1058                I2C_BOARD_INFO("lp5523", 0x32),
1059                .platform_data  = &rx51_lp5523_platform_data,
1060        },
1061#endif
1062        {
1063                I2C_BOARD_INFO("bq27200", 0x55),
1064        },
1065        {
1066                I2C_BOARD_INFO("tpa6130a2", 0x60),
1067                .platform_data = &rx51_tpa6130a2_data,
1068        }
1069};
1070
1071static struct i2c_board_info __initdata rx51_peripherals_i2c_board_info_3[] = {
1072#if defined(CONFIG_SENSORS_LIS3_I2C) || defined(CONFIG_SENSORS_LIS3_I2C_MODULE)
1073        {
1074                I2C_BOARD_INFO("lis3lv02d", 0x1d),
1075                .platform_data = &rx51_lis3lv02d_data,
1076        },
1077#endif
1078};
1079
1080static int __init rx51_i2c_init(void)
1081{
1082        if ((system_rev >= SYSTEM_REV_S_USES_VAUX3 && system_rev < 0x100) ||
1083            system_rev >= SYSTEM_REV_B_USES_VAUX3) {
1084                rx51_twldata.vaux3 = &rx51_vaux3_mmc;
1085                /* Only older boards use VMMC2 for internal MMC */
1086                rx51_vmmc2.num_consumer_supplies--;
1087        } else {
1088                rx51_twldata.vaux3 = &rx51_vaux3_cam;
1089        }
1090        rx51_twldata.vmmc2 = &rx51_vmmc2;
1091        omap3_pmic_get_config(&rx51_twldata,
1092                        TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_MADC,
1093                        TWL_COMMON_REGULATOR_VDAC);
1094
1095        rx51_twldata.vdac->constraints.apply_uV = true;
1096        rx51_twldata.vdac->constraints.name = "VDAC";
1097
1098        omap_pmic_init(1, 2200, "twl5030", 7 + OMAP_INTC_START, &rx51_twldata);
1099        omap_register_i2c_bus(2, 100, rx51_peripherals_i2c_board_info_2,
1100                              ARRAY_SIZE(rx51_peripherals_i2c_board_info_2));
1101#if defined(CONFIG_SENSORS_LIS3_I2C) || defined(CONFIG_SENSORS_LIS3_I2C_MODULE)
1102        rx51_lis3lv02d_data.irq2 = gpio_to_irq(LIS302_IRQ2_GPIO);
1103        rx51_peripherals_i2c_board_info_3[0].irq = gpio_to_irq(LIS302_IRQ1_GPIO);
1104#endif
1105        omap_register_i2c_bus(3, 400, rx51_peripherals_i2c_board_info_3,
1106                              ARRAY_SIZE(rx51_peripherals_i2c_board_info_3));
1107        return 0;
1108}
1109
1110#if defined(CONFIG_MTD_ONENAND_OMAP2) || \
1111        defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
1112
1113static struct mtd_partition onenand_partitions[] = {
1114        {
1115                .name           = "bootloader",
1116                .offset         = 0,
1117                .size           = 0x20000,
1118                .mask_flags     = MTD_WRITEABLE,        /* Force read-only */
1119        },
1120        {
1121                .name           = "config",
1122                .offset         = MTDPART_OFS_APPEND,
1123                .size           = 0x60000,
1124        },
1125        {
1126                .name           = "log",
1127                .offset         = MTDPART_OFS_APPEND,
1128                .size           = 0x40000,
1129        },
1130        {
1131                .name           = "kernel",
1132                .offset         = MTDPART_OFS_APPEND,
1133                .size           = 0x200000,
1134        },
1135        {
1136                .name           = "initfs",
1137                .offset         = MTDPART_OFS_APPEND,
1138                .size           = 0x200000,
1139        },
1140        {
1141                .name           = "rootfs",
1142                .offset         = MTDPART_OFS_APPEND,
1143                .size           = MTDPART_SIZ_FULL,
1144        },
1145};
1146
1147static struct omap_onenand_platform_data board_onenand_data[] = {
1148        {
1149                .cs             = 0,
1150                .gpio_irq       = 65,
1151                .parts          = onenand_partitions,
1152                .nr_parts       = ARRAY_SIZE(onenand_partitions),
1153                .flags          = ONENAND_SYNC_READWRITE,
1154        }
1155};
1156#endif
1157
1158#if defined(CONFIG_SMC91X) || defined(CONFIG_SMC91X_MODULE)
1159
1160static struct omap_smc91x_platform_data board_smc91x_data = {
1161        .cs             = 1,
1162        .gpio_irq       = 54,
1163        .gpio_pwrdwn    = 86,
1164        .gpio_reset     = 164,
1165        .flags          = GPMC_TIMINGS_SMC91C96 | IORESOURCE_IRQ_HIGHLEVEL,
1166};
1167
1168static void __init board_smc91x_init(void)
1169{
1170        omap_mux_init_gpio(54, OMAP_PIN_INPUT_PULLDOWN);
1171        omap_mux_init_gpio(86, OMAP_PIN_OUTPUT);
1172        omap_mux_init_gpio(164, OMAP_PIN_OUTPUT);
1173
1174        gpmc_smc91x_init(&board_smc91x_data);
1175}
1176
1177#else
1178
1179static inline void board_smc91x_init(void)
1180{
1181}
1182
1183#endif
1184
1185static void rx51_wl1251_set_power(bool enable)
1186{
1187        gpio_set_value(RX51_WL1251_POWER_GPIO, enable);
1188}
1189
1190static struct gpio rx51_wl1251_gpios[] __initdata = {
1191        { RX51_WL1251_POWER_GPIO, GPIOF_OUT_INIT_LOW,   "wl1251 power"  },
1192        { RX51_WL1251_IRQ_GPIO,   GPIOF_IN,             "wl1251 irq"    },
1193};
1194
1195static void __init rx51_init_wl1251(void)
1196{
1197        int irq, ret;
1198
1199        ret = gpio_request_array(rx51_wl1251_gpios,
1200                                 ARRAY_SIZE(rx51_wl1251_gpios));
1201        if (ret < 0)
1202                goto error;
1203
1204        irq = gpio_to_irq(RX51_WL1251_IRQ_GPIO);
1205        if (irq < 0)
1206                goto err_irq;
1207
1208        wl1251_pdata.set_power = rx51_wl1251_set_power;
1209        rx51_peripherals_spi_board_info[RX51_SPI_WL1251].irq = irq;
1210
1211        return;
1212
1213err_irq:
1214        gpio_free(RX51_WL1251_IRQ_GPIO);
1215        gpio_free(RX51_WL1251_POWER_GPIO);
1216error:
1217        printk(KERN_ERR "wl1251 board initialisation failed\n");
1218        wl1251_pdata.set_power = NULL;
1219
1220        /*
1221         * Now rx51_peripherals_spi_board_info[1].irq is zero and
1222         * set_power is null, and wl1251_probe() will fail.
1223         */
1224}
1225
1226static struct tsc2005_platform_data tsc2005_pdata = {
1227        .ts_pressure_max        = 2048,
1228        .ts_pressure_fudge      = 2,
1229        .ts_x_max               = 4096,
1230        .ts_x_fudge             = 4,
1231        .ts_y_max               = 4096,
1232        .ts_y_fudge             = 7,
1233        .ts_x_plate_ohm         = 280,
1234        .esd_timeout_ms         = 8000,
1235};
1236
1237static struct gpio rx51_tsc2005_gpios[] __initdata = {
1238        { RX51_TSC2005_IRQ_GPIO,   GPIOF_IN,            "tsc2005 IRQ"   },
1239        { RX51_TSC2005_RESET_GPIO, GPIOF_OUT_INIT_HIGH, "tsc2005 reset" },
1240};
1241
1242static void rx51_tsc2005_set_reset(bool enable)
1243{
1244        gpio_set_value(RX51_TSC2005_RESET_GPIO, enable);
1245}
1246
1247static void __init rx51_init_tsc2005(void)
1248{
1249        int r;
1250
1251        omap_mux_init_gpio(RX51_TSC2005_RESET_GPIO, OMAP_PIN_OUTPUT);
1252        omap_mux_init_gpio(RX51_TSC2005_IRQ_GPIO, OMAP_PIN_INPUT_PULLUP);
1253
1254        r = gpio_request_array(rx51_tsc2005_gpios,
1255                               ARRAY_SIZE(rx51_tsc2005_gpios));
1256        if (r < 0) {
1257                printk(KERN_ERR "tsc2005 board initialization failed\n");
1258                tsc2005_pdata.esd_timeout_ms = 0;
1259                return;
1260        }
1261
1262        tsc2005_pdata.set_reset = rx51_tsc2005_set_reset;
1263        rx51_peripherals_spi_board_info[RX51_SPI_TSC2005].irq =
1264                                gpio_to_irq(RX51_TSC2005_IRQ_GPIO);
1265}
1266
1267#if defined(CONFIG_IR_RX51) || defined(CONFIG_IR_RX51_MODULE)
1268static struct lirc_rx51_platform_data rx51_lirc_data = {
1269        .set_max_mpu_wakeup_lat = omap_pm_set_max_mpu_wakeup_lat,
1270        .pwm_timer = 9, /* Use GPT 9 for CIR */
1271};
1272
1273static struct platform_device rx51_lirc_device = {
1274        .name           = "lirc_rx51",
1275        .id             = -1,
1276        .dev            = {
1277                .platform_data = &rx51_lirc_data,
1278        },
1279};
1280
1281static void __init rx51_init_lirc(void)
1282{
1283        platform_device_register(&rx51_lirc_device);
1284}
1285#else
1286static void __init rx51_init_lirc(void)
1287{
1288}
1289#endif
1290
1291static struct platform_device madc_hwmon = {
1292        .name   = "twl4030_madc_hwmon",
1293        .id     = -1,
1294};
1295
1296static void __init rx51_init_twl4030_hwmon(void)
1297{
1298        platform_device_register(&madc_hwmon);
1299}
1300
1301void __init rx51_peripherals_init(void)
1302{
1303        rx51_i2c_init();
1304        regulator_has_full_constraints();
1305        gpmc_onenand_init(board_onenand_data);
1306        board_smc91x_init();
1307        rx51_add_gpio_keys();
1308        rx51_init_wl1251();
1309        rx51_init_tsc2005();
1310        rx51_init_si4713();
1311        rx51_init_lirc();
1312        spi_register_board_info(rx51_peripherals_spi_board_info,
1313                                ARRAY_SIZE(rx51_peripherals_spi_board_info));
1314
1315        partition = omap_mux_get("core");
1316        if (partition)
1317                omap_hsmmc_init(mmc);
1318
1319        rx51_charger_init();
1320        rx51_init_twl4030_hwmon();
1321}
1322
1323