Lines Matching +full:inside +full:- +full:secure
1 // SPDX-License-Identifier: GPL-2.0-only
3 * HCI based Driver for Inside Secure microread NFC Chip - i2c layer
52 16, 1, (skb)->data, (skb)->len, 0); \
61 len = skb->len; in microread_i2c_add_len_crc()
64 for (i = 0; i < skb->len; i++) in microread_i2c_add_len_crc()
65 crc = crc ^ skb->data[i]; in microread_i2c_add_len_crc()
81 for (i = 0; i < skb->len - 1; i++) in check_crc()
82 crc = crc ^ skb->data[i]; in check_crc()
84 if (crc != skb->data[skb->len-1]) { in check_crc()
85 pr_err("CRC error 0x%x != 0x%x\n", crc, skb->data[skb->len-1]); in check_crc()
87 return -EPERM; in check_crc()
107 struct i2c_client *client = phy->i2c_dev; in microread_i2c_write()
109 if (phy->hard_fault != 0) in microread_i2c_write()
110 return phy->hard_fault; in microread_i2c_write()
118 r = i2c_master_send(client, skb->data, skb->len); in microread_i2c_write()
120 if (r == -EREMOTEIO) { /* Retry, chip was in standby */ in microread_i2c_write()
122 r = i2c_master_send(client, skb->data, skb->len); in microread_i2c_write()
126 if (r != skb->len) in microread_i2c_write()
127 r = -EREMOTEIO; in microread_i2c_write()
143 u8 tmp[MICROREAD_I2C_LLC_MAX_SIZE - 1]; in microread_i2c_read()
144 struct i2c_client *client = phy->i2c_dev; in microread_i2c_read()
148 nfc_err(&client->dev, "cannot read len byte\n"); in microread_i2c_read()
149 return -EREMOTEIO; in microread_i2c_read()
154 nfc_err(&client->dev, "invalid len byte\n"); in microread_i2c_read()
155 r = -EBADMSG; in microread_i2c_read()
161 r = -ENOMEM; in microread_i2c_read()
170 return -EREMOTEIO; in microread_i2c_read()
178 r = -EBADMSG; in microread_i2c_read()
183 skb_trim(*skb, (*skb)->len - MICROREAD_I2C_FRAME_TAILROOM); in microread_i2c_read()
191 r = -EREMOTEIO; in microread_i2c_read()
204 if (!phy || irq != phy->i2c_dev->irq) { in microread_i2c_irq_thread_fn()
209 if (phy->hard_fault != 0) in microread_i2c_irq_thread_fn()
213 if (r == -EREMOTEIO) { in microread_i2c_irq_thread_fn()
214 phy->hard_fault = r; in microread_i2c_irq_thread_fn()
216 nfc_hci_recv_frame(phy->hdev, NULL); in microread_i2c_irq_thread_fn()
219 } else if ((r == -ENOMEM) || (r == -EBADMSG)) { in microread_i2c_irq_thread_fn()
223 nfc_hci_recv_frame(phy->hdev, skb); in microread_i2c_irq_thread_fn()
239 phy = devm_kzalloc(&client->dev, sizeof(struct microread_i2c_phy), in microread_i2c_probe()
242 return -ENOMEM; in microread_i2c_probe()
245 phy->i2c_dev = client; in microread_i2c_probe()
247 r = request_threaded_irq(client->irq, NULL, microread_i2c_irq_thread_fn, in microread_i2c_probe()
251 nfc_err(&client->dev, "Unable to register IRQ handler\n"); in microread_i2c_probe()
258 MICROREAD_I2C_LLC_MAX_PAYLOAD, &phy->hdev); in microread_i2c_probe()
265 free_irq(client->irq, phy); in microread_i2c_probe()
274 microread_remove(phy->hdev); in microread_i2c_remove()
276 free_irq(client->irq, phy); in microread_i2c_remove()