NFC: pn533: Add MI/TG bits only when in Initiator mode
authorOlivier Guiter <olivier.guiter@linux.intel.com>
Mon, 23 Sep 2013 10:24:37 +0000 (12:24 +0200)
committerSamuel Ortiz <sameo@linux.intel.com>
Wed, 25 Sep 2013 14:01:03 +0000 (16:01 +0200)
The fragmentation routine (used to split big frames) could be used in
target or initiator mode (TgSetMetaData vs InDataExchange), but the
MI/TG bytes are not needed in target mode (TgSetMetaData), so we
add a check on the mode

Signed-off-by: Olivier Guiter <olivier.guiter@linux.intel.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
drivers/nfc/pn533.c

index 75bffd8..0b7e928 100644 (file)
@@ -2504,14 +2504,17 @@ static int pn533_fill_fragment_skbs(struct pn533 *dev, struct sk_buff *skb)
                        break;
                }
 
-               /* Reserve the TG/MI byte */
-               skb_reserve(frag, 1);
-
-               /* MI + TG */
-               if (frag_size  == PN533_CMD_DATAFRAME_MAXLEN)
-                       *skb_push(frag, sizeof(u8)) = (PN533_CMD_MI_MASK | 1);
-               else
-                       *skb_push(frag, sizeof(u8)) =  1; /* TG */
+               if (!dev->tgt_mode) {
+                       /* Reserve the TG/MI byte */
+                       skb_reserve(frag, 1);
+
+                       /* MI + TG */
+                       if (frag_size  == PN533_CMD_DATAFRAME_MAXLEN)
+                               *skb_push(frag, sizeof(u8)) =
+                                                       (PN533_CMD_MI_MASK | 1);
+                       else
+                               *skb_push(frag, sizeof(u8)) =  1; /* TG */
+               }
 
                memcpy(skb_put(frag, frag_size), skb->data, frag_size);