mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
pch_uart: Fix rx error interrupt setting issue
commit 9539dfb7ac
upstream.
Rx Error interrupt(E.G. parity error) is not enabled.
So, when parity error occurs, error interrupt is not occurred.
As a result, the received data is not dropped.
This patch adds enable/disable rx error interrupt code.
Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
Acked-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
17361b3edc
commit
439ec7b975
1 changed files with 12 additions and 6 deletions
|
@ -754,7 +754,8 @@ static void pch_dma_rx_complete(void *arg)
|
|||
tty_flip_buffer_push(tty);
|
||||
tty_kref_put(tty);
|
||||
async_tx_ack(priv->desc_rx);
|
||||
pch_uart_hal_enable_interrupt(priv, PCH_UART_HAL_RX_INT);
|
||||
pch_uart_hal_enable_interrupt(priv, PCH_UART_HAL_RX_INT |
|
||||
PCH_UART_HAL_RX_ERR_INT);
|
||||
}
|
||||
|
||||
static void pch_dma_tx_complete(void *arg)
|
||||
|
@ -809,7 +810,8 @@ static int handle_rx_to(struct eg20t_port *priv)
|
|||
int rx_size;
|
||||
int ret;
|
||||
if (!priv->start_rx) {
|
||||
pch_uart_hal_disable_interrupt(priv, PCH_UART_HAL_RX_INT);
|
||||
pch_uart_hal_disable_interrupt(priv, PCH_UART_HAL_RX_INT |
|
||||
PCH_UART_HAL_RX_ERR_INT);
|
||||
return 0;
|
||||
}
|
||||
buf = &priv->rxbuf;
|
||||
|
@ -1071,11 +1073,13 @@ static irqreturn_t pch_uart_interrupt(int irq, void *dev_id)
|
|||
case PCH_UART_IID_RDR: /* Received Data Ready */
|
||||
if (priv->use_dma) {
|
||||
pch_uart_hal_disable_interrupt(priv,
|
||||
PCH_UART_HAL_RX_INT);
|
||||
PCH_UART_HAL_RX_INT |
|
||||
PCH_UART_HAL_RX_ERR_INT);
|
||||
ret = dma_handle_rx(priv);
|
||||
if (!ret)
|
||||
pch_uart_hal_enable_interrupt(priv,
|
||||
PCH_UART_HAL_RX_INT);
|
||||
PCH_UART_HAL_RX_INT |
|
||||
PCH_UART_HAL_RX_ERR_INT);
|
||||
} else {
|
||||
ret = handle_rx(priv);
|
||||
}
|
||||
|
@ -1199,7 +1203,8 @@ static void pch_uart_stop_rx(struct uart_port *port)
|
|||
struct eg20t_port *priv;
|
||||
priv = container_of(port, struct eg20t_port, port);
|
||||
priv->start_rx = 0;
|
||||
pch_uart_hal_disable_interrupt(priv, PCH_UART_HAL_RX_INT);
|
||||
pch_uart_hal_disable_interrupt(priv, PCH_UART_HAL_RX_INT |
|
||||
PCH_UART_HAL_RX_ERR_INT);
|
||||
priv->int_dis_flag = 1;
|
||||
}
|
||||
|
||||
|
@ -1293,7 +1298,8 @@ static int pch_uart_startup(struct uart_port *port)
|
|||
pch_request_dma(port);
|
||||
|
||||
priv->start_rx = 1;
|
||||
pch_uart_hal_enable_interrupt(priv, PCH_UART_HAL_RX_INT);
|
||||
pch_uart_hal_enable_interrupt(priv, PCH_UART_HAL_RX_INT |
|
||||
PCH_UART_HAL_RX_ERR_INT);
|
||||
uart_update_timeout(port, CS8, default_baud);
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue