mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-15 21:23:23 +00:00
[PATCH] drivers/char/specialix.c: fix the baud conversion
Correct the following bugs introduced by commit 67cc0161ecc9ebee6eba4af6cbfdba028090b1b9: - remove one remaining and now incorrect baud_table[] usage - "baud +=" is no longer correct The former bug was spotted by the Coverity checker. Rolf Eike Beer spotted a bug in the initial version of my patch. Signed-off-by: Adrian Bunk <bunk@stusta.de> Cc: Alan Cox <alan@lxorguk.ukuu.org.uk> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
c60099bfe3
commit
a4bb2cf1c3
@ -183,11 +183,6 @@ static int sx_poll = HZ;
|
|||||||
|
|
||||||
static struct tty_driver *specialix_driver;
|
static struct tty_driver *specialix_driver;
|
||||||
|
|
||||||
static unsigned long baud_table[] = {
|
|
||||||
0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800,
|
|
||||||
9600, 19200, 38400, 57600, 115200, 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct specialix_board sx_board[SX_NBOARD] = {
|
static struct specialix_board sx_board[SX_NBOARD] = {
|
||||||
{ 0, SX_IOBASE1, 9, },
|
{ 0, SX_IOBASE1, 9, },
|
||||||
{ 0, SX_IOBASE2, 11, },
|
{ 0, SX_IOBASE2, 11, },
|
||||||
@ -1090,9 +1085,9 @@ static void sx_change_speed(struct specialix_board *bp, struct specialix_port *p
|
|||||||
|
|
||||||
if (baud == 38400) {
|
if (baud == 38400) {
|
||||||
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
|
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI)
|
||||||
baud ++;
|
baud = 57600;
|
||||||
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
|
if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI)
|
||||||
baud += 2;
|
baud = 115200;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!baud) {
|
if (!baud) {
|
||||||
@ -1150,11 +1145,9 @@ static void sx_change_speed(struct specialix_board *bp, struct specialix_port *p
|
|||||||
sx_out(bp, CD186x_RBPRL, tmp & 0xff);
|
sx_out(bp, CD186x_RBPRL, tmp & 0xff);
|
||||||
sx_out(bp, CD186x_TBPRL, tmp & 0xff);
|
sx_out(bp, CD186x_TBPRL, tmp & 0xff);
|
||||||
spin_unlock_irqrestore(&bp->lock, flags);
|
spin_unlock_irqrestore(&bp->lock, flags);
|
||||||
if (port->custom_divisor) {
|
if (port->custom_divisor)
|
||||||
baud = (SX_OSCFREQ + port->custom_divisor/2) / port->custom_divisor;
|
baud = (SX_OSCFREQ + port->custom_divisor/2) / port->custom_divisor;
|
||||||
baud = ( baud + 5 ) / 10;
|
baud = (baud + 5) / 10; /* Estimated CPS */
|
||||||
} else
|
|
||||||
baud = (baud_table[baud] + 5) / 10; /* Estimated CPS */
|
|
||||||
|
|
||||||
/* Two timer ticks seems enough to wakeup something like SLIP driver */
|
/* Two timer ticks seems enough to wakeup something like SLIP driver */
|
||||||
tmp = ((baud + HZ/2) / HZ) * 2 - CD186x_NFIFO;
|
tmp = ((baud + HZ/2) / HZ) * 2 - CD186x_NFIFO;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user