NFC: HCI check presence must not fail when driver doesn't support it
When the driver does not support checking the tag is still present, it must return -EOPNOTSUPP. The NFC Core will then stop asking and not report a tag lost event to user space. Signed-off-by: Eric Lapuyade <eric.lapuyade@intel.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
da052850b9
commit
632c016ab8
|
@ -986,7 +986,7 @@ static int pn544_hci_check_presence(struct nfc_hci_dev *hdev,
|
||||||
} else if (target->supported_protocols & NFC_PROTO_MIFARE_MASK) {
|
} else if (target->supported_protocols & NFC_PROTO_MIFARE_MASK) {
|
||||||
if (target->nfcid1_len != 4 && target->nfcid1_len != 7 &&
|
if (target->nfcid1_len != 4 && target->nfcid1_len != 7 &&
|
||||||
target->nfcid1_len != 10)
|
target->nfcid1_len != 10)
|
||||||
return -EPROTO;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
return nfc_hci_send_cmd(hdev, NFC_HCI_RF_READER_A_GATE,
|
return nfc_hci_send_cmd(hdev, NFC_HCI_RF_READER_A_GATE,
|
||||||
PN544_RF_READER_CMD_ACTIVATE_NEXT,
|
PN544_RF_READER_CMD_ACTIVATE_NEXT,
|
||||||
|
|
|
@ -697,6 +697,8 @@ static void nfc_check_pres_work(struct work_struct *work)
|
||||||
|
|
||||||
if (dev->active_target && timer_pending(&dev->check_pres_timer) == 0) {
|
if (dev->active_target && timer_pending(&dev->check_pres_timer) == 0) {
|
||||||
rc = dev->ops->check_presence(dev, dev->active_target);
|
rc = dev->ops->check_presence(dev, dev->active_target);
|
||||||
|
if (rc == -EOPNOTSUPP)
|
||||||
|
goto exit;
|
||||||
if (!rc) {
|
if (!rc) {
|
||||||
mod_timer(&dev->check_pres_timer, jiffies +
|
mod_timer(&dev->check_pres_timer, jiffies +
|
||||||
msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
|
msecs_to_jiffies(NFC_CHECK_PRES_FREQ_MS));
|
||||||
|
@ -708,6 +710,7 @@ static void nfc_check_pres_work(struct work_struct *work)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
exit:
|
||||||
device_unlock(&dev->dev);
|
device_unlock(&dev->dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue