diff options
author | Joakim Zhang <qiangqing.zhang@nxp.com> | 2019-05-23 12:08:17 +0800 |
---|---|---|
committer | Joakim Zhang <qiangqing.zhang@nxp.com> | 2019-07-12 09:36:51 +0800 |
commit | 7b51cb7aebaf9ec565905858caa16e7a66a692d9 (patch) | |
tree | 5d51022f2530afdc6d7ef9fd1ed915341ecdbd0e | |
parent | 905d3a0f938c4ba381fd6683d7770cc2c6295cad (diff) |
MLK-22215 mxc: emvsim: correct irq mask and clear irq status before receiving
Just clean up the code and normalize the code.
Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
Acked-by: Fugang Duan <fugang.duan@nxp.com>
-rw-r--r-- | drivers/mxc/sim/imx_emvsim.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/drivers/mxc/sim/imx_emvsim.c b/drivers/mxc/sim/imx_emvsim.c index 2a0fb43d9d99..b021c136443f 100644 --- a/drivers/mxc/sim/imx_emvsim.c +++ b/drivers/mxc/sim/imx_emvsim.c @@ -507,7 +507,7 @@ static void emvsim_tx_irq_enable(struct emvsim_t *emvsim) __raw_writel(reg_val, emvsim->ioaddr + EMV_SIM_RX_STATUS); reg_val = __raw_readl(emvsim->ioaddr + EMV_SIM_INT_MASK); - reg_val |= CWT_ERR_IM | BWT_ERR_IM | RX_DATA_IM | RX_DATA_IM; + reg_val |= CWT_ERR_IM | BWT_ERR_IM | RX_DATA_IM | RNACK_IM; if (emvsim->xmt_remaining != 0) { reg_val &= ~TDT_IM; @@ -539,11 +539,14 @@ static void emvsim_rx_irq_enable(struct emvsim_t *emvsim) { u32 reg_data; - /* Ensure the CWT timer is enabled */ - emvsim_set_cwt(emvsim, 1); + /*Clear the TX&RX status, W1C */ + reg_data = __raw_readl(emvsim->ioaddr + EMV_SIM_TX_STATUS); + __raw_writel(reg_data, emvsim->ioaddr + EMV_SIM_TX_STATUS); + reg_data = __raw_readl(emvsim->ioaddr + EMV_SIM_RX_STATUS); + __raw_writel(reg_data, emvsim->ioaddr + EMV_SIM_RX_STATUS); reg_data = __raw_readl(emvsim->ioaddr + EMV_SIM_INT_MASK); - reg_data |= (TC_IM | TDT_IM | TNACK_IM); + reg_data |= (TC_IM | TDT_IM | TNACK_IM | ETC_IM); reg_data &= ~(RX_DATA_IM | CWT_ERR_IM | BWT_ERR_IM); if (emvsim->protocol_type == SIM_PROTOCOL_T0 || @@ -1307,8 +1310,6 @@ static long emvsim_ioctl(struct file *file, if (emvsim->state != SIM_STATE_RECEIVING) emvsim_start_rcv(emvsim); - spin_lock_irqsave(&emvsim->lock, flags); - spin_unlock_irqrestore(&emvsim->lock, flags); emvsim->timeout = RX_TIMEOUT * HZ; timeout = wait_for_completion_interruptible_timeout( &emvsim->xfer_done, emvsim->timeout); |