Commit 5eef4845619b88957349415b7b1498e00220fa2b
1 parent
a94e10f7d7
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
NFC: pn533: Unconditionaly select the highest p2p bit rate
p2p devices must be able to support 424 kbps, so we should always select that bitrate in initiator mode. Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Showing 1 changed file with 20 additions and 36 deletions Side-by-side Diff
drivers/nfc/pn533.c
... | ... | @@ -2086,20 +2086,6 @@ |
2086 | 2086 | return rc; |
2087 | 2087 | } |
2088 | 2088 | |
2089 | -static int pn533_mod_to_baud(struct pn533 *dev) | |
2090 | -{ | |
2091 | - switch (dev->poll_mod_curr) { | |
2092 | - case PN533_POLL_MOD_106KBPS_A: | |
2093 | - return 0; | |
2094 | - case PN533_POLL_MOD_212KBPS_FELICA: | |
2095 | - return 1; | |
2096 | - case PN533_POLL_MOD_424KBPS_FELICA: | |
2097 | - return 2; | |
2098 | - default: | |
2099 | - return -EINVAL; | |
2100 | - } | |
2101 | -} | |
2102 | - | |
2103 | 2089 | static int pn533_rf_field(struct nfc_dev *nfc_dev, u8 rf); |
2104 | 2090 | #define PASSIVE_DATA_LEN 5 |
2105 | 2091 | static int pn533_dep_link_up(struct nfc_dev *nfc_dev, struct nfc_target *target, |
... | ... | @@ -2107,8 +2093,8 @@ |
2107 | 2093 | { |
2108 | 2094 | struct pn533 *dev = nfc_get_drvdata(nfc_dev); |
2109 | 2095 | struct sk_buff *skb; |
2110 | - int rc, baud, skb_len; | |
2111 | - u8 *next, *arg; | |
2096 | + int rc, skb_len; | |
2097 | + u8 *next, *arg, nfcid3[NFC_NFCID3_MAXSIZE]; | |
2112 | 2098 | |
2113 | 2099 | u8 passive_data[PASSIVE_DATA_LEN] = {0x00, 0xff, 0xff, 0x00, 0x3}; |
2114 | 2100 | |
2115 | 2101 | |
2116 | 2102 | |
2117 | 2103 | |
2118 | 2104 | |
2119 | 2105 | |
2120 | 2106 | |
... | ... | @@ -2126,41 +2112,39 @@ |
2126 | 2112 | return -EBUSY; |
2127 | 2113 | } |
2128 | 2114 | |
2129 | - baud = pn533_mod_to_baud(dev); | |
2130 | - if (baud < 0) { | |
2131 | - nfc_dev_err(&dev->interface->dev, | |
2132 | - "Invalid curr modulation %d", dev->poll_mod_curr); | |
2133 | - return baud; | |
2134 | - } | |
2135 | - | |
2136 | 2115 | skb_len = 3 + gb_len; /* ActPass + BR + Next */ |
2137 | - if (comm_mode == NFC_COMM_PASSIVE) | |
2138 | - skb_len += PASSIVE_DATA_LEN; | |
2116 | + skb_len += PASSIVE_DATA_LEN; | |
2139 | 2117 | |
2140 | - if (target && target->nfcid2_len) | |
2141 | - skb_len += NFC_NFCID3_MAXSIZE; | |
2118 | + /* NFCID3 */ | |
2119 | + skb_len += NFC_NFCID3_MAXSIZE; | |
2120 | + if (target && !target->nfcid2_len) { | |
2121 | + nfcid3[0] = 0x1; | |
2122 | + nfcid3[1] = 0xfe; | |
2123 | + get_random_bytes(nfcid3 + 2, 6); | |
2124 | + } | |
2142 | 2125 | |
2143 | 2126 | skb = pn533_alloc_skb(dev, skb_len); |
2144 | 2127 | if (!skb) |
2145 | 2128 | return -ENOMEM; |
2146 | 2129 | |
2147 | 2130 | *skb_put(skb, 1) = !comm_mode; /* ActPass */ |
2148 | - *skb_put(skb, 1) = baud; /* Baud rate */ | |
2131 | + *skb_put(skb, 1) = 0x02; /* 424 kbps */ | |
2149 | 2132 | |
2150 | 2133 | next = skb_put(skb, 1); /* Next */ |
2151 | 2134 | *next = 0; |
2152 | 2135 | |
2153 | - if (comm_mode == NFC_COMM_PASSIVE && baud > 0) { | |
2154 | - memcpy(skb_put(skb, PASSIVE_DATA_LEN), passive_data, | |
2155 | - PASSIVE_DATA_LEN); | |
2156 | - *next |= 1; | |
2157 | - } | |
2136 | + /* Copy passive data */ | |
2137 | + memcpy(skb_put(skb, PASSIVE_DATA_LEN), passive_data, PASSIVE_DATA_LEN); | |
2138 | + *next |= 1; | |
2158 | 2139 | |
2159 | - if (target && target->nfcid2_len) { | |
2140 | + /* Copy NFCID3 (which is NFCID2 from SENSF_RES) */ | |
2141 | + if (target && target->nfcid2_len) | |
2160 | 2142 | memcpy(skb_put(skb, NFC_NFCID3_MAXSIZE), target->nfcid2, |
2161 | 2143 | target->nfcid2_len); |
2162 | - *next |= 2; | |
2163 | - } | |
2144 | + else | |
2145 | + memcpy(skb_put(skb, NFC_NFCID3_MAXSIZE), nfcid3, | |
2146 | + NFC_NFCID3_MAXSIZE); | |
2147 | + *next |= 2; | |
2164 | 2148 | |
2165 | 2149 | if (gb != NULL && gb_len > 0) { |
2166 | 2150 | memcpy(skb_put(skb, gb_len), gb, gb_len); |