From c6d5b6799f34a4c5ab3d6410f2d954c49b0a21c6 Mon Sep 17 00:00:00 2001 From: Joakim Zhang Date: Thu, 23 May 2019 09:49:15 +0800 Subject: [PATCH] MLK-22214 mxc: emvsim: clean up the code in ATR stage Clean up the code in ATR stage. Signed-off-by: Joakim Zhang Acked-by: Fugang Duan --- drivers/mxc/sim/imx_emvsim.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/mxc/sim/imx_emvsim.c b/drivers/mxc/sim/imx_emvsim.c index cb742a0656ec..600a04c898f6 100644 --- a/drivers/mxc/sim/imx_emvsim.c +++ b/drivers/mxc/sim/imx_emvsim.c @@ -403,6 +403,10 @@ static void emvsim_receive_atr_set(struct emvsim_t *emvsim) { u32 reg_data; + /* GPCNT0 with Card clock is for ATR maximum delay + * GPCNT1 with ETU clock is for ART maximum duration + */ + emvsim_mask_timer1_int(emvsim); __raw_writel(0x0, emvsim->ioaddr + EMV_SIM_GPCNT1_VAL); emvsim_set_gpctimer1_clk(emvsim, SIM_CNTL_GPCNT_ETU_CLK); emvsim_set_rx(emvsim, 1); @@ -601,10 +605,6 @@ static irqreturn_t emvsim_irq_handler(int irq, void *dev_id) reg_data &= ~(GPCNT1_IM | CWT_ERR_IM | RX_DATA_IM); __raw_writel(reg_data, emvsim->ioaddr + EMV_SIM_INT_MASK); - reg_data = __raw_readl(emvsim->ioaddr + EMV_SIM_TX_STATUS); - reg_data |= GPCNT1_TO; - __raw_writel(reg_data, emvsim->ioaddr + EMV_SIM_TX_STATUS); - reg_data = SIM_RCV_THRESHOLD_RTH(0) | SIM_RCV_THRESHOLD_RDT(rdt); __raw_writel(reg_data, emvsim->ioaddr + EMV_SIM_RX_THD); @@ -1139,12 +1139,15 @@ static long emvsim_ioctl(struct file *file, timeout = wait_for_completion_interruptible_timeout( &emvsim->xfer_done, emvsim->timeout); + emvsim_set_rx(emvsim, 0); + emvsim_set_tx(emvsim, 0); + reg_data = __raw_readl(emvsim->ioaddr + EMV_SIM_CTRL); reg_data &= ~CWT_EN; __raw_writel(reg_data, emvsim->ioaddr + EMV_SIM_CTRL); reg_data = __raw_readl(emvsim->ioaddr + EMV_SIM_INT_MASK); - reg_data |= (GPCNT0_IM | CWT_ERR_IM); + reg_data |= (GPCNT0_IM | GPCNT1_IM | CWT_ERR_IM | RX_DATA_IM); __raw_writel(reg_data, emvsim->ioaddr + EMV_SIM_INT_MASK); if (timeout == 0) { -- 2.17.1