1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Driver for NXP PN533 NFC Chip - I2C transport layer
5 * Copyright (C) 2011 Instituto Nokia de Tecnologia
6 * Copyright (C) 2012-2013 Tieto Poland
7 * Copyright (C) 2016 HALE electronic
10 #include <linux/device.h>
11 #include <linux/kernel.h>
12 #include <linux/module.h>
13 #include <linux/slab.h>
14 #include <linux/i2c.h>
15 #include <linux/nfc.h>
16 #include <linux/netdevice.h>
17 #include <linux/interrupt.h>
18 #include <net/nfc/nfc.h>
23 #define PN533_I2C_DRIVER_NAME "pn533_i2c"
25 struct pn533_i2c_phy
{
26 struct i2c_client
*i2c_dev
;
32 * < 0 if hardware error occurred (e.g. i2c err)
33 * and prevents normal operation.
37 static int pn533_i2c_send_ack(struct pn533
*dev
, gfp_t flags
)
39 struct pn533_i2c_phy
*phy
= dev
->phy
;
40 struct i2c_client
*client
= phy
->i2c_dev
;
41 static const u8 ack
[6] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00};
42 /* spec 6.2.1.3: Preamble, SoPC (2), ACK Code (2), Postamble */
45 rc
= i2c_master_send(client
, ack
, 6);
50 static int pn533_i2c_send_frame(struct pn533
*dev
,
53 struct pn533_i2c_phy
*phy
= dev
->phy
;
54 struct i2c_client
*client
= phy
->i2c_dev
;
57 if (phy
->hard_fault
!= 0)
58 return phy
->hard_fault
;
60 if (phy
->priv
== NULL
)
65 print_hex_dump_debug("PN533_i2c TX: ", DUMP_PREFIX_NONE
, 16, 1,
66 out
->data
, out
->len
, false);
68 rc
= i2c_master_send(client
, out
->data
, out
->len
);
70 if (rc
== -EREMOTEIO
) { /* Retry, chip was in power down */
71 usleep_range(6000, 10000);
72 rc
= i2c_master_send(client
, out
->data
, out
->len
);
85 static void pn533_i2c_abort_cmd(struct pn533
*dev
, gfp_t flags
)
87 struct pn533_i2c_phy
*phy
= dev
->phy
;
91 /* An ack will cancel the last issued command */
92 pn533_i2c_send_ack(dev
, flags
);
94 /* schedule cmd_complete_work to finish current command execution */
95 pn533_recv_frame(phy
->priv
, NULL
, -ENOENT
);
98 static int pn533_i2c_read(struct pn533_i2c_phy
*phy
, struct sk_buff
**skb
)
100 struct i2c_client
*client
= phy
->i2c_dev
;
101 int len
= PN533_EXT_FRAME_HEADER_LEN
+
102 PN533_STD_FRAME_MAX_PAYLOAD_LEN
+
103 PN533_STD_FRAME_TAIL_LEN
+ 1;
106 *skb
= alloc_skb(len
, GFP_KERNEL
);
110 r
= i2c_master_recv(client
, skb_put(*skb
, len
), len
);
112 nfc_err(&client
->dev
, "cannot read. r=%d len=%d\n", r
, len
);
117 if (!((*skb
)->data
[0] & 0x01)) {
118 nfc_err(&client
->dev
, "READY flag not set");
123 /* remove READY byte */
125 /* trim to frame size */
126 skb_trim(*skb
, phy
->priv
->ops
->rx_frame_size((*skb
)->data
));
131 static irqreturn_t
pn533_i2c_irq_thread_fn(int irq
, void *data
)
133 struct pn533_i2c_phy
*phy
= data
;
134 struct i2c_client
*client
;
135 struct sk_buff
*skb
= NULL
;
138 if (!phy
|| irq
!= phy
->i2c_dev
->irq
) {
143 client
= phy
->i2c_dev
;
144 dev_dbg(&client
->dev
, "IRQ\n");
146 if (phy
->hard_fault
!= 0)
149 r
= pn533_i2c_read(phy
, &skb
);
150 if (r
== -EREMOTEIO
) {
153 pn533_recv_frame(phy
->priv
, NULL
, -EREMOTEIO
);
156 } else if ((r
== -ENOMEM
) || (r
== -EBADMSG
) || (r
== -EBUSY
)) {
161 pn533_recv_frame(phy
->priv
, skb
, 0);
166 static struct pn533_phy_ops i2c_phy_ops
= {
167 .send_frame
= pn533_i2c_send_frame
,
168 .send_ack
= pn533_i2c_send_ack
,
169 .abort_cmd
= pn533_i2c_abort_cmd
,
173 static int pn533_i2c_probe(struct i2c_client
*client
,
174 const struct i2c_device_id
*id
)
176 struct pn533_i2c_phy
*phy
;
180 dev_dbg(&client
->dev
, "%s\n", __func__
);
181 dev_dbg(&client
->dev
, "IRQ: %d\n", client
->irq
);
183 if (!i2c_check_functionality(client
->adapter
, I2C_FUNC_I2C
)) {
184 nfc_err(&client
->dev
, "Need I2C_FUNC_I2C\n");
188 phy
= devm_kzalloc(&client
->dev
, sizeof(struct pn533_i2c_phy
),
193 phy
->i2c_dev
= client
;
194 i2c_set_clientdata(client
, phy
);
196 priv
= pn53x_common_init(PN533_DEVICE_PN532
,
197 PN533_PROTO_REQ_ACK_RESP
,
198 phy
, &i2c_phy_ops
, NULL
,
207 r
= pn532_i2c_nfc_alloc(priv
, PN533_NO_TYPE_B_PROTOCOLS
, &client
->dev
);
211 r
= request_threaded_irq(client
->irq
, NULL
, pn533_i2c_irq_thread_fn
,
212 IRQF_TRIGGER_FALLING
|
213 IRQF_SHARED
| IRQF_ONESHOT
,
214 PN533_I2C_DRIVER_NAME
, phy
);
216 nfc_err(&client
->dev
, "Unable to register IRQ handler\n");
220 r
= pn533_finalize_setup(priv
);
224 r
= nfc_register_device(priv
->nfc_dev
);
231 free_irq(client
->irq
, phy
);
234 nfc_free_device(priv
->nfc_dev
);
237 pn53x_common_clean(phy
->priv
);
242 static int pn533_i2c_remove(struct i2c_client
*client
)
244 struct pn533_i2c_phy
*phy
= i2c_get_clientdata(client
);
246 dev_dbg(&client
->dev
, "%s\n", __func__
);
248 free_irq(client
->irq
, phy
);
250 pn53x_unregister_nfc(phy
->priv
);
251 pn53x_common_clean(phy
->priv
);
256 static const struct of_device_id of_pn533_i2c_match
[] = {
257 { .compatible
= "nxp,pn532", },
259 * NOTE: The use of the compatibles with the trailing "...-i2c" is
260 * deprecated and will be removed.
262 { .compatible
= "nxp,pn533-i2c", },
263 { .compatible
= "nxp,pn532-i2c", },
266 MODULE_DEVICE_TABLE(of
, of_pn533_i2c_match
);
268 static const struct i2c_device_id pn533_i2c_id_table
[] = {
269 { PN533_I2C_DRIVER_NAME
, 0 },
272 MODULE_DEVICE_TABLE(i2c
, pn533_i2c_id_table
);
274 static struct i2c_driver pn533_i2c_driver
= {
276 .name
= PN533_I2C_DRIVER_NAME
,
277 .of_match_table
= of_match_ptr(of_pn533_i2c_match
),
279 .probe
= pn533_i2c_probe
,
280 .id_table
= pn533_i2c_id_table
,
281 .remove
= pn533_i2c_remove
,
284 module_i2c_driver(pn533_i2c_driver
);
286 MODULE_AUTHOR("Michael Thalmeier <michael.thalmeier@hale.at>");
287 MODULE_DESCRIPTION("PN533 I2C driver ver " VERSION
);
288 MODULE_VERSION(VERSION
);
289 MODULE_LICENSE("GPL");