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
88struct 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
96struct 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 */
109enum 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
121static 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 */
187struct 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 */
219struct 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 */
244static 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
305static 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
332static 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
360static 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
376static 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
452static 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 */
474static 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
501static 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
533static 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
604static 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
650static 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
695static 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
754static 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
768static 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
857end:
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 */
871static 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
903static 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
917static 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		goto free_skb_resp;
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
987free_skb_resp:
988	kfree_skb(skb_resp);
989error:
990	return rc;
991}
992
993/* p2p will be supported in a later release ! */
994static int st95hf_tg_configure_hw(struct nfc_digital_dev *ddev,
995				  int type,
996				  int param)
997{
998	return 0;
999}
1000
1001static 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
1010static 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
1018static int st95hf_tg_get_rf_tech(struct nfc_digital_dev *ddev, u8 *rf_tech)
1019{
1020	return 0;
1021}
1022
1023static 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 */
1039static void st95hf_abort_cmd(struct nfc_digital_dev *ddev)
1040{
1041}
1042
1043static 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
1056static const struct spi_device_id st95hf_id[] = {
1057	{ "st95hf", 0 },
1058	{}
1059};
1060MODULE_DEVICE_TABLE(spi, st95hf_id);
1061
1062static const struct of_device_id st95hf_spi_of_match[] = {
1063        { .compatible = "st,st95hf" },
1064        { },
1065};
1066MODULE_DEVICE_TABLE(of, st95hf_spi_of_match);
1067
1068static 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
1196err_free_digital_device:
1197	nfc_digital_free_device(st95context->ddev);
1198err_disable_regulator:
1199	if (st95context->st95hf_supply)
1200		regulator_disable(st95context->st95hf_supply);
1201
1202	return ret;
1203}
1204
1205static 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 */
1250static 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
1261module_spi_driver(st95hf_driver);
1262
1263MODULE_AUTHOR("Shikha Singh <shikha.singh@st.com>");
1264MODULE_DESCRIPTION("ST NFC Transceiver ST95HF driver");
1265MODULE_LICENSE("GPL v2");
1266