Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'omap-for-v4.8/legacy-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/cleanup

Merge "drop last omap3 board files for v4.8" from Tony Lindgren:

Remove the last two legacy board-*.c files for omap3 for legacy
booting for v4.8 to allow making mach-omap2 device tree only for
v4.9.

We've had Nokia N900 and omap3 LDP board-*.c files remaining
while other omap3 devices have been device tree only for quite
a while now. Also N900 and LDP have had device tree based booting
working for years now, but few drivers for N900 were still only
working in legacy only mode until recently. With the remaining
issues out of the way, we discussed on the mailing lists that
we're finally OK to remove the remaining board-*.c files.

For the timing of this pull request, I wanted to wait until
v4.8-rc1 is out to make sure the legacy booting still works fine
after the merge window before doing it.

And for v4.8, let's not touch any other platform data in case we
still need to revert for some reason. This makes the revert just a
question of adding back the legacy board-*.c files.

Then if no issues, we can remove the unused remaining platform
data later on for v4.9.

* tag 'omap-for-v4.8/legacy-signed' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
ARM: OMAP2+: Drop legacy board file for LDP
ARM: OMAP2+: Drop legacy board file for n900

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