diff options
Diffstat (limited to 'drivers/char/cyclades.c')
-rw-r--r-- | drivers/char/cyclades.c | 45 |
1 files changed, 14 insertions, 31 deletions
diff --git a/drivers/char/cyclades.c b/drivers/char/cyclades.c index cf2874a89c8c..f518e0b5b47d 100644 --- a/drivers/char/cyclades.c +++ b/drivers/char/cyclades.c | |||
@@ -2057,6 +2057,8 @@ static void cy_set_line_char(struct cyclades_port *info, struct tty_struct *tty) | |||
2057 | channel = info->line - card->first_line; | 2057 | channel = info->line - card->first_line; |
2058 | 2058 | ||
2059 | if (!cy_is_Z(card)) { | 2059 | if (!cy_is_Z(card)) { |
2060 | u32 cflags; | ||
2061 | |||
2060 | /* baud rate */ | 2062 | /* baud rate */ |
2061 | baud = tty_get_baud_rate(tty); | 2063 | baud = tty_get_baud_rate(tty); |
2062 | if (baud == 38400 && (info->port.flags & ASYNC_SPD_MASK) == | 2064 | if (baud == 38400 && (info->port.flags & ASYNC_SPD_MASK) == |
@@ -2198,37 +2200,18 @@ static void cy_set_line_char(struct cyclades_port *info, struct tty_struct *tty) | |||
2198 | (info->default_timeout ? info->default_timeout : 0x02)); | 2200 | (info->default_timeout ? info->default_timeout : 0x02)); |
2199 | /* 10ms rx timeout */ | 2201 | /* 10ms rx timeout */ |
2200 | 2202 | ||
2201 | if (C_CLOCAL(tty)) { | 2203 | cflags = CyCTS; |
2202 | /* without modem intr */ | 2204 | if (!C_CLOCAL(tty)) |
2203 | cyy_writeb(info, CySRER, | 2205 | cflags |= CyDSR | CyRI | CyDCD; |
2204 | cyy_readb(info, CySRER) | CyMdmCh); | 2206 | /* without modem intr */ |
2205 | /* act on 1->0 modem transitions */ | 2207 | cyy_writeb(info, CySRER, cyy_readb(info, CySRER) | CyMdmCh); |
2206 | if ((cflag & CRTSCTS) && info->rflow) { | 2208 | /* act on 1->0 modem transitions */ |
2207 | cyy_writeb(info, CyMCOR1, | 2209 | if ((cflag & CRTSCTS) && info->rflow) |
2208 | (CyCTS | rflow_thr[i])); | 2210 | cyy_writeb(info, CyMCOR1, cflags | rflow_thr[i]); |
2209 | } else { | 2211 | else |
2210 | cyy_writeb(info, CyMCOR1, | 2212 | cyy_writeb(info, CyMCOR1, cflags); |
2211 | CyCTS); | 2213 | /* act on 0->1 modem transitions */ |
2212 | } | 2214 | cyy_writeb(info, CyMCOR2, cflags); |
2213 | /* act on 0->1 modem transitions */ | ||
2214 | cyy_writeb(info, CyMCOR2, CyCTS); | ||
2215 | } else { | ||
2216 | /* without modem intr */ | ||
2217 | cyy_writeb(info, CySRER, | ||
2218 | cyy_readb(info, CySRER) | CyMdmCh); | ||
2219 | /* act on 1->0 modem transitions */ | ||
2220 | if ((cflag & CRTSCTS) && info->rflow) { | ||
2221 | cyy_writeb(info, CyMCOR1, | ||
2222 | (CyDSR | CyCTS | CyRI | CyDCD | | ||
2223 | rflow_thr[i])); | ||
2224 | } else { | ||
2225 | cyy_writeb(info, CyMCOR1, | ||
2226 | CyDSR | CyCTS | CyRI | CyDCD); | ||
2227 | } | ||
2228 | /* act on 0->1 modem transitions */ | ||
2229 | cyy_writeb(info, CyMCOR2, | ||
2230 | CyDSR | CyCTS | CyRI | CyDCD); | ||
2231 | } | ||
2232 | 2215 | ||
2233 | if (i == 0) /* baud rate is zero, turn off line */ | 2216 | if (i == 0) /* baud rate is zero, turn off line */ |
2234 | cyy_change_rts_dtr(info, 0, TIOCM_DTR); | 2217 | cyy_change_rts_dtr(info, 0, TIOCM_DTR); |