[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: Ben Dooks <ben-linux@fluff.org>
This commit is contained in:
Ben Dooks 2008-11-03 09:21:23 +00:00
parent 56c035c9ce
commit 03d5e77bb6
2 changed files with 28 additions and 12 deletions

View File

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

View File

@ -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 = {
.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] = {
.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] = {
.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)
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)
/* 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;