diff options
-rw-r--r-- | Documentation/devicetree/bindings/net/nfc/st21nfca.txt | 2 | ||||
-rw-r--r-- | drivers/nfc/port100.c | 36 | ||||
-rw-r--r-- | drivers/nfc/trf7970a.c | 13 | ||||
-rw-r--r-- | net/nfc/digital_core.c | 6 | ||||
-rw-r--r-- | net/nfc/digital_dep.c | 5 | ||||
-rw-r--r-- | net/nfc/digital_technology.c | 2 | ||||
-rw-r--r-- | net/nfc/rawsock.c | 4 |
7 files changed, 57 insertions, 11 deletions
diff --git a/Documentation/devicetree/bindings/net/nfc/st21nfca.txt b/Documentation/devicetree/bindings/net/nfc/st21nfca.txt index 4724fe669172..e4faa2e8dfeb 100644 --- a/Documentation/devicetree/bindings/net/nfc/st21nfca.txt +++ b/Documentation/devicetree/bindings/net/nfc/st21nfca.txt | |||
@@ -1,7 +1,7 @@ | |||
1 | * STMicroelectronics SAS. ST21NFCA NFC Controller | 1 | * STMicroelectronics SAS. ST21NFCA NFC Controller |
2 | 2 | ||
3 | Required properties: | 3 | Required properties: |
4 | - compatible: Should be "st,st21nfca-i2c". | 4 | - compatible: Should be "st,st21nfca_i2c". |
5 | - clock-frequency: I²C work frequency. | 5 | - clock-frequency: I²C work frequency. |
6 | - reg: address on the bus | 6 | - reg: address on the bus |
7 | - interrupt-parent: phandle for the interrupt gpio controller | 7 | - interrupt-parent: phandle for the interrupt gpio controller |
diff --git a/drivers/nfc/port100.c b/drivers/nfc/port100.c index b7a372af5eb7..4ac4d31f6c59 100644 --- a/drivers/nfc/port100.c +++ b/drivers/nfc/port100.c | |||
@@ -28,7 +28,8 @@ | |||
28 | NFC_PROTO_MIFARE_MASK | \ | 28 | NFC_PROTO_MIFARE_MASK | \ |
29 | NFC_PROTO_FELICA_MASK | \ | 29 | NFC_PROTO_FELICA_MASK | \ |
30 | NFC_PROTO_NFC_DEP_MASK | \ | 30 | NFC_PROTO_NFC_DEP_MASK | \ |
31 | NFC_PROTO_ISO14443_MASK) | 31 | NFC_PROTO_ISO14443_MASK | \ |
32 | NFC_PROTO_ISO14443_B_MASK) | ||
32 | 33 | ||
33 | #define PORT100_CAPABILITIES (NFC_DIGITAL_DRV_CAPS_IN_CRC | \ | 34 | #define PORT100_CAPABILITIES (NFC_DIGITAL_DRV_CAPS_IN_CRC | \ |
34 | NFC_DIGITAL_DRV_CAPS_TG_CRC) | 35 | NFC_DIGITAL_DRV_CAPS_TG_CRC) |
@@ -120,6 +121,7 @@ struct port100_in_rf_setting { | |||
120 | #define PORT100_COMM_TYPE_IN_212F 0x01 | 121 | #define PORT100_COMM_TYPE_IN_212F 0x01 |
121 | #define PORT100_COMM_TYPE_IN_424F 0x02 | 122 | #define PORT100_COMM_TYPE_IN_424F 0x02 |
122 | #define PORT100_COMM_TYPE_IN_106A 0x03 | 123 | #define PORT100_COMM_TYPE_IN_106A 0x03 |
124 | #define PORT100_COMM_TYPE_IN_106B 0x07 | ||
123 | 125 | ||
124 | static const struct port100_in_rf_setting in_rf_settings[] = { | 126 | static const struct port100_in_rf_setting in_rf_settings[] = { |
125 | [NFC_DIGITAL_RF_TECH_212F] = { | 127 | [NFC_DIGITAL_RF_TECH_212F] = { |
@@ -140,6 +142,12 @@ static const struct port100_in_rf_setting in_rf_settings[] = { | |||
140 | .in_recv_set_number = 15, | 142 | .in_recv_set_number = 15, |
141 | .in_recv_comm_type = PORT100_COMM_TYPE_IN_106A, | 143 | .in_recv_comm_type = PORT100_COMM_TYPE_IN_106A, |
142 | }, | 144 | }, |
145 | [NFC_DIGITAL_RF_TECH_106B] = { | ||
146 | .in_send_set_number = 3, | ||
147 | .in_send_comm_type = PORT100_COMM_TYPE_IN_106B, | ||
148 | .in_recv_set_number = 15, | ||
149 | .in_recv_comm_type = PORT100_COMM_TYPE_IN_106B, | ||
150 | }, | ||
143 | /* Ensures the array has NFC_DIGITAL_RF_TECH_LAST elements */ | 151 | /* Ensures the array has NFC_DIGITAL_RF_TECH_LAST elements */ |
144 | [NFC_DIGITAL_RF_TECH_LAST] = { 0 }, | 152 | [NFC_DIGITAL_RF_TECH_LAST] = { 0 }, |
145 | }; | 153 | }; |
@@ -340,6 +348,32 @@ in_protocols[][PORT100_IN_MAX_NUM_PROTOCOLS + 1] = { | |||
340 | [NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED] = { | 348 | [NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED] = { |
341 | { PORT100_IN_PROT_END, 0 }, | 349 | { PORT100_IN_PROT_END, 0 }, |
342 | }, | 350 | }, |
351 | [NFC_DIGITAL_FRAMING_NFCB] = { | ||
352 | { PORT100_IN_PROT_INITIAL_GUARD_TIME, 20 }, | ||
353 | { PORT100_IN_PROT_ADD_CRC, 1 }, | ||
354 | { PORT100_IN_PROT_CHECK_CRC, 1 }, | ||
355 | { PORT100_IN_PROT_MULTI_CARD, 0 }, | ||
356 | { PORT100_IN_PROT_ADD_PARITY, 0 }, | ||
357 | { PORT100_IN_PROT_CHECK_PARITY, 0 }, | ||
358 | { PORT100_IN_PROT_BITWISE_AC_RECV_MODE, 0 }, | ||
359 | { PORT100_IN_PROT_VALID_BIT_NUMBER, 8 }, | ||
360 | { PORT100_IN_PROT_CRYPTO1, 0 }, | ||
361 | { PORT100_IN_PROT_ADD_SOF, 1 }, | ||
362 | { PORT100_IN_PROT_CHECK_SOF, 1 }, | ||
363 | { PORT100_IN_PROT_ADD_EOF, 1 }, | ||
364 | { PORT100_IN_PROT_CHECK_EOF, 1 }, | ||
365 | { PORT100_IN_PROT_DEAF_TIME, 4 }, | ||
366 | { PORT100_IN_PROT_CRM, 0 }, | ||
367 | { PORT100_IN_PROT_CRM_MIN_LEN, 0 }, | ||
368 | { PORT100_IN_PROT_T1_TAG_FRAME, 0 }, | ||
369 | { PORT100_IN_PROT_RFCA, 0 }, | ||
370 | { PORT100_IN_PROT_GUARD_TIME_AT_INITIATOR, 6 }, | ||
371 | { PORT100_IN_PROT_END, 0 }, | ||
372 | }, | ||
373 | [NFC_DIGITAL_FRAMING_NFCB_T4T] = { | ||
374 | /* nfc_digital_framing_nfcb */ | ||
375 | { PORT100_IN_PROT_END, 0 }, | ||
376 | }, | ||
343 | /* Ensures the array has NFC_DIGITAL_FRAMING_LAST elements */ | 377 | /* Ensures the array has NFC_DIGITAL_FRAMING_LAST elements */ |
344 | [NFC_DIGITAL_FRAMING_LAST] = { | 378 | [NFC_DIGITAL_FRAMING_LAST] = { |
345 | { PORT100_IN_PROT_END, 0 }, | 379 | { PORT100_IN_PROT_END, 0 }, |
diff --git a/drivers/nfc/trf7970a.c b/drivers/nfc/trf7970a.c index efb36593ecb4..3b78b031e617 100644 --- a/drivers/nfc/trf7970a.c +++ b/drivers/nfc/trf7970a.c | |||
@@ -105,7 +105,8 @@ | |||
105 | 105 | ||
106 | #define TRF7970A_SUPPORTED_PROTOCOLS \ | 106 | #define TRF7970A_SUPPORTED_PROTOCOLS \ |
107 | (NFC_PROTO_MIFARE_MASK | NFC_PROTO_ISO14443_MASK | \ | 107 | (NFC_PROTO_MIFARE_MASK | NFC_PROTO_ISO14443_MASK | \ |
108 | NFC_PROTO_ISO14443_B_MASK | NFC_PROTO_ISO15693_MASK) | 108 | NFC_PROTO_ISO14443_B_MASK | NFC_PROTO_FELICA_MASK | \ |
109 | NFC_PROTO_ISO15693_MASK) | ||
109 | 110 | ||
110 | #define TRF7970A_AUTOSUSPEND_DELAY 30000 /* 30 seconds */ | 111 | #define TRF7970A_AUTOSUSPEND_DELAY 30000 /* 30 seconds */ |
111 | 112 | ||
@@ -867,6 +868,14 @@ static int trf7970a_config_rf_tech(struct trf7970a *trf, int tech) | |||
867 | trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_14443B_106; | 868 | trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_14443B_106; |
868 | trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_DEPTH_ASK10; | 869 | trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_DEPTH_ASK10; |
869 | break; | 870 | break; |
871 | case NFC_DIGITAL_RF_TECH_212F: | ||
872 | trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_212; | ||
873 | trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_DEPTH_ASK10; | ||
874 | break; | ||
875 | case NFC_DIGITAL_RF_TECH_424F: | ||
876 | trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_424; | ||
877 | trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_DEPTH_ASK10; | ||
878 | break; | ||
870 | case NFC_DIGITAL_RF_TECH_ISO15693: | 879 | case NFC_DIGITAL_RF_TECH_ISO15693: |
871 | trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648; | 880 | trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648; |
872 | trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_DEPTH_OOK; | 881 | trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_DEPTH_OOK; |
@@ -898,6 +907,8 @@ static int trf7970a_config_framing(struct trf7970a *trf, int framing) | |||
898 | case NFC_DIGITAL_FRAMING_NFCA_T4T: | 907 | case NFC_DIGITAL_FRAMING_NFCA_T4T: |
899 | case NFC_DIGITAL_FRAMING_NFCB: | 908 | case NFC_DIGITAL_FRAMING_NFCB: |
900 | case NFC_DIGITAL_FRAMING_NFCB_T4T: | 909 | case NFC_DIGITAL_FRAMING_NFCB_T4T: |
910 | case NFC_DIGITAL_FRAMING_NFCF: | ||
911 | case NFC_DIGITAL_FRAMING_NFCF_T3T: | ||
901 | case NFC_DIGITAL_FRAMING_ISO15693_INVENTORY: | 912 | case NFC_DIGITAL_FRAMING_ISO15693_INVENTORY: |
902 | case NFC_DIGITAL_FRAMING_ISO15693_T5T: | 913 | case NFC_DIGITAL_FRAMING_ISO15693_T5T: |
903 | trf->tx_cmd = TRF7970A_CMD_TRANSMIT; | 914 | trf->tx_cmd = TRF7970A_CMD_TRANSMIT; |
diff --git a/net/nfc/digital_core.c b/net/nfc/digital_core.c index b105cfb00e76..a6ce3c627e4e 100644 --- a/net/nfc/digital_core.c +++ b/net/nfc/digital_core.c | |||
@@ -386,6 +386,8 @@ int digital_target_found(struct nfc_digital_dev *ddev, | |||
386 | 386 | ||
387 | void digital_poll_next_tech(struct nfc_digital_dev *ddev) | 387 | void digital_poll_next_tech(struct nfc_digital_dev *ddev) |
388 | { | 388 | { |
389 | u8 rand_mod; | ||
390 | |||
389 | digital_switch_rf(ddev, 0); | 391 | digital_switch_rf(ddev, 0); |
390 | 392 | ||
391 | mutex_lock(&ddev->poll_lock); | 393 | mutex_lock(&ddev->poll_lock); |
@@ -395,8 +397,8 @@ void digital_poll_next_tech(struct nfc_digital_dev *ddev) | |||
395 | return; | 397 | return; |
396 | } | 398 | } |
397 | 399 | ||
398 | ddev->poll_tech_index = (ddev->poll_tech_index + 1) % | 400 | get_random_bytes(&rand_mod, sizeof(rand_mod)); |
399 | ddev->poll_tech_count; | 401 | ddev->poll_tech_index = rand_mod % ddev->poll_tech_count; |
400 | 402 | ||
401 | mutex_unlock(&ddev->poll_lock); | 403 | mutex_unlock(&ddev->poll_lock); |
402 | 404 | ||
diff --git a/net/nfc/digital_dep.c b/net/nfc/digital_dep.c index d4ed25ff723f..171cb9949ab5 100644 --- a/net/nfc/digital_dep.c +++ b/net/nfc/digital_dep.c | |||
@@ -224,9 +224,8 @@ int digital_in_send_atr_req(struct nfc_digital_dev *ddev, | |||
224 | 224 | ||
225 | ddev->skb_add_crc(skb); | 225 | ddev->skb_add_crc(skb); |
226 | 226 | ||
227 | digital_in_send_cmd(ddev, skb, 500, digital_in_recv_atr_res, target); | 227 | return digital_in_send_cmd(ddev, skb, 500, digital_in_recv_atr_res, |
228 | 228 | target); | |
229 | return 0; | ||
230 | } | 229 | } |
231 | 230 | ||
232 | static int digital_in_send_rtox(struct nfc_digital_dev *ddev, | 231 | static int digital_in_send_rtox(struct nfc_digital_dev *ddev, |
diff --git a/net/nfc/digital_technology.c b/net/nfc/digital_technology.c index 12a233e9ece5..c2c1c0189b7c 100644 --- a/net/nfc/digital_technology.c +++ b/net/nfc/digital_technology.c | |||
@@ -613,7 +613,7 @@ exit: | |||
613 | digital_poll_next_tech(ddev); | 613 | digital_poll_next_tech(ddev); |
614 | } | 614 | } |
615 | 615 | ||
616 | int digital_in_send_attrib_req(struct nfc_digital_dev *ddev, | 616 | static int digital_in_send_attrib_req(struct nfc_digital_dev *ddev, |
617 | struct nfc_target *target, | 617 | struct nfc_target *target, |
618 | struct digital_sensb_res *sensb_res) | 618 | struct digital_sensb_res *sensb_res) |
619 | { | 619 | { |
diff --git a/net/nfc/rawsock.c b/net/nfc/rawsock.c index 8627c75063e2..55eefee311eb 100644 --- a/net/nfc/rawsock.c +++ b/net/nfc/rawsock.c | |||
@@ -31,14 +31,14 @@ static struct nfc_sock_list raw_sk_list = { | |||
31 | .lock = __RW_LOCK_UNLOCKED(raw_sk_list.lock) | 31 | .lock = __RW_LOCK_UNLOCKED(raw_sk_list.lock) |
32 | }; | 32 | }; |
33 | 33 | ||
34 | void nfc_sock_link(struct nfc_sock_list *l, struct sock *sk) | 34 | static void nfc_sock_link(struct nfc_sock_list *l, struct sock *sk) |
35 | { | 35 | { |
36 | write_lock(&l->lock); | 36 | write_lock(&l->lock); |
37 | sk_add_node(sk, &l->head); | 37 | sk_add_node(sk, &l->head); |
38 | write_unlock(&l->lock); | 38 | write_unlock(&l->lock); |
39 | } | 39 | } |
40 | 40 | ||
41 | void nfc_sock_unlink(struct nfc_sock_list *l, struct sock *sk) | 41 | static void nfc_sock_unlink(struct nfc_sock_list *l, struct sock *sk) |
42 | { | 42 | { |
43 | write_lock(&l->lock); | 43 | write_lock(&l->lock); |
44 | sk_del_node_init(sk); | 44 | sk_del_node_init(sk); |