diff options
author | Sergei Shtylyov <sshtylyov@ru.mvista.com> | 2006-09-09 22:23:56 +0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2006-10-01 17:06:49 +0100 |
commit | 0b30d668a20acd2ffd4268f7bbe799b0dd73d5cf (patch) | |
tree | 2fd85c1f910ff4cec8f8ea499d78373c9a14648b /drivers/serial | |
parent | f3d106881b06a423455f95916e666acebe6503f2 (diff) | |
download | linux-0b30d668a20acd2ffd4268f7bbe799b0dd73d5cf.tar.gz linux-0b30d668a20acd2ffd4268f7bbe799b0dd73d5cf.tar.bz2 linux-0b30d668a20acd2ffd4268f7bbe799b0dd73d5cf.zip |
[SERIAL] 8250 resourse management fixes
I think register ranges obviously need to be claimed/released for all UARTs
including those with UPIO_MEM32 and UPIO_TSI iotype.
Also, serial8250_request_rsa_resources() returns false positives with
UPIO_MEM32, UPIO_AU, and UPIO_TSI iotype -- I don't think this makes any sense.
Signed-off-by: Sergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'drivers/serial')
-rw-r--r-- | drivers/serial/8250.c | 17 |
1 files changed, 8 insertions, 9 deletions
diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c index 0ae9ced00ed4..8d7ef69312a5 100644 --- a/drivers/serial/8250.c +++ b/drivers/serial/8250.c @@ -1949,6 +1949,8 @@ static int serial8250_request_std_resource(struct uart_8250_port *up) case UPIO_AU: size = 0x100000; /* fall thru */ + case UPIO_TSI: + case UPIO_MEM32: case UPIO_MEM: if (!up->port.mapbase) break; @@ -1984,6 +1986,8 @@ static void serial8250_release_std_resource(struct uart_8250_port *up) case UPIO_AU: size = 0x100000; /* fall thru */ + case UPIO_TSI: + case UPIO_MEM32: case UPIO_MEM: if (!up->port.mapbase) break; @@ -2007,17 +2011,15 @@ static int serial8250_request_rsa_resource(struct uart_8250_port *up) { unsigned long start = UART_RSA_BASE << up->port.regshift; unsigned int size = 8 << up->port.regshift; - int ret = 0; + int ret = -EINVAL; switch (up->port.iotype) { - case UPIO_MEM: - ret = -EINVAL; - break; - case UPIO_HUB6: case UPIO_PORT: start += up->port.iobase; - if (!request_region(start, size, "serial-rsa")) + if (request_region(start, size, "serial-rsa")) + ret = 0; + else ret = -EBUSY; break; } @@ -2031,9 +2033,6 @@ static void serial8250_release_rsa_resource(struct uart_8250_port *up) unsigned int size = 8 << up->port.regshift; switch (up->port.iotype) { - case UPIO_MEM: - break; - case UPIO_HUB6: case UPIO_PORT: release_region(up->port.iobase + offset, size); |