1 /* 2 * linux/arch/arm/mach-omap1/board-ams-delta.c 3 * 4 * Modified from board-generic.c 5 * 6 * Board specific inits for the Amstrad E3 (codename Delta) videophone 7 * 8 * Copyright (C) 2006 Jonathan McDowell <noodles@earth.li> 9 * 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License version 2 as 12 * published by the Free Software Foundation. 13 */ 14 #include <linux/gpio/driver.h> 15 #include <linux/gpio/machine.h> 16 #include <linux/gpio.h> 17 #include <linux/kernel.h> 18 #include <linux/init.h> 19 #include <linux/input.h> 20 #include <linux/interrupt.h> 21 #include <linux/leds.h> 22 #include <linux/platform_device.h> 23 #include <linux/regulator/consumer.h> 24 #include <linux/regulator/fixed.h> 25 #include <linux/regulator/machine.h> 26 #include <linux/serial_8250.h> 27 #include <linux/export.h> 28 #include <linux/omapfb.h> 29 #include <linux/io.h> 30 #include <linux/platform_data/gpio-omap.h> 31 32 #include <media/soc_camera.h> 33 34 #include <asm/serial.h> 35 #include <asm/mach-types.h> 36 #include <asm/mach/arch.h> 37 #include <asm/mach/map.h> 38 39 #include <mach/board-ams-delta.h> 40 #include <linux/platform_data/keypad-omap.h> 41 #include <mach/mux.h> 42 43 #include <mach/hardware.h> 44 #include "camera.h" 45 #include <mach/usb.h> 46 47 #include "ams-delta-fiq.h" 48 #include "iomap.h" 49 #include "common.h" 50 51 static const unsigned int ams_delta_keymap[] = { 52 KEY(0, 0, KEY_F1), /* Advert */ 53 54 KEY(0, 3, KEY_COFFEE), /* Games */ 55 KEY(0, 2, KEY_QUESTION), /* Directory */ 56 KEY(2, 3, KEY_CONNECT), /* Internet */ 57 KEY(1, 2, KEY_SHOP), /* Services */ 58 KEY(1, 1, KEY_PHONE), /* VoiceMail */ 59 60 KEY(0, 1, KEY_DELETE), /* Delete */ 61 KEY(2, 2, KEY_PLAY), /* Play */ 62 KEY(1, 0, KEY_PAGEUP), /* Up */ 63 KEY(1, 3, KEY_PAGEDOWN), /* Down */ 64 KEY(2, 0, KEY_EMAIL), /* ReadEmail */ 65 KEY(2, 1, KEY_STOP), /* Stop */ 66 67 /* Numeric keypad portion */ 68 KEY(0, 7, KEY_KP1), 69 KEY(0, 6, KEY_KP2), 70 KEY(0, 5, KEY_KP3), 71 KEY(1, 7, KEY_KP4), 72 KEY(1, 6, KEY_KP5), 73 KEY(1, 5, KEY_KP6), 74 KEY(2, 7, KEY_KP7), 75 KEY(2, 6, KEY_KP8), 76 KEY(2, 5, KEY_KP9), 77 KEY(3, 6, KEY_KP0), 78 KEY(3, 7, KEY_KPASTERISK), 79 KEY(3, 5, KEY_KPDOT), /* # key */ 80 KEY(7, 2, KEY_NUMLOCK), /* Mute */ 81 KEY(7, 1, KEY_KPMINUS), /* Recall */ 82 KEY(6, 1, KEY_KPPLUS), /* Redial */ 83 KEY(7, 6, KEY_KPSLASH), /* Handsfree */ 84 KEY(6, 0, KEY_ENTER), /* Video */ 85 86 KEY(7, 4, KEY_CAMERA), /* Photo */ 87 88 KEY(0, 4, KEY_F2), /* Home */ 89 KEY(1, 4, KEY_F3), /* Office */ 90 KEY(2, 4, KEY_F4), /* Mobile */ 91 KEY(7, 7, KEY_F5), /* SMS */ 92 KEY(7, 5, KEY_F6), /* Email */ 93 94 /* QWERTY portion of keypad */ 95 KEY(3, 4, KEY_Q), 96 KEY(3, 3, KEY_W), 97 KEY(3, 2, KEY_E), 98 KEY(3, 1, KEY_R), 99 KEY(3, 0, KEY_T), 100 KEY(4, 7, KEY_Y), 101 KEY(4, 6, KEY_U), 102 KEY(4, 5, KEY_I), 103 KEY(4, 4, KEY_O), 104 KEY(4, 3, KEY_P), 105 106 KEY(4, 2, KEY_A), 107 KEY(4, 1, KEY_S), 108 KEY(4, 0, KEY_D), 109 KEY(5, 7, KEY_F), 110 KEY(5, 6, KEY_G), 111 KEY(5, 5, KEY_H), 112 KEY(5, 4, KEY_J), 113 KEY(5, 3, KEY_K), 114 KEY(5, 2, KEY_L), 115 116 KEY(5, 1, KEY_Z), 117 KEY(5, 0, KEY_X), 118 KEY(6, 7, KEY_C), 119 KEY(6, 6, KEY_V), 120 KEY(6, 5, KEY_B), 121 KEY(6, 4, KEY_N), 122 KEY(6, 3, KEY_M), 123 KEY(6, 2, KEY_SPACE), 124 125 KEY(7, 0, KEY_LEFTSHIFT), /* Vol up */ 126 KEY(7, 3, KEY_LEFTCTRL), /* Vol down */ 127 }; 128 129 #define LATCH1_PHYS 0x01000000 130 #define LATCH1_VIRT 0xEA000000 131 #define MODEM_PHYS 0x04000000 132 #define MODEM_VIRT 0xEB000000 133 #define LATCH2_PHYS 0x08000000 134 #define LATCH2_VIRT 0xEC000000 135 136 static struct map_desc ams_delta_io_desc[] __initdata = { 137 /* AMS_DELTA_LATCH1 */ 138 { 139 .virtual = LATCH1_VIRT, 140 .pfn = __phys_to_pfn(LATCH1_PHYS), 141 .length = 0x01000000, 142 .type = MT_DEVICE 143 }, 144 /* AMS_DELTA_LATCH2 */ 145 { 146 .virtual = LATCH2_VIRT, 147 .pfn = __phys_to_pfn(LATCH2_PHYS), 148 .length = 0x01000000, 149 .type = MT_DEVICE 150 }, 151 /* AMS_DELTA_MODEM */ 152 { 153 .virtual = MODEM_VIRT, 154 .pfn = __phys_to_pfn(MODEM_PHYS), 155 .length = 0x01000000, 156 .type = MT_DEVICE 157 } 158 }; 159 160 static const struct omap_lcd_config ams_delta_lcd_config __initconst = { 161 .ctrl_name = "internal", 162 }; 163 164 static struct omap_usb_config ams_delta_usb_config __initdata = { 165 .register_host = 1, 166 .hmc_mode = 16, 167 .pins[0] = 2, 168 }; 169 170 #define LATCH1_GPIO_BASE 232 171 #define LATCH1_NGPIO 8 172 173 static struct resource latch1_resources[] = { 174 [0] = { 175 .name = "dat", 176 .start = LATCH1_PHYS, 177 .end = LATCH1_PHYS + (LATCH1_NGPIO - 1) / 8, 178 .flags = IORESOURCE_MEM, 179 }, 180 }; 181 182 #define LATCH1_LABEL "latch1" 183 184 static struct bgpio_pdata latch1_pdata = { 185 .label = LATCH1_LABEL, 186 .base = LATCH1_GPIO_BASE, 187 .ngpio = LATCH1_NGPIO, 188 }; 189 190 static struct platform_device latch1_gpio_device = { 191 .name = "basic-mmio-gpio", 192 .id = 0, 193 .resource = latch1_resources, 194 .num_resources = ARRAY_SIZE(latch1_resources), 195 .dev = { 196 .platform_data = &latch1_pdata, 197 }, 198 }; 199 200 #define LATCH1_PIN_LED_CAMERA 0 201 #define LATCH1_PIN_LED_ADVERT 1 202 #define LATCH1_PIN_LED_MAIL 2 203 #define LATCH1_PIN_LED_HANDSFREE 3 204 #define LATCH1_PIN_LED_VOICEMAIL 4 205 #define LATCH1_PIN_LED_VOICE 5 206 #define LATCH1_PIN_DOCKIT1 6 207 #define LATCH1_PIN_DOCKIT2 7 208 209 static struct resource latch2_resources[] = { 210 [0] = { 211 .name = "dat", 212 .start = LATCH2_PHYS, 213 .end = LATCH2_PHYS + (AMS_DELTA_LATCH2_NGPIO - 1) / 8, 214 .flags = IORESOURCE_MEM, 215 }, 216 }; 217 218 #define LATCH2_LABEL "latch2" 219 220 static struct bgpio_pdata latch2_pdata = { 221 .label = LATCH2_LABEL, 222 .base = AMS_DELTA_LATCH2_GPIO_BASE, 223 .ngpio = AMS_DELTA_LATCH2_NGPIO, 224 }; 225 226 static struct platform_device latch2_gpio_device = { 227 .name = "basic-mmio-gpio", 228 .id = 1, 229 .resource = latch2_resources, 230 .num_resources = ARRAY_SIZE(latch2_resources), 231 .dev = { 232 .platform_data = &latch2_pdata, 233 }, 234 }; 235 236 #define LATCH2_PIN_LCD_VBLEN 0 237 #define LATCH2_PIN_LCD_NDISP 1 238 #define LATCH2_PIN_NAND_NCE 2 239 #define LATCH2_PIN_NAND_NRE 3 240 #define LATCH2_PIN_NAND_NWP 4 241 #define LATCH2_PIN_NAND_NWE 5 242 #define LATCH2_PIN_NAND_ALE 6 243 #define LATCH2_PIN_NAND_CLE 7 244 #define LATCH2_PIN_KEYBRD_PWR 8 245 #define LATCH2_PIN_KEYBRD_DATAOUT 9 246 #define LATCH2_PIN_SCARD_RSTIN 10 247 #define LATCH2_PIN_SCARD_CMDVCC 11 248 #define LATCH2_PIN_MODEM_NRESET 12 249 #define LATCH2_PIN_MODEM_CODEC 13 250 #define LATCH2_PIN_HOOKFLASH1 14 251 #define LATCH2_PIN_HOOKFLASH2 15 252 253 static struct regulator_consumer_supply modem_nreset_consumers[] = { 254 REGULATOR_SUPPLY("RESET#", "serial8250.1"), 255 REGULATOR_SUPPLY("POR", "cx20442-codec"), 256 }; 257 258 static struct regulator_init_data modem_nreset_data = { 259 .constraints = { 260 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 261 .boot_on = 1, 262 }, 263 .num_consumer_supplies = ARRAY_SIZE(modem_nreset_consumers), 264 .consumer_supplies = modem_nreset_consumers, 265 }; 266 267 static struct fixed_voltage_config modem_nreset_config = { 268 .supply_name = "modem_nreset", 269 .microvolts = 3300000, 270 .startup_delay = 25000, 271 .enable_high = 1, 272 .enabled_at_boot = 1, 273 .init_data = &modem_nreset_data, 274 }; 275 276 static struct platform_device modem_nreset_device = { 277 .name = "reg-fixed-voltage", 278 .id = -1, 279 .dev = { 280 .platform_data = &modem_nreset_config, 281 }, 282 }; 283 284 static struct gpiod_lookup_table ams_delta_nreset_gpiod_table = { 285 .dev_id = "reg-fixed-voltage", 286 .table = { 287 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_MODEM_NRESET, 288 NULL, GPIO_ACTIVE_HIGH), 289 { }, 290 }, 291 }; 292 293 struct modem_private_data { 294 struct regulator *regulator; 295 }; 296 297 static struct modem_private_data modem_priv; 298 299 static struct resource ams_delta_nand_resources[] = { 300 [0] = { 301 .start = OMAP1_MPUIO_BASE, 302 .end = OMAP1_MPUIO_BASE + 303 OMAP_MPUIO_IO_CNTL + sizeof(u32) - 1, 304 .flags = IORESOURCE_MEM, 305 }, 306 }; 307 308 static struct platform_device ams_delta_nand_device = { 309 .name = "ams-delta-nand", 310 .id = -1, 311 .num_resources = ARRAY_SIZE(ams_delta_nand_resources), 312 .resource = ams_delta_nand_resources, 313 }; 314 315 #define OMAP_GPIO_LABEL "gpio-0-15" 316 317 static struct gpiod_lookup_table ams_delta_nand_gpio_table = { 318 .table = { 319 GPIO_LOOKUP(OMAP_GPIO_LABEL, AMS_DELTA_GPIO_PIN_NAND_RB, "rdy", 320 0), 321 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_NCE, "nce", 0), 322 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_NRE, "nre", 0), 323 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_NWP, "nwp", 0), 324 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_NWE, "nwe", 0), 325 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_ALE, "ale", 0), 326 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_NAND_CLE, "cle", 0), 327 { }, 328 }, 329 }; 330 331 static struct resource ams_delta_kp_resources[] = { 332 [0] = { 333 .start = INT_KEYBOARD, 334 .end = INT_KEYBOARD, 335 .flags = IORESOURCE_IRQ, 336 }, 337 }; 338 339 static const struct matrix_keymap_data ams_delta_keymap_data = { 340 .keymap = ams_delta_keymap, 341 .keymap_size = ARRAY_SIZE(ams_delta_keymap), 342 }; 343 344 static struct omap_kp_platform_data ams_delta_kp_data = { 345 .rows = 8, 346 .cols = 8, 347 .keymap_data = &ams_delta_keymap_data, 348 .delay = 9, 349 }; 350 351 static struct platform_device ams_delta_kp_device = { 352 .name = "omap-keypad", 353 .id = -1, 354 .dev = { 355 .platform_data = &ams_delta_kp_data, 356 }, 357 .num_resources = ARRAY_SIZE(ams_delta_kp_resources), 358 .resource = ams_delta_kp_resources, 359 }; 360 361 static struct platform_device ams_delta_lcd_device = { 362 .name = "lcd_ams_delta", 363 .id = -1, 364 }; 365 366 static struct gpiod_lookup_table ams_delta_lcd_gpio_table = { 367 .table = { 368 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_LCD_VBLEN, "vblen", 0), 369 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_LCD_NDISP, "ndisp", 0), 370 { }, 371 }, 372 }; 373 374 /* 375 * Dynamically allocated GPIO numbers must be obtained fromm GPIO device 376 * before they can be put in the gpio_led table. Before that happens, 377 * initialize the table with invalid GPIO numbers, not 0. 378 */ 379 static struct gpio_led gpio_leds[] __initdata = { 380 [LATCH1_PIN_LED_CAMERA] = { 381 .name = "camera", 382 .gpio = -EINVAL, 383 .default_state = LEDS_GPIO_DEFSTATE_OFF, 384 #ifdef CONFIG_LEDS_TRIGGERS 385 .default_trigger = "ams_delta_camera", 386 #endif 387 }, 388 [LATCH1_PIN_LED_ADVERT] = { 389 .name = "advert", 390 .gpio = -EINVAL, 391 .default_state = LEDS_GPIO_DEFSTATE_OFF, 392 }, 393 [LATCH1_PIN_LED_MAIL] = { 394 .name = "email", 395 .gpio = -EINVAL, 396 .default_state = LEDS_GPIO_DEFSTATE_OFF, 397 }, 398 [LATCH1_PIN_LED_HANDSFREE] = { 399 .name = "handsfree", 400 .gpio = -EINVAL, 401 .default_state = LEDS_GPIO_DEFSTATE_OFF, 402 }, 403 [LATCH1_PIN_LED_VOICEMAIL] = { 404 .name = "voicemail", 405 .gpio = -EINVAL, 406 .default_state = LEDS_GPIO_DEFSTATE_OFF, 407 }, 408 [LATCH1_PIN_LED_VOICE] = { 409 .name = "voice", 410 .gpio = -EINVAL, 411 .default_state = LEDS_GPIO_DEFSTATE_OFF, 412 }, 413 }; 414 415 static const struct gpio_led_platform_data leds_pdata __initconst = { 416 .leds = gpio_leds, 417 .num_leds = ARRAY_SIZE(gpio_leds), 418 }; 419 420 static struct i2c_board_info ams_delta_camera_board_info[] = { 421 { 422 I2C_BOARD_INFO("ov6650", 0x60), 423 }, 424 }; 425 426 #ifdef CONFIG_LEDS_TRIGGERS 427 DEFINE_LED_TRIGGER(ams_delta_camera_led_trigger); 428 429 static int ams_delta_camera_power(struct device *dev, int power) 430 { 431 /* 432 * turn on camera LED 433 */ 434 if (power) 435 led_trigger_event(ams_delta_camera_led_trigger, LED_FULL); 436 else 437 led_trigger_event(ams_delta_camera_led_trigger, LED_OFF); 438 return 0; 439 } 440 #else 441 #define ams_delta_camera_power NULL 442 #endif 443 444 static struct soc_camera_link ams_delta_iclink = { 445 .bus_id = 0, /* OMAP1 SoC camera bus */ 446 .i2c_adapter_id = 1, 447 .board_info = &ams_delta_camera_board_info[0], 448 .module_name = "ov6650", 449 .power = ams_delta_camera_power, 450 }; 451 452 static struct platform_device ams_delta_camera_device = { 453 .name = "soc-camera-pdrv", 454 .id = 0, 455 .dev = { 456 .platform_data = &ams_delta_iclink, 457 }, 458 }; 459 460 static struct omap1_cam_platform_data ams_delta_camera_platform_data = { 461 .camexclk_khz = 12000, /* default 12MHz clock, no extra DPLL */ 462 .lclk_khz_max = 1334, /* results in 5fps CIF, 10fps QCIF */ 463 }; 464 465 static struct platform_device ams_delta_audio_device = { 466 .name = "ams-delta-audio", 467 .id = -1, 468 }; 469 470 static struct gpiod_lookup_table ams_delta_audio_gpio_table = { 471 .table = { 472 GPIO_LOOKUP(OMAP_GPIO_LABEL, AMS_DELTA_GPIO_PIN_HOOK_SWITCH, 473 "hook_switch", 0), 474 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_MODEM_CODEC, 475 "modem_codec", 0), 476 { }, 477 }, 478 }; 479 480 static struct platform_device cx20442_codec_device = { 481 .name = "cx20442-codec", 482 .id = -1, 483 }; 484 485 static struct resource ams_delta_serio_resources[] = { 486 { 487 .flags = IORESOURCE_IRQ, 488 /* 489 * Initialize IRQ resource with invalid IRQ number. 490 * It will be replaced with dynamically allocated GPIO IRQ 491 * obtained from GPIO chip as soon as the chip is available. 492 */ 493 .start = -EINVAL, 494 .end = -EINVAL, 495 }, 496 }; 497 498 static struct platform_device ams_delta_serio_device = { 499 .name = "ams-delta-serio", 500 .id = PLATFORM_DEVID_NONE, 501 .dev = { 502 /* 503 * Initialize .platform_data explicitly with NULL to 504 * indicate it is going to be used. It will be replaced 505 * with FIQ buffer address as soon as FIQ is initialized. 506 */ 507 .platform_data = NULL, 508 }, 509 .num_resources = ARRAY_SIZE(ams_delta_serio_resources), 510 .resource = ams_delta_serio_resources, 511 }; 512 513 static struct regulator_consumer_supply keybrd_pwr_consumers[] = { 514 /* 515 * Initialize supply .dev_name with NULL. It will be replaced 516 * with serio dev_name() as soon as the serio device is registered. 517 */ 518 REGULATOR_SUPPLY("vcc", NULL), 519 }; 520 521 static struct regulator_init_data keybrd_pwr_initdata = { 522 .constraints = { 523 .valid_ops_mask = REGULATOR_CHANGE_STATUS, 524 }, 525 .num_consumer_supplies = ARRAY_SIZE(keybrd_pwr_consumers), 526 .consumer_supplies = keybrd_pwr_consumers, 527 }; 528 529 static struct fixed_voltage_config keybrd_pwr_config = { 530 .supply_name = "keybrd_pwr", 531 .microvolts = 5000000, 532 .enable_high = 1, 533 .init_data = &keybrd_pwr_initdata, 534 }; 535 536 static struct platform_device keybrd_pwr_device = { 537 .name = "reg-fixed-voltage", 538 .id = PLATFORM_DEVID_AUTO, 539 .dev = { 540 .platform_data = &keybrd_pwr_config, 541 }, 542 }; 543 544 static struct gpiod_lookup_table keybrd_pwr_gpio_table = { 545 .table = { 546 GPIO_LOOKUP(LATCH2_LABEL, LATCH2_PIN_KEYBRD_PWR, NULL, 547 GPIO_ACTIVE_HIGH), 548 { }, 549 }, 550 }; 551 552 static struct platform_device *ams_delta_devices[] __initdata = { 553 &latch1_gpio_device, 554 &latch2_gpio_device, 555 &ams_delta_kp_device, 556 &ams_delta_camera_device, 557 &ams_delta_audio_device, 558 &ams_delta_serio_device, 559 &ams_delta_nand_device, 560 &ams_delta_lcd_device, 561 &cx20442_codec_device, 562 }; 563 564 static struct gpiod_lookup_table *ams_delta_gpio_tables[] __initdata = { 565 &ams_delta_nreset_gpiod_table, 566 &ams_delta_audio_gpio_table, 567 &keybrd_pwr_gpio_table, 568 &ams_delta_lcd_gpio_table, 569 &ams_delta_nand_gpio_table, 570 }; 571 572 /* 573 * Some drivers may not use GPIO lookup tables but need to be provided 574 * with GPIO numbers. The same applies to GPIO based IRQ lines - some 575 * drivers may even not use GPIO layer but expect just IRQ numbers. 576 * We could either define GPIO lookup tables then use them on behalf 577 * of those devices, or we can use GPIO driver level methods for 578 * identification of GPIO and IRQ numbers. For the purpose of the latter, 579 * defina a helper function which identifies GPIO chips by their labels. 580 */ 581 static int gpiochip_match_by_label(struct gpio_chip *chip, void *data) 582 { 583 char *label = data; 584 585 return !strcmp(label, chip->label); 586 } 587 588 static struct gpiod_hog ams_delta_gpio_hogs[] = { 589 GPIO_HOG(LATCH2_LABEL, LATCH2_PIN_KEYBRD_DATAOUT, "keybrd_dataout", 590 GPIO_ACTIVE_HIGH, GPIOD_OUT_LOW), 591 {}, 592 }; 593 594 static struct plat_serial8250_port ams_delta_modem_ports[]; 595 596 /* 597 * Obtain MODEM IRQ GPIO descriptor using its hardware pin 598 * number and assign related IRQ number to the MODEM port. 599 * Keep the GPIO descriptor open so nobody steps in. 600 */ 601 static void __init modem_assign_irq(struct gpio_chip *chip) 602 { 603 struct gpio_desc *gpiod; 604 605 gpiod = gpiochip_request_own_desc(chip, AMS_DELTA_GPIO_PIN_MODEM_IRQ, 606 "modem_irq"); 607 if (IS_ERR(gpiod)) { 608 pr_err("%s: modem IRQ GPIO request failed (%ld)\n", __func__, 609 PTR_ERR(gpiod)); 610 } else { 611 gpiod_direction_input(gpiod); 612 ams_delta_modem_ports[0].irq = gpiod_to_irq(gpiod); 613 } 614 } 615 616 /* 617 * The purpose of this function is to take care of proper initialization of 618 * devices and data structures which depend on GPIO lines provided by OMAP GPIO 619 * banks but their drivers don't use GPIO lookup tables or GPIO layer at all. 620 * The function may be called as soon as OMAP GPIO devices are probed. 621 * Since that happens at postcore_initcall, it can be called successfully 622 * from init_machine or later. 623 * Dependent devices may be registered from within this function or later. 624 */ 625 static void __init omap_gpio_deps_init(void) 626 { 627 struct gpio_chip *chip; 628 629 chip = gpiochip_find(OMAP_GPIO_LABEL, gpiochip_match_by_label); 630 if (!chip) { 631 pr_err("%s: OMAP GPIO chip not found\n", __func__); 632 return; 633 } 634 635 /* 636 * Start with FIQ initialization as it may have to request 637 * and release successfully each OMAP GPIO pin in turn. 638 */ 639 ams_delta_init_fiq(chip, &ams_delta_serio_device); 640 641 modem_assign_irq(chip); 642 } 643 644 /* 645 * Initialize latch2 pins with values which are safe for dependent on-board 646 * devices or useful for their successull initialization even before GPIO 647 * driver takes control over the latch pins: 648 * - LATCH2_PIN_LCD_VBLEN = 0 649 * - LATCH2_PIN_LCD_NDISP = 0 Keep LCD device powered off before its 650 * driver takes control over it. 651 * - LATCH2_PIN_NAND_NCE = 0 652 * - LATCH2_PIN_NAND_NWP = 0 Keep NAND device down and write- 653 * protected before its driver takes 654 * control over it. 655 * - LATCH2_PIN_KEYBRD_PWR = 0 Keep keyboard powered off before serio 656 * driver takes control over it. 657 * - LATCH2_PIN_KEYBRD_DATAOUT = 0 Keep low to avoid corruption of first 658 * byte of data received from attached 659 * keyboard when serio device is probed; 660 * the pin is also hogged low by the latch2 661 * GPIO driver as soon as it is ready. 662 * - LATCH2_PIN_MODEM_NRESET = 1 Enable voice MODEM device, allowing for 663 * its successful probe even before a 664 * regulator it depends on, which in turn 665 * takes control over the pin, is set up. 666 * - LATCH2_PIN_MODEM_CODEC = 1 Attach voice MODEM CODEC data port 667 * to the MODEM so the CODEC is under 668 * control even if audio driver doesn't 669 * take it over. 670 */ 671 static void __init ams_delta_latch2_init(void) 672 { 673 u16 latch2 = 1 << LATCH2_PIN_MODEM_NRESET | 1 << LATCH2_PIN_MODEM_CODEC; 674 675 __raw_writew(latch2, LATCH2_VIRT); 676 } 677 678 static void __init ams_delta_init(void) 679 { 680 /* mux pins for uarts */ 681 omap_cfg_reg(UART1_TX); 682 omap_cfg_reg(UART1_RTS); 683 684 /* parallel camera interface */ 685 omap_cfg_reg(H19_1610_CAM_EXCLK); 686 omap_cfg_reg(J15_1610_CAM_LCLK); 687 omap_cfg_reg(L18_1610_CAM_VS); 688 omap_cfg_reg(L15_1610_CAM_HS); 689 omap_cfg_reg(L19_1610_CAM_D0); 690 omap_cfg_reg(K14_1610_CAM_D1); 691 omap_cfg_reg(K15_1610_CAM_D2); 692 omap_cfg_reg(K19_1610_CAM_D3); 693 omap_cfg_reg(K18_1610_CAM_D4); 694 omap_cfg_reg(J14_1610_CAM_D5); 695 omap_cfg_reg(J19_1610_CAM_D6); 696 omap_cfg_reg(J18_1610_CAM_D7); 697 698 omap_gpio_deps_init(); 699 ams_delta_latch2_init(); 700 gpiod_add_hogs(ams_delta_gpio_hogs); 701 702 omap_serial_init(); 703 omap_register_i2c_bus(1, 100, NULL, 0); 704 705 omap1_usb_init(&ams_delta_usb_config); 706 omap1_set_camera_info(&ams_delta_camera_platform_data); 707 #ifdef CONFIG_LEDS_TRIGGERS 708 led_trigger_register_simple("ams_delta_camera", 709 &ams_delta_camera_led_trigger); 710 #endif 711 platform_add_devices(ams_delta_devices, ARRAY_SIZE(ams_delta_devices)); 712 713 /* 714 * As soon as regulator consumers have been registered, assign their 715 * dev_names to consumer supply entries of respective regulators. 716 */ 717 keybrd_pwr_consumers[0].dev_name = 718 dev_name(&ams_delta_serio_device.dev); 719 720 /* 721 * Once consumer supply entries are populated with dev_names, 722 * register regulator devices. At this stage only the keyboard 723 * power regulator has its consumer supply table fully populated. 724 */ 725 platform_device_register(&keybrd_pwr_device); 726 727 /* 728 * As soon as GPIO consumers have been registered, assign 729 * their dev_names to respective GPIO lookup tables. 730 */ 731 ams_delta_audio_gpio_table.dev_id = 732 dev_name(&ams_delta_audio_device.dev); 733 keybrd_pwr_gpio_table.dev_id = dev_name(&keybrd_pwr_device.dev); 734 ams_delta_nand_gpio_table.dev_id = dev_name(&ams_delta_nand_device.dev); 735 ams_delta_lcd_gpio_table.dev_id = dev_name(&ams_delta_lcd_device.dev); 736 737 /* 738 * Once GPIO lookup tables are populated with dev_names, register them. 739 */ 740 gpiod_add_lookup_tables(ams_delta_gpio_tables, 741 ARRAY_SIZE(ams_delta_gpio_tables)); 742 743 omap_writew(omap_readw(ARM_RSTCT1) | 0x0004, ARM_RSTCT1); 744 745 omapfb_set_lcd_config(&ams_delta_lcd_config); 746 } 747 748 static void modem_pm(struct uart_port *port, unsigned int state, unsigned old) 749 { 750 struct modem_private_data *priv = port->private_data; 751 int ret; 752 753 if (!priv) 754 return; 755 756 if (IS_ERR(priv->regulator)) 757 return; 758 759 if (state == old) 760 return; 761 762 if (state == 0) 763 ret = regulator_enable(priv->regulator); 764 else if (old == 0) 765 ret = regulator_disable(priv->regulator); 766 else 767 ret = 0; 768 769 if (ret) 770 dev_warn(port->dev, 771 "ams_delta modem_pm: failed to %sable regulator: %d\n", 772 state ? "dis" : "en", ret); 773 } 774 775 static struct plat_serial8250_port ams_delta_modem_ports[] = { 776 { 777 .membase = IOMEM(MODEM_VIRT), 778 .mapbase = MODEM_PHYS, 779 .irq = IRQ_NOTCONNECTED, /* changed later */ 780 .flags = UPF_BOOT_AUTOCONF, 781 .irqflags = IRQF_TRIGGER_RISING, 782 .iotype = UPIO_MEM, 783 .regshift = 1, 784 .uartclk = BASE_BAUD * 16, 785 .pm = modem_pm, 786 .private_data = &modem_priv, 787 }, 788 { }, 789 }; 790 791 static struct platform_device ams_delta_modem_device = { 792 .name = "serial8250", 793 .id = PLAT8250_DEV_PLATFORM1, 794 .dev = { 795 .platform_data = ams_delta_modem_ports, 796 }, 797 }; 798 799 /* 800 * leds-gpio driver doesn't make use of GPIO lookup tables, 801 * it has to be provided with GPIO numbers over platform data 802 * if GPIO descriptor info can't be obtained from device tree. 803 * We could either define GPIO lookup tables and use them on behalf 804 * of the leds-gpio device, or we can use GPIO driver level methods 805 * for identification of GPIO numbers as long as we don't support 806 * device tree. Let's do the latter. 807 */ 808 static void __init ams_delta_led_init(struct gpio_chip *chip) 809 { 810 struct gpio_desc *gpiod; 811 int i; 812 813 for (i = LATCH1_PIN_LED_CAMERA; i < LATCH1_PIN_DOCKIT1; i++) { 814 gpiod = gpiochip_request_own_desc(chip, i, NULL); 815 if (IS_ERR(gpiod)) { 816 pr_warn("%s: %s GPIO %d request failed (%ld)\n", 817 __func__, LATCH1_LABEL, i, PTR_ERR(gpiod)); 818 continue; 819 } 820 821 /* Assign GPIO numbers to LED device. */ 822 gpio_leds[i].gpio = desc_to_gpio(gpiod); 823 824 gpiochip_free_own_desc(gpiod); 825 } 826 827 gpio_led_register_device(PLATFORM_DEVID_NONE, &leds_pdata); 828 } 829 830 /* 831 * The purpose of this function is to take care of assignment of GPIO numbers 832 * to platform devices which depend on GPIO lines provided by Amstrad Delta 833 * latch1 and/or latch2 GPIO devices but don't use GPIO lookup tables. 834 * The function may be called as soon as latch1/latch2 GPIO devices are 835 * initilized. Since basic-mmio-gpio driver is not registered before 836 * device_initcall, this may happen at erliest during device_initcall_sync. 837 * Dependent devices shouldn't be registered before that, their 838 * registration may be performed from within this function or later. 839 */ 840 static int __init ams_delta_gpio_init(void) 841 { 842 struct gpio_chip *chip; 843 844 if (!machine_is_ams_delta()) 845 return -ENODEV; 846 847 chip = gpiochip_find(LATCH1_LABEL, gpiochip_match_by_label); 848 if (!chip) 849 pr_err("%s: latch1 GPIO chip not found\n", __func__); 850 else 851 ams_delta_led_init(chip); 852 853 return 0; 854 } 855 device_initcall_sync(ams_delta_gpio_init); 856 857 static int __init modem_nreset_init(void) 858 { 859 int err; 860 861 err = platform_device_register(&modem_nreset_device); 862 if (err) 863 pr_err("Couldn't register the modem regulator device\n"); 864 865 return err; 866 } 867 868 869 /* 870 * This function expects MODEM IRQ number already assigned to the port. 871 * The MODEM device requires its RESET# pin kept high during probe. 872 * That requirement can be fulfilled in several ways: 873 * - with a descriptor of already functional modem_nreset regulator 874 * assigned to the MODEM private data, 875 * - with the regulator not yet controlled by modem_pm function but 876 * already enabled by default on probe, 877 * - before the modem_nreset regulator is probed, with the pin already 878 * set high explicitly. 879 * The last one is already guaranteed by ams_delta_latch2_init() called 880 * from machine_init. 881 * In order to avoid taking over ttyS0 device slot, the MODEM device 882 * should be registered after OMAP serial ports. Since those ports 883 * are registered at arch_initcall, this function can be called safely 884 * at arch_initcall_sync earliest. 885 */ 886 static int __init ams_delta_modem_init(void) 887 { 888 int err; 889 890 if (!machine_is_ams_delta()) 891 return -ENODEV; 892 893 omap_cfg_reg(M14_1510_GPIO2); 894 895 /* Initialize the modem_nreset regulator consumer before use */ 896 modem_priv.regulator = ERR_PTR(-ENODEV); 897 898 err = platform_device_register(&ams_delta_modem_device); 899 900 return err; 901 } 902 arch_initcall_sync(ams_delta_modem_init); 903 904 static int __init late_init(void) 905 { 906 int err; 907 908 err = modem_nreset_init(); 909 if (err) 910 return err; 911 912 /* 913 * Once the modem device is registered, the modem_nreset 914 * regulator can be requested on behalf of that device. 915 */ 916 modem_priv.regulator = regulator_get(&ams_delta_modem_device.dev, 917 "RESET#"); 918 if (IS_ERR(modem_priv.regulator)) { 919 err = PTR_ERR(modem_priv.regulator); 920 goto unregister; 921 } 922 return 0; 923 924 unregister: 925 platform_device_unregister(&ams_delta_modem_device); 926 return err; 927 } 928 929 static void __init ams_delta_init_late(void) 930 { 931 omap1_init_late(); 932 late_init(); 933 } 934 935 static void __init ams_delta_map_io(void) 936 { 937 omap15xx_map_io(); 938 iotable_init(ams_delta_io_desc, ARRAY_SIZE(ams_delta_io_desc)); 939 } 940 941 MACHINE_START(AMS_DELTA, "Amstrad E3 (Delta)") 942 /* Maintainer: Jonathan McDowell <noodles@earth.li> */ 943 .atag_offset = 0x100, 944 .map_io = ams_delta_map_io, 945 .init_early = omap1_init_early, 946 .init_irq = omap1_init_irq, 947 .handle_irq = omap1_handle_irq, 948 .init_machine = ams_delta_init, 949 .init_late = ams_delta_init_late, 950 .init_time = omap1_timer_init, 951 .restart = omap1_restart, 952 MACHINE_END 953