summaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorSamuel Ortiz <sameo@linux.intel.com>2012-05-31 00:02:26 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2012-06-04 21:34:30 +0200
commitf212ad5e993e7efb996fc8ce94a5de8f0bd06d41 (patch)
tree719e09118ffc8e80a7c916d16c0529510bdc5ebb /net
parentfc40a8c1a06ab7db45da790693dd9802612a055c (diff)
downloadlinux-f212ad5e993e7efb996fc8ce94a5de8f0bd06d41.tar.gz
linux-f212ad5e993e7efb996fc8ce94a5de8f0bd06d41.tar.bz2
linux-f212ad5e993e7efb996fc8ce94a5de8f0bd06d41.zip
NFC: Set the NFC device RF mode appropriately
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'net')
-rw-r--r--net/nfc/core.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/net/nfc/core.c b/net/nfc/core.c
index 17f147430b7c..722a0c76c669 100644
--- a/net/nfc/core.c
+++ b/net/nfc/core.c
@@ -144,8 +144,10 @@ int nfc_start_poll(struct nfc_dev *dev, u32 im_protocols, u32 tm_protocols)
}
rc = dev->ops->start_poll(dev, im_protocols, tm_protocols);
- if (!rc)
+ if (!rc) {
dev->polling = true;
+ dev->rf_mode = NFC_RF_NONE;
+ }
error:
device_unlock(&dev->dev);
@@ -235,8 +237,10 @@ int nfc_dep_link_up(struct nfc_dev *dev, int target_index, u8 comm_mode)
}
rc = dev->ops->dep_link_up(dev, target, comm_mode, gb, gb_len);
- if (!rc)
+ if (!rc) {
dev->active_target = target;
+ dev->rf_mode = NFC_RF_INITIATOR;
+ }
error:
device_unlock(&dev->dev);
@@ -264,7 +268,7 @@ int nfc_dep_link_down(struct nfc_dev *dev)
goto error;
}
- if (dev->dep_rf_mode == NFC_RF_TARGET) {
+ if (dev->rf_mode == NFC_RF_TARGET) {
rc = -EOPNOTSUPP;
goto error;
}
@@ -286,7 +290,6 @@ int nfc_dep_link_is_up(struct nfc_dev *dev, u32 target_idx,
u8 comm_mode, u8 rf_mode)
{
dev->dep_link_up = true;
- dev->dep_rf_mode = rf_mode;
nfc_llcp_mac_is_up(dev, target_idx, comm_mode, rf_mode);
@@ -330,6 +333,7 @@ int nfc_activate_target(struct nfc_dev *dev, u32 target_idx, u32 protocol)
rc = dev->ops->activate_target(dev, target, protocol);
if (!rc) {
dev->active_target = target;
+ dev->rf_mode = NFC_RF_INITIATOR;
if (dev->ops->check_presence)
mod_timer(&dev->check_pres_timer, jiffies +
@@ -470,6 +474,8 @@ int nfc_tm_activated(struct nfc_dev *dev, u32 protocol, u8 comm_mode,
goto out;
}
+ dev->rf_mode = NFC_RF_TARGET;
+
if (protocol == NFC_PROTO_NFC_DEP_MASK)
nfc_dep_link_is_up(dev, 0, comm_mode, NFC_RF_TARGET);