NFC: Add target mode protocols to the polling loop startup routine
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
This commit is contained in:
@@ -1078,27 +1078,23 @@ stop_poll:
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pn533_start_poll(struct nfc_dev *nfc_dev, u32 protocols)
|
||||
static int pn533_init_target(struct nfc_dev *nfc_dev, u32 protocols)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int pn533_start_im_poll(struct nfc_dev *nfc_dev, u32 protocols)
|
||||
{
|
||||
struct pn533 *dev = nfc_get_drvdata(nfc_dev);
|
||||
struct pn533_poll_modulations *start_mod;
|
||||
int rc;
|
||||
|
||||
nfc_dev_dbg(&dev->interface->dev, "%s - protocols=0x%x", __func__,
|
||||
protocols);
|
||||
|
||||
if (dev->poll_mod_count) {
|
||||
nfc_dev_err(&dev->interface->dev, "Polling operation already"
|
||||
" active");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (dev->tgt_active_prot) {
|
||||
nfc_dev_err(&dev->interface->dev, "Cannot poll with a target"
|
||||
" already activated");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
pn533_poll_create_mod_list(dev, protocols);
|
||||
|
||||
if (!dev->poll_mod_count) {
|
||||
@@ -1135,6 +1131,29 @@ error:
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int pn533_start_poll(struct nfc_dev *nfc_dev,
|
||||
u32 im_protocols, u32 tm_protocols)
|
||||
{
|
||||
struct pn533 *dev = nfc_get_drvdata(nfc_dev);
|
||||
|
||||
nfc_dev_dbg(&dev->interface->dev,
|
||||
"%s: im protocols 0x%x tm protocols 0x%x",
|
||||
__func__, im_protocols, tm_protocols);
|
||||
|
||||
if (dev->tgt_active_prot) {
|
||||
nfc_dev_err(&dev->interface->dev,
|
||||
"Cannot poll with a target already activated");
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (!tm_protocols)
|
||||
return pn533_start_im_poll(nfc_dev, im_protocols);
|
||||
else if (!im_protocols)
|
||||
return pn533_init_target(nfc_dev, tm_protocols);
|
||||
else
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static void pn533_stop_poll(struct nfc_dev *nfc_dev)
|
||||
{
|
||||
struct pn533 *dev = nfc_get_drvdata(nfc_dev);
|
||||
|
@@ -576,7 +576,8 @@ static int pn544_hci_xmit(struct nfc_shdlc *shdlc, struct sk_buff *skb)
|
||||
return pn544_hci_i2c_write(client, skb->data, skb->len);
|
||||
}
|
||||
|
||||
static int pn544_hci_start_poll(struct nfc_shdlc *shdlc, u32 protocols)
|
||||
static int pn544_hci_start_poll(struct nfc_shdlc *shdlc,
|
||||
u32 im_protocols, u32 tm_protocols)
|
||||
{
|
||||
struct nfc_hci_dev *hdev = nfc_shdlc_get_hci_dev(shdlc);
|
||||
u8 phases = 0;
|
||||
@@ -584,7 +585,8 @@ static int pn544_hci_start_poll(struct nfc_shdlc *shdlc, u32 protocols)
|
||||
u8 duration[2];
|
||||
u8 activated;
|
||||
|
||||
pr_info(DRIVER_DESC ": %s protocols = %d\n", __func__, protocols);
|
||||
pr_info(DRIVER_DESC ": %s protocols 0x%x 0x%x\n",
|
||||
__func__, im_protocols, tm_protocols);
|
||||
|
||||
r = nfc_hci_send_event(hdev, NFC_HCI_RF_READER_A_GATE,
|
||||
NFC_HCI_EVT_END_OPERATION, NULL, 0);
|
||||
@@ -604,10 +606,10 @@ static int pn544_hci_start_poll(struct nfc_shdlc *shdlc, u32 protocols)
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
if (protocols & (NFC_PROTO_ISO14443_MASK | NFC_PROTO_MIFARE_MASK |
|
||||
if (im_protocols & (NFC_PROTO_ISO14443_MASK | NFC_PROTO_MIFARE_MASK |
|
||||
NFC_PROTO_JEWEL_MASK))
|
||||
phases |= 1; /* Type A */
|
||||
if (protocols & NFC_PROTO_FELICA_MASK) {
|
||||
if (im_protocols & NFC_PROTO_FELICA_MASK) {
|
||||
phases |= (1 << 2); /* Type F 212 */
|
||||
phases |= (1 << 3); /* Type F 424 */
|
||||
}
|
||||
|
Reference in New Issue
Block a user