|
@@ -681,9 +681,24 @@ static int nci_dep_link_up(struct nfc_dev *nfc_dev, struct nfc_target *target,
|
|
|
|
|
|
static int nci_dep_link_down(struct nfc_dev *nfc_dev)
|
|
|
{
|
|
|
+ struct nci_dev *ndev = nfc_get_drvdata(nfc_dev);
|
|
|
+ int rc;
|
|
|
+
|
|
|
pr_debug("entry\n");
|
|
|
|
|
|
- nci_deactivate_target(nfc_dev, NULL);
|
|
|
+ if (nfc_dev->rf_mode == NFC_RF_INITIATOR) {
|
|
|
+ nci_deactivate_target(nfc_dev, NULL);
|
|
|
+ } else {
|
|
|
+ if (atomic_read(&ndev->state) == NCI_LISTEN_ACTIVE ||
|
|
|
+ atomic_read(&ndev->state) == NCI_DISCOVERY) {
|
|
|
+ nci_request(ndev, nci_rf_deactivate_req, 0,
|
|
|
+ msecs_to_jiffies(NCI_RF_DEACTIVATE_TIMEOUT));
|
|
|
+ }
|
|
|
+
|
|
|
+ rc = nfc_tm_deactivated(nfc_dev);
|
|
|
+ if (rc)
|
|
|
+ pr_err("error when signaling tm deactivation\n");
|
|
|
+ }
|
|
|
|
|
|
return 0;
|
|
|
}
|