diff options
author | Adrian Bunk <bunk@stusta.de> | 2006-10-17 03:10:00 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-17 11:18:44 -0400 |
commit | a4bb2cf1c3d30e7498e5561b22246b5bcbfe2e15 (patch) | |
tree | 2f8a81498718d563b928c2e2c3d139ec799f4b02 /drivers/char/specialix.c | |
parent | c60099bfe3a5e6fa22a930627689b3769c52153f (diff) |
[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>
Diffstat (limited to 'drivers/char/specialix.c')
-rw-r--r-- | drivers/char/specialix.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/drivers/char/specialix.c b/drivers/char/specialix.c index d0b88d0e87fd..7e1bd9562c2a 100644 --- a/drivers/char/specialix.c +++ b/drivers/char/specialix.c | |||
@@ -183,11 +183,6 @@ static int sx_poll = HZ; | |||
183 | 183 | ||
184 | static struct tty_driver *specialix_driver; | 184 | static struct tty_driver *specialix_driver; |
185 | 185 | ||
186 | static unsigned long baud_table[] = { | ||
187 | 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, 4800, | ||
188 | 9600, 19200, 38400, 57600, 115200, 0, | ||
189 | }; | ||
190 | |||
191 | static struct specialix_board sx_board[SX_NBOARD] = { | 186 | static struct specialix_board sx_board[SX_NBOARD] = { |
192 | { 0, SX_IOBASE1, 9, }, | 187 | { 0, SX_IOBASE1, 9, }, |
193 | { 0, SX_IOBASE2, 11, }, | 188 | { 0, SX_IOBASE2, 11, }, |
@@ -1090,9 +1085,9 @@ static void sx_change_speed(struct specialix_board *bp, struct specialix_port *p | |||
1090 | 1085 | ||
1091 | if (baud == 38400) { | 1086 | if (baud == 38400) { |
1092 | if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) | 1087 | if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_HI) |
1093 | baud ++; | 1088 | baud = 57600; |
1094 | if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) | 1089 | if ((port->flags & ASYNC_SPD_MASK) == ASYNC_SPD_VHI) |
1095 | baud += 2; | 1090 | baud = 115200; |
1096 | } | 1091 | } |
1097 | 1092 | ||
1098 | if (!baud) { | 1093 | if (!baud) { |
@@ -1150,11 +1145,9 @@ static void sx_change_speed(struct specialix_board *bp, struct specialix_port *p | |||
1150 | sx_out(bp, CD186x_RBPRL, tmp & 0xff); | 1145 | sx_out(bp, CD186x_RBPRL, tmp & 0xff); |
1151 | sx_out(bp, CD186x_TBPRL, tmp & 0xff); | 1146 | sx_out(bp, CD186x_TBPRL, tmp & 0xff); |
1152 | spin_unlock_irqrestore(&bp->lock, flags); | 1147 | spin_unlock_irqrestore(&bp->lock, flags); |
1153 | if (port->custom_divisor) { | 1148 | if (port->custom_divisor) |
1154 | baud = (SX_OSCFREQ + port->custom_divisor/2) / port->custom_divisor; | 1149 | baud = (SX_OSCFREQ + port->custom_divisor/2) / port->custom_divisor; |
1155 | baud = ( baud + 5 ) / 10; | 1150 | baud = (baud + 5) / 10; /* Estimated CPS */ |
1156 | } else | ||
1157 | baud = (baud_table[baud] + 5) / 10; /* Estimated CPS */ | ||
1158 | 1151 | ||
1159 | /* Two timer ticks seems enough to wakeup something like SLIP driver */ | 1152 | /* Two timer ticks seems enough to wakeup something like SLIP driver */ |
1160 | tmp = ((baud + HZ/2) / HZ) * 2 - CD186x_NFIFO; | 1153 | tmp = ((baud + HZ/2) / HZ) * 2 - CD186x_NFIFO; |