NFC: Set the NFC device RF mode appropriately
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
Родитель
fc40a8c1a0
Коммит
f212ad5e99
|
@ -146,6 +146,7 @@ enum nfc_attrs {
|
|||
/* NFC RF modes */
|
||||
#define NFC_RF_INITIATOR 0
|
||||
#define NFC_RF_TARGET 1
|
||||
#define NFC_RF_NONE 2
|
||||
|
||||
/* NFC protocols masks used in bitsets */
|
||||
#define NFC_PROTO_JEWEL_MASK (1 << NFC_PROTO_JEWEL)
|
||||
|
|
|
@ -100,10 +100,10 @@ struct nfc_dev {
|
|||
int targets_generation;
|
||||
struct device dev;
|
||||
bool dev_up;
|
||||
u8 rf_mode;
|
||||
bool polling;
|
||||
struct nfc_target *active_target;
|
||||
bool dep_link_up;
|
||||
u32 dep_rf_mode;
|
||||
struct nfc_genl_data genl_data;
|
||||
u32 supported_protocols;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче