From: "Govindraj.R" <govindraj.r...@ti.com>

All beagle boards rev > AX/BX have external usb hubs connected to ehci
interface, external hub/peripheral uses a nreset sequence for which
uart2_rx.gpio_147 pin in mux mode4(USB2HS_nRST) is used on all beagle
boards expect rev Ax/BX.
(Reference to all beagle boards rev schematics:
http://beagleboard.org/hardware/design)

Initialising uart2 will lead to serial init taking over uart2_rx pin
so init uart2_rx pin mux only for Beagle AX/BX rev boards.
Dont init uart2 for all other boards allowing usb_ehci functionality.

To initialise individual uart port by id utilise and modify the existing
available func. omap_serial_board_init.

Cc: Tony Lindgren <t...@atomide.com>
Cc: Kevin Hilman <khil...@ti.com>
Cc: Koen Kooi <k...@dominion.thruhere.net>
Tested-by: Peter Ujfalusi <peter.ujfal...@ti.com>
Tested-by: Robert Nelson <robertcnel...@gmail.com>
Signed-off-by: Govindraj.R <govindraj.r...@ti.com>
---
 arch/arm/mach-omap2/board-omap3beagle.c  |    6 +++-
 arch/arm/mach-omap2/serial.c             |   41 ++++++++++++++++-------------
 arch/arm/plat-omap/include/plat/serial.h |    3 +-
 3 files changed, 30 insertions(+), 20 deletions(-)

diff --git a/arch/arm/mach-omap2/board-omap3beagle.c 
b/arch/arm/mach-omap2/board-omap3beagle.c
index 7ffcd28..19d6fb5 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -126,6 +126,7 @@ static void __init omap3_beagle_init_rev(void)
                beagle_config.mmc1_gpio_wp = 29;
                beagle_config.reset_gpio = 170;
                beagle_config.usr_button_gpio = 7;
+               omap_serial_board_init(NULL, 1);
                break;
        case 6:
                printk(KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n");
@@ -528,7 +529,10 @@ static void __init omap3_beagle_init(void)
        platform_add_devices(omap3_beagle_devices,
                        ARRAY_SIZE(omap3_beagle_devices));
        omap_display_init(&beagle_dss_data);
-       omap_serial_init();
+       omap_serial_board_init(NULL, 0);
+       omap_serial_board_init(NULL, 2);
+       omap_serial_board_init(NULL, 3);
+
        omap_sdrc_init(mt46h32m32lf6_sdrc_params,
                                  mt46h32m32lf6_sdrc_params);
 
diff --git a/arch/arm/mach-omap2/serial.c b/arch/arm/mach-omap2/serial.c
index f590afc..e7c0462 100644
--- a/arch/arm/mach-omap2/serial.c
+++ b/arch/arm/mach-omap2/serial.c
@@ -393,30 +393,32 @@ void __init omap_serial_init_port(struct omap_board_data 
*bdata,
 /**
  * omap_serial_board_init() - initialize all supported serial ports
  * @info: platform specific data pointer
+ * @port_id: uart port number to be initialised
  *
- * Initializes all available UARTs as serial ports. Platforms
+ * Initializes individual UARTs as serial ports. Platforms
  * can call this function when they want to have default behaviour
- * for serial ports (e.g initialize them all as serial ports).
+ * for serial ports (e.g initialize individual serial ports based on port id).
  */
-void __init omap_serial_board_init(struct omap_uart_port_info *info)
+void __init omap_serial_board_init(struct omap_uart_port_info *info, u8 
port_id)
 {
        struct omap_uart_state *uart;
        struct omap_board_data bdata;
 
-       list_for_each_entry(uart, &uart_list, node) {
-               bdata.id = uart->num;
-               bdata.flags = 0;
-               bdata.pads = NULL;
-               bdata.pads_cnt = 0;
-
-               if (cpu_is_omap44xx() || cpu_is_omap34xx())
-                       omap_serial_fill_default_pads(&bdata);
-
-               if (!info)
-                       omap_serial_init_port(&bdata, NULL);
-               else
-                       omap_serial_init_port(&bdata, &info[uart->num]);
-       }
+       list_for_each_entry(uart, &uart_list, node)
+               if (uart->num == port_id) {
+                       bdata.id = uart->num;
+                       bdata.flags = 0;
+                       bdata.pads = NULL;
+                       bdata.pads_cnt = 0;
+
+                       if (!cpu_is_omap24xx())
+                               omap_serial_fill_default_pads(&bdata);
+
+                       if (!info)
+                               omap_serial_init_port(&bdata, NULL);
+                       else
+                               omap_serial_init_port(&bdata, info);
+               }
 }
 
 /**
@@ -428,5 +430,8 @@ void __init omap_serial_board_init(struct 
omap_uart_port_info *info)
  */
 void __init omap_serial_init(void)
 {
-       omap_serial_board_init(NULL);
+       struct omap_uart_state *uart;
+
+       list_for_each_entry(uart, &uart_list, node)
+               omap_serial_board_init(NULL, uart->num);
 }
diff --git a/arch/arm/plat-omap/include/plat/serial.h 
b/arch/arm/plat-omap/include/plat/serial.h
index 198d1e6..043b251 100644
--- a/arch/arm/plat-omap/include/plat/serial.h
+++ b/arch/arm/plat-omap/include/plat/serial.h
@@ -111,7 +111,8 @@ struct omap_uart_port_info;
 
 extern void omap_serial_init(void);
 extern int omap_uart_can_sleep(void);
-extern void omap_serial_board_init(struct omap_uart_port_info *platform_data);
+extern void omap_serial_board_init(struct omap_uart_port_info *platform_data,
+               u8 port_id);
 extern void omap_serial_init_port(struct omap_board_data *bdata,
                struct omap_uart_port_info *platform_data);
 #endif
-- 
1.7.5.4

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to