static void pl010_modem_status(struct uart_port *port) { struct uart_amba_port *uap = (struct uart_amba_port *)port; unsigned int status, delta; UART_PUT_ICR(&uap->port, 0); status = UART_GET_FR(&uap->port) & UART01x_FR_MODEM_ANY; delta = status ^ uap->old_status; uap->old_status = status; if (!delta) return; if (delta & UART01x_FR_DCD) uart_handle_dcd_change(&uap->port, status & UART01x_FR_DCD); if (delta & UART01x_FR_DSR) uap->port.icount.dsr++; if (delta & UART01x_FR_CTS) uart_handle_cts_change(&uap->port, status & UART01x_FR_CTS); wake_up_interruptible(&uap->port.info->delta_msr_wait); }
static void ambauart_modem_status(struct uart_info *info) { struct uart_port *port = info->port; unsigned int status, delta; UART_PUT_ICR(port, 0); status = UART_GET_FR(port) & AMBA_UARTFR_MODEM_ANY; delta = status ^ info->drv_old_status; info->drv_old_status = status; if (!delta) return; if (delta & AMBA_UARTFR_DCD) uart_handle_dcd_change(info, status & AMBA_UARTFR_DCD); if (delta & AMBA_UARTFR_DSR) port->icount.dsr++; if (delta & AMBA_UARTFR_CTS) uart_handle_cts_change(info, status & AMBA_UARTFR_CTS); wake_up_interruptible(&info->delta_msr_wait); }