diff options
Diffstat (limited to 'drivers/serial/pmac_zilog.c')
| -rw-r--r-- | drivers/serial/pmac_zilog.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/serial/pmac_zilog.c b/drivers/serial/pmac_zilog.c index 0700cd10b97c..683e66f18e8c 100644 --- a/drivers/serial/pmac_zilog.c +++ b/drivers/serial/pmac_zilog.c | |||
| @@ -411,6 +411,17 @@ static void pmz_transmit_chars(struct uart_pmac_port *uap) | |||
| 411 | goto ack_tx_int; | 411 | goto ack_tx_int; |
| 412 | } | 412 | } |
| 413 | 413 | ||
| 414 | /* Under some circumstances, we see interrupts reported for | ||
| 415 | * a closed channel. The interrupt mask in R1 is clear, but | ||
| 416 | * R3 still signals the interrupts and we see them when taking | ||
| 417 | * an interrupt for the other channel (this could be a qemu | ||
| 418 | * bug but since the ESCC doc doesn't specify precsiely whether | ||
| 419 | * R3 interrup status bits are masked by R1 interrupt enable | ||
| 420 | * bits, better safe than sorry). --BenH. | ||
| 421 | */ | ||
| 422 | if (!ZS_IS_OPEN(uap)) | ||
| 423 | goto ack_tx_int; | ||
| 424 | |||
| 414 | if (uap->port.x_char) { | 425 | if (uap->port.x_char) { |
| 415 | uap->flags |= PMACZILOG_FLAG_TX_ACTIVE; | 426 | uap->flags |= PMACZILOG_FLAG_TX_ACTIVE; |
| 416 | write_zsdata(uap, uap->port.x_char); | 427 | write_zsdata(uap, uap->port.x_char); |
