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
259 struct pn533_acr122_apdu_hdr
{
266 struct pn533_acr122_tx_frame
{
267 struct pn533_acr122_ccid_hdr ccid
;
268 struct pn533_acr122_apdu_hdr apdu
;
270 u8 data
[]; /* pn533 frame: TFI ... */
273 struct pn533_acr122_rx_frame
{
274 struct pn533_acr122_ccid_hdr ccid
;
275 u8 data
[]; /* pn533 frame : TFI ... */
278 static void pn533_acr122_tx_frame_init(void *_frame
, u8 cmd_code
)
280 struct pn533_acr122_tx_frame
*frame
= _frame
;
282 frame
->ccid
.type
= PN533_ACR122_PC_TO_RDR_ESCAPE
;
283 /* sizeof(apdu_hdr) + sizeof(datalen) */
284 frame
->ccid
.datalen
= sizeof(frame
->apdu
) + 1;
285 frame
->ccid
.slot
= 0;
287 frame
->ccid
.params
[0] = 0;
288 frame
->ccid
.params
[1] = 0;
289 frame
->ccid
.params
[2] = 0;
291 frame
->data
[0] = PN533_STD_FRAME_DIR_OUT
;
292 frame
->data
[1] = cmd_code
;
293 frame
->datalen
= 2; /* data[0] + data[1] */
295 frame
->apdu
.class = 0xFF;
301 static void pn533_acr122_tx_frame_finish(void *_frame
)
303 struct pn533_acr122_tx_frame
*frame
= _frame
;
305 frame
->ccid
.datalen
+= frame
->datalen
;
308 static void pn533_acr122_tx_update_payload_len(void *_frame
, int len
)
310 struct pn533_acr122_tx_frame
*frame
= _frame
;
312 frame
->datalen
+= len
;
315 static bool pn533_acr122_is_rx_frame_valid(void *_frame
, struct pn533
*dev
)
317 struct pn533_acr122_rx_frame
*frame
= _frame
;
319 if (frame
->ccid
.type
!= 0x83)
322 if (!frame
->ccid
.datalen
)
325 if (frame
->data
[frame
->ccid
.datalen
- 2] == 0x63)
331 static int pn533_acr122_rx_frame_size(void *frame
)
333 struct pn533_acr122_rx_frame
*f
= frame
;
335 /* f->ccid.datalen already includes tail length */
336 return sizeof(struct pn533_acr122_rx_frame
) + f
->ccid
.datalen
;
339 static u8
pn533_acr122_get_cmd_code(void *frame
)
341 struct pn533_acr122_rx_frame
*f
= frame
;
343 return PN533_FRAME_CMD(f
);
346 static struct pn533_frame_ops pn533_acr122_frame_ops
= {
347 .tx_frame_init
= pn533_acr122_tx_frame_init
,
348 .tx_frame_finish
= pn533_acr122_tx_frame_finish
,
349 .tx_update_payload_len
= pn533_acr122_tx_update_payload_len
,
350 .tx_header_len
= PN533_ACR122_TX_FRAME_HEADER_LEN
,
351 .tx_tail_len
= PN533_ACR122_TX_FRAME_TAIL_LEN
,
353 .rx_is_frame_valid
= pn533_acr122_is_rx_frame_valid
,
354 .rx_header_len
= PN533_ACR122_RX_FRAME_HEADER_LEN
,
355 .rx_tail_len
= PN533_ACR122_RX_FRAME_TAIL_LEN
,
356 .rx_frame_size
= pn533_acr122_rx_frame_size
,
358 .max_payload_len
= PN533_ACR122_FRAME_MAX_PAYLOAD_LEN
,
359 .get_cmd_code
= pn533_acr122_get_cmd_code
,
362 struct pn533_acr122_poweron_rdr_arg
{
364 struct completion done
;
367 static void pn533_acr122_poweron_rdr_resp(struct urb
*urb
)
369 struct pn533_acr122_poweron_rdr_arg
*arg
= urb
->context
;
371 print_hex_dump_debug("ACR122 RX: ", DUMP_PREFIX_NONE
, 16, 1,
372 urb
->transfer_buffer
, urb
->transfer_buffer_length
,
375 arg
->rc
= urb
->status
;
376 complete(&arg
->done
);
379 static int pn533_acr122_poweron_rdr(struct pn533_usb_phy
*phy
)
381 /* Power on th reader (CCID cmd) */
382 u8 cmd
[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON
,
383 0, 0, 0, 0, 0, 0, 3, 0, 0};
388 struct pn533_acr122_poweron_rdr_arg arg
;
390 buffer
= kmemdup(cmd
, sizeof(cmd
), GFP_KERNEL
);
394 init_completion(&arg
.done
);
395 cntx
= phy
->in_urb
->context
; /* backup context */
397 phy
->in_urb
->complete
= pn533_acr122_poweron_rdr_resp
;
398 phy
->in_urb
->context
= &arg
;
400 print_hex_dump_debug("ACR122 TX: ", DUMP_PREFIX_NONE
, 16, 1,
401 cmd
, sizeof(cmd
), false);
403 rc
= usb_bulk_msg(phy
->udev
, phy
->out_urb
->pipe
, buffer
, sizeof(cmd
),
406 if (rc
|| (transferred
!= sizeof(cmd
))) {
407 nfc_err(&phy
->udev
->dev
,
408 "Reader power on cmd error %d\n", rc
);
412 rc
= usb_submit_urb(phy
->in_urb
, GFP_KERNEL
);
414 nfc_err(&phy
->udev
->dev
,
415 "Can't submit reader poweron cmd response %d\n", rc
);
419 wait_for_completion(&arg
.done
);
420 phy
->in_urb
->context
= cntx
; /* restore context */
425 static void pn533_out_complete(struct urb
*urb
)
427 struct pn533_out_arg
*arg
= urb
->context
;
428 struct pn533_usb_phy
*phy
= arg
->phy
;
430 switch (urb
->status
) {
435 dev_dbg(&phy
->udev
->dev
,
436 "The urb has been stopped (status %d)\n",
441 nfc_err(&phy
->udev
->dev
,
442 "Urb failure (status %d)\n",
446 complete(&arg
->done
);
449 static void pn533_ack_complete(struct urb
*urb
)
451 struct pn533_usb_phy
*phy
= urb
->context
;
453 switch (urb
->status
) {
458 dev_dbg(&phy
->udev
->dev
,
459 "The urb has been stopped (status %d)\n",
464 nfc_err(&phy
->udev
->dev
,
465 "Urb failure (status %d)\n",
470 static const struct pn533_phy_ops usb_phy_ops
= {
471 .send_frame
= pn533_usb_send_frame
,
472 .send_ack
= pn533_usb_send_ack
,
473 .abort_cmd
= pn533_usb_abort_cmd
,
476 static int pn533_usb_probe(struct usb_interface
*interface
,
477 const struct usb_device_id
*id
)
480 struct pn533_usb_phy
*phy
;
481 struct usb_host_interface
*iface_desc
;
482 struct usb_endpoint_descriptor
*endpoint
;
484 int out_endpoint
= 0;
488 enum pn533_protocol_type protocol_type
= PN533_PROTO_REQ_ACK_RESP
;
489 struct pn533_frame_ops
*fops
= NULL
;
490 unsigned char *in_buf
;
491 int in_buf_len
= PN533_EXT_FRAME_HEADER_LEN
+
492 PN533_STD_FRAME_MAX_PAYLOAD_LEN
+
493 PN533_STD_FRAME_TAIL_LEN
;
495 phy
= devm_kzalloc(&interface
->dev
, sizeof(*phy
), GFP_KERNEL
);
499 in_buf
= kzalloc(in_buf_len
, GFP_KERNEL
);
503 phy
->udev
= usb_get_dev(interface_to_usbdev(interface
));
504 phy
->interface
= interface
;
506 iface_desc
= interface
->cur_altsetting
;
507 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
508 endpoint
= &iface_desc
->endpoint
[i
].desc
;
510 if (!in_endpoint
&& usb_endpoint_is_bulk_in(endpoint
))
511 in_endpoint
= endpoint
->bEndpointAddress
;
513 if (!out_endpoint
&& usb_endpoint_is_bulk_out(endpoint
))
514 out_endpoint
= endpoint
->bEndpointAddress
;
517 if (!in_endpoint
|| !out_endpoint
) {
518 nfc_err(&interface
->dev
,
519 "Could not find bulk-in or bulk-out endpoint\n");
524 phy
->in_urb
= usb_alloc_urb(0, GFP_KERNEL
);
525 phy
->out_urb
= usb_alloc_urb(0, GFP_KERNEL
);
526 phy
->ack_urb
= usb_alloc_urb(0, GFP_KERNEL
);
528 if (!phy
->in_urb
|| !phy
->out_urb
|| !phy
->ack_urb
)
531 usb_fill_bulk_urb(phy
->in_urb
, phy
->udev
,
532 usb_rcvbulkpipe(phy
->udev
, in_endpoint
),
533 in_buf
, in_buf_len
, NULL
, phy
);
535 usb_fill_bulk_urb(phy
->out_urb
, phy
->udev
,
536 usb_sndbulkpipe(phy
->udev
, out_endpoint
),
537 NULL
, 0, pn533_out_complete
, phy
);
538 usb_fill_bulk_urb(phy
->ack_urb
, phy
->udev
,
539 usb_sndbulkpipe(phy
->udev
, out_endpoint
),
540 NULL
, 0, pn533_ack_complete
, phy
);
542 switch (id
->driver_info
) {
543 case PN533_DEVICE_STD
:
544 protocols
= PN533_ALL_PROTOCOLS
;
547 case PN533_DEVICE_PASORI
:
548 protocols
= PN533_NO_TYPE_B_PROTOCOLS
;
551 case PN533_DEVICE_ACR122U
:
552 protocols
= PN533_NO_TYPE_B_PROTOCOLS
;
553 fops
= &pn533_acr122_frame_ops
;
554 protocol_type
= PN533_PROTO_REQ_RESP
;
556 rc
= pn533_acr122_poweron_rdr(phy
);
558 nfc_err(&interface
->dev
,
559 "Couldn't poweron the reader (error %d)\n", rc
);
565 nfc_err(&interface
->dev
, "Unknown device type %lu\n",
571 priv
= pn53x_common_init(id
->driver_info
, protocol_type
,
572 phy
, &usb_phy_ops
, fops
,
582 rc
= pn533_finalize_setup(priv
);
586 usb_set_intfdata(interface
, phy
);
587 rc
= pn53x_register_nfc(priv
, protocols
, &interface
->dev
);
594 pn53x_common_clean(priv
);
596 usb_kill_urb(phy
->in_urb
);
597 usb_kill_urb(phy
->out_urb
);
598 usb_kill_urb(phy
->ack_urb
);
600 usb_free_urb(phy
->in_urb
);
601 usb_free_urb(phy
->out_urb
);
602 usb_free_urb(phy
->ack_urb
);
603 usb_put_dev(phy
->udev
);
605 kfree(phy
->ack_buffer
);
610 static void pn533_usb_disconnect(struct usb_interface
*interface
)
612 struct pn533_usb_phy
*phy
= usb_get_intfdata(interface
);
617 pn53x_unregister_nfc(phy
->priv
);
618 pn53x_common_clean(phy
->priv
);
620 usb_set_intfdata(interface
, NULL
);
622 usb_kill_urb(phy
->in_urb
);
623 usb_kill_urb(phy
->out_urb
);
624 usb_kill_urb(phy
->ack_urb
);
626 kfree(phy
->in_urb
->transfer_buffer
);
627 usb_free_urb(phy
->in_urb
);
628 usb_free_urb(phy
->out_urb
);
629 usb_free_urb(phy
->ack_urb
);
630 kfree(phy
->ack_buffer
);
632 nfc_info(&interface
->dev
, "NXP PN533 NFC device disconnected\n");
635 static struct usb_driver pn533_usb_driver
= {
637 .probe
= pn533_usb_probe
,
638 .disconnect
= pn533_usb_disconnect
,
639 .id_table
= pn533_usb_table
,
642 module_usb_driver(pn533_usb_driver
);
644 MODULE_AUTHOR("Lauro Ramos Venancio <lauro.venancio@openbossa.org>");
645 MODULE_AUTHOR("Aloisio Almeida Jr <aloisio.almeida@openbossa.org>");
646 MODULE_AUTHOR("Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>");
647 MODULE_DESCRIPTION("PN533 USB driver ver " VERSION
);
648 MODULE_VERSION(VERSION
);
649 MODULE_LICENSE("GPL");