omap2+: Fix omap_serial_early_init to work with init_early hook
authorTony Lindgren <tony@atomide.com>
Mon, 14 Feb 2011 23:40:20 +0000 (15:40 -0800)
committerTony Lindgren <tony@atomide.com>
Mon, 14 Feb 2011 23:40:49 +0000 (15:40 -0800)
The new init_early hook happens at the end of setup_arch,
which is too early for kzalloc. However, there's no need
to call omap_serial_early_init that early, so fix this
by setting it up as a core_initcall.

Signed-off-by: Tony Lindgren <tony@atomide.com>
Tested-by: Kevin Hilman <khilman@ti.com>
arch/arm/mach-omap2/io.c
arch/arm/mach-omap2/serial.c
arch/arm/plat-omap/include/plat/serial.h

index f89173a..26a61cf 100644 (file)
@@ -398,8 +398,6 @@ void __init omap2_init_common_infrastructure(void)
 void __init omap2_init_common_devices(struct omap_sdrc_params *sdrc_cs0,
                                      struct omap_sdrc_params *sdrc_cs1)
 {
-       omap_serial_early_init();
-
        if (cpu_is_omap24xx() || cpu_is_omap34xx()) {
                omap2_sdrc_init(sdrc_cs0, sdrc_cs1);
                _omap2_init_reprogram_sdrc();
index 32e91a9..74e25cd 100644 (file)
@@ -655,7 +655,7 @@ static void serial_out_override(struct uart_port *up, int offset, int value)
 }
 #endif
 
-void __init omap_serial_early_init(void)
+static int __init omap_serial_early_init(void)
 {
        int i = 0;
 
@@ -672,7 +672,7 @@ void __init omap_serial_early_init(void)
 
                uart = kzalloc(sizeof(struct omap_uart_state), GFP_KERNEL);
                if (WARN_ON(!uart))
-                       return;
+                       return -ENODEV;
 
                uart->oh = oh;
                uart->num = i++;
@@ -691,7 +691,10 @@ void __init omap_serial_early_init(void)
                 */
                uart->oh->flags |= HWMOD_INIT_NO_IDLE | HWMOD_INIT_NO_RESET;
        } while (1);
+
+       return 0;
 }
+core_initcall(omap_serial_early_init);
 
 /**
  * omap_serial_init_port() - initialize single serial port
index cec5d56..a1a118d 100644 (file)
@@ -96,7 +96,6 @@
 
 struct omap_board_data;
 
-extern void __init omap_serial_early_init(void);
 extern void omap_serial_init(void);
 extern void omap_serial_init_port(struct omap_board_data *bdata);
 extern int omap_uart_can_sleep(void);