NFC: digital: Check for NFC-DEP before checking for Type 4 tag
authorMark A. Greer <mgreer@animalcreek.com>
Wed, 2 Jul 2014 16:01:56 +0000 (09:01 -0700)
committerSamuel Ortiz <sameo@linux.intel.com>
Sun, 20 Jul 2014 22:45:03 +0000 (00:45 +0200)
In digital_in_recv_sel_res(), the code that determines
the tag type will interpret bits 7:6 (lsb being b1 as
per the Digital Specification) of a SEL RES set to 11b
as a Type 4 tag.  This is okay except that the neard
will interpret the same value as an NFC-DEP device
(in src/tag.c:set_tag_type() in the neard source).

Make the digital layer's interpretation match neard's
interpretation by changing the order of the checks in
digital_in_recv_sel_res() so that a value of 11b in
bits 7:6 is interpreted as an NFC-DEP device instead
of a Type 4 tag.

Acked-by: Thierry Escande <thierry.escande@linux.intel.com>
Signed-off-by: Mark A. Greer <mgreer@animalcreek.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
net/nfc/digital_technology.c

index c2c1c0189b7cbe931c279bc039df4d26801902d4..d1684cbfea68bc2aeb8e0ce306ad1eb95eb839da 100644 (file)
@@ -318,6 +318,8 @@ static void digital_in_recv_sel_res(struct nfc_digital_dev *ddev, void *arg,
 
        if (DIGITAL_SEL_RES_IS_T2T(sel_res)) {
                nfc_proto = NFC_PROTO_MIFARE;
+       } else if (DIGITAL_SEL_RES_IS_NFC_DEP(sel_res)) {
+               nfc_proto = NFC_PROTO_NFC_DEP;
        } else if (DIGITAL_SEL_RES_IS_T4T(sel_res)) {
                rc = digital_in_send_rats(ddev, target);
                if (rc)
@@ -327,8 +329,6 @@ static void digital_in_recv_sel_res(struct nfc_digital_dev *ddev, void *arg,
                 * done when receiving the ATS
                 */
                goto exit_free_skb;
-       } else if (DIGITAL_SEL_RES_IS_NFC_DEP(sel_res)) {
-               nfc_proto = NFC_PROTO_NFC_DEP;
        } else {
                rc = -EOPNOTSUPP;
                goto exit;