mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 08:43:31 +00:00
NFC: trf7970a: Clear possible spurious interrupt before transmitting
The trf7970a occasionally generates spurious interrupts which can confuse the driver. To help alleviate this, clear any interrupts by reading the 'IRQ Status Register' before starting a new transaction. Signed-off-by: Mark A. Greer <mgreer@animalcreek.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
38b4eb1f7f
commit
aff0564aa7
1 changed files with 6 additions and 0 deletions
|
@ -1120,6 +1120,7 @@ static int trf7970a_in_send_cmd(struct nfc_digital_dev *ddev,
|
||||||
char *prefix;
|
char *prefix;
|
||||||
unsigned int len;
|
unsigned int len;
|
||||||
int ret;
|
int ret;
|
||||||
|
u8 status;
|
||||||
|
|
||||||
dev_dbg(trf->dev, "New request - state: %d, timeout: %d ms, len: %d\n",
|
dev_dbg(trf->dev, "New request - state: %d, timeout: %d ms, len: %d\n",
|
||||||
trf->state, timeout, skb->len);
|
trf->state, timeout, skb->len);
|
||||||
|
@ -1195,6 +1196,11 @@ static int trf7970a_in_send_cmd(struct nfc_digital_dev *ddev,
|
||||||
|
|
||||||
len = min_t(int, skb->len, TRF7970A_FIFO_SIZE);
|
len = min_t(int, skb->len, TRF7970A_FIFO_SIZE);
|
||||||
|
|
||||||
|
/* Clear possible spurious interrupt */
|
||||||
|
ret = trf7970a_read_irqstatus(trf, &status);
|
||||||
|
if (ret)
|
||||||
|
goto out_err;
|
||||||
|
|
||||||
ret = trf7970a_transmit(trf, skb, len);
|
ret = trf7970a_transmit(trf, skb, len);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
kfree_skb(trf->rx_skb);
|
kfree_skb(trf->rx_skb);
|
||||||
|
|
Loading…
Add table
Reference in a new issue