xref: /OK3568_Linux_fs/kernel/drivers/nfc/st95hf/spi.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * ---------------------------------------------------------------------------
4*4882a593Smuzhiyun  * drivers/nfc/st95hf/spi.h functions declarations for SPI communication
5*4882a593Smuzhiyun  * ---------------------------------------------------------------------------
6*4882a593Smuzhiyun  * Copyright (C) 2015 STMicroelectronics – All Rights Reserved
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #ifndef __LINUX_ST95HF_SPI_H
10*4882a593Smuzhiyun #define __LINUX_ST95HF_SPI_H
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #include <linux/spi/spi.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun /* Basic ST95HF SPI CMDs */
15*4882a593Smuzhiyun #define ST95HF_COMMAND_SEND	0x0
16*4882a593Smuzhiyun #define ST95HF_COMMAND_RESET	0x1
17*4882a593Smuzhiyun #define ST95HF_COMMAND_RECEIVE	0x2
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #define ST95HF_RESET_CMD_LEN	0x1
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun /*
22*4882a593Smuzhiyun  * structure to contain st95hf spi communication specific information.
23*4882a593Smuzhiyun  * @req_issync: true for synchronous calls.
24*4882a593Smuzhiyun  * @spidev: st95hf spi device object.
25*4882a593Smuzhiyun  * @done: completion structure to wait for st95hf response
26*4882a593Smuzhiyun  *	for synchronous calls.
27*4882a593Smuzhiyun  * @spi_lock: mutex to allow only one spi transfer at a time.
28*4882a593Smuzhiyun  */
29*4882a593Smuzhiyun struct st95hf_spi_context {
30*4882a593Smuzhiyun 	bool req_issync;
31*4882a593Smuzhiyun 	struct spi_device *spidev;
32*4882a593Smuzhiyun 	struct completion done;
33*4882a593Smuzhiyun 	struct mutex spi_lock;
34*4882a593Smuzhiyun };
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun /* flag to differentiate synchronous & asynchronous spi request */
37*4882a593Smuzhiyun enum req_type {
38*4882a593Smuzhiyun 	SYNC,
39*4882a593Smuzhiyun 	ASYNC,
40*4882a593Smuzhiyun };
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun int st95hf_spi_send(struct st95hf_spi_context *spicontext,
43*4882a593Smuzhiyun 		    unsigned char *buffertx,
44*4882a593Smuzhiyun 		    int datalen,
45*4882a593Smuzhiyun 		    enum req_type reqtype);
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun int st95hf_spi_recv_response(struct st95hf_spi_context *spicontext,
48*4882a593Smuzhiyun 			     unsigned char *receivebuff);
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun int st95hf_spi_recv_echo_res(struct st95hf_spi_context *spicontext,
51*4882a593Smuzhiyun 			     unsigned char *receivebuff);
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun #endif
54