NFC: NCI: Add support of ISO15693
Update nci.h to respect latest NCI specification proposal (stop using proprietary opcodes). Handle ISO15693 parameters in NCI_RF_ACTIVATED_NTF handler. Signed-off-by: Vincent Cuissard <cuissard@marvell.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
parent
f23b73526b
commit
cfdbeeafdb
3 changed files with 52 additions and 3 deletions
|
@ -231,6 +231,14 @@ static void nci_rf_discover_req(struct nci_dev *ndev, unsigned long opt)
|
|||
cmd.num_disc_configs++;
|
||||
}
|
||||
|
||||
if ((cmd.num_disc_configs < NCI_MAX_NUM_RF_CONFIGS) &&
|
||||
(protocols & NFC_PROTO_ISO15693_MASK)) {
|
||||
cmd.disc_configs[cmd.num_disc_configs].rf_tech_and_mode =
|
||||
NCI_NFC_V_PASSIVE_POLL_MODE;
|
||||
cmd.disc_configs[cmd.num_disc_configs].frequency = 1;
|
||||
cmd.num_disc_configs++;
|
||||
}
|
||||
|
||||
nci_send_cmd(ndev, NCI_OP_RF_DISCOVER_CMD,
|
||||
(1 + (cmd.num_disc_configs * sizeof(struct disc_config))),
|
||||
&cmd);
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* The NFC Controller Interface is the communication protocol between an
|
||||
* NFC Controller (NFCC) and a Device Host (DH).
|
||||
*
|
||||
* Copyright (C) 2014 Marvell International Ltd.
|
||||
* Copyright (C) 2011 Texas Instruments, Inc.
|
||||
*
|
||||
* Written by Ilan Elias <ilane@ti.com>
|
||||
|
@ -155,6 +156,17 @@ static __u8 *nci_extract_rf_params_nfcf_passive_poll(struct nci_dev *ndev,
|
|||
return data;
|
||||
}
|
||||
|
||||
static __u8 *nci_extract_rf_params_nfcv_passive_poll(struct nci_dev *ndev,
|
||||
struct rf_tech_specific_params_nfcv_poll *nfcv_poll,
|
||||
__u8 *data)
|
||||
{
|
||||
++data;
|
||||
nfcv_poll->dsfid = *data++;
|
||||
memcpy(nfcv_poll->uid, data, NFC_ISO15693_UID_MAXSIZE);
|
||||
data += NFC_ISO15693_UID_MAXSIZE;
|
||||
return data;
|
||||
}
|
||||
|
||||
static int nci_add_new_protocol(struct nci_dev *ndev,
|
||||
struct nfc_target *target,
|
||||
__u8 rf_protocol,
|
||||
|
@ -164,6 +176,7 @@ static int nci_add_new_protocol(struct nci_dev *ndev,
|
|||
struct rf_tech_specific_params_nfca_poll *nfca_poll;
|
||||
struct rf_tech_specific_params_nfcb_poll *nfcb_poll;
|
||||
struct rf_tech_specific_params_nfcf_poll *nfcf_poll;
|
||||
struct rf_tech_specific_params_nfcv_poll *nfcv_poll;
|
||||
__u32 protocol;
|
||||
|
||||
if (rf_protocol == NCI_RF_PROTOCOL_T1T)
|
||||
|
@ -179,6 +192,8 @@ static int nci_add_new_protocol(struct nci_dev *ndev,
|
|||
protocol = NFC_PROTO_FELICA_MASK;
|
||||
else if (rf_protocol == NCI_RF_PROTOCOL_NFC_DEP)
|
||||
protocol = NFC_PROTO_NFC_DEP_MASK;
|
||||
else if (rf_protocol == NCI_RF_PROTOCOL_T5T)
|
||||
protocol = NFC_PROTO_ISO15693_MASK;
|
||||
else
|
||||
protocol = 0;
|
||||
|
||||
|
@ -213,6 +228,12 @@ static int nci_add_new_protocol(struct nci_dev *ndev,
|
|||
memcpy(target->sensf_res, nfcf_poll->sensf_res,
|
||||
target->sensf_res_len);
|
||||
}
|
||||
} else if (rf_tech_and_mode == NCI_NFC_V_PASSIVE_POLL_MODE) {
|
||||
nfcv_poll = (struct rf_tech_specific_params_nfcv_poll *)params;
|
||||
|
||||
target->is_iso15693 = 1;
|
||||
target->iso15693_dsfid = nfcv_poll->dsfid;
|
||||
memcpy(target->iso15693_uid, nfcv_poll->uid, NFC_ISO15693_UID_MAXSIZE);
|
||||
} else {
|
||||
pr_err("unsupported rf_tech_and_mode 0x%x\n", rf_tech_and_mode);
|
||||
return -EPROTO;
|
||||
|
@ -305,6 +326,11 @@ static void nci_rf_discover_ntf_packet(struct nci_dev *ndev,
|
|||
&(ntf.rf_tech_specific_params.nfcf_poll), data);
|
||||
break;
|
||||
|
||||
case NCI_NFC_V_PASSIVE_POLL_MODE:
|
||||
data = nci_extract_rf_params_nfcv_passive_poll(ndev,
|
||||
&(ntf.rf_tech_specific_params.nfcv_poll), data);
|
||||
break;
|
||||
|
||||
default:
|
||||
pr_err("unsupported rf_tech_and_mode 0x%x\n",
|
||||
ntf.rf_tech_and_mode);
|
||||
|
@ -455,6 +481,11 @@ static void nci_rf_intf_activated_ntf_packet(struct nci_dev *ndev,
|
|||
&(ntf.rf_tech_specific_params.nfcf_poll), data);
|
||||
break;
|
||||
|
||||
case NCI_NFC_V_PASSIVE_POLL_MODE:
|
||||
data = nci_extract_rf_params_nfcv_passive_poll(ndev,
|
||||
&(ntf.rf_tech_specific_params.nfcv_poll), data);
|
||||
break;
|
||||
|
||||
default:
|
||||
pr_err("unsupported activation_rf_tech_and_mode 0x%x\n",
|
||||
ntf.activation_rf_tech_and_mode);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue