]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/nfc/pn544_hci.c
Merge commit '4cb38750d49010ae72e718d46605ac9ba5a851b4' into stable/for-linus-3.6
[karo-tx-linux.git] / drivers / nfc / pn544_hci.c
index 457eac35dc7486dd8fcfe48195585316081d72ce..aa71807189ba3235a0720fc1660049507bf19039 100644 (file)
@@ -108,16 +108,22 @@ enum pn544_state {
 
 #define PN544_NFC_WI_MGMT_GATE                 0xA1
 
-static u8 pn544_custom_gates[] = {
-       PN544_SYS_MGMT_GATE,
-       PN544_SWP_MGMT_GATE,
-       PN544_POLLING_LOOP_MGMT_GATE,
-       PN544_NFC_WI_MGMT_GATE,
-       PN544_RF_READER_F_GATE,
-       PN544_RF_READER_JEWEL_GATE,
-       PN544_RF_READER_ISO15693_GATE,
-       PN544_RF_READER_NFCIP1_INITIATOR_GATE,
-       PN544_RF_READER_NFCIP1_TARGET_GATE
+static struct nfc_hci_gate pn544_gates[] = {
+       {NFC_HCI_ADMIN_GATE, NFC_HCI_INVALID_PIPE},
+       {NFC_HCI_LOOPBACK_GATE, NFC_HCI_INVALID_PIPE},
+       {NFC_HCI_ID_MGMT_GATE, NFC_HCI_INVALID_PIPE},
+       {NFC_HCI_LINK_MGMT_GATE, NFC_HCI_INVALID_PIPE},
+       {NFC_HCI_RF_READER_B_GATE, NFC_HCI_INVALID_PIPE},
+       {NFC_HCI_RF_READER_A_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_SYS_MGMT_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_SWP_MGMT_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_POLLING_LOOP_MGMT_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_NFC_WI_MGMT_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_RF_READER_F_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_RF_READER_JEWEL_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_RF_READER_ISO15693_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_RF_READER_NFCIP1_INITIATOR_GATE, NFC_HCI_INVALID_PIPE},
+       {PN544_RF_READER_NFCIP1_TARGET_GATE, NFC_HCI_INVALID_PIPE}
 };
 
 /* Largest headroom needed for outgoing custom commands */
@@ -377,6 +383,9 @@ static int pn544_hci_open(struct nfc_shdlc *shdlc)
 
        r = pn544_hci_enable(info, HCI_MODE);
 
+       if (r == 0)
+               info->state = PN544_ST_READY;
+
 out:
        mutex_unlock(&info->info_lock);
        return r;
@@ -393,6 +402,8 @@ static void pn544_hci_close(struct nfc_shdlc *shdlc)
 
        pn544_hci_disable(info);
 
+       info->state = PN544_ST_COLD;
+
 out:
        mutex_unlock(&info->info_lock);
 }
@@ -844,10 +855,9 @@ static int __devinit pn544_hci_probe(struct i2c_client *client,
                goto err_rti;
        }
 
-       init_data.gate_count = ARRAY_SIZE(pn544_custom_gates);
+       init_data.gate_count = ARRAY_SIZE(pn544_gates);
 
-       memcpy(init_data.gates, pn544_custom_gates,
-              ARRAY_SIZE(pn544_custom_gates));
+       memcpy(init_data.gates, pn544_gates, sizeof(pn544_gates));
 
        /*
         * TODO: Session id must include the driver name + some bus addr
@@ -859,6 +869,7 @@ static int __devinit pn544_hci_probe(struct i2c_client *client,
                    NFC_PROTO_MIFARE_MASK |
                    NFC_PROTO_FELICA_MASK |
                    NFC_PROTO_ISO14443_MASK |
+                   NFC_PROTO_ISO14443_B_MASK |
                    NFC_PROTO_NFC_DEP_MASK;
 
        info->shdlc = nfc_shdlc_allocate(&pn544_shdlc_ops,