i2c.c 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Driver for NXP PN533 NFC Chip - I2C transport layer
  4. *
  5. * Copyright (C) 2011 Instituto Nokia de Tecnologia
  6. * Copyright (C) 2012-2013 Tieto Poland
  7. * Copyright (C) 2016 HALE electronic
  8. */
  9. #include <linux/device.h>
  10. #include <linux/kernel.h>
  11. #include <linux/module.h>
  12. #include <linux/slab.h>
  13. #include <linux/i2c.h>
  14. #include <linux/nfc.h>
  15. #include <linux/netdevice.h>
  16. #include <linux/interrupt.h>
  17. #include <net/nfc/nfc.h>
  18. #include "pn533.h"
  19. #define VERSION "0.1"
  20. #define PN533_I2C_DRIVER_NAME "pn533_i2c"
  21. struct pn533_i2c_phy {
  22. struct i2c_client *i2c_dev;
  23. struct pn533 *priv;
  24. bool aborted;
  25. int hard_fault; /*
  26. * < 0 if hardware error occurred (e.g. i2c err)
  27. * and prevents normal operation.
  28. */
  29. };
  30. static int pn533_i2c_send_ack(struct pn533 *dev, gfp_t flags)
  31. {
  32. struct pn533_i2c_phy *phy = dev->phy;
  33. struct i2c_client *client = phy->i2c_dev;
  34. static const u8 ack[6] = {0x00, 0x00, 0xff, 0x00, 0xff, 0x00};
  35. /* spec 6.2.1.3: Preamble, SoPC (2), ACK Code (2), Postamble */
  36. return i2c_master_send(client, ack, 6);
  37. }
  38. static int pn533_i2c_send_frame(struct pn533 *dev,
  39. struct sk_buff *out)
  40. {
  41. struct pn533_i2c_phy *phy = dev->phy;
  42. struct i2c_client *client = phy->i2c_dev;
  43. int rc;
  44. if (phy->hard_fault != 0)
  45. return phy->hard_fault;
  46. if (phy->priv == NULL)
  47. phy->priv = dev;
  48. phy->aborted = false;
  49. print_hex_dump_debug("PN533_i2c TX: ", DUMP_PREFIX_NONE, 16, 1,
  50. out->data, out->len, false);
  51. rc = i2c_master_send(client, out->data, out->len);
  52. if (rc == -EREMOTEIO) { /* Retry, chip was in power down */
  53. usleep_range(6000, 10000);
  54. rc = i2c_master_send(client, out->data, out->len);
  55. }
  56. if (rc >= 0) {
  57. if (rc != out->len)
  58. rc = -EREMOTEIO;
  59. else
  60. rc = 0;
  61. }
  62. return rc;
  63. }
  64. static void pn533_i2c_abort_cmd(struct pn533 *dev, gfp_t flags)
  65. {
  66. struct pn533_i2c_phy *phy = dev->phy;
  67. phy->aborted = true;
  68. /* An ack will cancel the last issued command */
  69. pn533_i2c_send_ack(dev, flags);
  70. /* schedule cmd_complete_work to finish current command execution */
  71. pn533_recv_frame(phy->priv, NULL, -ENOENT);
  72. }
  73. static int pn533_i2c_read(struct pn533_i2c_phy *phy, struct sk_buff **skb)
  74. {
  75. struct i2c_client *client = phy->i2c_dev;
  76. int len = PN533_EXT_FRAME_HEADER_LEN +
  77. PN533_STD_FRAME_MAX_PAYLOAD_LEN +
  78. PN533_STD_FRAME_TAIL_LEN + 1;
  79. int r;
  80. *skb = alloc_skb(len, GFP_KERNEL);
  81. if (*skb == NULL)
  82. return -ENOMEM;
  83. r = i2c_master_recv(client, skb_put(*skb, len), len);
  84. if (r != len) {
  85. nfc_err(&client->dev, "cannot read. r=%d len=%d\n", r, len);
  86. kfree_skb(*skb);
  87. return -EREMOTEIO;
  88. }
  89. if (!((*skb)->data[0] & 0x01)) {
  90. nfc_err(&client->dev, "READY flag not set");
  91. kfree_skb(*skb);
  92. return -EBUSY;
  93. }
  94. /* remove READY byte */
  95. skb_pull(*skb, 1);
  96. /* trim to frame size */
  97. skb_trim(*skb, phy->priv->ops->rx_frame_size((*skb)->data));
  98. return 0;
  99. }
  100. static irqreturn_t pn533_i2c_irq_thread_fn(int irq, void *data)
  101. {
  102. struct pn533_i2c_phy *phy = data;
  103. struct sk_buff *skb = NULL;
  104. int r;
  105. if (!phy || irq != phy->i2c_dev->irq) {
  106. WARN_ON_ONCE(1);
  107. return IRQ_NONE;
  108. }
  109. if (phy->hard_fault != 0)
  110. return IRQ_HANDLED;
  111. r = pn533_i2c_read(phy, &skb);
  112. if (r == -EREMOTEIO) {
  113. phy->hard_fault = r;
  114. pn533_recv_frame(phy->priv, NULL, -EREMOTEIO);
  115. return IRQ_HANDLED;
  116. } else if ((r == -ENOMEM) || (r == -EBADMSG) || (r == -EBUSY)) {
  117. return IRQ_HANDLED;
  118. }
  119. if (!phy->aborted)
  120. pn533_recv_frame(phy->priv, skb, 0);
  121. return IRQ_HANDLED;
  122. }
  123. static const struct pn533_phy_ops i2c_phy_ops = {
  124. .send_frame = pn533_i2c_send_frame,
  125. .send_ack = pn533_i2c_send_ack,
  126. .abort_cmd = pn533_i2c_abort_cmd,
  127. };
  128. static int pn533_i2c_probe(struct i2c_client *client)
  129. {
  130. struct pn533_i2c_phy *phy;
  131. struct pn533 *priv;
  132. int r = 0;
  133. if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  134. nfc_err(&client->dev, "Need I2C_FUNC_I2C\n");
  135. return -ENODEV;
  136. }
  137. phy = devm_kzalloc(&client->dev, sizeof(struct pn533_i2c_phy),
  138. GFP_KERNEL);
  139. if (!phy)
  140. return -ENOMEM;
  141. phy->i2c_dev = client;
  142. i2c_set_clientdata(client, phy);
  143. priv = pn53x_common_init(PN533_DEVICE_PN532,
  144. PN533_PROTO_REQ_ACK_RESP,
  145. phy, &i2c_phy_ops, NULL,
  146. &phy->i2c_dev->dev);
  147. if (IS_ERR(priv))
  148. return PTR_ERR(priv);
  149. phy->priv = priv;
  150. r = pn532_i2c_nfc_alloc(priv, PN533_NO_TYPE_B_PROTOCOLS, &client->dev);
  151. if (r)
  152. goto nfc_alloc_err;
  153. r = request_threaded_irq(client->irq, NULL, pn533_i2c_irq_thread_fn,
  154. IRQF_TRIGGER_FALLING |
  155. IRQF_SHARED | IRQF_ONESHOT,
  156. PN533_I2C_DRIVER_NAME, phy);
  157. if (r < 0) {
  158. nfc_err(&client->dev, "Unable to register IRQ handler\n");
  159. goto irq_rqst_err;
  160. }
  161. r = pn533_finalize_setup(priv);
  162. if (r)
  163. goto fn_setup_err;
  164. r = nfc_register_device(priv->nfc_dev);
  165. if (r)
  166. goto fn_setup_err;
  167. return r;
  168. fn_setup_err:
  169. free_irq(client->irq, phy);
  170. irq_rqst_err:
  171. nfc_free_device(priv->nfc_dev);
  172. nfc_alloc_err:
  173. pn53x_common_clean(phy->priv);
  174. return r;
  175. }
  176. static void pn533_i2c_remove(struct i2c_client *client)
  177. {
  178. struct pn533_i2c_phy *phy = i2c_get_clientdata(client);
  179. free_irq(client->irq, phy);
  180. pn53x_unregister_nfc(phy->priv);
  181. pn53x_common_clean(phy->priv);
  182. }
  183. static const struct of_device_id of_pn533_i2c_match[] __maybe_unused = {
  184. { .compatible = "nxp,pn532", },
  185. /*
  186. * NOTE: The use of the compatibles with the trailing "...-i2c" is
  187. * deprecated and will be removed.
  188. */
  189. { .compatible = "nxp,pn533-i2c", },
  190. { .compatible = "nxp,pn532-i2c", },
  191. {},
  192. };
  193. MODULE_DEVICE_TABLE(of, of_pn533_i2c_match);
  194. static const struct i2c_device_id pn533_i2c_id_table[] = {
  195. { PN533_I2C_DRIVER_NAME },
  196. {}
  197. };
  198. MODULE_DEVICE_TABLE(i2c, pn533_i2c_id_table);
  199. static struct i2c_driver pn533_i2c_driver = {
  200. .driver = {
  201. .name = PN533_I2C_DRIVER_NAME,
  202. .of_match_table = of_match_ptr(of_pn533_i2c_match),
  203. },
  204. .probe = pn533_i2c_probe,
  205. .id_table = pn533_i2c_id_table,
  206. .remove = pn533_i2c_remove,
  207. };
  208. module_i2c_driver(pn533_i2c_driver);
  209. MODULE_AUTHOR("Michael Thalmeier <michael.thalmeier@hale.at>");
  210. MODULE_DESCRIPTION("PN533 I2C driver ver " VERSION);
  211. MODULE_VERSION(VERSION);
  212. MODULE_LICENSE("GPL");