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 static int pn533_usb_send_frame(struct pn533
*dev
,
159 struct pn533_usb_phy
*phy
= dev
->phy
;
162 if (phy
->priv
== NULL
)
165 phy
->out_urb
->transfer_buffer
= out
->data
;
166 phy
->out_urb
->transfer_buffer_length
= out
->len
;
168 print_hex_dump_debug("PN533 TX: ", DUMP_PREFIX_NONE
, 16, 1,
169 out
->data
, out
->len
, false);
171 rc
= usb_submit_urb(phy
->out_urb
, GFP_KERNEL
);
175 if (dev
->protocol_type
== PN533_PROTO_REQ_RESP
) {
176 /* request for response for sent packet directly */
177 rc
= pn533_submit_urb_for_response(phy
, GFP_KERNEL
);
180 } else if (dev
->protocol_type
== PN533_PROTO_REQ_ACK_RESP
) {
181 /* request for ACK if that's the case */
182 rc
= pn533_submit_urb_for_ack(phy
, GFP_KERNEL
);
190 usb_unlink_urb(phy
->out_urb
);
194 static void pn533_usb_abort_cmd(struct pn533
*dev
, gfp_t flags
)
196 struct pn533_usb_phy
*phy
= dev
->phy
;
198 /* ACR122U does not support any command which aborts last
199 * issued command i.e. as ACK for standard PN533. Additionally,
200 * it behaves stange, sending broken or incorrect responses,
201 * when we cancel urb before the chip will send response.
203 if (dev
->device_type
== PN533_DEVICE_ACR122U
)
206 /* An ack will cancel the last issued command */
207 pn533_usb_send_ack(dev
, flags
);
209 /* cancel the urb request */
210 usb_kill_urb(phy
->in_urb
);
213 /* ACR122 specific structs and fucntions */
215 /* ACS ACR122 pn533 frame definitions */
216 #define PN533_ACR122_TX_FRAME_HEADER_LEN (sizeof(struct pn533_acr122_tx_frame) \
218 #define PN533_ACR122_TX_FRAME_TAIL_LEN 0
219 #define PN533_ACR122_RX_FRAME_HEADER_LEN (sizeof(struct pn533_acr122_rx_frame) \
221 #define PN533_ACR122_RX_FRAME_TAIL_LEN 2
222 #define PN533_ACR122_FRAME_MAX_PAYLOAD_LEN PN533_STD_FRAME_MAX_PAYLOAD_LEN
224 /* CCID messages types */
225 #define PN533_ACR122_PC_TO_RDR_ICCPOWERON 0x62
226 #define PN533_ACR122_PC_TO_RDR_ESCAPE 0x6B
228 #define PN533_ACR122_RDR_TO_PC_ESCAPE 0x83
231 struct pn533_acr122_ccid_hdr
{
238 * 3 msg specific bytes or status, error and 1 specific
239 * byte for reposnse msg
242 u8 data
[]; /* payload */
245 struct pn533_acr122_apdu_hdr
{
252 struct pn533_acr122_tx_frame
{
253 struct pn533_acr122_ccid_hdr ccid
;
254 struct pn533_acr122_apdu_hdr apdu
;
256 u8 data
[]; /* pn533 frame: TFI ... */
259 struct pn533_acr122_rx_frame
{
260 struct pn533_acr122_ccid_hdr ccid
;
261 u8 data
[]; /* pn533 frame : TFI ... */
264 static void pn533_acr122_tx_frame_init(void *_frame
, u8 cmd_code
)
266 struct pn533_acr122_tx_frame
*frame
= _frame
;
268 frame
->ccid
.type
= PN533_ACR122_PC_TO_RDR_ESCAPE
;
269 /* sizeof(apdu_hdr) + sizeof(datalen) */
270 frame
->ccid
.datalen
= sizeof(frame
->apdu
) + 1;
271 frame
->ccid
.slot
= 0;
273 frame
->ccid
.params
[0] = 0;
274 frame
->ccid
.params
[1] = 0;
275 frame
->ccid
.params
[2] = 0;
277 frame
->data
[0] = PN533_STD_FRAME_DIR_OUT
;
278 frame
->data
[1] = cmd_code
;
279 frame
->datalen
= 2; /* data[0] + data[1] */
281 frame
->apdu
.class = 0xFF;
287 static void pn533_acr122_tx_frame_finish(void *_frame
)
289 struct pn533_acr122_tx_frame
*frame
= _frame
;
291 frame
->ccid
.datalen
+= frame
->datalen
;
294 static void pn533_acr122_tx_update_payload_len(void *_frame
, int len
)
296 struct pn533_acr122_tx_frame
*frame
= _frame
;
298 frame
->datalen
+= len
;
301 static bool pn533_acr122_is_rx_frame_valid(void *_frame
, struct pn533
*dev
)
303 struct pn533_acr122_rx_frame
*frame
= _frame
;
305 if (frame
->ccid
.type
!= 0x83)
308 if (!frame
->ccid
.datalen
)
311 if (frame
->data
[frame
->ccid
.datalen
- 2] == 0x63)
317 static int pn533_acr122_rx_frame_size(void *frame
)
319 struct pn533_acr122_rx_frame
*f
= frame
;
321 /* f->ccid.datalen already includes tail length */
322 return sizeof(struct pn533_acr122_rx_frame
) + f
->ccid
.datalen
;
325 static u8
pn533_acr122_get_cmd_code(void *frame
)
327 struct pn533_acr122_rx_frame
*f
= frame
;
329 return PN533_FRAME_CMD(f
);
332 static struct pn533_frame_ops pn533_acr122_frame_ops
= {
333 .tx_frame_init
= pn533_acr122_tx_frame_init
,
334 .tx_frame_finish
= pn533_acr122_tx_frame_finish
,
335 .tx_update_payload_len
= pn533_acr122_tx_update_payload_len
,
336 .tx_header_len
= PN533_ACR122_TX_FRAME_HEADER_LEN
,
337 .tx_tail_len
= PN533_ACR122_TX_FRAME_TAIL_LEN
,
339 .rx_is_frame_valid
= pn533_acr122_is_rx_frame_valid
,
340 .rx_header_len
= PN533_ACR122_RX_FRAME_HEADER_LEN
,
341 .rx_tail_len
= PN533_ACR122_RX_FRAME_TAIL_LEN
,
342 .rx_frame_size
= pn533_acr122_rx_frame_size
,
344 .max_payload_len
= PN533_ACR122_FRAME_MAX_PAYLOAD_LEN
,
345 .get_cmd_code
= pn533_acr122_get_cmd_code
,
348 struct pn533_acr122_poweron_rdr_arg
{
350 struct completion done
;
353 static void pn533_acr122_poweron_rdr_resp(struct urb
*urb
)
355 struct pn533_acr122_poweron_rdr_arg
*arg
= urb
->context
;
357 dev_dbg(&urb
->dev
->dev
, "%s\n", __func__
);
359 print_hex_dump_debug("ACR122 RX: ", DUMP_PREFIX_NONE
, 16, 1,
360 urb
->transfer_buffer
, urb
->transfer_buffer_length
,
363 arg
->rc
= urb
->status
;
364 complete(&arg
->done
);
367 static int pn533_acr122_poweron_rdr(struct pn533_usb_phy
*phy
)
369 /* Power on th reader (CCID cmd) */
370 u8 cmd
[10] = {PN533_ACR122_PC_TO_RDR_ICCPOWERON
,
371 0, 0, 0, 0, 0, 0, 3, 0, 0};
376 struct pn533_acr122_poweron_rdr_arg arg
;
378 dev_dbg(&phy
->udev
->dev
, "%s\n", __func__
);
380 buffer
= kmemdup(cmd
, sizeof(cmd
), GFP_KERNEL
);
384 init_completion(&arg
.done
);
385 cntx
= phy
->in_urb
->context
; /* backup context */
387 phy
->in_urb
->complete
= pn533_acr122_poweron_rdr_resp
;
388 phy
->in_urb
->context
= &arg
;
390 print_hex_dump_debug("ACR122 TX: ", DUMP_PREFIX_NONE
, 16, 1,
391 cmd
, sizeof(cmd
), false);
393 rc
= usb_bulk_msg(phy
->udev
, phy
->out_urb
->pipe
, buffer
, sizeof(cmd
),
396 if (rc
|| (transferred
!= sizeof(cmd
))) {
397 nfc_err(&phy
->udev
->dev
,
398 "Reader power on cmd error %d\n", rc
);
402 rc
= usb_submit_urb(phy
->in_urb
, GFP_KERNEL
);
404 nfc_err(&phy
->udev
->dev
,
405 "Can't submit reader poweron cmd response %d\n", rc
);
409 wait_for_completion(&arg
.done
);
410 phy
->in_urb
->context
= cntx
; /* restore context */
415 static void pn533_send_complete(struct urb
*urb
)
417 struct pn533_usb_phy
*phy
= urb
->context
;
419 switch (urb
->status
) {
424 dev_dbg(&phy
->udev
->dev
,
425 "The urb has been stopped (status %d)\n",
430 nfc_err(&phy
->udev
->dev
,
431 "Urb failure (status %d)\n",
436 static struct pn533_phy_ops usb_phy_ops
= {
437 .send_frame
= pn533_usb_send_frame
,
438 .send_ack
= pn533_usb_send_ack
,
439 .abort_cmd
= pn533_usb_abort_cmd
,
442 static int pn533_usb_probe(struct usb_interface
*interface
,
443 const struct usb_device_id
*id
)
446 struct pn533_usb_phy
*phy
;
447 struct usb_host_interface
*iface_desc
;
448 struct usb_endpoint_descriptor
*endpoint
;
450 int out_endpoint
= 0;
454 enum pn533_protocol_type protocol_type
= PN533_PROTO_REQ_ACK_RESP
;
455 struct pn533_frame_ops
*fops
= NULL
;
456 unsigned char *in_buf
;
457 int in_buf_len
= PN533_EXT_FRAME_HEADER_LEN
+
458 PN533_STD_FRAME_MAX_PAYLOAD_LEN
+
459 PN533_STD_FRAME_TAIL_LEN
;
461 phy
= devm_kzalloc(&interface
->dev
, sizeof(*phy
), GFP_KERNEL
);
465 in_buf
= kzalloc(in_buf_len
, GFP_KERNEL
);
469 phy
->udev
= usb_get_dev(interface_to_usbdev(interface
));
470 phy
->interface
= interface
;
472 iface_desc
= interface
->cur_altsetting
;
473 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
474 endpoint
= &iface_desc
->endpoint
[i
].desc
;
476 if (!in_endpoint
&& usb_endpoint_is_bulk_in(endpoint
))
477 in_endpoint
= endpoint
->bEndpointAddress
;
479 if (!out_endpoint
&& usb_endpoint_is_bulk_out(endpoint
))
480 out_endpoint
= endpoint
->bEndpointAddress
;
483 if (!in_endpoint
|| !out_endpoint
) {
484 nfc_err(&interface
->dev
,
485 "Could not find bulk-in or bulk-out endpoint\n");
490 phy
->in_urb
= usb_alloc_urb(0, GFP_KERNEL
);
491 phy
->out_urb
= usb_alloc_urb(0, GFP_KERNEL
);
492 phy
->ack_urb
= usb_alloc_urb(0, GFP_KERNEL
);
494 if (!phy
->in_urb
|| !phy
->out_urb
|| !phy
->ack_urb
)
497 usb_fill_bulk_urb(phy
->in_urb
, phy
->udev
,
498 usb_rcvbulkpipe(phy
->udev
, in_endpoint
),
499 in_buf
, in_buf_len
, NULL
, phy
);
501 usb_fill_bulk_urb(phy
->out_urb
, phy
->udev
,
502 usb_sndbulkpipe(phy
->udev
, out_endpoint
),
503 NULL
, 0, pn533_send_complete
, phy
);
504 usb_fill_bulk_urb(phy
->ack_urb
, phy
->udev
,
505 usb_sndbulkpipe(phy
->udev
, out_endpoint
),
506 NULL
, 0, pn533_send_complete
, phy
);
508 switch (id
->driver_info
) {
509 case PN533_DEVICE_STD
:
510 protocols
= PN533_ALL_PROTOCOLS
;
513 case PN533_DEVICE_PASORI
:
514 protocols
= PN533_NO_TYPE_B_PROTOCOLS
;
517 case PN533_DEVICE_ACR122U
:
518 protocols
= PN533_NO_TYPE_B_PROTOCOLS
;
519 fops
= &pn533_acr122_frame_ops
;
520 protocol_type
= PN533_PROTO_REQ_RESP
,
522 rc
= pn533_acr122_poweron_rdr(phy
);
524 nfc_err(&interface
->dev
,
525 "Couldn't poweron the reader (error %d)\n", rc
);
531 nfc_err(&interface
->dev
, "Unknown device type %lu\n",
537 priv
= pn533_register_device(id
->driver_info
, protocols
, protocol_type
,
538 phy
, &usb_phy_ops
, fops
,
539 &phy
->udev
->dev
, &interface
->dev
);
548 rc
= pn533_finalize_setup(priv
);
552 usb_set_intfdata(interface
, phy
);
557 usb_free_urb(phy
->in_urb
);
558 usb_free_urb(phy
->out_urb
);
559 usb_free_urb(phy
->ack_urb
);
560 usb_put_dev(phy
->udev
);
566 static void pn533_usb_disconnect(struct usb_interface
*interface
)
568 struct pn533_usb_phy
*phy
= usb_get_intfdata(interface
);
573 pn533_unregister_device(phy
->priv
);
575 usb_set_intfdata(interface
, NULL
);
577 usb_kill_urb(phy
->in_urb
);
578 usb_kill_urb(phy
->out_urb
);
579 usb_kill_urb(phy
->ack_urb
);
581 kfree(phy
->in_urb
->transfer_buffer
);
582 usb_free_urb(phy
->in_urb
);
583 usb_free_urb(phy
->out_urb
);
584 usb_free_urb(phy
->ack_urb
);
585 kfree(phy
->ack_buffer
);
587 nfc_info(&interface
->dev
, "NXP PN533 NFC device disconnected\n");
590 static struct usb_driver pn533_usb_driver
= {
592 .probe
= pn533_usb_probe
,
593 .disconnect
= pn533_usb_disconnect
,
594 .id_table
= pn533_usb_table
,
597 module_usb_driver(pn533_usb_driver
);
599 MODULE_AUTHOR("Lauro Ramos Venancio <lauro.venancio@openbossa.org>");
600 MODULE_AUTHOR("Aloisio Almeida Jr <aloisio.almeida@openbossa.org>");
601 MODULE_AUTHOR("Waldemar Rymarkiewicz <waldemar.rymarkiewicz@tieto.com>");
602 MODULE_DESCRIPTION("PN533 USB driver ver " VERSION
);
603 MODULE_VERSION(VERSION
);
604 MODULE_LICENSE("GPL");