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>
This commit is contained in:
Родитель
8112a5c91d
Коммит
e1da0efa2e
|
@ -181,6 +181,7 @@ int nfc_set_remote_general_bytes(struct nfc_dev *dev,
|
|||
|
||||
int nfc_targets_found(struct nfc_dev *dev,
|
||||
struct nfc_target *targets, int ntargets);
|
||||
int nfc_target_lost(struct nfc_dev *dev, u32 target_idx);
|
||||
|
||||
int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx,
|
||||
u8 comm_mode, u8 rf_mode);
|
||||
|
|
|
@ -455,6 +455,45 @@ int nfc_targets_found(struct nfc_dev *dev,
|
|||
}
|
||||
EXPORT_SYMBOL(nfc_targets_found);
|
||||
|
||||
int nfc_target_lost(struct nfc_dev *dev, u32 target_idx)
|
||||
{
|
||||
struct nfc_target *tg;
|
||||
int i;
|
||||
|
||||
pr_debug("dev_name %s n_target %d\n", dev_name(&dev->dev), target_idx);
|
||||
|
||||
spin_lock_bh(&dev->targets_lock);
|
||||
|
||||
for (i = 0; i < dev->n_targets; i++) {
|
||||
tg = &dev->targets[i];
|
||||
if (tg->idx == target_idx)
|
||||
break;
|
||||
}
|
||||
|
||||
if (i == dev->n_targets) {
|
||||
spin_unlock_bh(&dev->targets_lock);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dev->targets_generation++;
|
||||
dev->n_targets--;
|
||||
|
||||
if (dev->n_targets) {
|
||||
memcpy(&dev->targets[i], &dev->targets[i + 1],
|
||||
(dev->n_targets - i) * sizeof(struct nfc_target));
|
||||
} else {
|
||||
kfree(dev->targets);
|
||||
dev->targets = NULL;
|
||||
}
|
||||
|
||||
spin_unlock_bh(&dev->targets_lock);
|
||||
|
||||
nfc_genl_target_lost(dev, target_idx);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(nfc_target_lost);
|
||||
|
||||
static void nfc_release(struct device *d)
|
||||
{
|
||||
struct nfc_dev *dev = to_nfc_dev(d);
|
||||
|
|
Загрузка…
Ссылка в новой задаче