Commit 03d5e77b authored by Ben Dooks's avatar Ben Dooks

[ARM] S3C: Update number of serial ports

Update the serial driver to handle the 4 ports of the
S3C2443 and S364XX series.
Signed-off-by: default avatarBen Dooks <ben-linux@fluff.org>
parent 56c035c9
...@@ -455,6 +455,16 @@ config SERIAL_SAMSUNG ...@@ -455,6 +455,16 @@ config SERIAL_SAMSUNG
provide all of these ports, depending on how the serial port provide all of these ports, depending on how the serial port
pins are configured. pins are configured.
config SERIAL_SAMSUNG_UARTS
int
depends on SERIAL_SAMSUNG
default 2 if ARCH_S3C2400
default 4 if ARCH_S3C64XX || CPU_S3C2443
default 3
help
Select the number of available UART ports for the Samsung S3C
serial driver
config SERIAL_SAMSUNG_DEBUG config SERIAL_SAMSUNG_DEBUG
bool "Samsung SoC serial debug" bool "Samsung SoC serial debug"
depends on SERIAL_SAMSUNG && DEBUG_LL depends on SERIAL_SAMSUNG && DEBUG_LL
......
...@@ -59,14 +59,6 @@ ...@@ -59,14 +59,6 @@
#define S3C24XX_SERIAL_MAJOR 204 #define S3C24XX_SERIAL_MAJOR 204
#define S3C24XX_SERIAL_MINOR 64 #define S3C24XX_SERIAL_MINOR 64
/* we can support 3 uarts, but not always use them */
#if defined(CONFIG_CPU_S3C2400) || defined(CONFIG_CPU_S3C24A0)
#define NR_PORTS (2)
#else
#define NR_PORTS (3)
#endif
/* macros to change one thing to another */ /* macros to change one thing to another */
#define tx_enabled(port) ((port)->unused[0]) #define tx_enabled(port) ((port)->unused[0])
...@@ -839,7 +831,7 @@ static struct uart_driver s3c24xx_uart_drv = { ...@@ -839,7 +831,7 @@ static struct uart_driver s3c24xx_uart_drv = {
.minor = S3C24XX_SERIAL_MINOR, .minor = S3C24XX_SERIAL_MINOR,
}; };
static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] = { static struct s3c24xx_uart_port s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = {
[0] = { [0] = {
.port = { .port = {
.lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock), .lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[0].port.lock),
...@@ -864,7 +856,7 @@ static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] = { ...@@ -864,7 +856,7 @@ static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] = {
.line = 1, .line = 1,
} }
}, },
#if NR_PORTS > 2 #if CONFIG_SERIAL_SAMSUNG_UARTS > 2
[2] = { [2] = {
.port = { .port = {
...@@ -877,6 +869,20 @@ static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] = { ...@@ -877,6 +869,20 @@ static struct s3c24xx_uart_port s3c24xx_serial_ports[NR_PORTS] = {
.flags = UPF_BOOT_AUTOCONF, .flags = UPF_BOOT_AUTOCONF,
.line = 2, .line = 2,
} }
},
#endif
#if CONFIG_SERIAL_SAMSUNG_UARTS > 3
[3] = {
.port = {
.lock = __SPIN_LOCK_UNLOCKED(s3c24xx_serial_ports[3].port.lock),
.iotype = UPIO_MEM,
.irq = IRQ_S3CUART_RX3,
.uartclk = 0,
.fifosize = 16,
.ops = &s3c24xx_serial_ops,
.flags = UPF_BOOT_AUTOCONF,
.line = 3,
}
} }
#endif #endif
}; };
...@@ -1324,7 +1330,7 @@ static int s3c24xx_serial_init_ports(struct s3c24xx_uart_info *info) ...@@ -1324,7 +1330,7 @@ static int s3c24xx_serial_init_ports(struct s3c24xx_uart_info *info)
platdev_ptr = s3c24xx_uart_devs; platdev_ptr = s3c24xx_uart_devs;
for (i = 0; i < NR_PORTS; i++, ptr++, platdev_ptr++) { for (i = 0; i < CONFIG_SERIAL_SAMSUNG_UARTS; i++, ptr++, platdev_ptr++) {
s3c24xx_serial_init_port(ptr, info, *platdev_ptr); s3c24xx_serial_init_port(ptr, info, *platdev_ptr);
} }
...@@ -1345,7 +1351,7 @@ s3c24xx_serial_console_setup(struct console *co, char *options) ...@@ -1345,7 +1351,7 @@ s3c24xx_serial_console_setup(struct console *co, char *options)
/* is this a valid port */ /* is this a valid port */
if (co->index == -1 || co->index >= NR_PORTS) if (co->index == -1 || co->index >= CONFIG_SERIAL_SAMSUNG_UARTS)
co->index = 0; co->index = 0;
port = &s3c24xx_serial_ports[co->index].port; port = &s3c24xx_serial_ports[co->index].port;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment