xref: /openbmc/linux/drivers/nfc/st95hf/core.c (revision 37b9b9a5)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * --------------------------------------------------------------------
4  * Driver for ST NFC Transceiver ST95HF
5  * --------------------------------------------------------------------
6  * Copyright (C) 2015 STMicroelectronics Pvt. Ltd. All rights reserved.
7  */
8 
9 #include <linux/err.h>
10 #include <linux/gpio.h>
11 #include <linux/init.h>
12 #include <linux/interrupt.h>
13 #include <linux/irq.h>
14 #include <linux/module.h>
15 #include <linux/netdevice.h>
16 #include <linux/nfc.h>
17 #include <linux/of_gpio.h>
18 #include <linux/of.h>
19 #include <linux/of_irq.h>
20 #include <linux/property.h>
21 #include <linux/regulator/consumer.h>
22 #include <linux/wait.h>
23 #include <net/nfc/digital.h>
24 #include <net/nfc/nfc.h>
25 
26 #include "spi.h"
27 
28 /* supported protocols */
29 #define ST95HF_SUPPORTED_PROT		(NFC_PROTO_ISO14443_MASK | \
30 					NFC_PROTO_ISO14443_B_MASK | \
31 					NFC_PROTO_ISO15693_MASK)
32 /* driver capabilities */
33 #define ST95HF_CAPABILITIES		NFC_DIGITAL_DRV_CAPS_IN_CRC
34 
35 /* Command Send Interface */
36 /* ST95HF_COMMAND_SEND CMD Ids */
37 #define ECHO_CMD			0x55
38 #define WRITE_REGISTER_CMD		0x9
39 #define PROTOCOL_SELECT_CMD		0x2
40 #define SEND_RECEIVE_CMD		0x4
41 
42 /* Select protocol codes */
43 #define ISO15693_PROTOCOL_CODE		0x1
44 #define ISO14443A_PROTOCOL_CODE		0x2
45 #define ISO14443B_PROTOCOL_CODE		0x3
46 
47 /*
48  * head room len is 3
49  * 1 byte for control byte
50  * 1 byte for cmd
51  * 1 byte for size
52  */
53 #define ST95HF_HEADROOM_LEN		3
54 
55 /*
56  * tailroom is 1 for ISO14443A
57  * and 0 for ISO14443B/ISO15693,
58  * hence the max value 1 should be
59  * taken.
60  */
61 #define ST95HF_TAILROOM_LEN		1
62 
63 /* Command Response interface */
64 #define MAX_RESPONSE_BUFFER_SIZE	280
65 #define ECHORESPONSE			0x55
66 #define ST95HF_ERR_MASK			0xF
67 #define ST95HF_TIMEOUT_ERROR		0x87
68 #define ST95HF_NFCA_CRC_ERR_MASK	0x20
69 #define ST95HF_NFCB_CRC_ERR_MASK	0x01
70 
71 /* ST95HF transmission flag values */
72 #define TRFLAG_NFCA_SHORT_FRAME		0x07
73 #define TRFLAG_NFCA_STD_FRAME		0x08
74 #define TRFLAG_NFCA_STD_FRAME_CRC	0x28
75 
76 /* Misc defs */
77 #define HIGH				1
78 #define LOW				0
79 #define ISO14443A_RATS_REQ		0xE0
80 #define RATS_TB1_PRESENT_MASK		0x20
81 #define RATS_TA1_PRESENT_MASK		0x10
82 #define TB1_FWI_MASK			0xF0
83 #define WTX_REQ_FROM_TAG		0xF2
84 
85 #define MAX_CMD_LEN			0x7
86 
87 #define MAX_CMD_PARAMS			4
88 struct cmd {
89 	int cmd_len;
90 	unsigned char cmd_id;
91 	unsigned char no_cmd_params;
92 	unsigned char cmd_params[MAX_CMD_PARAMS];
93 	enum req_type req;
94 };
95 
96 struct param_list {
97 	int param_offset;
98 	int new_param_val;
99 };
100 
101 /*
102  * List of top-level cmds to be used internally by the driver.
103  * All these commands are build on top of ST95HF basic commands
104  * such as SEND_RECEIVE_CMD, PROTOCOL_SELECT_CMD, etc.
105  * These top level cmds are used internally while implementing various ops of
106  * digital layer/driver probe or extending the digital framework layer for
107  * features that are not yet implemented there, for example, WTX cmd handling.
108  */
109 enum st95hf_cmd_list {
110 	CMD_ECHO,
111 	CMD_ISO14443A_CONFIG,
112 	CMD_ISO14443A_DEMOGAIN,
113 	CMD_ISO14443B_DEMOGAIN,
114 	CMD_ISO14443A_PROTOCOL_SELECT,
115 	CMD_ISO14443B_PROTOCOL_SELECT,
116 	CMD_WTX_RESPONSE,
117 	CMD_FIELD_OFF,
118 	CMD_ISO15693_PROTOCOL_SELECT,
119 };
120 
121 static const struct cmd cmd_array[] = {
122 	[CMD_ECHO] = {
123 		.cmd_len = 0x2,
124 		.cmd_id = ECHO_CMD,
125 		.no_cmd_params = 0,
126 		.req = SYNC,
127 	},
128 	[CMD_ISO14443A_CONFIG] = {
129 		.cmd_len = 0x7,
130 		.cmd_id = WRITE_REGISTER_CMD,
131 		.no_cmd_params = 0x4,
132 		.cmd_params = {0x3A, 0x00, 0x5A, 0x04},
133 		.req = SYNC,
134 	},
135 	[CMD_ISO14443A_DEMOGAIN] = {
136 		.cmd_len = 0x7,
137 		.cmd_id = WRITE_REGISTER_CMD,
138 		.no_cmd_params = 0x4,
139 		.cmd_params = {0x68, 0x01, 0x01, 0xDF},
140 		.req = SYNC,
141 	},
142 	[CMD_ISO14443B_DEMOGAIN] = {
143 		.cmd_len = 0x7,
144 		.cmd_id = WRITE_REGISTER_CMD,
145 		.no_cmd_params = 0x4,
146 		.cmd_params = {0x68, 0x01, 0x01, 0x51},
147 		.req = SYNC,
148 	},
149 	[CMD_ISO14443A_PROTOCOL_SELECT] = {
150 		.cmd_len = 0x7,
151 		.cmd_id = PROTOCOL_SELECT_CMD,
152 		.no_cmd_params = 0x4,
153 		.cmd_params = {ISO14443A_PROTOCOL_CODE, 0x00, 0x01, 0xA0},
154 		.req = SYNC,
155 	},
156 	[CMD_ISO14443B_PROTOCOL_SELECT] = {
157 		.cmd_len = 0x7,
158 		.cmd_id = PROTOCOL_SELECT_CMD,
159 		.no_cmd_params = 0x4,
160 		.cmd_params = {ISO14443B_PROTOCOL_CODE, 0x01, 0x03, 0xFF},
161 		.req = SYNC,
162 	},
163 	[CMD_WTX_RESPONSE] = {
164 		.cmd_len = 0x6,
165 		.cmd_id = SEND_RECEIVE_CMD,
166 		.no_cmd_params = 0x3,
167 		.cmd_params = {0xF2, 0x00, TRFLAG_NFCA_STD_FRAME_CRC},
168 		.req = ASYNC,
169 	},
170 	[CMD_FIELD_OFF] = {
171 		.cmd_len = 0x5,
172 		.cmd_id = PROTOCOL_SELECT_CMD,
173 		.no_cmd_params = 0x2,
174 		.cmd_params = {0x0, 0x0},
175 		.req = SYNC,
176 	},
177 	[CMD_ISO15693_PROTOCOL_SELECT] = {
178 		.cmd_len = 0x5,
179 		.cmd_id = PROTOCOL_SELECT_CMD,
180 		.no_cmd_params = 0x2,
181 		.cmd_params = {ISO15693_PROTOCOL_CODE, 0x0D},
182 		.req = SYNC,
183 	},
184 };
185 
186 /* st95_digital_cmd_complete_arg stores client context */
187 struct st95_digital_cmd_complete_arg {
188 	struct sk_buff *skb_resp;
189 	nfc_digital_cmd_complete_t complete_cb;
190 	void *cb_usrarg;
191 	bool rats;
192 };
193 
194 /*
195  * structure containing ST95HF driver specific data.
196  * @spicontext: structure containing information required
197  *	for spi communication between st95hf and host.
198  * @ddev: nfc digital device object.
199  * @nfcdev: nfc device object.
200  * @enable_gpio: gpio used to enable st95hf transceiver.
201  * @complete_cb_arg: structure to store various context information
202  *	that is passed from nfc requesting thread to the threaded ISR.
203  * @st95hf_supply: regulator "consumer" for NFC device.
204  * @sendrcv_trflag: last byte of frame send by sendrecv command
205  *	of st95hf. This byte contains transmission flag info.
206  * @exchange_lock: semaphore used for signaling the st95hf_remove
207  *	function that the last outstanding async nfc request is finished.
208  * @rm_lock: mutex for ensuring safe access of nfc digital object
209  *	from threaded ISR. Usage of this mutex avoids any race between
210  *	deletion of the object from st95hf_remove() and its access from
211  *	the threaded ISR.
212  * @nfcdev_free: flag to have the state of nfc device object.
213  *	[alive | died]
214  * @current_protocol: current nfc protocol.
215  * @current_rf_tech: current rf technology.
216  * @fwi: frame waiting index, received in reply of RATS according to
217  *	digital protocol.
218  */
219 struct st95hf_context {
220 	struct st95hf_spi_context spicontext;
221 	struct nfc_digital_dev *ddev;
222 	struct nfc_dev *nfcdev;
223 	unsigned int enable_gpio;
224 	struct st95_digital_cmd_complete_arg complete_cb_arg;
225 	struct regulator *st95hf_supply;
226 	unsigned char sendrcv_trflag;
227 	struct semaphore exchange_lock;
228 	struct mutex rm_lock;
229 	bool nfcdev_free;
230 	u8 current_protocol;
231 	u8 current_rf_tech;
232 	int fwi;
233 };
234 
235 /*
236  * st95hf_send_recv_cmd() is for sending commands to ST95HF
237  * that are described in the cmd_array[]. It can optionally
238  * receive the response if the cmd request is of type
239  * SYNC. For that to happen caller must pass true to recv_res.
240  * For ASYNC request, recv_res is ignored and the
241  * function will never try to receive the response on behalf
242  * of the caller.
243  */
244 static int st95hf_send_recv_cmd(struct st95hf_context *st95context,
245 				enum st95hf_cmd_list cmd,
246 				int no_modif,
247 				struct param_list *list_array,
248 				bool recv_res)
249 {
250 	unsigned char spi_cmd_buffer[MAX_CMD_LEN];
251 	int i, ret;
252 	struct device *dev = &st95context->spicontext.spidev->dev;
253 
254 	if (cmd_array[cmd].cmd_len > MAX_CMD_LEN)
255 		return -EINVAL;
256 	if (cmd_array[cmd].no_cmd_params < no_modif)
257 		return -EINVAL;
258 	if (no_modif && !list_array)
259 		return -EINVAL;
260 
261 	spi_cmd_buffer[0] = ST95HF_COMMAND_SEND;
262 	spi_cmd_buffer[1] = cmd_array[cmd].cmd_id;
263 	spi_cmd_buffer[2] = cmd_array[cmd].no_cmd_params;
264 
265 	memcpy(&spi_cmd_buffer[3], cmd_array[cmd].cmd_params,
266 	       spi_cmd_buffer[2]);
267 
268 	for (i = 0; i < no_modif; i++) {
269 		if (list_array[i].param_offset >= cmd_array[cmd].no_cmd_params)
270 			return -EINVAL;
271 		spi_cmd_buffer[3 + list_array[i].param_offset] =
272 						list_array[i].new_param_val;
273 	}
274 
275 	ret = st95hf_spi_send(&st95context->spicontext,
276 			      spi_cmd_buffer,
277 			      cmd_array[cmd].cmd_len,
278 			      cmd_array[cmd].req);
279 	if (ret) {
280 		dev_err(dev, "st95hf_spi_send failed with error %d\n", ret);
281 		return ret;
282 	}
283 
284 	if (cmd_array[cmd].req == SYNC && recv_res) {
285 		unsigned char st95hf_response_arr[2];
286 
287 		ret = st95hf_spi_recv_response(&st95context->spicontext,
288 					       st95hf_response_arr);
289 		if (ret < 0) {
290 			dev_err(dev, "spi error from st95hf_spi_recv_response(), err = 0x%x\n",
291 				ret);
292 			return ret;
293 		}
294 
295 		if (st95hf_response_arr[0]) {
296 			dev_err(dev, "st95hf error from st95hf_spi_recv_response(), err = 0x%x\n",
297 				st95hf_response_arr[0]);
298 			return -EIO;
299 		}
300 	}
301 
302 	return 0;
303 }
304 
305 static int st95hf_echo_command(struct st95hf_context *st95context)
306 {
307 	int result = 0;
308 	unsigned char echo_response;
309 
310 	result = st95hf_send_recv_cmd(st95context, CMD_ECHO, 0, NULL, false);
311 	if (result)
312 		return result;
313 
314 	/* If control reached here, response can be taken */
315 	result = st95hf_spi_recv_echo_res(&st95context->spicontext,
316 					  &echo_response);
317 	if (result) {
318 		dev_err(&st95context->spicontext.spidev->dev,
319 			"err: echo response receive error = 0x%x\n", result);
320 		return result;
321 	}
322 
323 	if (echo_response == ECHORESPONSE)
324 		return 0;
325 
326 	dev_err(&st95context->spicontext.spidev->dev, "err: echo res is 0x%x\n",
327 		echo_response);
328 
329 	return -EIO;
330 }
331 
332 static int secondary_configuration_type4a(struct st95hf_context *stcontext)
333 {
334 	int result = 0;
335 	struct device *dev = &stcontext->nfcdev->dev;
336 
337 	/* 14443A config setting after select protocol */
338 	result = st95hf_send_recv_cmd(stcontext,
339 				      CMD_ISO14443A_CONFIG,
340 				      0,
341 				      NULL,
342 				      true);
343 	if (result) {
344 		dev_err(dev, "type a config cmd, err = 0x%x\n", result);
345 		return result;
346 	}
347 
348 	/* 14443A demo gain setting */
349 	result = st95hf_send_recv_cmd(stcontext,
350 				      CMD_ISO14443A_DEMOGAIN,
351 				      0,
352 				      NULL,
353 				      true);
354 	if (result)
355 		dev_err(dev, "type a demogain cmd, err = 0x%x\n", result);
356 
357 	return result;
358 }
359 
360 static int secondary_configuration_type4b(struct st95hf_context *stcontext)
361 {
362 	int result = 0;
363 	struct device *dev = &stcontext->nfcdev->dev;
364 
365 	result = st95hf_send_recv_cmd(stcontext,
366 				      CMD_ISO14443B_DEMOGAIN,
367 				      0,
368 				      NULL,
369 				      true);
370 	if (result)
371 		dev_err(dev, "type b demogain cmd, err = 0x%x\n", result);
372 
373 	return result;
374 }
375 
376 static int st95hf_select_protocol(struct st95hf_context *stcontext, int type)
377 {
378 	int result = 0;
379 	struct device *dev;
380 
381 	dev = &stcontext->nfcdev->dev;
382 
383 	switch (type) {
384 	case NFC_DIGITAL_RF_TECH_106A:
385 		stcontext->current_rf_tech = NFC_DIGITAL_RF_TECH_106A;
386 		result = st95hf_send_recv_cmd(stcontext,
387 					      CMD_ISO14443A_PROTOCOL_SELECT,
388 					      0,
389 					      NULL,
390 					      true);
391 		if (result) {
392 			dev_err(dev, "protocol sel, err = 0x%x\n",
393 				result);
394 			return result;
395 		}
396 
397 		/* secondary config. for 14443Type 4A after protocol select */
398 		result = secondary_configuration_type4a(stcontext);
399 		if (result) {
400 			dev_err(dev, "type a secondary config, err = 0x%x\n",
401 				result);
402 			return result;
403 		}
404 		break;
405 	case NFC_DIGITAL_RF_TECH_106B:
406 		stcontext->current_rf_tech = NFC_DIGITAL_RF_TECH_106B;
407 		result = st95hf_send_recv_cmd(stcontext,
408 					      CMD_ISO14443B_PROTOCOL_SELECT,
409 					      0,
410 					      NULL,
411 					      true);
412 		if (result) {
413 			dev_err(dev, "protocol sel send, err = 0x%x\n",
414 				result);
415 			return result;
416 		}
417 
418 		/*
419 		 * delay of 5-6 ms is required after select protocol
420 		 * command in case of ISO14443 Type B
421 		 */
422 		usleep_range(50000, 60000);
423 
424 		/* secondary config. for 14443Type 4B after protocol select */
425 		result = secondary_configuration_type4b(stcontext);
426 		if (result) {
427 			dev_err(dev, "type b secondary config, err = 0x%x\n",
428 				result);
429 			return result;
430 		}
431 		break;
432 	case NFC_DIGITAL_RF_TECH_ISO15693:
433 		stcontext->current_rf_tech = NFC_DIGITAL_RF_TECH_ISO15693;
434 		result = st95hf_send_recv_cmd(stcontext,
435 					      CMD_ISO15693_PROTOCOL_SELECT,
436 					      0,
437 					      NULL,
438 					      true);
439 		if (result) {
440 			dev_err(dev, "protocol sel send, err = 0x%x\n",
441 				result);
442 			return result;
443 		}
444 		break;
445 	default:
446 		return -EINVAL;
447 	}
448 
449 	return 0;
450 }
451 
452 static void st95hf_send_st95enable_negativepulse(struct st95hf_context *st95con)
453 {
454 	/* First make irq_in pin high */
455 	gpio_set_value(st95con->enable_gpio, HIGH);
456 
457 	/* wait for 1 milisecond */
458 	usleep_range(1000, 2000);
459 
460 	/* Make irq_in pin low */
461 	gpio_set_value(st95con->enable_gpio, LOW);
462 
463 	/* wait for minimum interrupt pulse to make st95 active */
464 	usleep_range(1000, 2000);
465 
466 	/* At end make it high */
467 	gpio_set_value(st95con->enable_gpio, HIGH);
468 }
469 
470 /*
471  * Send a reset sequence over SPI bus (Reset command + wait 3ms +
472  * negative pulse on st95hf enable gpio
473  */
474 static int st95hf_send_spi_reset_sequence(struct st95hf_context *st95context)
475 {
476 	int result = 0;
477 	unsigned char reset_cmd = ST95HF_COMMAND_RESET;
478 
479 	result = st95hf_spi_send(&st95context->spicontext,
480 				 &reset_cmd,
481 				 ST95HF_RESET_CMD_LEN,
482 				 ASYNC);
483 	if (result) {
484 		dev_err(&st95context->spicontext.spidev->dev,
485 			"spi reset sequence cmd error = %d", result);
486 		return result;
487 	}
488 
489 	/* wait for 3 milisecond to complete the controller reset process */
490 	usleep_range(3000, 4000);
491 
492 	/* send negative pulse to make st95hf active */
493 	st95hf_send_st95enable_negativepulse(st95context);
494 
495 	/* wait for 10 milisecond : HFO setup time */
496 	usleep_range(10000, 20000);
497 
498 	return result;
499 }
500 
501 static int st95hf_por_sequence(struct st95hf_context *st95context)
502 {
503 	int nth_attempt = 1;
504 	int result;
505 
506 	st95hf_send_st95enable_negativepulse(st95context);
507 
508 	usleep_range(5000, 6000);
509 	do {
510 		/* send an ECHO command and checks ST95HF response */
511 		result = st95hf_echo_command(st95context);
512 
513 		dev_dbg(&st95context->spicontext.spidev->dev,
514 			"response from echo function = 0x%x, attempt = %d\n",
515 			result, nth_attempt);
516 
517 		if (!result)
518 			return 0;
519 
520 		/* send an pulse on IRQ in case of the chip is on sleep state */
521 		if (nth_attempt == 2)
522 			st95hf_send_st95enable_negativepulse(st95context);
523 		else
524 			st95hf_send_spi_reset_sequence(st95context);
525 
526 		/* delay of 50 milisecond */
527 		usleep_range(50000, 51000);
528 	} while (nth_attempt++ < 3);
529 
530 	return -ETIMEDOUT;
531 }
532 
533 static int iso14443_config_fdt(struct st95hf_context *st95context, int wtxm)
534 {
535 	int result = 0;
536 	struct device *dev = &st95context->spicontext.spidev->dev;
537 	struct nfc_digital_dev *nfcddev = st95context->ddev;
538 	unsigned char pp_typeb;
539 	struct param_list new_params[2];
540 
541 	pp_typeb = cmd_array[CMD_ISO14443B_PROTOCOL_SELECT].cmd_params[2];
542 
543 	if (nfcddev->curr_protocol == NFC_PROTO_ISO14443 &&
544 	    st95context->fwi < 4)
545 		st95context->fwi = 4;
546 
547 	new_params[0].param_offset = 2;
548 	if (nfcddev->curr_protocol == NFC_PROTO_ISO14443)
549 		new_params[0].new_param_val = st95context->fwi;
550 	else if (nfcddev->curr_protocol == NFC_PROTO_ISO14443_B)
551 		new_params[0].new_param_val = pp_typeb;
552 
553 	new_params[1].param_offset = 3;
554 	new_params[1].new_param_val = wtxm;
555 
556 	switch (nfcddev->curr_protocol) {
557 	case NFC_PROTO_ISO14443:
558 		result = st95hf_send_recv_cmd(st95context,
559 					      CMD_ISO14443A_PROTOCOL_SELECT,
560 					      2,
561 					      new_params,
562 					      true);
563 		if (result) {
564 			dev_err(dev, "WTX type a sel proto, err = 0x%x\n",
565 				result);
566 			return result;
567 		}
568 
569 		/* secondary config. for 14443Type 4A after protocol select */
570 		result = secondary_configuration_type4a(st95context);
571 		if (result) {
572 			dev_err(dev, "WTX type a second. config, err = 0x%x\n",
573 				result);
574 			return result;
575 		}
576 		break;
577 	case NFC_PROTO_ISO14443_B:
578 		result = st95hf_send_recv_cmd(st95context,
579 					      CMD_ISO14443B_PROTOCOL_SELECT,
580 					      2,
581 					      new_params,
582 					      true);
583 		if (result) {
584 			dev_err(dev, "WTX type b sel proto, err = 0x%x\n",
585 				result);
586 			return result;
587 		}
588 
589 		/* secondary config. for 14443Type 4B after protocol select */
590 		result = secondary_configuration_type4b(st95context);
591 		if (result) {
592 			dev_err(dev, "WTX type b second. config, err = 0x%x\n",
593 				result);
594 			return result;
595 		}
596 		break;
597 	default:
598 		return -EINVAL;
599 	}
600 
601 	return 0;
602 }
603 
604 static int st95hf_handle_wtx(struct st95hf_context *stcontext,
605 			     bool new_wtx,
606 			     int wtx_val)
607 {
608 	int result = 0;
609 	unsigned char val_mm = 0;
610 	struct param_list new_params[1];
611 	struct nfc_digital_dev *nfcddev = stcontext->ddev;
612 	struct device *dev = &stcontext->nfcdev->dev;
613 
614 	if (new_wtx) {
615 		result = iso14443_config_fdt(stcontext, wtx_val & 0x3f);
616 		if (result) {
617 			dev_err(dev, "Config. setting error on WTX req, err = 0x%x\n",
618 				result);
619 			return result;
620 		}
621 
622 		/* Send response of wtx with ASYNC as no response expected */
623 		new_params[0].param_offset = 1;
624 		new_params[0].new_param_val = wtx_val;
625 
626 		result = st95hf_send_recv_cmd(stcontext,
627 					      CMD_WTX_RESPONSE,
628 					      1,
629 					      new_params,
630 					      false);
631 		if (result)
632 			dev_err(dev, "WTX response send, err = 0x%x\n", result);
633 		return result;
634 	}
635 
636 	/* if no new wtx, cofigure with default values */
637 	if (nfcddev->curr_protocol == NFC_PROTO_ISO14443)
638 		val_mm = cmd_array[CMD_ISO14443A_PROTOCOL_SELECT].cmd_params[3];
639 	else if (nfcddev->curr_protocol == NFC_PROTO_ISO14443_B)
640 		val_mm = cmd_array[CMD_ISO14443B_PROTOCOL_SELECT].cmd_params[3];
641 
642 	result = iso14443_config_fdt(stcontext, val_mm);
643 	if (result)
644 		dev_err(dev, "Default config. setting error after WTX processing, err = 0x%x\n",
645 			result);
646 
647 	return result;
648 }
649 
650 static int st95hf_error_handling(struct st95hf_context *stcontext,
651 				 struct sk_buff *skb_resp,
652 				 int res_len)
653 {
654 	int result = 0;
655 	unsigned char error_byte;
656 	struct device *dev = &stcontext->nfcdev->dev;
657 
658 	/* First check ST95HF specific error */
659 	if (skb_resp->data[0] & ST95HF_ERR_MASK) {
660 		if (skb_resp->data[0] == ST95HF_TIMEOUT_ERROR)
661 			result = -ETIMEDOUT;
662 		else
663 			result = -EIO;
664 		return result;
665 	}
666 
667 	/* Check for CRC err only if CRC is present in the tag response */
668 	switch (stcontext->current_rf_tech) {
669 	case NFC_DIGITAL_RF_TECH_106A:
670 		if (stcontext->sendrcv_trflag == TRFLAG_NFCA_STD_FRAME_CRC) {
671 			error_byte = skb_resp->data[res_len - 3];
672 			if (error_byte & ST95HF_NFCA_CRC_ERR_MASK) {
673 				/* CRC error occurred */
674 				dev_err(dev, "CRC error, byte received = 0x%x\n",
675 					error_byte);
676 				result = -EIO;
677 			}
678 		}
679 		break;
680 	case NFC_DIGITAL_RF_TECH_106B:
681 	case NFC_DIGITAL_RF_TECH_ISO15693:
682 		error_byte = skb_resp->data[res_len - 1];
683 		if (error_byte & ST95HF_NFCB_CRC_ERR_MASK) {
684 			/* CRC error occurred */
685 			dev_err(dev, "CRC error, byte received = 0x%x\n",
686 				error_byte);
687 			result = -EIO;
688 		}
689 		break;
690 	}
691 
692 	return result;
693 }
694 
695 static int st95hf_response_handler(struct st95hf_context *stcontext,
696 				   struct sk_buff *skb_resp,
697 				   int res_len)
698 {
699 	int result = 0;
700 	int skb_len;
701 	unsigned char val_mm;
702 	struct nfc_digital_dev *nfcddev = stcontext->ddev;
703 	struct device *dev = &stcontext->nfcdev->dev;
704 	struct st95_digital_cmd_complete_arg *cb_arg;
705 
706 	cb_arg = &stcontext->complete_cb_arg;
707 
708 	/* Process the response */
709 	skb_put(skb_resp, res_len);
710 
711 	/* Remove st95 header */
712 	skb_pull(skb_resp, 2);
713 
714 	skb_len = skb_resp->len;
715 
716 	/* check if it is case of RATS request reply & FWI is present */
717 	if (nfcddev->curr_protocol == NFC_PROTO_ISO14443 && cb_arg->rats &&
718 	    (skb_resp->data[1] & RATS_TB1_PRESENT_MASK)) {
719 		if (skb_resp->data[1] & RATS_TA1_PRESENT_MASK)
720 			stcontext->fwi =
721 				(skb_resp->data[3] & TB1_FWI_MASK) >> 4;
722 		else
723 			stcontext->fwi =
724 				(skb_resp->data[2] & TB1_FWI_MASK) >> 4;
725 
726 		val_mm = cmd_array[CMD_ISO14443A_PROTOCOL_SELECT].cmd_params[3];
727 
728 		result = iso14443_config_fdt(stcontext, val_mm);
729 		if (result) {
730 			dev_err(dev, "error in config_fdt to handle fwi of ATS, error=%d\n",
731 				result);
732 			return result;
733 		}
734 	}
735 	cb_arg->rats = false;
736 
737 	/* Remove CRC bytes only if received frames data has an eod (CRC) */
738 	switch (stcontext->current_rf_tech) {
739 	case NFC_DIGITAL_RF_TECH_106A:
740 		if (stcontext->sendrcv_trflag == TRFLAG_NFCA_STD_FRAME_CRC)
741 			skb_trim(skb_resp, (skb_len - 5));
742 		else
743 			skb_trim(skb_resp, (skb_len - 3));
744 		break;
745 	case NFC_DIGITAL_RF_TECH_106B:
746 	case NFC_DIGITAL_RF_TECH_ISO15693:
747 		skb_trim(skb_resp, (skb_len - 3));
748 		break;
749 	}
750 
751 	return result;
752 }
753 
754 static irqreturn_t st95hf_irq_handler(int irq, void  *st95hfcontext)
755 {
756 	struct st95hf_context *stcontext  =
757 		(struct st95hf_context *)st95hfcontext;
758 
759 	if (stcontext->spicontext.req_issync) {
760 		complete(&stcontext->spicontext.done);
761 		stcontext->spicontext.req_issync = false;
762 		return IRQ_HANDLED;
763 	}
764 
765 	return IRQ_WAKE_THREAD;
766 }
767 
768 static irqreturn_t st95hf_irq_thread_handler(int irq, void  *st95hfcontext)
769 {
770 	int result = 0;
771 	int res_len;
772 	static bool wtx;
773 	struct device *spidevice;
774 	struct sk_buff *skb_resp;
775 	struct st95hf_context *stcontext  =
776 		(struct st95hf_context *)st95hfcontext;
777 	struct st95_digital_cmd_complete_arg *cb_arg;
778 
779 	spidevice = &stcontext->spicontext.spidev->dev;
780 
781 	/*
782 	 * check semaphore, if not down() already, then we don't
783 	 * know in which context the ISR is called and surely it
784 	 * will be a bug. Note that down() of the semaphore is done
785 	 * in the corresponding st95hf_in_send_cmd() and then
786 	 * only this ISR should be called. ISR will up() the
787 	 * semaphore before leaving. Hence when the ISR is called
788 	 * the correct behaviour is down_trylock() should always
789 	 * return 1 (indicating semaphore cant be taken and hence no
790 	 * change in semaphore count).
791 	 * If not, then we up() the semaphore and crash on
792 	 * a BUG() !
793 	 */
794 	if (!down_trylock(&stcontext->exchange_lock)) {
795 		up(&stcontext->exchange_lock);
796 		WARN(1, "unknown context in ST95HF ISR");
797 		return IRQ_NONE;
798 	}
799 
800 	cb_arg = &stcontext->complete_cb_arg;
801 	skb_resp = cb_arg->skb_resp;
802 
803 	mutex_lock(&stcontext->rm_lock);
804 	res_len = st95hf_spi_recv_response(&stcontext->spicontext,
805 					   skb_resp->data);
806 	if (res_len < 0) {
807 		dev_err(spidevice, "TISR spi response err = 0x%x\n", res_len);
808 		result = res_len;
809 		goto end;
810 	}
811 
812 	/* if stcontext->nfcdev_free is true, it means remove already ran */
813 	if (stcontext->nfcdev_free) {
814 		result = -ENODEV;
815 		goto end;
816 	}
817 
818 	if (skb_resp->data[2] == WTX_REQ_FROM_TAG) {
819 		/* Request for new FWT from tag */
820 		result = st95hf_handle_wtx(stcontext, true, skb_resp->data[3]);
821 		if (result)
822 			goto end;
823 
824 		wtx = true;
825 		mutex_unlock(&stcontext->rm_lock);
826 		return IRQ_HANDLED;
827 	}
828 
829 	result = st95hf_error_handling(stcontext, skb_resp, res_len);
830 	if (result)
831 		goto end;
832 
833 	result = st95hf_response_handler(stcontext, skb_resp, res_len);
834 	if (result)
835 		goto end;
836 
837 	/*
838 	 * If select protocol is done on wtx req. do select protocol
839 	 * again with default values
840 	 */
841 	if (wtx) {
842 		wtx = false;
843 		result = st95hf_handle_wtx(stcontext, false, 0);
844 		if (result)
845 			goto end;
846 	}
847 
848 	/* call digital layer callback */
849 	cb_arg->complete_cb(stcontext->ddev, cb_arg->cb_usrarg, skb_resp);
850 
851 	/* up the semaphore before returning */
852 	up(&stcontext->exchange_lock);
853 	mutex_unlock(&stcontext->rm_lock);
854 
855 	return IRQ_HANDLED;
856 
857 end:
858 	kfree_skb(skb_resp);
859 	wtx = false;
860 	cb_arg->rats = false;
861 	skb_resp = ERR_PTR(result);
862 	/* call of callback with error */
863 	cb_arg->complete_cb(stcontext->ddev, cb_arg->cb_usrarg, skb_resp);
864 	/* up the semaphore before returning */
865 	up(&stcontext->exchange_lock);
866 	mutex_unlock(&stcontext->rm_lock);
867 	return IRQ_HANDLED;
868 }
869 
870 /* NFC ops functions definition */
871 static int st95hf_in_configure_hw(struct nfc_digital_dev *ddev,
872 				  int type,
873 				  int param)
874 {
875 	struct st95hf_context *stcontext = nfc_digital_get_drvdata(ddev);
876 
877 	if (type == NFC_DIGITAL_CONFIG_RF_TECH)
878 		return st95hf_select_protocol(stcontext, param);
879 
880 	if (type == NFC_DIGITAL_CONFIG_FRAMING) {
881 		switch (param) {
882 		case NFC_DIGITAL_FRAMING_NFCA_SHORT:
883 			stcontext->sendrcv_trflag = TRFLAG_NFCA_SHORT_FRAME;
884 			break;
885 		case NFC_DIGITAL_FRAMING_NFCA_STANDARD:
886 			stcontext->sendrcv_trflag = TRFLAG_NFCA_STD_FRAME;
887 			break;
888 		case NFC_DIGITAL_FRAMING_NFCA_T4T:
889 		case NFC_DIGITAL_FRAMING_NFCA_NFC_DEP:
890 		case NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A:
891 			stcontext->sendrcv_trflag = TRFLAG_NFCA_STD_FRAME_CRC;
892 			break;
893 		case NFC_DIGITAL_FRAMING_NFCB:
894 		case NFC_DIGITAL_FRAMING_ISO15693_INVENTORY:
895 		case NFC_DIGITAL_FRAMING_ISO15693_T5T:
896 			break;
897 		}
898 	}
899 
900 	return 0;
901 }
902 
903 static int rf_off(struct st95hf_context *stcontext)
904 {
905 	int rc;
906 	struct device *dev;
907 
908 	dev = &stcontext->nfcdev->dev;
909 
910 	rc = st95hf_send_recv_cmd(stcontext, CMD_FIELD_OFF, 0, NULL, true);
911 	if (rc)
912 		dev_err(dev, "protocol sel send field off, err = 0x%x\n", rc);
913 
914 	return rc;
915 }
916 
917 static int st95hf_in_send_cmd(struct nfc_digital_dev *ddev,
918 			      struct sk_buff *skb,
919 			      u16 timeout,
920 			      nfc_digital_cmd_complete_t cb,
921 			      void *arg)
922 {
923 	struct st95hf_context *stcontext = nfc_digital_get_drvdata(ddev);
924 	int rc;
925 	struct sk_buff *skb_resp;
926 	int len_data_to_tag = 0;
927 
928 	skb_resp = nfc_alloc_recv_skb(MAX_RESPONSE_BUFFER_SIZE, GFP_KERNEL);
929 	if (!skb_resp) {
930 		rc = -ENOMEM;
931 		goto error;
932 	}
933 
934 	switch (stcontext->current_rf_tech) {
935 	case NFC_DIGITAL_RF_TECH_106A:
936 		len_data_to_tag = skb->len + 1;
937 		skb_put_u8(skb, stcontext->sendrcv_trflag);
938 		break;
939 	case NFC_DIGITAL_RF_TECH_106B:
940 	case NFC_DIGITAL_RF_TECH_ISO15693:
941 		len_data_to_tag = skb->len;
942 		break;
943 	default:
944 		rc = -EINVAL;
945 		goto free_skb_resp;
946 	}
947 
948 	skb_push(skb, 3);
949 	skb->data[0] = ST95HF_COMMAND_SEND;
950 	skb->data[1] = SEND_RECEIVE_CMD;
951 	skb->data[2] = len_data_to_tag;
952 
953 	stcontext->complete_cb_arg.skb_resp = skb_resp;
954 	stcontext->complete_cb_arg.cb_usrarg = arg;
955 	stcontext->complete_cb_arg.complete_cb = cb;
956 
957 	if ((skb->data[3] == ISO14443A_RATS_REQ) &&
958 	    ddev->curr_protocol == NFC_PROTO_ISO14443)
959 		stcontext->complete_cb_arg.rats = true;
960 
961 	/*
962 	 * down the semaphore to indicate to remove func that an
963 	 * ISR is pending, note that it will not block here in any case.
964 	 * If found blocked, it is a BUG!
965 	 */
966 	rc = down_killable(&stcontext->exchange_lock);
967 	if (rc) {
968 		WARN(1, "Semaphore is not found up in st95hf_in_send_cmd\n");
969 		return rc;
970 	}
971 
972 	rc = st95hf_spi_send(&stcontext->spicontext, skb->data,
973 			     skb->len,
974 			     ASYNC);
975 	if (rc) {
976 		dev_err(&stcontext->nfcdev->dev,
977 			"Error %d trying to perform data_exchange", rc);
978 		/* up the semaphore since ISR will never come in this case */
979 		up(&stcontext->exchange_lock);
980 		goto free_skb_resp;
981 	}
982 
983 	kfree_skb(skb);
984 
985 	return rc;
986 
987 free_skb_resp:
988 	kfree_skb(skb_resp);
989 error:
990 	return rc;
991 }
992 
993 /* p2p will be supported in a later release ! */
994 static int st95hf_tg_configure_hw(struct nfc_digital_dev *ddev,
995 				  int type,
996 				  int param)
997 {
998 	return 0;
999 }
1000 
1001 static int st95hf_tg_send_cmd(struct nfc_digital_dev *ddev,
1002 			      struct sk_buff *skb,
1003 			      u16 timeout,
1004 			      nfc_digital_cmd_complete_t cb,
1005 			      void *arg)
1006 {
1007 	return 0;
1008 }
1009 
1010 static int st95hf_tg_listen(struct nfc_digital_dev *ddev,
1011 			    u16 timeout,
1012 			    nfc_digital_cmd_complete_t cb,
1013 			    void *arg)
1014 {
1015 	return 0;
1016 }
1017 
1018 static int st95hf_tg_get_rf_tech(struct nfc_digital_dev *ddev, u8 *rf_tech)
1019 {
1020 	return 0;
1021 }
1022 
1023 static int st95hf_switch_rf(struct nfc_digital_dev *ddev, bool on)
1024 {
1025 	u8 rf_tech;
1026 	struct st95hf_context *stcontext = nfc_digital_get_drvdata(ddev);
1027 
1028 	rf_tech = ddev->curr_rf_tech;
1029 
1030 	if (on)
1031 		/* switch on RF field */
1032 		return st95hf_select_protocol(stcontext, rf_tech);
1033 
1034 	/* switch OFF RF field */
1035 	return rf_off(stcontext);
1036 }
1037 
1038 /* TODO st95hf_abort_cmd */
1039 static void st95hf_abort_cmd(struct nfc_digital_dev *ddev)
1040 {
1041 }
1042 
1043 static struct nfc_digital_ops st95hf_nfc_digital_ops = {
1044 	.in_configure_hw = st95hf_in_configure_hw,
1045 	.in_send_cmd = st95hf_in_send_cmd,
1046 
1047 	.tg_listen = st95hf_tg_listen,
1048 	.tg_configure_hw = st95hf_tg_configure_hw,
1049 	.tg_send_cmd = st95hf_tg_send_cmd,
1050 	.tg_get_rf_tech = st95hf_tg_get_rf_tech,
1051 
1052 	.switch_rf = st95hf_switch_rf,
1053 	.abort_cmd = st95hf_abort_cmd,
1054 };
1055 
1056 static const struct spi_device_id st95hf_id[] = {
1057 	{ "st95hf", 0 },
1058 	{}
1059 };
1060 MODULE_DEVICE_TABLE(spi, st95hf_id);
1061 
1062 static const struct of_device_id st95hf_spi_of_match[] = {
1063         { .compatible = "st,st95hf" },
1064         { },
1065 };
1066 MODULE_DEVICE_TABLE(of, st95hf_spi_of_match);
1067 
1068 static int st95hf_probe(struct spi_device *nfc_spi_dev)
1069 {
1070 	int ret;
1071 
1072 	struct st95hf_context *st95context;
1073 	struct st95hf_spi_context *spicontext;
1074 
1075 	nfc_info(&nfc_spi_dev->dev, "ST95HF driver probe called.\n");
1076 
1077 	st95context = devm_kzalloc(&nfc_spi_dev->dev,
1078 				   sizeof(struct st95hf_context),
1079 				   GFP_KERNEL);
1080 	if (!st95context)
1081 		return -ENOMEM;
1082 
1083 	spicontext = &st95context->spicontext;
1084 
1085 	spicontext->spidev = nfc_spi_dev;
1086 
1087 	st95context->fwi =
1088 		cmd_array[CMD_ISO14443A_PROTOCOL_SELECT].cmd_params[2];
1089 
1090 	if (device_property_present(&nfc_spi_dev->dev, "st95hfvin")) {
1091 		st95context->st95hf_supply =
1092 			devm_regulator_get(&nfc_spi_dev->dev,
1093 					   "st95hfvin");
1094 		if (IS_ERR(st95context->st95hf_supply)) {
1095 			dev_err(&nfc_spi_dev->dev, "failed to acquire regulator\n");
1096 			return PTR_ERR(st95context->st95hf_supply);
1097 		}
1098 
1099 		ret = regulator_enable(st95context->st95hf_supply);
1100 		if (ret) {
1101 			dev_err(&nfc_spi_dev->dev, "failed to enable regulator\n");
1102 			return ret;
1103 		}
1104 	}
1105 
1106 	init_completion(&spicontext->done);
1107 	mutex_init(&spicontext->spi_lock);
1108 
1109 	/*
1110 	 * Store spicontext in spi device object for using it in
1111 	 * remove function
1112 	 */
1113 	dev_set_drvdata(&nfc_spi_dev->dev, spicontext);
1114 
1115 	st95context->enable_gpio =
1116 		of_get_named_gpio(nfc_spi_dev->dev.of_node,
1117 				  "enable-gpio",
1118 				  0);
1119 	if (!gpio_is_valid(st95context->enable_gpio)) {
1120 		dev_err(&nfc_spi_dev->dev, "No valid enable gpio\n");
1121 		ret = st95context->enable_gpio;
1122 		goto err_disable_regulator;
1123 	}
1124 
1125 	ret = devm_gpio_request_one(&nfc_spi_dev->dev, st95context->enable_gpio,
1126 				    GPIOF_DIR_OUT | GPIOF_INIT_HIGH,
1127 				    "enable_gpio");
1128 	if (ret)
1129 		goto err_disable_regulator;
1130 
1131 	if (nfc_spi_dev->irq > 0) {
1132 		if (devm_request_threaded_irq(&nfc_spi_dev->dev,
1133 					      nfc_spi_dev->irq,
1134 					      st95hf_irq_handler,
1135 					      st95hf_irq_thread_handler,
1136 					      IRQF_TRIGGER_FALLING,
1137 					      "st95hf",
1138 					      (void *)st95context) < 0) {
1139 			dev_err(&nfc_spi_dev->dev, "err: irq request for st95hf is failed\n");
1140 			ret =  -EINVAL;
1141 			goto err_disable_regulator;
1142 		}
1143 	} else {
1144 		dev_err(&nfc_spi_dev->dev, "not a valid IRQ associated with ST95HF\n");
1145 		ret = -EINVAL;
1146 		goto err_disable_regulator;
1147 	}
1148 
1149 	/*
1150 	 * First reset SPI to handle warm reset of the system.
1151 	 * It will put the ST95HF device in Power ON state
1152 	 * which make the state of device identical to state
1153 	 * at the time of cold reset of the system.
1154 	 */
1155 	ret = st95hf_send_spi_reset_sequence(st95context);
1156 	if (ret) {
1157 		dev_err(&nfc_spi_dev->dev, "err: spi_reset_sequence failed\n");
1158 		goto err_disable_regulator;
1159 	}
1160 
1161 	/* call PowerOnReset sequence of ST95hf to activate it */
1162 	ret = st95hf_por_sequence(st95context);
1163 	if (ret) {
1164 		dev_err(&nfc_spi_dev->dev, "err: por seq failed for st95hf\n");
1165 		goto err_disable_regulator;
1166 	}
1167 
1168 	/* create NFC dev object and register with NFC Subsystem */
1169 	st95context->ddev = nfc_digital_allocate_device(&st95hf_nfc_digital_ops,
1170 							ST95HF_SUPPORTED_PROT,
1171 							ST95HF_CAPABILITIES,
1172 							ST95HF_HEADROOM_LEN,
1173 							ST95HF_TAILROOM_LEN);
1174 	if (!st95context->ddev) {
1175 		ret = -ENOMEM;
1176 		goto err_disable_regulator;
1177 	}
1178 
1179 	st95context->nfcdev = st95context->ddev->nfc_dev;
1180 	nfc_digital_set_parent_dev(st95context->ddev, &nfc_spi_dev->dev);
1181 
1182 	ret =  nfc_digital_register_device(st95context->ddev);
1183 	if (ret) {
1184 		dev_err(&st95context->nfcdev->dev, "st95hf registration failed\n");
1185 		goto err_free_digital_device;
1186 	}
1187 
1188 	/* store st95context in nfc device object */
1189 	nfc_digital_set_drvdata(st95context->ddev, st95context);
1190 
1191 	sema_init(&st95context->exchange_lock, 1);
1192 	mutex_init(&st95context->rm_lock);
1193 
1194 	return ret;
1195 
1196 err_free_digital_device:
1197 	nfc_digital_free_device(st95context->ddev);
1198 err_disable_regulator:
1199 	if (st95context->st95hf_supply)
1200 		regulator_disable(st95context->st95hf_supply);
1201 
1202 	return ret;
1203 }
1204 
1205 static int st95hf_remove(struct spi_device *nfc_spi_dev)
1206 {
1207 	int result = 0;
1208 	unsigned char reset_cmd = ST95HF_COMMAND_RESET;
1209 	struct st95hf_spi_context *spictx = dev_get_drvdata(&nfc_spi_dev->dev);
1210 
1211 	struct st95hf_context *stcontext = container_of(spictx,
1212 							struct st95hf_context,
1213 							spicontext);
1214 
1215 	mutex_lock(&stcontext->rm_lock);
1216 
1217 	nfc_digital_unregister_device(stcontext->ddev);
1218 	nfc_digital_free_device(stcontext->ddev);
1219 	stcontext->nfcdev_free = true;
1220 
1221 	mutex_unlock(&stcontext->rm_lock);
1222 
1223 	/* if last in_send_cmd's ISR is pending, wait for it to finish */
1224 	result = down_killable(&stcontext->exchange_lock);
1225 	if (result == -EINTR)
1226 		dev_err(&spictx->spidev->dev, "sleep for semaphore interrupted by signal\n");
1227 
1228 	/* next reset the ST95HF controller */
1229 	result = st95hf_spi_send(&stcontext->spicontext,
1230 				 &reset_cmd,
1231 				 ST95HF_RESET_CMD_LEN,
1232 				 ASYNC);
1233 	if (result) {
1234 		dev_err(&spictx->spidev->dev,
1235 			"ST95HF reset failed in remove() err = %d\n", result);
1236 		return result;
1237 	}
1238 
1239 	/* wait for 3 ms to complete the controller reset process */
1240 	usleep_range(3000, 4000);
1241 
1242 	/* disable regulator */
1243 	if (stcontext->st95hf_supply)
1244 		regulator_disable(stcontext->st95hf_supply);
1245 
1246 	return result;
1247 }
1248 
1249 /* Register as SPI protocol driver */
1250 static struct spi_driver st95hf_driver = {
1251 	.driver = {
1252 		.name = "st95hf",
1253 		.owner = THIS_MODULE,
1254 		.of_match_table = of_match_ptr(st95hf_spi_of_match),
1255 	},
1256 	.id_table = st95hf_id,
1257 	.probe = st95hf_probe,
1258 	.remove = st95hf_remove,
1259 };
1260 
1261 module_spi_driver(st95hf_driver);
1262 
1263 MODULE_AUTHOR("Shikha Singh <shikha.singh@st.com>");
1264 MODULE_DESCRIPTION("ST NFC Transceiver ST95HF driver");
1265 MODULE_LICENSE("GPL v2");
1266