summaryrefslogtreecommitdiff
path: root/drivers/nfc
diff options
context:
space:
mode:
authorChristophe Ricard <christophe.ricard@gmail.com>2014-04-24 23:19:32 +0200
committerSamuel Ortiz <sameo@linux.intel.com>2014-05-05 00:06:27 +0200
commit3096e25a3e40b73afd59e46f3bf8d84f919992a1 (patch)
treeb488b5f7614b5d9b24ad903b7e515b0c4673de5a /drivers/nfc
parent0bb8a622d6b47e4dde9ec877029f9e64a997c57f (diff)
NFC: st21nfca: Fix incorrect byte stuffing revocation
Byte stuffing was not correctly removed after a i2c read operation. This was causing improper crc calculation when byte stuffing was applied to more than 1 byte. Signed-off-by: Christophe Ricard <christophe-h.ricard@st.com> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/nfc')
-rw-r--r--drivers/nfc/st21nfca/i2c.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/nfc/st21nfca/i2c.c b/drivers/nfc/st21nfca/i2c.c
index 6c4d0a0fc7fc..4df15ef2528a 100644
--- a/drivers/nfc/st21nfca/i2c.c
+++ b/drivers/nfc/st21nfca/i2c.c
@@ -315,11 +315,10 @@ static int st21nfca_hci_i2c_repack(struct sk_buff *skb)
skb_trim(skb, size);
/* remove ST21NFCA byte stuffing for upper layer */
for (i = 1, j = 0; i < skb->len; i++) {
- if (skb->data[i] ==
+ if (skb->data[i + j] ==
(u8) ST21NFCA_ESCAPE_BYTE_STUFFING) {
- skb->data[i] =
- skb->data[i +
- 1] | ST21NFCA_BYTE_STUFFING_MASK;
+ skb->data[i] = skb->data[i + j + 1]
+ | ST21NFCA_BYTE_STUFFING_MASK;
i++;
j++;
}