OpenRD: Enable SD/UART selection for serial port 1
Subsystems (2)
PATCH v7 1/1 OpenRD: Enable SD/UART selection for serial port 1
This patch enables users to choose either the SDIO interface or UART1 (RS232/RS485). The selection can be done through kernel parameter.
By default the port would be used for SDIO interface. Passing the string "kw_openrd_init_uart1=232" or "kw_openrd_init_uart1=485" enables either the RS-232 or RS-485 port respectively; disabling the SDIO interface. Anything else selects the default SDIO interface.
"kw_openrd_init_uart1=485" is ignored on OpenRD-Base as it doesn't have RS485 port.
v2 - use gpio* functions instead of read/write to set/reset GPIO v3 - notify user when wrong kernel paramter is passed
v4 - use linux/gpio.h instead of mach/gpio.h
v5 - changed uart1_mpp_config to be static, global & __initdata v6 - changed kernel parameter to 'kw_openrd_init_uart1=...' from 'uart=...' v7 - remove compilation error due to same name used for variable & function
--- arch/arm/mach-kirkwood/openrd-setup.c | 101 ++++++++++++++++++++++++++++++++- 1 files changed, 100 insertions(+), 1 deletions(-)
arch/arm/mach-kirkwood/openrd-setup.c +100 -1
@@ -16,6 +16,7 @@#include <linux/ata_platform.h> #include <linux/mv643xx_eth.h> #include <linux/i2c.h> +#include <linux/gpio.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> #include <mach/kirkwood.h>
@@ -57,7 +58,22 @@ static struct mvsdio_platform_data openrd_mvsdio_data = { };static unsigned int openrd_mpp_config[]__initdata = { +MPP12_SD_CLK , +MPP13_SD_CMD , +MPP14_SD_D0 , +MPP15_SD_D1 , +MPP16_SD_D2 , +MPP17_SD_D3 , +MPP28_GPIO ,MPP29_GPIO , +MPP34_GPIO , +0 +}; + +/* Configure MPP for UART1 */ +static unsigned int openrd_uart1_mpp_config[]__initdata = { +MPP13_UART1_TXD , +MPP14_UART1_RXD ,0 };
@@ -67,6 +83,68 @@ static struct i2c_board_info i2c_board_info[] __initdata = { }, }; +static int __initdata uart1; + +static int __init sd_uart_selection (char *str) +{ + uart1 = -EINVAL ; + +/* Default is SD. Change if required, for UART */ +if (!str) +return 0 ; + +if (!strncmp (str,"232" ,3 )) { + uart1 =232 ; + }else if (!strncmp (str,"485" ,3 )) { +/* OpenRD-Base doesn't have RS485. Treat is as an +* unknown argument & just have default setting - +* which is SD */ +if (machine_is_openrd_base ()) { + uart1 = -ENODEV ; +return 1 ; + } + + uart1 =485 ; + } +return 1 ; +} +/* Parse boot_command_line string kw_openrd_init_uart1=232/485 */ +__setup ("kw_openrd_init_uart1=" , sd_uart_selection); + +static int __init uart1_mpp_config (void ) +{ +kirkwood_mpp_conf (openrd_uart1_mpp_config); + +if (gpio_request (34 ,"SD_UART1_SEL" )) { +printk (KERN_ERR "GPIO request failed for SD/UART1 selection" +", gpio: 34\n" ); +return -EIO ; + } + +if (gpio_request (28 ,"RS232_RS485_SEL" )) { +printk (KERN_ERR "GPIO request failed for RS232/RS485 selection" +", gpio# 28\n" ); +gpio_free (34 ); +return -EIO ; + } + +/* Select UART1 +* Pin # 34: 0 => UART1, 1 => SD */ +gpio_direction_output (34 ,0 ); + +/* Select RS232 OR RS485 +* Pin # 28: 0 => RS232, 1 => RS485 */ +if (uart1 ==232 ) +gpio_direction_output (28 ,0 ); +else +gpio_direction_output (28 ,1 ); + +gpio_free (34 ); +gpio_free (28 ); + +return 0 ; +} +static void __init openrd_init (void ) {/*
@@ -90,7 +168,6 @@ static void __init openrd_init(void)kirkwood_ge01_init (&openrd_ge01_data);kirkwood_sata_init (&openrd_sata_data); -kirkwood_sdio_init (&openrd_mvsdio_data);kirkwood_i2c_init ();
@@ -99,6 +176,28 @@ static void __init openrd_init(void) ARRAY_SIZE(i2c_board_info));kirkwood_audio_init (); } + +if (uart1 <=0 ) { +if (uart1 <0 ) +printk (KERN_ERR "Invalid kernel parameter to select " +"UART1. Defaulting to SD. ERROR CODE: %d\n" , + uart1); + +/* Select SD +* Pin # 34: 0 => UART1, 1 => SD */ +if (gpio_request (34 ,"SD_UART1_SEL" )) { +printk (KERN_ERR "GPIO request failed for SD/UART1 " +"selection, gpio: 34\n" ); + }else { + +gpio_direction_output (34 ,1 ); +gpio_free (34 ); +kirkwood_sdio_init (&openrd_mvsdio_data); + } + }else { +if (!uart1_mpp_config ()) +kirkwood_uart1_init (); + } }static int __init openrd_pci_init (void )
Signature · 1 line
1.6.6.1
PATCH v7 1/1 OpenRD: Enable SD/UART selection for serial port 1
Quoted 12 lines · Tanmay Upadhyay
This patch enables users to choose either the SDIO interface or UART1 (RS232/RS485). The selection can be done through kernel parameter.
By default the port would be used for SDIO interface. Passing the string "kw_openrd_init_uart1=232" or "kw_openrd_init_uart1=485" enables either the RS-232 or RS-485 port respectively; disabling the SDIO interface. Anything else selects the default SDIO interface.
"kw_openrd_init_uart1=485" is ignored on OpenRD-Base as it doesn't have RS485 port.
Quoted 9 lines
v2 - use gpio* functions instead of read/write to set/reset GPIO v3 - notify user when wrong kernel paramter is passed
v4 - uselinux/gpio.hinstead ofmach/gpio.h
v5 - changeduart1_mpp_configto be static, global &__initdatav6 - changed kernel parameter to 'kw_openrd_init_uart1=...' from 'uart=...' v7 - remove compilation error due to same name used for variable & functionSigned-off-by Tanmay Upadhyay <[email protected]>
Cheers
Signature · 2 lines
Alexander Clouter .sigmonster says: Experience varies directly with equipment ruined.
Samsung Linux project management status page...?
Hi everyone,
Do any of the Samsung Linux maintainers or Linux managers have a Linux project management status page online? By which I mean a page for each SoC showing which components/devices are in Linus' tree, in Russell's tree, in Ben's tree, in Kyungmin Park's tree, in development, expected, planned, not planned, rejected, etc?
(I'm trying to develop a FIMC- & OpenGL ES-based app around the S5PC100 and can't see any obvious way of telling what is checked in and where).
Thanks!, ....Nick Pelling....
Samsung Linux project management status page...?
Quoted 8 lines · Nick Pelling
Hi everyone,
Do any of the Samsung Linux maintainers or Linux managers have a Linux project management status page online? By which I mean a page for each SoC showing which components/devices are in Linus' tree, in Russell's tree, in Ben's tree, in Kyungmin Park's tree, in development, expected, planned, not planned, rejected, etc?
Quoted 4 lines
(I'm trying to develop a FIMC- & OpenGL ES-based app around the S5PC100 and can't see any obvious way of telling what is checked in and where).
Thanks!, ....Nick Pelling....
If you don't already have something, anyone who wants to can set up pages like this on eLinux wiki at: http://elinux.org.
That wiki exists just for stuff like this. Feel free to use it.
-- Tim
=============================
Tim Bird
Architecture Group Chair, CE Linux Forum
Senior Staff Engineer, Sony Network Entertainment
=============================