MIPS: TXx9: tx39xx: Move GPIO setup from .mem_setup() to .arch_init()
authorGeert Uytterhoeven <geert@linux-m68k.org>
Thu, 18 Aug 2016 12:57:47 +0000 (14:57 +0200)
committerRalf Baechle <ralf@linux-mips.org>
Tue, 4 Oct 2016 14:13:57 +0000 (16:13 +0200)
txx9_gpio_init() calls gpiochip_add_data(), which fails with -ENOMEM as
it is called too early in the boot process. This causes all subsequent
GPIO operations to fail silently.

Postpone all GPIO setup to .arch_init() time to fix this.

Suggested-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Cc: linux-mips@linux-mips.org
Cc: linux-gpio@vger.kernel.org
Patchwork: https://patchwork.linux-mips.org/patch/13967/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/txx9/generic/setup_tx3927.c
arch/mips/txx9/jmr3927/setup.c

index 110e05c3eb8fb638c1b75dbeb68db81d96a26e50..d3b83a92cf26c7075939bd23ae0aeb2e083921d2 100644 (file)
@@ -92,7 +92,6 @@ void __init tx3927_setup(void)
        /* PIO */
        __raw_writel(0, &tx3927_pioptr->maskcpu);
        __raw_writel(0, &tx3927_pioptr->maskext);
-       txx9_gpio_init(TX3927_PIO_REG, 0, 16);
 
        conf = read_c0_conf();
        if (conf & TX39_CONF_DCE) {
index 3206f76f300b727a91d5566c92bbc64cddd82be0..a455166dc6d44fe7418f0b66823e49ce188e690b 100644 (file)
@@ -142,8 +142,6 @@ static void __init jmr3927_board_init(void)
 
        /* PIO[15:12] connected to LEDs */
        __raw_writel(0x0000f000, &tx3927_pioptr->dir);
-       gpio_request(11, "dipsw1");
-       gpio_request(10, "dipsw2");
 
        jmr3927_pci_setup();
 
@@ -204,6 +202,14 @@ static void __init jmr3927_device_init(void)
        txx9_iocled_init(iocled_base, -1, 8, 1, "green", NULL);
 }
 
+static void __init jmr3927_arch_init(void)
+{
+       txx9_gpio_init(TX3927_PIO_REG, 0, 16);
+
+       gpio_request(11, "dipsw1");
+       gpio_request(10, "dipsw2");
+}
+
 struct txx9_board_vec jmr3927_vec __initdata = {
        .system = "Toshiba JMR_TX3927",
        .prom_init = jmr3927_prom_init,
@@ -211,6 +217,7 @@ struct txx9_board_vec jmr3927_vec __initdata = {
        .irq_setup = jmr3927_irq_setup,
        .time_init = jmr3927_time_init,
        .device_init = jmr3927_device_init,
+       .arch_init = jmr3927_arch_init,
 #ifdef CONFIG_PCI
        .pci_map_irq = jmr3927_pci_map_irq,
 #endif