* Govindraj.R <govindraj.r...@ti.com> [120306 00:34]:
> 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>

Can somebody please test this on non-xm beagle too and
reply with a Tested-by?

Thanks,

Tony

> ---
>  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