| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 1 | /* | 
|  | 2 | * board-omap3pandora.c (Pandora Handheld Console) | 
|  | 3 | * | 
|  | 4 | * This program is free software; you can redistribute it and/or | 
|  | 5 | * modify it under the terms of the GNU General Public License | 
|  | 6 | * version 2 as published by the Free Software Foundation. | 
|  | 7 | * | 
|  | 8 | * This program is distributed in the hope that it will be useful, but | 
|  | 9 | * WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
|  | 11 | * General Public License for more details. | 
|  | 12 | * | 
|  | 13 | * You should have received a copy of the GNU General Public License | 
|  | 14 | * along with this program; if not, write to the Free Software | 
|  | 15 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA | 
|  | 16 | * 02110-1301 USA | 
|  | 17 | * | 
|  | 18 | */ | 
|  | 19 |  | 
|  | 20 | #include <linux/init.h> | 
|  | 21 | #include <linux/kernel.h> | 
|  | 22 | #include <linux/platform_device.h> | 
|  | 23 |  | 
|  | 24 | #include <linux/spi/spi.h> | 
| Grazvydas Ignotas | 64f535a | 2009-05-28 14:04:04 -0700 | [diff] [blame] | 25 | #include <linux/regulator/machine.h> | 
| Santosh Shilimkar | b07682b | 2009-12-13 20:05:51 +0100 | [diff] [blame] | 26 | #include <linux/i2c/twl.h> | 
| Ohad Ben-Cohen | c1f9a09 | 2010-09-16 13:16:02 +0200 | [diff] [blame] | 27 | #include <linux/wl12xx.h> | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 28 | #include <linux/mtd/partitions.h> | 
|  | 29 | #include <linux/mtd/nand.h> | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 30 | #include <linux/leds.h> | 
|  | 31 | #include <linux/input.h> | 
| Janusz Krzysztofik | 6135434 | 2009-10-22 14:43:17 -0700 | [diff] [blame] | 32 | #include <linux/input/matrix_keypad.h> | 
| Axel Lin | f9fa1bb | 2011-05-31 20:55:44 +0800 | [diff] [blame] | 33 | #include <linux/gpio.h> | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 34 | #include <linux/gpio_keys.h> | 
| Sukumar Ghorai | 3a63833 | 2010-09-15 14:49:23 +0000 | [diff] [blame] | 35 | #include <linux/mmc/host.h> | 
| Grazvydas Ignotas | ed199f7 | 2010-08-10 18:01:52 -0700 | [diff] [blame] | 36 | #include <linux/mmc/card.h> | 
| Grazvydas Ignotas | 690a4a3 | 2010-10-01 16:35:25 -0700 | [diff] [blame] | 37 | #include <linux/regulator/fixed.h> | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 38 |  | 
|  | 39 | #include <asm/mach-types.h> | 
|  | 40 | #include <asm/mach/arch.h> | 
|  | 41 | #include <asm/mach/map.h> | 
|  | 42 |  | 
| Tony Lindgren | ce491cf | 2009-10-20 09:40:47 -0700 | [diff] [blame] | 43 | #include <plat/board.h> | 
|  | 44 | #include <plat/common.h> | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 45 | #include <mach/hardware.h> | 
| Tony Lindgren | ce491cf | 2009-10-20 09:40:47 -0700 | [diff] [blame] | 46 | #include <plat/mcspi.h> | 
|  | 47 | #include <plat/usb.h> | 
| Tomi Valkeinen | a0b38cc | 2011-05-11 14:05:07 +0300 | [diff] [blame] | 48 | #include <video/omapdss.h> | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 49 | #include <plat/nand.h> | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 50 |  | 
| Tony Lindgren | ca5742b | 2009-12-11 16:16:32 -0800 | [diff] [blame] | 51 | #include "mux.h" | 
| Paul Walmsley | 2e12bd7 | 2009-05-28 14:03:59 -0700 | [diff] [blame] | 52 | #include "sdram-micron-mt46h32m32lf-6.h" | 
| Adrian Hunter | d02a900 | 2010-02-15 10:03:34 -0800 | [diff] [blame] | 53 | #include "hsmmc.h" | 
| Mike Rapoport | 96974a2 | 2011-04-25 01:09:05 +0300 | [diff] [blame] | 54 | #include "common-board-devices.h" | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 55 |  | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 56 | #define PANDORA_WIFI_IRQ_GPIO		21 | 
|  | 57 | #define PANDORA_WIFI_NRESET_GPIO	23 | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 58 | #define OMAP3_PANDORA_TS_GPIO		94 | 
|  | 59 |  | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 60 | static struct mtd_partition omap3pandora_nand_partitions[] = { | 
|  | 61 | { | 
|  | 62 | .name           = "xloader", | 
|  | 63 | .offset         = 0, | 
|  | 64 | .size           = 4 * NAND_BLOCK_SIZE, | 
|  | 65 | .mask_flags     = MTD_WRITEABLE | 
|  | 66 | }, { | 
|  | 67 | .name           = "uboot", | 
|  | 68 | .offset         = MTDPART_OFS_APPEND, | 
|  | 69 | .size           = 15 * NAND_BLOCK_SIZE, | 
|  | 70 | }, { | 
|  | 71 | .name           = "uboot-env", | 
|  | 72 | .offset         = MTDPART_OFS_APPEND, | 
|  | 73 | .size           = 1 * NAND_BLOCK_SIZE, | 
|  | 74 | }, { | 
|  | 75 | .name           = "boot", | 
|  | 76 | .offset         = MTDPART_OFS_APPEND, | 
|  | 77 | .size           = 80 * NAND_BLOCK_SIZE, | 
|  | 78 | }, { | 
|  | 79 | .name           = "rootfs", | 
|  | 80 | .offset         = MTDPART_OFS_APPEND, | 
|  | 81 | .size           = MTDPART_SIZ_FULL, | 
|  | 82 | }, | 
|  | 83 | }; | 
|  | 84 |  | 
|  | 85 | static struct omap_nand_platform_data pandora_nand_data = { | 
|  | 86 | .cs		= 0, | 
| Grazvydas Ignotas | 9d5ae7c | 2011-06-03 20:24:03 +0000 | [diff] [blame] | 87 | .devsize	= NAND_BUSWIDTH_16, | 
|  | 88 | .xfer_type	= NAND_OMAP_PREFETCH_DMA, | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 89 | .parts		= omap3pandora_nand_partitions, | 
|  | 90 | .nr_parts	= ARRAY_SIZE(omap3pandora_nand_partitions), | 
|  | 91 | }; | 
|  | 92 |  | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 93 | static struct gpio_led pandora_gpio_leds[] = { | 
|  | 94 | { | 
|  | 95 | .name			= "pandora::sd1", | 
|  | 96 | .default_trigger	= "mmc0", | 
|  | 97 | .gpio			= 128, | 
|  | 98 | }, { | 
|  | 99 | .name			= "pandora::sd2", | 
|  | 100 | .default_trigger	= "mmc1", | 
|  | 101 | .gpio			= 129, | 
|  | 102 | }, { | 
|  | 103 | .name			= "pandora::bluetooth", | 
|  | 104 | .gpio			= 158, | 
|  | 105 | }, { | 
|  | 106 | .name			= "pandora::wifi", | 
|  | 107 | .gpio			= 159, | 
|  | 108 | }, | 
|  | 109 | }; | 
|  | 110 |  | 
|  | 111 | static struct gpio_led_platform_data pandora_gpio_led_data = { | 
|  | 112 | .leds		= pandora_gpio_leds, | 
|  | 113 | .num_leds	= ARRAY_SIZE(pandora_gpio_leds), | 
|  | 114 | }; | 
|  | 115 |  | 
|  | 116 | static struct platform_device pandora_leds_gpio = { | 
|  | 117 | .name	= "leds-gpio", | 
|  | 118 | .id	= -1, | 
|  | 119 | .dev	= { | 
|  | 120 | .platform_data	= &pandora_gpio_led_data, | 
|  | 121 | }, | 
|  | 122 | }; | 
|  | 123 |  | 
|  | 124 | #define GPIO_BUTTON(gpio_num, ev_type, ev_code, act_low, descr)	\ | 
|  | 125 | {								\ | 
|  | 126 | .gpio		= gpio_num,				\ | 
|  | 127 | .type		= ev_type,				\ | 
|  | 128 | .code		= ev_code,				\ | 
|  | 129 | .active_low	= act_low,				\ | 
| Grazvydas Ignotas | ad74db6 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 130 | .debounce_interval = 4,					\ | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 131 | .desc		= "btn " descr,				\ | 
|  | 132 | } | 
|  | 133 |  | 
|  | 134 | #define GPIO_BUTTON_LOW(gpio_num, event_code, description)	\ | 
|  | 135 | GPIO_BUTTON(gpio_num, EV_KEY, event_code, 1, description) | 
|  | 136 |  | 
|  | 137 | static struct gpio_keys_button pandora_gpio_keys[] = { | 
|  | 138 | GPIO_BUTTON_LOW(110,	KEY_UP,		"up"), | 
|  | 139 | GPIO_BUTTON_LOW(103,	KEY_DOWN,	"down"), | 
|  | 140 | GPIO_BUTTON_LOW(96,	KEY_LEFT,	"left"), | 
|  | 141 | GPIO_BUTTON_LOW(98,	KEY_RIGHT,	"right"), | 
| Grazvydas Ignotas | ad74db6 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 142 | GPIO_BUTTON_LOW(109,	KEY_PAGEUP,	"game 1"), | 
|  | 143 | GPIO_BUTTON_LOW(111,	KEY_END,	"game 2"), | 
|  | 144 | GPIO_BUTTON_LOW(106,	KEY_PAGEDOWN,	"game 3"), | 
|  | 145 | GPIO_BUTTON_LOW(101,	KEY_HOME,	"game 4"), | 
|  | 146 | GPIO_BUTTON_LOW(102,	KEY_RIGHTSHIFT,	"l"), | 
|  | 147 | GPIO_BUTTON_LOW(97,	KEY_KPPLUS,	"l2"), | 
|  | 148 | GPIO_BUTTON_LOW(105,	KEY_RIGHTCTRL,	"r"), | 
|  | 149 | GPIO_BUTTON_LOW(107,	KEY_KPMINUS,	"r2"), | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 150 | GPIO_BUTTON_LOW(104,	KEY_LEFTCTRL,	"ctrl"), | 
|  | 151 | GPIO_BUTTON_LOW(99,	KEY_MENU,	"menu"), | 
|  | 152 | GPIO_BUTTON_LOW(176,	KEY_COFFEE,	"hold"), | 
|  | 153 | GPIO_BUTTON(100, EV_KEY, KEY_LEFTALT, 0, "alt"), | 
|  | 154 | GPIO_BUTTON(108, EV_SW, SW_LID, 1, "lid"), | 
|  | 155 | }; | 
|  | 156 |  | 
|  | 157 | static struct gpio_keys_platform_data pandora_gpio_key_info = { | 
|  | 158 | .buttons	= pandora_gpio_keys, | 
|  | 159 | .nbuttons	= ARRAY_SIZE(pandora_gpio_keys), | 
|  | 160 | }; | 
|  | 161 |  | 
|  | 162 | static struct platform_device pandora_keys_gpio = { | 
|  | 163 | .name	= "gpio-keys", | 
|  | 164 | .id	= -1, | 
|  | 165 | .dev	= { | 
|  | 166 | .platform_data	= &pandora_gpio_key_info, | 
|  | 167 | }, | 
|  | 168 | }; | 
|  | 169 |  | 
| Grazvydas Ignotas | ad74db6 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 170 | static const uint32_t board_keymap[] = { | 
| Grazvydas Ignotas | 24de042 | 2009-11-11 11:00:35 -0800 | [diff] [blame] | 171 | /* row, col, code */ | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 172 | KEY(0, 0, KEY_9), | 
| Grazvydas Ignotas | 24de042 | 2009-11-11 11:00:35 -0800 | [diff] [blame] | 173 | KEY(0, 1, KEY_8), | 
|  | 174 | KEY(0, 2, KEY_I), | 
|  | 175 | KEY(0, 3, KEY_J), | 
|  | 176 | KEY(0, 4, KEY_N), | 
|  | 177 | KEY(0, 5, KEY_M), | 
|  | 178 | KEY(1, 0, KEY_0), | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 179 | KEY(1, 1, KEY_7), | 
| Grazvydas Ignotas | 24de042 | 2009-11-11 11:00:35 -0800 | [diff] [blame] | 180 | KEY(1, 2, KEY_U), | 
|  | 181 | KEY(1, 3, KEY_H), | 
|  | 182 | KEY(1, 4, KEY_B), | 
|  | 183 | KEY(1, 5, KEY_SPACE), | 
|  | 184 | KEY(2, 0, KEY_BACKSPACE), | 
|  | 185 | KEY(2, 1, KEY_6), | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 186 | KEY(2, 2, KEY_Y), | 
| Grazvydas Ignotas | 24de042 | 2009-11-11 11:00:35 -0800 | [diff] [blame] | 187 | KEY(2, 3, KEY_G), | 
|  | 188 | KEY(2, 4, KEY_V), | 
|  | 189 | KEY(2, 5, KEY_FN), | 
|  | 190 | KEY(3, 0, KEY_O), | 
|  | 191 | KEY(3, 1, KEY_5), | 
|  | 192 | KEY(3, 2, KEY_T), | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 193 | KEY(3, 3, KEY_F), | 
| Grazvydas Ignotas | 24de042 | 2009-11-11 11:00:35 -0800 | [diff] [blame] | 194 | KEY(3, 4, KEY_C), | 
|  | 195 | KEY(4, 0, KEY_P), | 
|  | 196 | KEY(4, 1, KEY_4), | 
|  | 197 | KEY(4, 2, KEY_R), | 
|  | 198 | KEY(4, 3, KEY_D), | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 199 | KEY(4, 4, KEY_X), | 
| Grazvydas Ignotas | 24de042 | 2009-11-11 11:00:35 -0800 | [diff] [blame] | 200 | KEY(5, 0, KEY_K), | 
|  | 201 | KEY(5, 1, KEY_3), | 
|  | 202 | KEY(5, 2, KEY_E), | 
|  | 203 | KEY(5, 3, KEY_S), | 
|  | 204 | KEY(5, 4, KEY_Z), | 
|  | 205 | KEY(6, 0, KEY_L), | 
|  | 206 | KEY(6, 1, KEY_2), | 
|  | 207 | KEY(6, 2, KEY_W), | 
|  | 208 | KEY(6, 3, KEY_A), | 
|  | 209 | KEY(6, 4, KEY_DOT), | 
|  | 210 | KEY(7, 0, KEY_ENTER), | 
|  | 211 | KEY(7, 1, KEY_1), | 
|  | 212 | KEY(7, 2, KEY_Q), | 
|  | 213 | KEY(7, 3, KEY_LEFTSHIFT), | 
|  | 214 | KEY(7, 4, KEY_COMMA), | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 215 | }; | 
|  | 216 |  | 
| Tony Lindgren | 4f54333 | 2009-09-24 16:23:16 -0700 | [diff] [blame] | 217 | static struct matrix_keymap_data board_map_data = { | 
|  | 218 | .keymap			= board_keymap, | 
|  | 219 | .keymap_size		= ARRAY_SIZE(board_keymap), | 
|  | 220 | }; | 
|  | 221 |  | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 222 | static struct twl4030_keypad_data pandora_kp_data = { | 
| Tony Lindgren | 4f54333 | 2009-09-24 16:23:16 -0700 | [diff] [blame] | 223 | .keymap_data	= &board_map_data, | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 224 | .rows		= 8, | 
|  | 225 | .cols		= 6, | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 226 | .rep		= 1, | 
|  | 227 | }; | 
|  | 228 |  | 
| Grazvydas Ignotas | 7b09789 | 2010-02-17 14:09:24 -0800 | [diff] [blame] | 229 | static struct omap_dss_device pandora_lcd_device = { | 
|  | 230 | .name			= "lcd", | 
|  | 231 | .driver_name		= "tpo_td043mtea1_panel", | 
|  | 232 | .type			= OMAP_DISPLAY_TYPE_DPI, | 
|  | 233 | .phy.dpi.data_lines	= 24, | 
|  | 234 | .reset_gpio		= 157, | 
|  | 235 | }; | 
|  | 236 |  | 
|  | 237 | static struct omap_dss_device pandora_tv_device = { | 
|  | 238 | .name			= "tv", | 
|  | 239 | .driver_name		= "venc", | 
|  | 240 | .type			= OMAP_DISPLAY_TYPE_VENC, | 
|  | 241 | .phy.venc.type		= OMAP_DSS_VENC_TYPE_SVIDEO, | 
|  | 242 | }; | 
|  | 243 |  | 
|  | 244 | static struct omap_dss_device *pandora_dss_devices[] = { | 
|  | 245 | &pandora_lcd_device, | 
|  | 246 | &pandora_tv_device, | 
|  | 247 | }; | 
|  | 248 |  | 
|  | 249 | static struct omap_dss_board_info pandora_dss_data = { | 
|  | 250 | .num_devices	= ARRAY_SIZE(pandora_dss_devices), | 
|  | 251 | .devices	= pandora_dss_devices, | 
|  | 252 | .default_device	= &pandora_lcd_device, | 
|  | 253 | }; | 
|  | 254 |  | 
| Grazvydas Ignotas | ed199f7 | 2010-08-10 18:01:52 -0700 | [diff] [blame] | 255 | static void pandora_wl1251_init_card(struct mmc_card *card) | 
|  | 256 | { | 
|  | 257 | /* | 
|  | 258 | * We have TI wl1251 attached to MMC3. Pass this information to | 
|  | 259 | * SDIO core because it can't be probed by normal methods. | 
|  | 260 | */ | 
|  | 261 | card->quirks |= MMC_QUIRK_NONSTD_SDIO; | 
|  | 262 | card->cccr.wide_bus = 1; | 
|  | 263 | card->cis.vendor = 0x104c; | 
|  | 264 | card->cis.device = 0x9066; | 
|  | 265 | card->cis.blksize = 512; | 
|  | 266 | card->cis.max_dtr = 20000000; | 
|  | 267 | } | 
|  | 268 |  | 
| Adrian Hunter | 68ff042 | 2010-02-15 10:03:34 -0800 | [diff] [blame] | 269 | static struct omap2_hsmmc_info omap3pandora_mmc[] = { | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 270 | { | 
|  | 271 | .mmc		= 1, | 
| Sukumar Ghorai | 3a63833 | 2010-09-15 14:49:23 +0000 | [diff] [blame] | 272 | .caps		= MMC_CAP_4_BIT_DATA, | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 273 | .gpio_cd	= -EINVAL, | 
|  | 274 | .gpio_wp	= 126, | 
|  | 275 | .ext_clock	= 0, | 
|  | 276 | }, | 
|  | 277 | { | 
|  | 278 | .mmc		= 2, | 
| Sukumar Ghorai | 3a63833 | 2010-09-15 14:49:23 +0000 | [diff] [blame] | 279 | .caps		= MMC_CAP_4_BIT_DATA, | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 280 | .gpio_cd	= -EINVAL, | 
|  | 281 | .gpio_wp	= 127, | 
|  | 282 | .ext_clock	= 1, | 
| David Brownell | 0329c37 | 2009-03-23 18:23:47 -0700 | [diff] [blame] | 283 | .transceiver	= true, | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 284 | }, | 
| Grazvydas Ignotas | 07d83cc | 2009-03-23 18:23:47 -0700 | [diff] [blame] | 285 | { | 
|  | 286 | .mmc		= 3, | 
| Grazvydas Ignotas | f861fc1 | 2010-12-19 22:33:36 +0000 | [diff] [blame] | 287 | .caps		= MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD, | 
| Grazvydas Ignotas | 07d83cc | 2009-03-23 18:23:47 -0700 | [diff] [blame] | 288 | .gpio_cd	= -EINVAL, | 
|  | 289 | .gpio_wp	= -EINVAL, | 
| Grazvydas Ignotas | ed199f7 | 2010-08-10 18:01:52 -0700 | [diff] [blame] | 290 | .init_card	= pandora_wl1251_init_card, | 
| Grazvydas Ignotas | 07d83cc | 2009-03-23 18:23:47 -0700 | [diff] [blame] | 291 | }, | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 292 | {}	/* Terminator */ | 
|  | 293 | }; | 
|  | 294 |  | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 295 | static int omap3pandora_twl_gpio_setup(struct device *dev, | 
|  | 296 | unsigned gpio, unsigned ngpio) | 
|  | 297 | { | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 298 | int ret, gpio_32khz; | 
|  | 299 |  | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 300 | /* gpio + {0,1} is "mmc{0,1}_cd" (input/IRQ) */ | 
|  | 301 | omap3pandora_mmc[0].gpio_cd = gpio + 0; | 
|  | 302 | omap3pandora_mmc[1].gpio_cd = gpio + 1; | 
| Adrian Hunter | 68ff042 | 2010-02-15 10:03:34 -0800 | [diff] [blame] | 303 | omap2_hsmmc_init(omap3pandora_mmc); | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 304 |  | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 305 | /* gpio + 13 drives 32kHz buffer for wifi module */ | 
|  | 306 | gpio_32khz = gpio + 13; | 
| Igor Grinberg | bc593f5 | 2011-05-03 18:22:09 +0300 | [diff] [blame] | 307 | ret = gpio_request_one(gpio_32khz, GPIOF_OUT_INIT_HIGH, "wifi 32kHz"); | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 308 | if (ret < 0) { | 
|  | 309 | pr_err("Cannot get GPIO line %d, ret=%d\n", gpio_32khz, ret); | 
| Igor Grinberg | bc593f5 | 2011-05-03 18:22:09 +0300 | [diff] [blame] | 310 | return -ENODEV; | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 311 | } | 
|  | 312 |  | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 313 | return 0; | 
|  | 314 | } | 
|  | 315 |  | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 316 | static struct twl4030_gpio_platform_data omap3pandora_gpio_data = { | 
|  | 317 | .gpio_base	= OMAP_MAX_GPIO_LINES, | 
|  | 318 | .irq_base	= TWL4030_GPIO_IRQ_BASE, | 
|  | 319 | .irq_end	= TWL4030_GPIO_IRQ_END, | 
| Tony Lindgren | 90c62bf | 2008-12-10 17:37:17 -0800 | [diff] [blame] | 320 | .setup		= omap3pandora_twl_gpio_setup, | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 321 | }; | 
|  | 322 |  | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 323 | static struct regulator_consumer_supply pandora_vmmc1_supply[] = { | 
|  | 324 | REGULATOR_SUPPLY("vmmc", "omap_hsmmc.0"), | 
|  | 325 | }; | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 326 |  | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 327 | static struct regulator_consumer_supply pandora_vmmc2_supply[] = { | 
|  | 328 | REGULATOR_SUPPLY("vmmc", "omap_hsmmc.1") | 
|  | 329 | }; | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 330 |  | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 331 | static struct regulator_consumer_supply pandora_vmmc3_supply[] = { | 
|  | 332 | REGULATOR_SUPPLY("vmmc", "omap_hsmmc.2"), | 
|  | 333 | }; | 
| Grazvydas Ignotas | 690a4a3 | 2010-10-01 16:35:25 -0700 | [diff] [blame] | 334 |  | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 335 | static struct regulator_consumer_supply pandora_vdds_supplies[] = { | 
|  | 336 | REGULATOR_SUPPLY("vdds_sdi", "omapdss"), | 
|  | 337 | REGULATOR_SUPPLY("vdds_dsi", "omapdss"), | 
| Tomi Valkeinen | 7c68dd9 | 2011-08-03 14:00:57 +0300 | [diff] [blame] | 338 | REGULATOR_SUPPLY("vdds_dsi", "omapdss_dsi.0"), | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 339 | }; | 
|  | 340 |  | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 341 | static struct regulator_consumer_supply pandora_vcc_lcd_supply[] = { | 
|  | 342 | REGULATOR_SUPPLY("vcc", "display0"), | 
|  | 343 | }; | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 344 |  | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 345 | static struct regulator_consumer_supply pandora_usb_phy_supply[] = { | 
|  | 346 | REGULATOR_SUPPLY("hsusb0", "ehci-omap.0"), | 
|  | 347 | }; | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 348 |  | 
|  | 349 | /* ads7846 on SPI and 2 nub controllers on I2C */ | 
|  | 350 | static struct regulator_consumer_supply pandora_vaux4_supplies[] = { | 
|  | 351 | REGULATOR_SUPPLY("vcc", "spi1.0"), | 
|  | 352 | REGULATOR_SUPPLY("vcc", "3-0066"), | 
|  | 353 | REGULATOR_SUPPLY("vcc", "3-0067"), | 
|  | 354 | }; | 
|  | 355 |  | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 356 | static struct regulator_consumer_supply pandora_adac_supply[] = { | 
|  | 357 | REGULATOR_SUPPLY("vcc", "soc-audio"), | 
|  | 358 | }; | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 359 |  | 
| Grazvydas Ignotas | 64f535a | 2009-05-28 14:04:04 -0700 | [diff] [blame] | 360 | /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */ | 
|  | 361 | static struct regulator_init_data pandora_vmmc1 = { | 
|  | 362 | .constraints = { | 
|  | 363 | .min_uV			= 1850000, | 
|  | 364 | .max_uV			= 3150000, | 
|  | 365 | .valid_modes_mask	= REGULATOR_MODE_NORMAL | 
|  | 366 | | REGULATOR_MODE_STANDBY, | 
|  | 367 | .valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE | 
|  | 368 | | REGULATOR_CHANGE_MODE | 
|  | 369 | | REGULATOR_CHANGE_STATUS, | 
|  | 370 | }, | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 371 | .num_consumer_supplies	= ARRAY_SIZE(pandora_vmmc1_supply), | 
|  | 372 | .consumer_supplies	= pandora_vmmc1_supply, | 
| Grazvydas Ignotas | 64f535a | 2009-05-28 14:04:04 -0700 | [diff] [blame] | 373 | }; | 
|  | 374 |  | 
|  | 375 | /* VMMC2 for MMC2 pins CMD, CLK, DAT0..DAT3 (max 100 mA) */ | 
|  | 376 | static struct regulator_init_data pandora_vmmc2 = { | 
|  | 377 | .constraints = { | 
|  | 378 | .min_uV			= 1850000, | 
|  | 379 | .max_uV			= 3150000, | 
|  | 380 | .valid_modes_mask	= REGULATOR_MODE_NORMAL | 
|  | 381 | | REGULATOR_MODE_STANDBY, | 
|  | 382 | .valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE | 
|  | 383 | | REGULATOR_CHANGE_MODE | 
|  | 384 | | REGULATOR_CHANGE_STATUS, | 
|  | 385 | }, | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 386 | .num_consumer_supplies	= ARRAY_SIZE(pandora_vmmc2_supply), | 
|  | 387 | .consumer_supplies	= pandora_vmmc2_supply, | 
| Grazvydas Ignotas | 64f535a | 2009-05-28 14:04:04 -0700 | [diff] [blame] | 388 | }; | 
|  | 389 |  | 
| Grazvydas Ignotas | 7b09789 | 2010-02-17 14:09:24 -0800 | [diff] [blame] | 390 | /* VAUX1 for LCD */ | 
|  | 391 | static struct regulator_init_data pandora_vaux1 = { | 
|  | 392 | .constraints = { | 
|  | 393 | .min_uV			= 3000000, | 
|  | 394 | .max_uV			= 3000000, | 
|  | 395 | .apply_uV		= true, | 
|  | 396 | .valid_modes_mask	= REGULATOR_MODE_NORMAL | 
|  | 397 | | REGULATOR_MODE_STANDBY, | 
|  | 398 | .valid_ops_mask		= REGULATOR_CHANGE_MODE | 
|  | 399 | | REGULATOR_CHANGE_STATUS, | 
|  | 400 | }, | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 401 | .num_consumer_supplies	= ARRAY_SIZE(pandora_vcc_lcd_supply), | 
|  | 402 | .consumer_supplies	= pandora_vcc_lcd_supply, | 
| Grazvydas Ignotas | 7b09789 | 2010-02-17 14:09:24 -0800 | [diff] [blame] | 403 | }; | 
|  | 404 |  | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 405 | /* VAUX2 for USB host PHY */ | 
|  | 406 | static struct regulator_init_data pandora_vaux2 = { | 
|  | 407 | .constraints = { | 
|  | 408 | .min_uV			= 1800000, | 
|  | 409 | .max_uV			= 1800000, | 
|  | 410 | .apply_uV		= true, | 
|  | 411 | .valid_modes_mask	= REGULATOR_MODE_NORMAL | 
|  | 412 | | REGULATOR_MODE_STANDBY, | 
|  | 413 | .valid_ops_mask		= REGULATOR_CHANGE_MODE | 
|  | 414 | | REGULATOR_CHANGE_STATUS, | 
|  | 415 | }, | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 416 | .num_consumer_supplies	= ARRAY_SIZE(pandora_usb_phy_supply), | 
|  | 417 | .consumer_supplies	= pandora_usb_phy_supply, | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 418 | }; | 
|  | 419 |  | 
|  | 420 | /* VAUX4 for ads7846 and nubs */ | 
|  | 421 | static struct regulator_init_data pandora_vaux4 = { | 
|  | 422 | .constraints = { | 
|  | 423 | .min_uV			= 2800000, | 
|  | 424 | .max_uV			= 2800000, | 
|  | 425 | .apply_uV		= true, | 
|  | 426 | .valid_modes_mask	= REGULATOR_MODE_NORMAL | 
|  | 427 | | REGULATOR_MODE_STANDBY, | 
|  | 428 | .valid_ops_mask		= REGULATOR_CHANGE_MODE | 
|  | 429 | | REGULATOR_CHANGE_STATUS, | 
|  | 430 | }, | 
|  | 431 | .num_consumer_supplies	= ARRAY_SIZE(pandora_vaux4_supplies), | 
|  | 432 | .consumer_supplies	= pandora_vaux4_supplies, | 
|  | 433 | }; | 
|  | 434 |  | 
|  | 435 | /* VSIM for audio DAC */ | 
|  | 436 | static struct regulator_init_data pandora_vsim = { | 
|  | 437 | .constraints = { | 
|  | 438 | .min_uV			= 2800000, | 
|  | 439 | .max_uV			= 2800000, | 
|  | 440 | .apply_uV		= true, | 
|  | 441 | .valid_modes_mask	= REGULATOR_MODE_NORMAL | 
|  | 442 | | REGULATOR_MODE_STANDBY, | 
|  | 443 | .valid_ops_mask		= REGULATOR_CHANGE_MODE | 
|  | 444 | | REGULATOR_CHANGE_STATUS, | 
|  | 445 | }, | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 446 | .num_consumer_supplies	= ARRAY_SIZE(pandora_adac_supply), | 
|  | 447 | .consumer_supplies	= pandora_adac_supply, | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 448 | }; | 
|  | 449 |  | 
| Grazvydas Ignotas | 690a4a3 | 2010-10-01 16:35:25 -0700 | [diff] [blame] | 450 | /* Fixed regulator internal to Wifi module */ | 
|  | 451 | static struct regulator_init_data pandora_vmmc3 = { | 
|  | 452 | .constraints = { | 
|  | 453 | .valid_ops_mask		= REGULATOR_CHANGE_STATUS, | 
|  | 454 | }, | 
| Oleg Drokin | 786b01a | 2011-06-06 18:57:07 +0000 | [diff] [blame] | 455 | .num_consumer_supplies	= ARRAY_SIZE(pandora_vmmc3_supply), | 
|  | 456 | .consumer_supplies	= pandora_vmmc3_supply, | 
| Grazvydas Ignotas | 690a4a3 | 2010-10-01 16:35:25 -0700 | [diff] [blame] | 457 | }; | 
|  | 458 |  | 
|  | 459 | static struct fixed_voltage_config pandora_vwlan = { | 
|  | 460 | .supply_name		= "vwlan", | 
|  | 461 | .microvolts		= 1800000, /* 1.8V */ | 
|  | 462 | .gpio			= PANDORA_WIFI_NRESET_GPIO, | 
|  | 463 | .startup_delay		= 50000, /* 50ms */ | 
|  | 464 | .enable_high		= 1, | 
|  | 465 | .enabled_at_boot	= 0, | 
|  | 466 | .init_data		= &pandora_vmmc3, | 
|  | 467 | }; | 
|  | 468 |  | 
|  | 469 | static struct platform_device pandora_vwlan_device = { | 
|  | 470 | .name		= "reg-fixed-voltage", | 
|  | 471 | .id		= 1, | 
|  | 472 | .dev = { | 
|  | 473 | .platform_data = &pandora_vwlan, | 
|  | 474 | }, | 
|  | 475 | }; | 
|  | 476 |  | 
| Grazvydas Ignotas | e13bb34 | 2010-10-01 16:35:25 -0700 | [diff] [blame] | 477 | static struct twl4030_bci_platform_data pandora_bci_data; | 
|  | 478 |  | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 479 | static struct twl4030_platform_data omap3pandora_twldata = { | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 480 | .gpio		= &omap3pandora_gpio_data, | 
| Grazvydas Ignotas | 64f535a | 2009-05-28 14:04:04 -0700 | [diff] [blame] | 481 | .vmmc1		= &pandora_vmmc1, | 
|  | 482 | .vmmc2		= &pandora_vmmc2, | 
| Grazvydas Ignotas | 7b09789 | 2010-02-17 14:09:24 -0800 | [diff] [blame] | 483 | .vaux1		= &pandora_vaux1, | 
| Grazvydas Ignotas | f6873ee | 2010-02-17 14:09:25 -0800 | [diff] [blame] | 484 | .vaux2		= &pandora_vaux2, | 
|  | 485 | .vaux4		= &pandora_vaux4, | 
|  | 486 | .vsim		= &pandora_vsim, | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 487 | .keypad		= &pandora_kp_data, | 
| Grazvydas Ignotas | e13bb34 | 2010-10-01 16:35:25 -0700 | [diff] [blame] | 488 | .bci		= &pandora_bci_data, | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 489 | }; | 
|  | 490 |  | 
| Grazvydas Ignotas | 03d5671 | 2010-03-10 11:13:53 +0000 | [diff] [blame] | 491 | static struct i2c_board_info __initdata omap3pandora_i2c3_boardinfo[] = { | 
|  | 492 | { | 
|  | 493 | I2C_BOARD_INFO("bq27500", 0x55), | 
|  | 494 | .flags = I2C_CLIENT_WAKE, | 
|  | 495 | }, | 
|  | 496 | }; | 
|  | 497 |  | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 498 | static int __init omap3pandora_i2c_init(void) | 
|  | 499 | { | 
| Peter Ujfalusi | 827ed9a | 2011-06-07 10:28:54 +0300 | [diff] [blame] | 500 | omap3_pmic_get_config(&omap3pandora_twldata, | 
| Peter Ujfalusi | b252b0e | 2011-06-07 11:38:24 +0300 | [diff] [blame] | 501 | TWL_COMMON_PDATA_USB | TWL_COMMON_PDATA_AUDIO, | 
|  | 502 | TWL_COMMON_REGULATOR_VDAC | TWL_COMMON_REGULATOR_VPLL2); | 
|  | 503 |  | 
|  | 504 | omap3pandora_twldata.vdac->constraints.apply_uV = true; | 
|  | 505 |  | 
|  | 506 | omap3pandora_twldata.vpll2->constraints.apply_uV = true; | 
|  | 507 | omap3pandora_twldata.vpll2->num_consumer_supplies = | 
|  | 508 | ARRAY_SIZE(pandora_vdds_supplies); | 
|  | 509 | omap3pandora_twldata.vpll2->consumer_supplies = pandora_vdds_supplies; | 
|  | 510 |  | 
| Mike Rapoport | fbd8071 | 2011-04-25 01:09:06 +0300 | [diff] [blame] | 511 | omap3_pmic_init("tps65950", &omap3pandora_twldata); | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 512 | /* i2c2 pins are not connected */ | 
| Grazvydas Ignotas | 03d5671 | 2010-03-10 11:13:53 +0000 | [diff] [blame] | 513 | omap_register_i2c_bus(3, 100, omap3pandora_i2c3_boardinfo, | 
|  | 514 | ARRAY_SIZE(omap3pandora_i2c3_boardinfo)); | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 515 | return 0; | 
|  | 516 | } | 
|  | 517 |  | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 518 | static struct spi_board_info omap3pandora_spi_board_info[] __initdata = { | 
|  | 519 | { | 
| Grazvydas Ignotas | 7b09789 | 2010-02-17 14:09:24 -0800 | [diff] [blame] | 520 | .modalias		= "tpo_td043mtea1_panel_spi", | 
|  | 521 | .bus_num		= 1, | 
|  | 522 | .chip_select		= 1, | 
|  | 523 | .max_speed_hz		= 375000, | 
|  | 524 | .platform_data		= &pandora_lcd_device, | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 525 | } | 
|  | 526 | }; | 
|  | 527 |  | 
| Grazvydas Ignotas | e4b3fdb | 2010-11-04 00:13:49 +0200 | [diff] [blame] | 528 | static void __init pandora_wl1251_init(void) | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 529 | { | 
| Grazvydas Ignotas | e4b3fdb | 2010-11-04 00:13:49 +0200 | [diff] [blame] | 530 | struct wl12xx_platform_data pandora_wl1251_pdata; | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 531 | int ret; | 
|  | 532 |  | 
| Grazvydas Ignotas | e4b3fdb | 2010-11-04 00:13:49 +0200 | [diff] [blame] | 533 | memset(&pandora_wl1251_pdata, 0, sizeof(pandora_wl1251_pdata)); | 
|  | 534 |  | 
| Igor Grinberg | bc593f5 | 2011-05-03 18:22:09 +0300 | [diff] [blame] | 535 | ret = gpio_request_one(PANDORA_WIFI_IRQ_GPIO, GPIOF_IN, "wl1251 irq"); | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 536 | if (ret < 0) | 
|  | 537 | goto fail; | 
|  | 538 |  | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 539 | pandora_wl1251_pdata.irq = gpio_to_irq(PANDORA_WIFI_IRQ_GPIO); | 
|  | 540 | if (pandora_wl1251_pdata.irq < 0) | 
|  | 541 | goto fail_irq; | 
|  | 542 |  | 
| Grazvydas Ignotas | e4b3fdb | 2010-11-04 00:13:49 +0200 | [diff] [blame] | 543 | pandora_wl1251_pdata.use_eeprom = true; | 
|  | 544 | ret = wl12xx_set_platform_data(&pandora_wl1251_pdata); | 
|  | 545 | if (ret < 0) | 
|  | 546 | goto fail_irq; | 
|  | 547 |  | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 548 | return; | 
|  | 549 |  | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 550 | fail_irq: | 
|  | 551 | gpio_free(PANDORA_WIFI_IRQ_GPIO); | 
|  | 552 | fail: | 
|  | 553 | printk(KERN_ERR "wl1251 board initialisation failed\n"); | 
|  | 554 | } | 
|  | 555 |  | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 556 | static struct platform_device *omap3pandora_devices[] __initdata = { | 
| Grazvydas Ignotas | 7419045 | 2009-05-28 14:15:44 -0700 | [diff] [blame] | 557 | &pandora_leds_gpio, | 
|  | 558 | &pandora_keys_gpio, | 
| Grazvydas Ignotas | 690a4a3 | 2010-10-01 16:35:25 -0700 | [diff] [blame] | 559 | &pandora_vwlan_device, | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 560 | }; | 
|  | 561 |  | 
| Keshava Munegowda | 181b250 | 2011-03-01 20:08:16 +0530 | [diff] [blame] | 562 | static const struct usbhs_omap_board_data usbhs_bdata __initconst = { | 
| Felipe Balbi | 58a5491 | 2009-11-22 10:11:01 -0800 | [diff] [blame] | 563 |  | 
| Keshava Munegowda | 181b250 | 2011-03-01 20:08:16 +0530 | [diff] [blame] | 564 | .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY, | 
|  | 565 | .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED, | 
|  | 566 | .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED, | 
| Felipe Balbi | 58a5491 | 2009-11-22 10:11:01 -0800 | [diff] [blame] | 567 |  | 
|  | 568 | .phy_reset  = true, | 
|  | 569 | .reset_gpio_port[0]  = 16, | 
|  | 570 | .reset_gpio_port[1]  = -EINVAL, | 
|  | 571 | .reset_gpio_port[2]  = -EINVAL | 
|  | 572 | }; | 
|  | 573 |  | 
| Tony Lindgren | ca5742b | 2009-12-11 16:16:32 -0800 | [diff] [blame] | 574 | #ifdef CONFIG_OMAP_MUX | 
|  | 575 | static struct omap_board_mux board_mux[] __initdata = { | 
|  | 576 | { .reg_offset = OMAP_MUX_TERMINATOR }, | 
|  | 577 | }; | 
| Tony Lindgren | ca5742b | 2009-12-11 16:16:32 -0800 | [diff] [blame] | 578 | #endif | 
|  | 579 |  | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 580 | static void __init omap3pandora_init(void) | 
|  | 581 | { | 
| Tony Lindgren | ca5742b | 2009-12-11 16:16:32 -0800 | [diff] [blame] | 582 | omap3_mux_init(board_mux, OMAP_PACKAGE_CBB); | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 583 | omap3pandora_i2c_init(); | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 584 | pandora_wl1251_init(); | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 585 | platform_add_devices(omap3pandora_devices, | 
|  | 586 | ARRAY_SIZE(omap3pandora_devices)); | 
| Senthilvadivu Guruswamy | d5e1322 | 2011-02-22 11:24:50 +0200 | [diff] [blame] | 587 | omap_display_init(&pandora_dss_data); | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 588 | omap_serial_init(); | 
| Tony Lindgren | a4ca9db | 2011-08-22 23:57:23 -0700 | [diff] [blame] | 589 | omap_sdrc_init(mt46h32m32lf6_sdrc_params, | 
|  | 590 | mt46h32m32lf6_sdrc_params); | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 591 | spi_register_board_info(omap3pandora_spi_board_info, | 
|  | 592 | ARRAY_SIZE(omap3pandora_spi_board_info)); | 
| Mike Rapoport | 96974a2 | 2011-04-25 01:09:05 +0300 | [diff] [blame] | 593 | omap_ads7846_init(1, OMAP3_PANDORA_TS_GPIO, 0, NULL); | 
| Keshava Munegowda | 9e64bb1 | 2011-03-01 20:08:19 +0530 | [diff] [blame] | 594 | usbhs_init(&usbhs_bdata); | 
| Mike Rapoport | 9e18630 | 2011-04-27 11:56:12 +0300 | [diff] [blame] | 595 | usb_musb_init(NULL); | 
| Grazvydas Ignotas | 79ccf54 | 2010-08-02 13:18:01 +0300 | [diff] [blame] | 596 | gpmc_nand_init(&pandora_nand_data); | 
| Jean Pihet | 9fb9741 | 2009-07-24 19:43:25 -0600 | [diff] [blame] | 597 |  | 
|  | 598 | /* Ensure SDRC pins are mux'd for self-refresh */ | 
| Tony Lindgren | 4896e39 | 2009-12-11 16:16:32 -0800 | [diff] [blame] | 599 | omap_mux_init_signal("sdrc_cke0", OMAP_PIN_OUTPUT); | 
|  | 600 | omap_mux_init_signal("sdrc_cke1", OMAP_PIN_OUTPUT); | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 601 | } | 
|  | 602 |  | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 603 | MACHINE_START(OMAP3_PANDORA, "Pandora Handheld Console") | 
| Nicolas Pitre | 5e52b43 | 2011-07-05 22:38:15 -0400 | [diff] [blame] | 604 | .atag_offset	= 0x100, | 
| Russell King | 71ee7da | 2010-05-23 10:18:16 +0100 | [diff] [blame] | 605 | .reserve	= omap_reserve, | 
| Russell King - ARM Linux | 3dc3bad | 2011-02-14 15:40:20 -0800 | [diff] [blame] | 606 | .map_io		= omap3_map_io, | 
| Tony Lindgren | 8f5b5a4 | 2011-08-22 23:57:24 -0700 | [diff] [blame] | 607 | .init_early	= omap35xx_init_early, | 
| Tony Lindgren | 741e3a8 | 2011-05-17 03:51:26 -0700 | [diff] [blame] | 608 | .init_irq	= omap3_init_irq, | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 609 | .init_machine	= omap3pandora_init, | 
| Tony Lindgren | e74984e | 2011-03-29 15:54:48 -0700 | [diff] [blame] | 610 | .timer		= &omap3_timer, | 
| Grazvydas Ignotas | da17724 | 2008-12-10 17:36:54 -0800 | [diff] [blame] | 611 | MACHINE_END |