aboutsummaryrefslogtreecommitdiffstats
path: root/net/nfc/core.c
diff options
context:
space:
mode:
authorEric Lapuyade <eric.lapuyade@linux.intel.com>2012-04-10 13:43:05 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-04-12 15:10:34 -0400
commite1da0efa2ee71df957b280bcfa41f82ce6986a1d (patch)
tree6b158595ad501b56545a1461104ae8cbbf1b9c76 /net/nfc/core.c
parent8112a5c91d781a22d2b631f3295386b0b70de7c8 (diff)
NFC: Export target lost function
NFC drivers will call this routine when they detect that a tag leaves the RF field. This will eventually lead to the corresponding netlink event to be sent. Signed-off-by: Eric Lapuyade <eric.lapuyade@intel.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/nfc/core.c')
-rw-r--r--net/nfc/core.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/net/nfc/core.c b/net/nfc/core.c
index 295d129864d2..deb4721ce8a1 100644
--- a/net/nfc/core.c
+++ b/net/nfc/core.c
@@ -455,6 +455,45 @@ int nfc_targets_found(struct nfc_dev *dev,
455} 455}
456EXPORT_SYMBOL(nfc_targets_found); 456EXPORT_SYMBOL(nfc_targets_found);
457 457
458int nfc_target_lost(struct nfc_dev *dev, u32 target_idx)
459{
460 struct nfc_target *tg;
461 int i;
462
463 pr_debug("dev_name %s n_target %d\n", dev_name(&dev->dev), target_idx);
464
465 spin_lock_bh(&dev->targets_lock);
466
467 for (i = 0; i < dev->n_targets; i++) {
468 tg = &dev->targets[i];
469 if (tg->idx == target_idx)
470 break;
471 }
472
473 if (i == dev->n_targets) {
474 spin_unlock_bh(&dev->targets_lock);
475 return -EINVAL;
476 }
477
478 dev->targets_generation++;
479 dev->n_targets--;
480
481 if (dev->n_targets) {
482 memcpy(&dev->targets[i], &dev->targets[i + 1],
483 (dev->n_targets - i) * sizeof(struct nfc_target));
484 } else {
485 kfree(dev->targets);
486 dev->targets = NULL;
487 }
488
489 spin_unlock_bh(&dev->targets_lock);
490
491 nfc_genl_target_lost(dev, target_idx);
492
493 return 0;
494}
495EXPORT_SYMBOL(nfc_target_lost);
496
458static void nfc_release(struct device *d) 497static void nfc_release(struct device *d)
459{ 498{
460 struct nfc_dev *dev = to_nfc_dev(d); 499 struct nfc_dev *dev = to_nfc_dev(d);