summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark A. Greer <mgreer@animalcreek.com>2014-03-25 15:54:32 (GMT)
committerSamuel Ortiz <sameo@linux.intel.com>2014-04-21 22:37:27 (GMT)
commit4dd836e46c3ddcb2020646c867be589658440be0 (patch)
treedcf43b03c625a20c53610effcd727efe4b0d91eb
parentb887eb09d3cbda145d9fff4b9a56c384edd07ed7 (diff)
downloadlinux-4dd836e46c3ddcb2020646c867be589658440be0.tar.xz
NFC: trf7970a: Reset FIFO when 'End of TX' Interrupt Occurs
Sometimes after sending a frame there is tx data leftover in the FIFO which the driver will think is part of the receive frame. That data can be cleared when an 'End of TX' interrupt is received by issuing the 'FIFO Reset' command. Signed-off-by: Mark A. Greer <mgreer@animalcreek.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
-rw-r--r--drivers/nfc/trf7970a.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/nfc/trf7970a.c b/drivers/nfc/trf7970a.c
index df63449..a2e0a21 100644
--- a/drivers/nfc/trf7970a.c
+++ b/drivers/nfc/trf7970a.c
@@ -681,7 +681,9 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
trf->ignore_timeout =
!cancel_delayed_work(&trf->timeout_work);
trf7970a_drain_fifo(trf, status);
- } else if (!(status & TRF7970A_IRQ_STATUS_TX)) {
+ } else if (status == TRF7970A_IRQ_STATUS_TX) {
+ trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
+ } else {
trf7970a_send_err_upstream(trf, -EIO);
}
break;