diff options
| -rw-r--r-- | arch/arm/mach-omap1/board-ams-delta.c | 52 | ||||
| -rw-r--r-- | arch/arm/mach-omap1/include/mach/board-ams-delta.h | 7 |
2 files changed, 35 insertions, 24 deletions
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c index 4ff3551d93d3..fda402c837d9 100644 --- a/arch/arm/mach-omap1/board-ams-delta.c +++ b/arch/arm/mach-omap1/board-ams-delta.c | |||
| @@ -321,20 +321,6 @@ struct modem_private_data { | |||
| 321 | 321 | ||
| 322 | static struct modem_private_data modem_priv; | 322 | static struct modem_private_data modem_priv; |
| 323 | 323 | ||
| 324 | void ams_delta_latch_write(int base, int ngpio, u16 mask, u16 value) | ||
| 325 | { | ||
| 326 | int bit = 0; | ||
| 327 | u16 bitpos = 1 << bit; | ||
| 328 | |||
| 329 | for (; bit < ngpio; bit++, bitpos = bitpos << 1) { | ||
| 330 | if (!(mask & bitpos)) | ||
| 331 | continue; | ||
| 332 | else | ||
| 333 | gpio_set_value(base + bit, (value & bitpos) != 0); | ||
| 334 | } | ||
| 335 | } | ||
| 336 | EXPORT_SYMBOL(ams_delta_latch_write); | ||
| 337 | |||
| 338 | static struct resource ams_delta_nand_resources[] = { | 324 | static struct resource ams_delta_nand_resources[] = { |
| 339 | [0] = { | 325 | [0] = { |
| 340 | .start = OMAP1_MPUIO_BASE, | 326 | .start = OMAP1_MPUIO_BASE, |
| @@ -680,6 +666,40 @@ static void __init omap_gpio_deps_init(void) | |||
| 680 | modem_assign_irq(chip); | 666 | modem_assign_irq(chip); |
| 681 | } | 667 | } |
| 682 | 668 | ||
| 669 | /* | ||
| 670 | * Initialize latch2 pins with values which are safe for dependent on-board | ||
| 671 | * devices or useful for their successull initialization even before GPIO | ||
| 672 | * driver takes control over the latch pins: | ||
| 673 | * - LATCH2_PIN_LCD_VBLEN = 0 | ||
| 674 | * - LATCH2_PIN_LCD_NDISP = 0 Keep LCD device powered off before its | ||
| 675 | * driver takes control over it. | ||
| 676 | * - LATCH2_PIN_NAND_NCE = 0 | ||
| 677 | * - LATCH2_PIN_NAND_NWP = 0 Keep NAND device down and write- | ||
| 678 | * protected before its driver takes | ||
| 679 | * control over it. | ||
| 680 | * - LATCH2_PIN_KEYBRD_PWR = 0 Keep keyboard powered off before serio | ||
| 681 | * driver takes control over it. | ||
| 682 | * - LATCH2_PIN_KEYBRD_DATAOUT = 0 Keep low to avoid corruption of first | ||
| 683 | * byte of data received from attached | ||
| 684 | * keyboard when serio device is probed; | ||
| 685 | * the pin is also hogged low by the latch2 | ||
| 686 | * GPIO driver as soon as it is ready. | ||
| 687 | * - LATCH2_PIN_MODEM_NRESET = 1 Enable voice MODEM device, allowing for | ||
| 688 | * its successful probe even before a | ||
| 689 | * regulator it depends on, which in turn | ||
| 690 | * takes control over the pin, is set up. | ||
| 691 | * - LATCH2_PIN_MODEM_CODEC = 1 Attach voice MODEM CODEC data port | ||
| 692 | * to the MODEM so the CODEC is under | ||
| 693 | * control even if audio driver doesn't | ||
| 694 | * take it over. | ||
| 695 | */ | ||
| 696 | static void __init ams_delta_latch2_init(void) | ||
| 697 | { | ||
| 698 | u16 latch2 = 1 << LATCH2_PIN_MODEM_NRESET | 1 << LATCH2_PIN_MODEM_CODEC; | ||
| 699 | |||
| 700 | __raw_writew(latch2, LATCH2_VIRT); | ||
| 701 | } | ||
| 702 | |||
| 683 | static void __init ams_delta_init(void) | 703 | static void __init ams_delta_init(void) |
| 684 | { | 704 | { |
| 685 | /* mux pins for uarts */ | 705 | /* mux pins for uarts */ |
| @@ -701,6 +721,7 @@ static void __init ams_delta_init(void) | |||
| 701 | omap_cfg_reg(J18_1610_CAM_D7); | 721 | omap_cfg_reg(J18_1610_CAM_D7); |
| 702 | 722 | ||
| 703 | omap_gpio_deps_init(); | 723 | omap_gpio_deps_init(); |
| 724 | ams_delta_latch2_init(); | ||
| 704 | gpiod_add_hogs(ams_delta_gpio_hogs); | 725 | gpiod_add_hogs(ams_delta_gpio_hogs); |
| 705 | 726 | ||
| 706 | omap_serial_init(); | 727 | omap_serial_init(); |
| @@ -888,9 +909,6 @@ static int __init ams_delta_modem_init(void) | |||
| 888 | /* Initialize the modem_nreset regulator consumer before use */ | 909 | /* Initialize the modem_nreset regulator consumer before use */ |
| 889 | modem_priv.regulator = ERR_PTR(-ENODEV); | 910 | modem_priv.regulator = ERR_PTR(-ENODEV); |
| 890 | 911 | ||
| 891 | ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_CODEC, | ||
| 892 | AMS_DELTA_LATCH2_MODEM_CODEC); | ||
| 893 | |||
| 894 | err = platform_device_register(&ams_delta_modem_device); | 912 | err = platform_device_register(&ams_delta_modem_device); |
| 895 | 913 | ||
| 896 | return err; | 914 | return err; |
diff --git a/arch/arm/mach-omap1/include/mach/board-ams-delta.h b/arch/arm/mach-omap1/include/mach/board-ams-delta.h index ad6f865d1f16..3b2d8019238a 100644 --- a/arch/arm/mach-omap1/include/mach/board-ams-delta.h +++ b/arch/arm/mach-omap1/include/mach/board-ams-delta.h | |||
| @@ -59,13 +59,6 @@ | |||
| 59 | #define AMS_DELTA_LATCH2_GPIO_BASE AMS_DELTA_GPIO_PIN_LCD_VBLEN | 59 | #define AMS_DELTA_LATCH2_GPIO_BASE AMS_DELTA_GPIO_PIN_LCD_VBLEN |
| 60 | #define AMS_DELTA_LATCH2_NGPIO 16 | 60 | #define AMS_DELTA_LATCH2_NGPIO 16 |
| 61 | 61 | ||
| 62 | #ifndef __ASSEMBLY__ | ||
| 63 | void ams_delta_latch_write(int base, int ngpio, u16 mask, u16 value); | ||
| 64 | #define ams_delta_latch2_write(mask, value) \ | ||
| 65 | ams_delta_latch_write(AMS_DELTA_LATCH2_GPIO_BASE, \ | ||
| 66 | AMS_DELTA_LATCH2_NGPIO, (mask), (value)) | ||
| 67 | #endif | ||
| 68 | |||
| 69 | #endif /* CONFIG_MACH_AMS_DELTA */ | 62 | #endif /* CONFIG_MACH_AMS_DELTA */ |
| 70 | 63 | ||
| 71 | #endif /* __ASM_ARCH_OMAP_AMS_DELTA_H */ | 64 | #endif /* __ASM_ARCH_OMAP_AMS_DELTA_H */ |
