summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoakim Zhang <qiangqing.zhang@nxp.com>2019-05-23 12:08:17 +0800
committerJoakim Zhang <qiangqing.zhang@nxp.com>2019-07-12 09:36:51 +0800
commit7b51cb7aebaf9ec565905858caa16e7a66a692d9 (patch)
tree5d51022f2530afdc6d7ef9fd1ed915341ecdbd0e
parent905d3a0f938c4ba381fd6683d7770cc2c6295cad (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.c13
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);