|
@@ -321,20 +321,6 @@ struct modem_private_data {
|
|
|
|
|
|
static struct modem_private_data modem_priv;
|
|
|
|
|
|
-void ams_delta_latch_write(int base, int ngpio, u16 mask, u16 value)
|
|
|
-{
|
|
|
- int bit = 0;
|
|
|
- u16 bitpos = 1 << bit;
|
|
|
-
|
|
|
- for (; bit < ngpio; bit++, bitpos = bitpos << 1) {
|
|
|
- if (!(mask & bitpos))
|
|
|
- continue;
|
|
|
- else
|
|
|
- gpio_set_value(base + bit, (value & bitpos) != 0);
|
|
|
- }
|
|
|
-}
|
|
|
-EXPORT_SYMBOL(ams_delta_latch_write);
|
|
|
-
|
|
|
static struct resource ams_delta_nand_resources[] = {
|
|
|
[0] = {
|
|
|
.start = OMAP1_MPUIO_BASE,
|
|
@@ -680,6 +666,40 @@ static void __init omap_gpio_deps_init(void)
|
|
|
modem_assign_irq(chip);
|
|
|
}
|
|
|
|
|
|
+/*
|
|
|
+ * Initialize latch2 pins with values which are safe for dependent on-board
|
|
|
+ * devices or useful for their successull initialization even before GPIO
|
|
|
+ * driver takes control over the latch pins:
|
|
|
+ * - LATCH2_PIN_LCD_VBLEN = 0
|
|
|
+ * - LATCH2_PIN_LCD_NDISP = 0 Keep LCD device powered off before its
|
|
|
+ * driver takes control over it.
|
|
|
+ * - LATCH2_PIN_NAND_NCE = 0
|
|
|
+ * - LATCH2_PIN_NAND_NWP = 0 Keep NAND device down and write-
|
|
|
+ * protected before its driver takes
|
|
|
+ * control over it.
|
|
|
+ * - LATCH2_PIN_KEYBRD_PWR = 0 Keep keyboard powered off before serio
|
|
|
+ * driver takes control over it.
|
|
|
+ * - LATCH2_PIN_KEYBRD_DATAOUT = 0 Keep low to avoid corruption of first
|
|
|
+ * byte of data received from attached
|
|
|
+ * keyboard when serio device is probed;
|
|
|
+ * the pin is also hogged low by the latch2
|
|
|
+ * GPIO driver as soon as it is ready.
|
|
|
+ * - LATCH2_PIN_MODEM_NRESET = 1 Enable voice MODEM device, allowing for
|
|
|
+ * its successful probe even before a
|
|
|
+ * regulator it depends on, which in turn
|
|
|
+ * takes control over the pin, is set up.
|
|
|
+ * - LATCH2_PIN_MODEM_CODEC = 1 Attach voice MODEM CODEC data port
|
|
|
+ * to the MODEM so the CODEC is under
|
|
|
+ * control even if audio driver doesn't
|
|
|
+ * take it over.
|
|
|
+ */
|
|
|
+static void __init ams_delta_latch2_init(void)
|
|
|
+{
|
|
|
+ u16 latch2 = 1 << LATCH2_PIN_MODEM_NRESET | 1 << LATCH2_PIN_MODEM_CODEC;
|
|
|
+
|
|
|
+ __raw_writew(latch2, LATCH2_VIRT);
|
|
|
+}
|
|
|
+
|
|
|
static void __init ams_delta_init(void)
|
|
|
{
|
|
|
/* mux pins for uarts */
|
|
@@ -701,6 +721,7 @@ static void __init ams_delta_init(void)
|
|
|
omap_cfg_reg(J18_1610_CAM_D7);
|
|
|
|
|
|
omap_gpio_deps_init();
|
|
|
+ ams_delta_latch2_init();
|
|
|
gpiod_add_hogs(ams_delta_gpio_hogs);
|
|
|
|
|
|
omap_serial_init();
|
|
@@ -888,9 +909,6 @@ static int __init ams_delta_modem_init(void)
|
|
|
/* Initialize the modem_nreset regulator consumer before use */
|
|
|
modem_priv.regulator = ERR_PTR(-ENODEV);
|
|
|
|
|
|
- ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_CODEC,
|
|
|
- AMS_DELTA_LATCH2_MODEM_CODEC);
|
|
|
-
|
|
|
err = platform_device_register(&ams_delta_modem_device);
|
|
|
|
|
|
return err;
|