diff options
| author | V. Ananda Krishnan <mansarov@us.ibm.com> | 2006-02-01 06:05:20 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-01 11:53:14 -0500 |
| commit | bb3c190e8d43fcbf1210effb05dc660cb3ccf817 (patch) | |
| tree | 2ef533e648752f438492cd65623fe86b1d621476 /drivers/serial/jsm | |
| parent | bfaa1deeb982c985d8e0435e835baeaae63b57fd (diff) | |
[PATCH] jsm: fix for high baud rates problem
Scott Kilau <Scott_Kilau@digi.com>
Digi serial port console doesn't work when baud rates are set higher than
38400. So the lookup table and code in jsm_neo.c has been modified and
tested. Please let me have the feed-back.
Signed-off-by: V.Ananda Krishnan <mansarov@us.ibm.com>
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/serial/jsm')
| -rw-r--r-- | drivers/serial/jsm/jsm_neo.c | 85 |
1 files changed, 38 insertions, 47 deletions
diff --git a/drivers/serial/jsm/jsm_neo.c b/drivers/serial/jsm/jsm_neo.c index 6f22b42d9337..87e4e2cf8ce7 100644 --- a/drivers/serial/jsm/jsm_neo.c +++ b/drivers/serial/jsm/jsm_neo.c | |||
| @@ -965,56 +965,47 @@ static void neo_param(struct jsm_channel *ch) | |||
| 965 | baud = ch->ch_custom_speed; | 965 | baud = ch->ch_custom_speed; |
| 966 | if (ch->ch_flags & CH_BAUD0) | 966 | if (ch->ch_flags & CH_BAUD0) |
| 967 | ch->ch_flags &= ~(CH_BAUD0); | 967 | ch->ch_flags &= ~(CH_BAUD0); |
| 968 | } else { | 968 | } else { |
| 969 | int iindex = 0; | 969 | int i; |
| 970 | int jindex = 0; | 970 | unsigned int cflag; |
| 971 | 971 | static struct { | |
| 972 | const u64 bauds[4][16] = { | 972 | unsigned int rate; |
| 973 | { | 973 | unsigned int cflag; |
| 974 | 0, 50, 75, 110, | 974 | } baud_rates[] = { |
| 975 | 134, 150, 200, 300, | 975 | { 921600, B921600 }, |
| 976 | 600, 1200, 1800, 2400, | 976 | { 460800, B460800 }, |
| 977 | 4800, 9600, 19200, 38400 }, | 977 | { 230400, B230400 }, |
| 978 | { | 978 | { 115200, B115200 }, |
| 979 | 0, 57600, 115200, 230400, | 979 | { 57600, B57600 }, |
| 980 | 460800, 150, 200, 921600, | 980 | { 38400, B38400 }, |
| 981 | 600, 1200, 1800, 2400, | 981 | { 19200, B19200 }, |
| 982 | 4800, 9600, 19200, 38400 }, | 982 | { 9600, B9600 }, |
| 983 | { | 983 | { 4800, B4800 }, |
| 984 | 0, 57600, 76800, 115200, | 984 | { 2400, B2400 }, |
| 985 | 131657, 153600, 230400, 460800, | 985 | { 1200, B1200 }, |
| 986 | 921600, 1200, 1800, 2400, | 986 | { 600, B600 }, |
| 987 | 4800, 9600, 19200, 38400 }, | 987 | { 300, B300 }, |
| 988 | { | 988 | { 200, B200 }, |
| 989 | 0, 57600, 115200, 230400, | 989 | { 150, B150 }, |
| 990 | 460800, 150, 200, 921600, | 990 | { 134, B134 }, |
| 991 | 600, 1200, 1800, 2400, | 991 | { 110, B110 }, |
| 992 | 4800, 9600, 19200, 38400 } | 992 | { 75, B75 }, |
| 993 | }; | 993 | { 50, B50 }, |
| 994 | 994 | }; | |
| 995 | baud = C_BAUD(ch->uart_port.info->tty) & 0xff; | 995 | |
| 996 | 996 | cflag = C_BAUD(ch->uart_port.info->tty); | |
| 997 | if (ch->ch_c_cflag & CBAUDEX) | 997 | baud = 9600; |
| 998 | iindex = 1; | 998 | for (i = 0; i < ARRAY_SIZE(baud_rates); i++) { |
| 999 | 999 | if (baud_rates[i].cflag == cflag) { | |
| 1000 | jindex = baud; | 1000 | baud = baud_rates[i].rate; |
| 1001 | 1001 | break; | |
| 1002 | if ((iindex >= 0) && (iindex < 4) && (jindex >= 0) && (jindex < 16)) | ||
| 1003 | baud = bauds[iindex][jindex]; | ||
| 1004 | else { | ||
| 1005 | jsm_printk(IOCTL, DEBUG, &ch->ch_bd->pci_dev, | ||
| 1006 | "baud indices were out of range (%d)(%d)", | ||
| 1007 | iindex, jindex); | ||
| 1008 | baud = 0; | ||
| 1009 | } | 1002 | } |
| 1010 | |||
| 1011 | if (baud == 0) | ||
| 1012 | baud = 9600; | ||
| 1013 | |||
| 1014 | if (ch->ch_flags & CH_BAUD0) | ||
| 1015 | ch->ch_flags &= ~(CH_BAUD0); | ||
| 1016 | } | 1003 | } |
| 1017 | 1004 | ||
| 1005 | if (ch->ch_flags & CH_BAUD0) | ||
| 1006 | ch->ch_flags &= ~(CH_BAUD0); | ||
| 1007 | } | ||
| 1008 | |||
| 1018 | if (ch->ch_c_cflag & PARENB) | 1009 | if (ch->ch_c_cflag & PARENB) |
| 1019 | lcr |= UART_LCR_PARITY; | 1010 | lcr |= UART_LCR_PARITY; |
| 1020 | 1011 | ||
