diff options
Diffstat (limited to 'drivers/char/isicom.c')
-rw-r--r-- | drivers/char/isicom.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/drivers/char/isicom.c b/drivers/char/isicom.c index a59eac584d16..4d745a89504f 100644 --- a/drivers/char/isicom.c +++ b/drivers/char/isicom.c | |||
@@ -329,7 +329,7 @@ static inline void drop_rts(struct isi_port *port) | |||
329 | 329 | ||
330 | /* card->lock MUST NOT be held */ | 330 | /* card->lock MUST NOT be held */ |
331 | 331 | ||
332 | static void isicom_raise_dtr_rts(struct tty_port *port) | 332 | static void isicom_dtr_rts(struct tty_port *port, int on) |
333 | { | 333 | { |
334 | struct isi_port *ip = container_of(port, struct isi_port, port); | 334 | struct isi_port *ip = container_of(port, struct isi_port, port); |
335 | struct isi_board *card = ip->card; | 335 | struct isi_board *card = ip->card; |
@@ -339,10 +339,17 @@ static void isicom_raise_dtr_rts(struct tty_port *port) | |||
339 | if (!lock_card(card)) | 339 | if (!lock_card(card)) |
340 | return; | 340 | return; |
341 | 341 | ||
342 | outw(0x8000 | (channel << card->shift_count) | 0x02, base); | 342 | if (on) { |
343 | outw(0x0f04, base); | 343 | outw(0x8000 | (channel << card->shift_count) | 0x02, base); |
344 | InterruptTheCard(base); | 344 | outw(0x0f04, base); |
345 | ip->status |= (ISI_DTR | ISI_RTS); | 345 | InterruptTheCard(base); |
346 | ip->status |= (ISI_DTR | ISI_RTS); | ||
347 | } else { | ||
348 | outw(0x8000 | (channel << card->shift_count) | 0x02, base); | ||
349 | outw(0x0C04, base); | ||
350 | InterruptTheCard(base); | ||
351 | ip->status &= ~(ISI_DTR | ISI_RTS); | ||
352 | } | ||
346 | unlock_card(card); | 353 | unlock_card(card); |
347 | } | 354 | } |
348 | 355 | ||
@@ -1339,7 +1346,7 @@ static const struct tty_operations isicom_ops = { | |||
1339 | 1346 | ||
1340 | static const struct tty_port_operations isicom_port_ops = { | 1347 | static const struct tty_port_operations isicom_port_ops = { |
1341 | .carrier_raised = isicom_carrier_raised, | 1348 | .carrier_raised = isicom_carrier_raised, |
1342 | .raise_dtr_rts = isicom_raise_dtr_rts, | 1349 | .dtr_rts = isicom_dtr_rts, |
1343 | }; | 1350 | }; |
1344 | 1351 | ||
1345 | static int __devinit reset_card(struct pci_dev *pdev, | 1352 | static int __devinit reset_card(struct pci_dev *pdev, |