NFC: trf7970a: Only fill FIFO if there is space
authorMark A. Greer <mgreer@animalcreek.com>
Tue, 2 Sep 2014 22:12:29 +0000 (15:12 -0700)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 7 Sep 2014 21:13:43 +0000 (23:13 +0200)
Handle the case where trf7970a_fill_fifo() is
called but there is no room in the FIFO for
more TX data.  When this happens, wait for
another interrupt indicating that there is
now space (and set a timer in case that
interrupt never occurs).

Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/nfc/trf7970a.c

index 8a13daf977477278193a8ae95d0361a6f5f8e92a..e9e961fe67561cd6aa56d24d450f5a658edc1d97 100644 (file)
@@ -580,6 +580,12 @@ static void trf7970a_fill_fifo(struct trf7970a *trf)
 
        /* Calculate how much more data can be written to the fifo */
        len = TRF7970A_FIFO_SIZE - fifo_bytes;
+       if (!len) {
+               schedule_delayed_work(&trf->timeout_work,
+                       msecs_to_jiffies(TRF7970A_WAIT_FOR_FIFO_DRAIN_TIMEOUT));
+               return;
+       }
+
        len = min(skb->len, len);
 
        prefix = TRF7970A_CMD_BIT_CONTINUOUS | TRF7970A_FIFO_IO_REGISTER;