]> git.karo-electronics.de Git - linux-beck.git/commitdiff
NFC: NCI: Signal deactivation in Target mode
authorJulien Lefrique <lefrique@marvell.com>
Tue, 21 Oct 2014 14:52:53 +0000 (16:52 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Fri, 28 Nov 2014 13:07:51 +0000 (14:07 +0100)
Before signaling the deactivation, send a deactivation request if in
RFST_DISCOVERY state because neard assumes polling is stopped and will
try to restart it.

Signed-off-by: Julien Lefrique <lefrique@marvell.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
net/nfc/nci/core.c

index 5e3971e88ea5ba2f33574db9d0551df031a75efb..a354d1985d50551d89a6c7e6f27aaea1f57cdf48 100644 (file)
@@ -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;
 }