1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Driver for NXP PN533 NFC Chip - USB transport layer
5 * Copyright (C) 2011 Instituto Nokia de Tecnologia
6 * Copyright (C) 2012-2013 Tieto Poland
9 #include <linux/device.h>
10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/slab.h>
13 #include <linux/usb.h>
14 #include <linux/nfc.h>
15 #include <linux/netdevice.h>
16 #include <net/nfc/nfc.h>
21 #define PN533_VENDOR_ID 0x4CC
22 #define PN533_PRODUCT_ID 0x2533
24 #define SCM_VENDOR_ID 0x4E6
25 #define SCL3711_PRODUCT_ID 0x5591
27 #define SONY_VENDOR_ID 0x054c
28 #define PASORI_PRODUCT_ID 0x02e1
30 #define ACS_VENDOR_ID 0x072f
31 #define ACR122U_PRODUCT_ID 0x2200
33 static const struct usb_device_id pn533_usb_table
[] = {
34 { USB_DEVICE(PN533_VENDOR_ID
, PN533_PRODUCT_ID
),
35 .driver_info
= PN533_DEVICE_STD
},
36 { USB_DEVICE(SCM_VENDOR_ID
, SCL3711_PRODUCT_ID
),
37 .driver_info
= PN533_DEVICE_STD
},
38 { USB_DEVICE(SONY_VENDOR_ID
, PASORI_PRODUCT_ID
),
39 .driver_info
= PN533_DEVICE_PASORI
},
40 { USB_DEVICE(ACS_VENDOR_ID
, ACR122U_PRODUCT_ID
),
41 .driver_info
= PN533_DEVICE_ACR122U
},
44 MODULE_DEVICE_TABLE(usb
, pn533_usb_table
);
46 struct pn533_usb_phy
{
47 struct usb_device
*udev
;
48 struct usb_interface
*interface
;
59 static void pn533_recv_response(struct urb
*urb
)
61 struct pn533_usb_phy
*phy
= urb
->context
;
62 struct sk_buff
*skb
= NULL
;
65 skb
= alloc_skb(urb
->actual_length
, GFP_ATOMIC
);
67 nfc_err(&phy
->udev
->dev
, "failed to alloc memory\n");
69 skb_put_data(skb
, urb
->transfer_buffer
,
74 pn533_recv_frame(phy
->priv
, skb
, urb
->status
);
77 static int pn533_submit_urb_for_response(struct pn533_usb_phy
*phy
, gfp_t flags
)
79 phy
->in_urb
->complete
= pn533_recv_response
;
81 return usb_submit_urb(phy
->in_urb
, flags
);
84 static void pn533_recv_ack(struct urb
*urb
)
86 struct pn533_usb_phy
*phy
= urb
->context
;
87 struct pn533
*priv
= phy
->priv
;
88 struct pn533_cmd
*cmd
= priv
->cmd
;
89 struct pn533_std_frame
*in_frame
;
92 cmd
->status
= urb
->status
;
94 switch (urb
->status
) {
99 dev_dbg(&phy
->udev
->dev
,
100 "The urb has been stopped (status %d)\n",
105 nfc_err(&phy
->udev
->dev
,
106 "Urb failure (status %d)\n", urb
->status
);
110 in_frame
= phy
->in_urb
->transfer_buffer
;
112 if (!pn533_rx_frame_is_ack(in_frame
)) {
113 nfc_err(&phy
->udev
->dev
, "Received an invalid ack\n");
118 rc
= pn533_submit_urb_for_response(phy
, GFP_ATOMIC
);
120 nfc_err(&phy
->udev
->dev
,
121 "usb_submit_urb failed with result %d\n", rc
);
129 queue_work(priv
->wq
, &priv
->cmd_complete_work
);
132 static int pn533_submit_urb_for_ack(struct pn533_usb_phy
*phy
, gfp_t flags
)
134 phy
->in_urb
->complete
= pn533_recv_ack
;
136 return usb_submit_urb(phy
->in_urb
, flags
);
139 static int pn533_usb_send_ack(struct pn533
*dev
, gfp_t flags
)
141 struct pn533_usb_phy
*phy
= dev
->phy
;
142 static const u8 ack
[6] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00};
143 /* spec 7.1.1.3: Preamble, SoPC (2), ACK Code (2), Postamble */
145 if (!phy
->ack_buffer
) {
146 phy
->ack_buffer
= kmemdup(ack
, sizeof(ack
), flags
);
147 if (!phy
->ack_buffer
)
151 phy
->ack_urb
->transfer_buffer
= phy
->ack_buffer
;
152 phy
->ack_urb
->transfer_buffer_length
= sizeof(ack
);
153 return usb_submit_urb(phy
->ack_urb
, flags
);
156 struct pn533_out_arg
{
157 struct pn533_usb_phy
*phy
;
158 struct completion done
;
161 static int pn533_usb_send_frame(struct pn533
*dev
,
164 struct pn533_usb_phy
*phy
= dev
->phy
;
165 struct pn533_out_arg arg
;
169 if (phy
->priv
== NULL
)
172 phy
->out_urb
->transfer_buffer
= out
->data
;
173 phy
->out_urb
->transfer_buffer_length
= out
->len
;
175 print_hex_dump_debug("PN533 TX: ", DUMP_PREFIX_NONE
, 16, 1,
176 out
->data
, out
->len
, false);
179 init_completion(&arg
.done
);
180 cntx
= phy
->out_urb
->context
;
181 phy
->out_urb
->context
= &arg
;
183 rc
= usb_submit_urb(phy
->out_urb
, GFP_KERNEL
);
187 wait_for_completion(&arg
.done
);
188 phy
->out_urb
->context
= cntx
;
190 if (dev
->protocol_type
== PN533_PROTO_REQ_RESP
) {
191 /* request for response for sent packet directly */
192 rc
= pn533_submit_urb_for_response(phy
, GFP_KERNEL
);
195 } else if (dev
->protocol_type
== PN533_PROTO_REQ_ACK_RESP
) {
196 /* request for ACK if that's the case */
197 rc
= pn533_submit_urb_for_ack(phy
, GFP_KERNEL
);
205 usb_unlink_urb(phy
->out_urb
);
209 static void pn533_usb_abort_cmd(struct pn533
*dev
, gfp_t flags
)
211 struct pn533_usb_phy
*phy
= dev
->phy
;
213 /* ACR122U does not support any command which aborts last
214 * issued command i.e. as ACK for standard PN533. Additionally,
215 * it behaves stange, sending broken or incorrect responses,
216 * when we cancel urb before the chip will send response.
218 if (dev
->device_type
== PN533_DEVICE_ACR122U
)
221 /* An ack will cancel the last issued command */
222 pn533_usb_send_ack(dev
, flags
);
224 /* cancel the urb request */
225 usb_kill_urb(phy
->in_urb
);
228 /* ACR122 specific structs and functions */
230 /* ACS ACR122 pn533 frame definitions */
231 #define PN533_ACR122_TX_FRAME_HEADER_LEN (sizeof(struct pn533_acr122_tx_frame) \
233 #define PN533_ACR122_TX_FRAME_TAIL_LEN 0
234 #define PN533_ACR122_RX_FRAME_HEADER_LEN (sizeof(struct pn533_acr122_rx_frame) \
236 #define PN533_ACR122_RX_FRAME_TAIL_LEN 2
237 #define PN533_ACR122_FRAME_MAX_PAYLOAD_LEN PN533_STD_FRAME_MAX_PAYLOAD_LEN
239 /* CCID messages types */
240 #define PN533_ACR122_PC_TO_RDR_ICCPOWERON 0x62
241 #define PN533_ACR122_PC_TO_RDR_ESCAPE 0x6B
243 #define PN533_ACR122_RDR_TO_PC_ESCAPE 0x83
246 struct pn533_acr122_ccid_hdr
{
253 * 3 msg specific bytes or status, error and 1 specific
254 * byte for reposnse msg
257 u8 data
[]; /* payload */
260 struct pn533_acr122_apdu_hdr
{
267 struct pn533_acr122_tx_frame
{
268 struct pn533_acr122_ccid_hdr ccid
;
269 struct pn533_acr122_apdu_hdr apdu
;
271 u8 data
[]; /* pn533 frame: TFI ... */
274 struct pn533_acr122_rx_frame
{
275 struct pn533_acr122_ccid_hdr ccid
;
276 u8 data
[]; /* pn533 frame : TFI ... */
279 static void pn533_acr122_tx_frame_init(void *_frame
, u8 cmd_code
)
281 struct pn533_acr122_tx_frame
*frame
= _frame
;
283 frame
->ccid
.type
= PN533_ACR122_PC_TO_RDR_ESCAPE
;
284 /* sizeof(apdu_hdr) + sizeof(datalen) */
285 frame
->ccid
.datalen
= sizeof(frame
->apdu
) + 1;
286 frame
->ccid
.slot
= 0;
288 frame
->ccid
.params
[0] = 0;
289 frame
->ccid
.params
[1] = 0;
290 frame
->ccid
.params
[2] = 0;
292 frame
->data
[0] = PN533_STD_FRAME_DIR_OUT
;
293 frame
->data
[1] = cmd_code
;
294 frame
->datalen
= 2; /* data[0] + data[1] */
296 frame
->apdu
.class = 0xFF;
302 static void pn533_acr122_tx_frame_finish(void *_frame
)
304 struct pn533_acr122_tx_frame
*frame
= _frame
;
306 frame
->ccid
.datalen
+= frame
->datalen
;
309 static void pn533_acr122_tx_update_payload_len(void *_frame
, int len
)
311 struct pn533_acr122_tx_frame
*frame
= _frame
;
313 frame
->datalen
+= len
;
316 static bool pn533_acr122_is_rx_frame_valid(void *_frame
, struct pn533
*dev
)
318 struct pn533_acr122_rx_frame
*frame
= _frame
;
320 if (frame
->ccid
.type
!= 0x83)
323 if (!frame
->ccid
.datalen
)
326 if (frame
->data
[frame
->ccid
.datalen
- 2] == 0x63)
332 static int pn533_acr122_rx_frame_size(void *frame
)
334 struct pn533_acr122_rx_frame
*f
= frame
;
336 /* f->ccid.datalen already includes tail length */
337 return sizeof(struct pn533_acr122_rx_frame
) + f
->ccid
.datalen
;
340 static u8
pn533_acr122_get_cmd_code(void *frame
)
342 struct pn533_acr122_rx_frame
*f
= frame
;
344 return PN533_FRAME_CMD(f
);
347 static struct pn533_frame_ops pn533_acr122_frame_ops
= {
348 .tx_frame_init
= pn533_acr122_tx_frame_init
,
349 .tx_frame_finish
= pn533_acr122_tx_frame_finish
,
350 .tx_update_payload_len
= pn533_acr122_tx_update_payload_len
,
351 .tx_header_len
= PN533_ACR122_TX_FRAME_HEADER_LEN
,
352 .tx_tail_len
= PN533_ACR122_TX_FRAME_TAIL_LEN
,
354 .rx_is_frame_valid
= pn533_acr122_is_rx_frame_valid
,
355 .rx_header_len
= PN533_ACR122_RX_FRAME_HEADER_LEN
,
356 .rx_tail_len
= PN533_ACR122_RX_FRAME_TAIL_LEN
,
357 .rx_frame_size
= pn533_acr122_rx_frame_size
,
359 .max_payload_len
= PN533_ACR122_FRAME_MAX_PAYLOAD_LEN
,
360 .get_cmd_code
= pn533_acr122_get_cmd_code
,
363 struct pn533_acr122_poweron_rdr_arg
{
365 struct completion done
;
368 static void pn533_acr122_poweron_rdr_resp(struct urb
*urb
)
370 struct pn533_acr122_poweron_rdr_arg
*arg
= urb
->context
;
372 print_hex_dump_debug("ACR122 RX: ", DUMP_PREFIX_NONE
, 16, 1,
373 urb
->transfer_buffer
, urb
->transfer_buffer_length
,
376 arg
->rc
= urb
->status
;
377 complete(&arg
->done
);
380 static int pn533_acr122_poweron_rdr(struct pn533_usb_phy
*phy
)
382 /* Power on th reader (CCID cmd) */
383 u8 cmd
[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON
,
384 0, 0, 0, 0, 0, 0, 3, 0, 0};
389 struct pn533_acr122_poweron_rdr_arg arg
;
391 buffer
= kmemdup(cmd
, sizeof(cmd
), GFP_KERNEL
);
395 init_completion(&arg
.done
);
396 cntx
= phy
->in_urb
->context
; /* backup context */
398 phy
->in_urb
->complete
= pn533_acr122_poweron_rdr_resp
;
399 phy
->in_urb
->context
= &arg
;
401 print_hex_dump_debug("ACR122 TX: ", DUMP_PREFIX_NONE
, 16, 1,
402 cmd
, sizeof(cmd
), false);
404 rc
= usb_bulk_msg(phy
->udev
, phy
->out_urb
->pipe
, buffer
, sizeof(cmd
),
407 if (rc
|| (transferred
!= sizeof(cmd
))) {
408 nfc_err(&phy
->udev
->dev
,
409 "Reader power on cmd error %d\n", rc
);
413 rc
= usb_submit_urb(phy
->in_urb
, GFP_KERNEL
);
415 nfc_err(&phy
->udev
->dev
,
416 "Can't submit reader poweron cmd response %d\n", rc
);
420 wait_for_completion(&arg
.done
);
421 phy
->in_urb
->context
= cntx
; /* restore context */
426 static void pn533_out_complete(struct urb
*urb
)
428 struct pn533_out_arg
*arg
= urb
->context
;
429 struct pn533_usb_phy
*phy
= arg
->phy
;
431 switch (urb
->status
) {
436 dev_dbg(&phy
->udev
->dev
,
437 "The urb has been stopped (status %d)\n",
442 nfc_err(&phy
->udev
->dev
,
443 "Urb failure (status %d)\n",
447 complete(&arg
->done
);
450 static void pn533_ack_complete(struct urb
*urb
)
452 struct pn533_usb_phy
*phy
= urb
->context
;
454 switch (urb
->status
) {
459 dev_dbg(&phy
->udev
->dev
,
460 "The urb has been stopped (status %d)\n",
465 nfc_err(&phy
->udev
->dev
,
466 "Urb failure (status %d)\n",
471 static const struct pn533_phy_ops usb_phy_ops
= {
472 .send_frame
= pn533_usb_send_frame
,
473 .send_ack
= pn533_usb_send_ack
,
474 .abort_cmd
= pn533_usb_abort_cmd
,
477 static int pn533_usb_probe(struct usb_interface
*interface
,
478 const struct usb_device_id
*id
)
481 struct pn533_usb_phy
*phy
;
482 struct usb_host_interface
*iface_desc
;
483 struct usb_endpoint_descriptor
*endpoint
;
485 int out_endpoint
= 0;
489 enum pn533_protocol_type protocol_type
= PN533_PROTO_REQ_ACK_RESP
;
490 struct pn533_frame_ops
*fops
= NULL
;
491 unsigned char *in_buf
;
492 int in_buf_len
= PN533_EXT_FRAME_HEADER_LEN
+
493 PN533_STD_FRAME_MAX_PAYLOAD_LEN
+
494 PN533_STD_FRAME_TAIL_LEN
;
496 phy
= devm_kzalloc(&interface
->dev
, sizeof(*phy
), GFP_KERNEL
);
500 in_buf
= kzalloc(in_buf_len
, GFP_KERNEL
);
504 phy
->udev
= usb_get_dev(interface_to_usbdev(interface
));
505 phy
->interface
= interface
;
507 iface_desc
= interface
->cur_altsetting
;
508 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
509 endpoint
= &iface_desc
->endpoint
[i
].desc
;
511 if (!in_endpoint
&& usb_endpoint_is_bulk_in(endpoint
))
512 in_endpoint
= endpoint
->bEndpointAddress
;
514 if (!out_endpoint
&& usb_endpoint_is_bulk_out(endpoint
))
515 out_endpoint
= endpoint
->bEndpointAddress
;
518 if (!in_endpoint
|| !out_endpoint
) {
519 nfc_err(&interface
->dev
,
520 "Could not find bulk-in or bulk-out endpoint\n");
525 phy
->in_urb
= usb_alloc_urb(0, GFP_KERNEL
);
526 phy
->out_urb
= usb_alloc_urb(0, GFP_KERNEL
);
527 phy
->ack_urb
= usb_alloc_urb(0, GFP_KERNEL
);
529 if (!phy
->in_urb
|| !phy
->out_urb
|| !phy
->ack_urb
)
532 usb_fill_bulk_urb(phy
->in_urb
, phy
->udev
,
533 usb_rcvbulkpipe(phy
->udev
, in_endpoint
),
534 in_buf
, in_buf_len
, NULL
, phy
);
536 usb_fill_bulk_urb(phy
->out_urb
, phy
->udev
,
537 usb_sndbulkpipe(phy
->udev
, out_endpoint
),
538 NULL
, 0, pn533_out_complete
, phy
);
539 usb_fill_bulk_urb(phy
->ack_urb
, phy
->udev
,
540 usb_sndbulkpipe(phy
->udev
, out_endpoint
),
541 NULL
, 0, pn533_ack_complete
, phy
);
543 switch (id
->driver_info
) {
544 case PN533_DEVICE_STD
:
545 protocols
= PN533_ALL_PROTOCOLS
;
548 case PN533_DEVICE_PASORI
:
549 protocols
= PN533_NO_TYPE_B_PROTOCOLS
;
552 case PN533_DEVICE_ACR122U
:
553 protocols
= PN533_NO_TYPE_B_PROTOCOLS
;
554 fops
= &pn533_acr122_frame_ops
;
555 protocol_type
= PN533_PROTO_REQ_RESP
;
557 rc
= pn533_acr122_poweron_rdr(phy
);
559 nfc_err(&interface
->dev
,
560 "Couldn't poweron the reader (error %d)\n", rc
);
566 nfc_err(&interface
->dev
, "Unknown device type %lu\n",
572 priv
= pn53x_common_init(id
->driver_info
, protocol_type
,
573 phy
, &usb_phy_ops
, fops
,
583 rc
= pn533_finalize_setup(priv
);
587 usb_set_intfdata(interface
, phy
);
588 rc
= pn53x_register_nfc(priv
, protocols
, &interface
->dev
);
595 pn53x_common_clean(priv
);
597 usb_kill_urb(phy
->in_urb
);
598 usb_kill_urb(phy
->out_urb
);
599 usb_kill_urb(phy
->ack_urb
);
601 usb_free_urb(phy
->in_urb
);
602 usb_free_urb(phy
->out_urb
);
603 usb_free_urb(phy
->ack_urb
);
604 usb_put_dev(phy
->udev
);
606 kfree(phy
->ack_buffer
);
611 static void pn533_usb_disconnect(struct usb_interface
*interface
)
613 struct pn533_usb_phy
*phy
= usb_get_intfdata(interface
);
618 pn53x_unregister_nfc(phy
->priv
);
619 pn53x_common_clean(phy
->priv
);
621 usb_set_intfdata(interface
, NULL
);
623 usb_kill_urb(phy
->in_urb
);
624 usb_kill_urb(phy
->out_urb
);
625 usb_kill_urb(phy
->ack_urb
);
627 kfree(phy
->in_urb
->transfer_buffer
);
628 usb_free_urb(phy
->in_urb
);
629 usb_free_urb(phy
->out_urb
);
630 usb_free_urb(phy
->ack_urb
);
631 kfree(phy
->ack_buffer
);
633 nfc_info(&interface
->dev
, "NXP PN533 NFC device disconnected\n");
636 static struct usb_driver pn533_usb_driver
= {
638 .probe
= pn533_usb_probe
,
639 .disconnect
= pn533_usb_disconnect
,
640 .id_table
= pn533_usb_table
,
643 module_usb_driver(pn533_usb_driver
);
645 MODULE_AUTHOR("Lauro Ramos Venancio <lauro.venancio@openbossa.org>");
646 MODULE_AUTHOR("Aloisio Almeida Jr <aloisio.almeida@openbossa.org>");
647 MODULE_AUTHOR("Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>");
648 MODULE_DESCRIPTION("PN533 USB driver ver " VERSION
);
649 MODULE_VERSION(VERSION
);
650 MODULE_LICENSE("GPL");