diff --git a/src/sound/snd_audiopci.c b/src/sound/snd_audiopci.c index 480362e3a..37b112287 100644 --- a/src/sound/snd_audiopci.c +++ b/src/sound/snd_audiopci.c @@ -158,7 +158,7 @@ typedef struct { #define INT_STATUS_DAC2 (1<<1) #define UART_CTRL_RXINTEN (1<<7) -#define UART_CTRL_TXINTEN (1<<5) +#define UART_CTRL_TXINTEN (3<<5) #define UART_STATUS_RXINT (1<<7) #define UART_STATUS_TXINT (1<<2) @@ -206,7 +206,8 @@ es1371_update_irqs(es1371_t *dev) irq = 1; /* MIDI input is unsupported for now */ - if ((dev->int_status & INT_STATUS_UART) && (dev->uart_status & UART_STATUS_TXINT)) + if ((dev->int_status & INT_STATUS_UART) && (dev->uart_status & UART_STATUS_TXINT) && + ((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20)) irq = 1; if (irq) @@ -786,6 +787,9 @@ es1371_outb(uint16_t port, uint8_t val, void *p) Addressable as byte only */ case 0x09: dev->uart_ctrl = val & 0xe3; + if ((dev->uart_ctrl & UART_CTRL_TXINTEN) != 0x20) + dev->int_status &= ~INT_STATUS_UART; + es1371_update_irqs(dev); audiopci_log("ES1371 UART Cntrl = %02x\n", dev->uart_ctrl); break;