]> Git Repo - linux.git/blob - drivers/nfc/trf7970a.c
mptcp: ensure snd_nxt is properly initialized on connect
[linux.git] / drivers / nfc / trf7970a.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * TI TRF7970a RFID/NFC Transceiver Driver
4  *
5  * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
6  *
7  * Author: Erick Macias <[email protected]>
8  * Author: Felipe Balbi <[email protected]>
9  * Author: Mark A. Greer <[email protected]>
10  */
11
12 #include <linux/module.h>
13 #include <linux/device.h>
14 #include <linux/netdevice.h>
15 #include <linux/interrupt.h>
16 #include <linux/pm_runtime.h>
17 #include <linux/nfc.h>
18 #include <linux/skbuff.h>
19 #include <linux/delay.h>
20 #include <linux/gpio/consumer.h>
21 #include <linux/of.h>
22 #include <linux/spi/spi.h>
23 #include <linux/regulator/consumer.h>
24
25 #include <net/nfc/nfc.h>
26 #include <net/nfc/digital.h>
27
28 /* There are 3 ways the host can communicate with the trf7970a:
29  * parallel mode, SPI with Slave Select (SS) mode, and SPI without
30  * SS mode.  The driver only supports the two SPI modes.
31  *
32  * The trf7970a is very timing sensitive and the VIN, EN2, and EN
33  * pins must asserted in that order and with specific delays in between.
34  * The delays used in the driver were provided by TI and have been
35  * confirmed to work with this driver.  There is a bug with the current
36  * version of the trf7970a that requires that EN2 remain low no matter
37  * what.  If it goes high, it will generate an RF field even when in
38  * passive target mode.  TI has indicated that the chip will work okay
39  * when EN2 is left low.  The 'en2-rf-quirk' device tree property
40  * indicates that trf7970a currently being used has the erratum and
41  * that EN2 must be kept low.
42  *
43  * Timeouts are implemented using the delayed workqueue kernel facility.
44  * Timeouts are required so things don't hang when there is no response
45  * from the trf7970a (or tag).  Using this mechanism creates a race with
46  * interrupts, however.  That is, an interrupt and a timeout could occur
47  * closely enough together that one is blocked by the mutex while the other
48  * executes.  When the timeout handler executes first and blocks the
49  * interrupt handler, it will eventually set the state to IDLE so the
50  * interrupt handler will check the state and exit with no harm done.
51  * When the interrupt handler executes first and blocks the timeout handler,
52  * the cancel_delayed_work() call will know that it didn't cancel the
53  * work item (i.e., timeout) and will return zero.  That return code is
54  * used by the timer handler to indicate that it should ignore the timeout
55  * once its unblocked.
56  *
57  * Aborting an active command isn't as simple as it seems because the only
58  * way to abort a command that's already been sent to the tag is so turn
59  * off power to the tag.  If we do that, though, we'd have to go through
60  * the entire anticollision procedure again but the digital layer doesn't
61  * support that.  So, if an abort is received before trf7970a_send_cmd()
62  * has sent the command to the tag, it simply returns -ECANCELED.  If the
63  * command has already been sent to the tag, then the driver continues
64  * normally and recieves the response data (or error) but just before
65  * sending the data upstream, it frees the rx_skb and sends -ECANCELED
66  * upstream instead.  If the command failed, that error will be sent
67  * upstream.
68  *
69  * When recieving data from a tag and the interrupt status register has
70  * only the SRX bit set, it means that all of the data has been received
71  * (once what's in the fifo has been read).  However, depending on timing
72  * an interrupt status with only the SRX bit set may not be recived.  In
73  * those cases, the timeout mechanism is used to wait 20 ms in case more
74  * data arrives.  After 20 ms, it is assumed that all of the data has been
75  * received and the accumulated rx data is sent upstream.  The
76  * 'TRF7970A_ST_WAIT_FOR_RX_DATA_CONT' state is used for this purpose
77  * (i.e., it indicates that some data has been received but we're not sure
78  * if there is more coming so a timeout in this state means all data has
79  * been received and there isn't an error).  The delay is 20 ms since delays
80  * of ~16 ms have been observed during testing.
81  *
82  * When transmitting a frame larger than the FIFO size (127 bytes), the
83  * driver will wait 20 ms for the FIFO to drain past the low-watermark
84  * and generate an interrupt.  The low-watermark set to 32 bytes so the
85  * interrupt should fire after 127 - 32 = 95 bytes have been sent.  At
86  * the lowest possible bit rate (6.62 kbps for 15693), it will take up
87  * to ~14.35 ms so 20 ms is used for the timeout.
88  *
89  * Type 2 write and sector select commands respond with a 4-bit ACK or NACK.
90  * Having only 4 bits in the FIFO won't normally generate an interrupt so
91  * driver enables the '4_bit_RX' bit of the Special Functions register 1
92  * to cause an interrupt in that case.  Leaving that bit for a read command
93  * messes up the data returned so it is only enabled when the framing is
94  * 'NFC_DIGITAL_FRAMING_NFCA_T2T' and the command is not a read command.
95  * Unfortunately, that means that the driver has to peek into tx frames
96  * when the framing is 'NFC_DIGITAL_FRAMING_NFCA_T2T'.  This is done by
97  * the trf7970a_per_cmd_config() routine.
98  *
99  * ISO/IEC 15693 frames specify whether to use single or double sub-carrier
100  * frequencies and whether to use low or high data rates in the flags byte
101  * of the frame.  This means that the driver has to peek at all 15693 frames
102  * to determine what speed to set the communication to.  In addition, write
103  * and lock commands use the OPTION flag to indicate that an EOF must be
104  * sent to the tag before it will send its response.  So the driver has to
105  * examine all frames for that reason too.
106  *
107  * It is unclear how long to wait before sending the EOF.  According to the
108  * Note under Table 1-1 in section 1.6 of
109  * http://www.ti.com/lit/ug/scbu011/scbu011.pdf, that wait should be at least
110  * 10 ms for TI Tag-it HF-I tags; however testing has shown that is not long
111  * enough so 20 ms is used.  So the timer is set to 40 ms - 20 ms to drain
112  * up to 127 bytes in the FIFO at the lowest bit rate plus another 20 ms to
113  * ensure the wait is long enough before sending the EOF.  This seems to work
114  * reliably.
115  */
116
117 #define TRF7970A_SUPPORTED_PROTOCOLS \
118                 (NFC_PROTO_MIFARE_MASK | NFC_PROTO_ISO14443_MASK |      \
119                  NFC_PROTO_ISO14443_B_MASK | NFC_PROTO_FELICA_MASK | \
120                  NFC_PROTO_ISO15693_MASK | NFC_PROTO_NFC_DEP_MASK)
121
122 #define TRF7970A_AUTOSUSPEND_DELAY              30000   /* 30 seconds */
123 #define TRF7970A_13MHZ_CLOCK_FREQUENCY          13560000
124 #define TRF7970A_27MHZ_CLOCK_FREQUENCY          27120000
125
126 #define TRF7970A_RX_SKB_ALLOC_SIZE              256
127
128 #define TRF7970A_FIFO_SIZE                      127
129
130 /* TX length is 3 nibbles long ==> 4KB - 1 bytes max */
131 #define TRF7970A_TX_MAX                         (4096 - 1)
132
133 #define TRF7970A_WAIT_FOR_TX_IRQ                20
134 #define TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT       20
135 #define TRF7970A_WAIT_FOR_FIFO_DRAIN_TIMEOUT    20
136 #define TRF7970A_WAIT_TO_ISSUE_ISO15693_EOF     40
137
138 /* Guard times for various RF technologies (in us) */
139 #define TRF7970A_GUARD_TIME_NFCA                5000
140 #define TRF7970A_GUARD_TIME_NFCB                5000
141 #define TRF7970A_GUARD_TIME_NFCF                20000
142 #define TRF7970A_GUARD_TIME_15693               1000
143
144 /* Quirks */
145 /* Erratum: When reading IRQ Status register on trf7970a, we must issue a
146  * read continuous command for IRQ Status and Collision Position registers.
147  */
148 #define TRF7970A_QUIRK_IRQ_STATUS_READ          BIT(0)
149 #define TRF7970A_QUIRK_EN2_MUST_STAY_LOW        BIT(1)
150
151 /* Direct commands */
152 #define TRF7970A_CMD_IDLE                       0x00
153 #define TRF7970A_CMD_SOFT_INIT                  0x03
154 #define TRF7970A_CMD_RF_COLLISION               0x04
155 #define TRF7970A_CMD_RF_COLLISION_RESPONSE_N    0x05
156 #define TRF7970A_CMD_RF_COLLISION_RESPONSE_0    0x06
157 #define TRF7970A_CMD_FIFO_RESET                 0x0f
158 #define TRF7970A_CMD_TRANSMIT_NO_CRC            0x10
159 #define TRF7970A_CMD_TRANSMIT                   0x11
160 #define TRF7970A_CMD_DELAY_TRANSMIT_NO_CRC      0x12
161 #define TRF7970A_CMD_DELAY_TRANSMIT             0x13
162 #define TRF7970A_CMD_EOF                        0x14
163 #define TRF7970A_CMD_CLOSE_SLOT                 0x15
164 #define TRF7970A_CMD_BLOCK_RX                   0x16
165 #define TRF7970A_CMD_ENABLE_RX                  0x17
166 #define TRF7970A_CMD_TEST_INT_RF                0x18
167 #define TRF7970A_CMD_TEST_EXT_RF                0x19
168 #define TRF7970A_CMD_RX_GAIN_ADJUST             0x1a
169
170 /* Bits determining whether its a direct command or register R/W,
171  * whether to use a continuous SPI transaction or not, and the actual
172  * direct cmd opcode or register address.
173  */
174 #define TRF7970A_CMD_BIT_CTRL                   BIT(7)
175 #define TRF7970A_CMD_BIT_RW                     BIT(6)
176 #define TRF7970A_CMD_BIT_CONTINUOUS             BIT(5)
177 #define TRF7970A_CMD_BIT_OPCODE(opcode)         ((opcode) & 0x1f)
178
179 /* Registers addresses */
180 #define TRF7970A_CHIP_STATUS_CTRL               0x00
181 #define TRF7970A_ISO_CTRL                       0x01
182 #define TRF7970A_ISO14443B_TX_OPTIONS           0x02
183 #define TRF7970A_ISO14443A_HIGH_BITRATE_OPTIONS 0x03
184 #define TRF7970A_TX_TIMER_SETTING_H_BYTE        0x04
185 #define TRF7970A_TX_TIMER_SETTING_L_BYTE        0x05
186 #define TRF7970A_TX_PULSE_LENGTH_CTRL           0x06
187 #define TRF7970A_RX_NO_RESPONSE_WAIT            0x07
188 #define TRF7970A_RX_WAIT_TIME                   0x08
189 #define TRF7970A_MODULATOR_SYS_CLK_CTRL         0x09
190 #define TRF7970A_RX_SPECIAL_SETTINGS            0x0a
191 #define TRF7970A_REG_IO_CTRL                    0x0b
192 #define TRF7970A_IRQ_STATUS                     0x0c
193 #define TRF7970A_COLLISION_IRQ_MASK             0x0d
194 #define TRF7970A_COLLISION_POSITION             0x0e
195 #define TRF7970A_RSSI_OSC_STATUS                0x0f
196 #define TRF7970A_SPECIAL_FCN_REG1               0x10
197 #define TRF7970A_SPECIAL_FCN_REG2               0x11
198 #define TRF7970A_RAM1                           0x12
199 #define TRF7970A_RAM2                           0x13
200 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS      0x14
201 #define TRF7970A_NFC_LOW_FIELD_LEVEL            0x16
202 #define TRF7970A_NFCID1                         0x17
203 #define TRF7970A_NFC_TARGET_LEVEL               0x18
204 #define TRF79070A_NFC_TARGET_PROTOCOL           0x19
205 #define TRF7970A_TEST_REGISTER1                 0x1a
206 #define TRF7970A_TEST_REGISTER2                 0x1b
207 #define TRF7970A_FIFO_STATUS                    0x1c
208 #define TRF7970A_TX_LENGTH_BYTE1                0x1d
209 #define TRF7970A_TX_LENGTH_BYTE2                0x1e
210 #define TRF7970A_FIFO_IO_REGISTER               0x1f
211
212 /* Chip Status Control Register Bits */
213 #define TRF7970A_CHIP_STATUS_VRS5_3             BIT(0)
214 #define TRF7970A_CHIP_STATUS_REC_ON             BIT(1)
215 #define TRF7970A_CHIP_STATUS_AGC_ON             BIT(2)
216 #define TRF7970A_CHIP_STATUS_PM_ON              BIT(3)
217 #define TRF7970A_CHIP_STATUS_RF_PWR             BIT(4)
218 #define TRF7970A_CHIP_STATUS_RF_ON              BIT(5)
219 #define TRF7970A_CHIP_STATUS_DIRECT             BIT(6)
220 #define TRF7970A_CHIP_STATUS_STBY               BIT(7)
221
222 /* ISO Control Register Bits */
223 #define TRF7970A_ISO_CTRL_15693_SGL_1OF4_662    0x00
224 #define TRF7970A_ISO_CTRL_15693_SGL_1OF256_662  0x01
225 #define TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648   0x02
226 #define TRF7970A_ISO_CTRL_15693_SGL_1OF256_2648 0x03
227 #define TRF7970A_ISO_CTRL_15693_DBL_1OF4_667a   0x04
228 #define TRF7970A_ISO_CTRL_15693_DBL_1OF256_667  0x05
229 #define TRF7970A_ISO_CTRL_15693_DBL_1OF4_2669   0x06
230 #define TRF7970A_ISO_CTRL_15693_DBL_1OF256_2669 0x07
231 #define TRF7970A_ISO_CTRL_14443A_106            0x08
232 #define TRF7970A_ISO_CTRL_14443A_212            0x09
233 #define TRF7970A_ISO_CTRL_14443A_424            0x0a
234 #define TRF7970A_ISO_CTRL_14443A_848            0x0b
235 #define TRF7970A_ISO_CTRL_14443B_106            0x0c
236 #define TRF7970A_ISO_CTRL_14443B_212            0x0d
237 #define TRF7970A_ISO_CTRL_14443B_424            0x0e
238 #define TRF7970A_ISO_CTRL_14443B_848            0x0f
239 #define TRF7970A_ISO_CTRL_FELICA_212            0x1a
240 #define TRF7970A_ISO_CTRL_FELICA_424            0x1b
241 #define TRF7970A_ISO_CTRL_NFC_NFCA_106          0x01
242 #define TRF7970A_ISO_CTRL_NFC_NFCF_212          0x02
243 #define TRF7970A_ISO_CTRL_NFC_NFCF_424          0x03
244 #define TRF7970A_ISO_CTRL_NFC_CE_14443A         0x00
245 #define TRF7970A_ISO_CTRL_NFC_CE_14443B         0x01
246 #define TRF7970A_ISO_CTRL_NFC_CE                BIT(2)
247 #define TRF7970A_ISO_CTRL_NFC_ACTIVE            BIT(3)
248 #define TRF7970A_ISO_CTRL_NFC_INITIATOR         BIT(4)
249 #define TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE       BIT(5)
250 #define TRF7970A_ISO_CTRL_RFID                  BIT(5)
251 #define TRF7970A_ISO_CTRL_DIR_MODE              BIT(6)
252 #define TRF7970A_ISO_CTRL_RX_CRC_N              BIT(7)  /* true == No CRC */
253
254 #define TRF7970A_ISO_CTRL_RFID_SPEED_MASK       0x1f
255
256 /* Modulator and SYS_CLK Control Register Bits */
257 #define TRF7970A_MODULATOR_DEPTH(n)             ((n) & 0x7)
258 #define TRF7970A_MODULATOR_DEPTH_ASK10          (TRF7970A_MODULATOR_DEPTH(0))
259 #define TRF7970A_MODULATOR_DEPTH_OOK            (TRF7970A_MODULATOR_DEPTH(1))
260 #define TRF7970A_MODULATOR_DEPTH_ASK7           (TRF7970A_MODULATOR_DEPTH(2))
261 #define TRF7970A_MODULATOR_DEPTH_ASK8_5         (TRF7970A_MODULATOR_DEPTH(3))
262 #define TRF7970A_MODULATOR_DEPTH_ASK13          (TRF7970A_MODULATOR_DEPTH(4))
263 #define TRF7970A_MODULATOR_DEPTH_ASK16          (TRF7970A_MODULATOR_DEPTH(5))
264 #define TRF7970A_MODULATOR_DEPTH_ASK22          (TRF7970A_MODULATOR_DEPTH(6))
265 #define TRF7970A_MODULATOR_DEPTH_ASK30          (TRF7970A_MODULATOR_DEPTH(7))
266 #define TRF7970A_MODULATOR_EN_ANA               BIT(3)
267 #define TRF7970A_MODULATOR_CLK(n)               (((n) & 0x3) << 4)
268 #define TRF7970A_MODULATOR_CLK_DISABLED         (TRF7970A_MODULATOR_CLK(0))
269 #define TRF7970A_MODULATOR_CLK_3_6              (TRF7970A_MODULATOR_CLK(1))
270 #define TRF7970A_MODULATOR_CLK_6_13             (TRF7970A_MODULATOR_CLK(2))
271 #define TRF7970A_MODULATOR_CLK_13_27            (TRF7970A_MODULATOR_CLK(3))
272 #define TRF7970A_MODULATOR_EN_OOK               BIT(6)
273 #define TRF7970A_MODULATOR_27MHZ                BIT(7)
274
275 #define TRF7970A_RX_SPECIAL_SETTINGS_NO_LIM     BIT(0)
276 #define TRF7970A_RX_SPECIAL_SETTINGS_AGCR       BIT(1)
277 #define TRF7970A_RX_SPECIAL_SETTINGS_GD_0DB     (0x0 << 2)
278 #define TRF7970A_RX_SPECIAL_SETTINGS_GD_5DB     (0x1 << 2)
279 #define TRF7970A_RX_SPECIAL_SETTINGS_GD_10DB    (0x2 << 2)
280 #define TRF7970A_RX_SPECIAL_SETTINGS_GD_15DB    (0x3 << 2)
281 #define TRF7970A_RX_SPECIAL_SETTINGS_HBT        BIT(4)
282 #define TRF7970A_RX_SPECIAL_SETTINGS_M848       BIT(5)
283 #define TRF7970A_RX_SPECIAL_SETTINGS_C424       BIT(6)
284 #define TRF7970A_RX_SPECIAL_SETTINGS_C212       BIT(7)
285
286 #define TRF7970A_REG_IO_CTRL_VRS(v)             ((v) & 0x07)
287 #define TRF7970A_REG_IO_CTRL_IO_LOW             BIT(5)
288 #define TRF7970A_REG_IO_CTRL_EN_EXT_PA          BIT(6)
289 #define TRF7970A_REG_IO_CTRL_AUTO_REG           BIT(7)
290
291 /* IRQ Status Register Bits */
292 #define TRF7970A_IRQ_STATUS_NORESP              BIT(0)  /* ISO15693 only */
293 #define TRF7970A_IRQ_STATUS_NFC_COL_ERROR       BIT(0)
294 #define TRF7970A_IRQ_STATUS_COL                 BIT(1)
295 #define TRF7970A_IRQ_STATUS_FRAMING_EOF_ERROR   BIT(2)
296 #define TRF7970A_IRQ_STATUS_NFC_RF              BIT(2)
297 #define TRF7970A_IRQ_STATUS_PARITY_ERROR        BIT(3)
298 #define TRF7970A_IRQ_STATUS_NFC_SDD             BIT(3)
299 #define TRF7970A_IRQ_STATUS_CRC_ERROR           BIT(4)
300 #define TRF7970A_IRQ_STATUS_NFC_PROTO_ERROR     BIT(4)
301 #define TRF7970A_IRQ_STATUS_FIFO                BIT(5)
302 #define TRF7970A_IRQ_STATUS_SRX                 BIT(6)
303 #define TRF7970A_IRQ_STATUS_TX                  BIT(7)
304
305 #define TRF7970A_IRQ_STATUS_ERROR                               \
306                 (TRF7970A_IRQ_STATUS_COL |                      \
307                  TRF7970A_IRQ_STATUS_FRAMING_EOF_ERROR |        \
308                  TRF7970A_IRQ_STATUS_PARITY_ERROR |             \
309                  TRF7970A_IRQ_STATUS_CRC_ERROR)
310
311 #define TRF7970A_RSSI_OSC_STATUS_RSSI_MASK      (BIT(2) | BIT(1) | BIT(0))
312 #define TRF7970A_RSSI_OSC_STATUS_RSSI_X_MASK    (BIT(5) | BIT(4) | BIT(3))
313 #define TRF7970A_RSSI_OSC_STATUS_RSSI_OSC_OK    BIT(6)
314
315 #define TRF7970A_SPECIAL_FCN_REG1_COL_7_6               BIT(0)
316 #define TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL           BIT(1)
317 #define TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX              BIT(2)
318 #define TRF7970A_SPECIAL_FCN_REG1_SP_DIR_MODE           BIT(3)
319 #define TRF7970A_SPECIAL_FCN_REG1_NEXT_SLOT_37US        BIT(4)
320 #define TRF7970A_SPECIAL_FCN_REG1_PAR43                 BIT(5)
321
322 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_124      (0x0 << 2)
323 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_120      (0x1 << 2)
324 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_112      (0x2 << 2)
325 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_96       (0x3 << 2)
326 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_4        0x0
327 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_8        0x1
328 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_16       0x2
329 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_32       0x3
330
331 #define TRF7970A_NFC_LOW_FIELD_LEVEL_RFDET(v)   ((v) & 0x07)
332 #define TRF7970A_NFC_LOW_FIELD_LEVEL_CLEX_DIS   BIT(7)
333
334 #define TRF7970A_NFC_TARGET_LEVEL_RFDET(v)      ((v) & 0x07)
335 #define TRF7970A_NFC_TARGET_LEVEL_HI_RF         BIT(3)
336 #define TRF7970A_NFC_TARGET_LEVEL_SDD_EN        BIT(5)
337 #define TRF7970A_NFC_TARGET_LEVEL_LD_S_4BYTES   (0x0 << 6)
338 #define TRF7970A_NFC_TARGET_LEVEL_LD_S_7BYTES   (0x1 << 6)
339 #define TRF7970A_NFC_TARGET_LEVEL_LD_S_10BYTES  (0x2 << 6)
340
341 #define TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_106         BIT(0)
342 #define TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_212         BIT(1)
343 #define TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_424         (BIT(0) | BIT(1))
344 #define TRF79070A_NFC_TARGET_PROTOCOL_PAS_14443B        BIT(2)
345 #define TRF79070A_NFC_TARGET_PROTOCOL_PAS_106           BIT(3)
346 #define TRF79070A_NFC_TARGET_PROTOCOL_FELICA            BIT(4)
347 #define TRF79070A_NFC_TARGET_PROTOCOL_RF_L              BIT(6)
348 #define TRF79070A_NFC_TARGET_PROTOCOL_RF_H              BIT(7)
349
350 #define TRF79070A_NFC_TARGET_PROTOCOL_106A              \
351          (TRF79070A_NFC_TARGET_PROTOCOL_RF_H |          \
352           TRF79070A_NFC_TARGET_PROTOCOL_RF_L |          \
353           TRF79070A_NFC_TARGET_PROTOCOL_PAS_106 |       \
354           TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_106)
355
356 #define TRF79070A_NFC_TARGET_PROTOCOL_106B              \
357          (TRF79070A_NFC_TARGET_PROTOCOL_RF_H |          \
358           TRF79070A_NFC_TARGET_PROTOCOL_RF_L |          \
359           TRF79070A_NFC_TARGET_PROTOCOL_PAS_14443B |    \
360           TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_106)
361
362 #define TRF79070A_NFC_TARGET_PROTOCOL_212F              \
363          (TRF79070A_NFC_TARGET_PROTOCOL_RF_H |          \
364           TRF79070A_NFC_TARGET_PROTOCOL_RF_L |          \
365           TRF79070A_NFC_TARGET_PROTOCOL_FELICA |        \
366           TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_212)
367
368 #define TRF79070A_NFC_TARGET_PROTOCOL_424F              \
369          (TRF79070A_NFC_TARGET_PROTOCOL_RF_H |          \
370           TRF79070A_NFC_TARGET_PROTOCOL_RF_L |          \
371           TRF79070A_NFC_TARGET_PROTOCOL_FELICA |        \
372           TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_424)
373
374 #define TRF7970A_FIFO_STATUS_OVERFLOW           BIT(7)
375
376 /* NFC (ISO/IEC 14443A) Type 2 Tag commands */
377 #define NFC_T2T_CMD_READ                        0x30
378
379 /* ISO 15693 commands codes */
380 #define ISO15693_CMD_INVENTORY                  0x01
381 #define ISO15693_CMD_READ_SINGLE_BLOCK          0x20
382 #define ISO15693_CMD_WRITE_SINGLE_BLOCK         0x21
383 #define ISO15693_CMD_LOCK_BLOCK                 0x22
384 #define ISO15693_CMD_READ_MULTIPLE_BLOCK        0x23
385 #define ISO15693_CMD_WRITE_MULTIPLE_BLOCK       0x24
386 #define ISO15693_CMD_SELECT                     0x25
387 #define ISO15693_CMD_RESET_TO_READY             0x26
388 #define ISO15693_CMD_WRITE_AFI                  0x27
389 #define ISO15693_CMD_LOCK_AFI                   0x28
390 #define ISO15693_CMD_WRITE_DSFID                0x29
391 #define ISO15693_CMD_LOCK_DSFID                 0x2a
392 #define ISO15693_CMD_GET_SYSTEM_INFO            0x2b
393 #define ISO15693_CMD_GET_MULTIPLE_BLOCK_SECURITY_STATUS 0x2c
394
395 /* ISO 15693 request and response flags */
396 #define ISO15693_REQ_FLAG_SUB_CARRIER           BIT(0)
397 #define ISO15693_REQ_FLAG_DATA_RATE             BIT(1)
398 #define ISO15693_REQ_FLAG_INVENTORY             BIT(2)
399 #define ISO15693_REQ_FLAG_PROTOCOL_EXT          BIT(3)
400 #define ISO15693_REQ_FLAG_SELECT                BIT(4)
401 #define ISO15693_REQ_FLAG_AFI                   BIT(4)
402 #define ISO15693_REQ_FLAG_ADDRESS               BIT(5)
403 #define ISO15693_REQ_FLAG_NB_SLOTS              BIT(5)
404 #define ISO15693_REQ_FLAG_OPTION                BIT(6)
405
406 #define ISO15693_REQ_FLAG_SPEED_MASK \
407                 (ISO15693_REQ_FLAG_SUB_CARRIER | ISO15693_REQ_FLAG_DATA_RATE)
408
409 enum trf7970a_state {
410         TRF7970A_ST_PWR_OFF,
411         TRF7970A_ST_RF_OFF,
412         TRF7970A_ST_IDLE,
413         TRF7970A_ST_IDLE_RX_BLOCKED,
414         TRF7970A_ST_WAIT_FOR_TX_FIFO,
415         TRF7970A_ST_WAIT_FOR_RX_DATA,
416         TRF7970A_ST_WAIT_FOR_RX_DATA_CONT,
417         TRF7970A_ST_WAIT_TO_ISSUE_EOF,
418         TRF7970A_ST_LISTENING,
419         TRF7970A_ST_LISTENING_MD,
420         TRF7970A_ST_MAX
421 };
422
423 struct trf7970a {
424         enum trf7970a_state             state;
425         struct device                   *dev;
426         struct spi_device               *spi;
427         struct regulator                *vin_regulator;
428         struct regulator                *vddio_regulator;
429         struct nfc_digital_dev          *ddev;
430         u32                             quirks;
431         bool                            is_initiator;
432         bool                            aborting;
433         struct sk_buff                  *tx_skb;
434         struct sk_buff                  *rx_skb;
435         nfc_digital_cmd_complete_t      cb;
436         void                            *cb_arg;
437         u8                              chip_status_ctrl;
438         u8                              iso_ctrl;
439         u8                              iso_ctrl_tech;
440         u8                              modulator_sys_clk_ctrl;
441         u8                              special_fcn_reg1;
442         u8                              io_ctrl;
443         unsigned int                    guard_time;
444         int                             technology;
445         int                             framing;
446         u8                              md_rf_tech;
447         u8                              tx_cmd;
448         bool                            issue_eof;
449         struct gpio_desc                *en_gpiod;
450         struct gpio_desc                *en2_gpiod;
451         struct mutex                    lock;
452         unsigned int                    timeout;
453         bool                            ignore_timeout;
454         struct delayed_work             timeout_work;
455 };
456
457 static int trf7970a_cmd(struct trf7970a *trf, u8 opcode)
458 {
459         u8 cmd = TRF7970A_CMD_BIT_CTRL | TRF7970A_CMD_BIT_OPCODE(opcode);
460         int ret;
461
462         dev_dbg(trf->dev, "cmd: 0x%x\n", cmd);
463
464         ret = spi_write(trf->spi, &cmd, 1);
465         if (ret)
466                 dev_err(trf->dev, "%s - cmd: 0x%x, ret: %d\n", __func__, cmd,
467                         ret);
468         return ret;
469 }
470
471 static int trf7970a_read(struct trf7970a *trf, u8 reg, u8 *val)
472 {
473         u8 addr = TRF7970A_CMD_BIT_RW | reg;
474         int ret;
475
476         ret = spi_write_then_read(trf->spi, &addr, 1, val, 1);
477         if (ret)
478                 dev_err(trf->dev, "%s - addr: 0x%x, ret: %d\n", __func__, addr,
479                         ret);
480
481         dev_dbg(trf->dev, "read(0x%x): 0x%x\n", addr, *val);
482
483         return ret;
484 }
485
486 static int trf7970a_read_cont(struct trf7970a *trf, u8 reg, u8 *buf,
487                               size_t len)
488 {
489         u8 addr = reg | TRF7970A_CMD_BIT_RW | TRF7970A_CMD_BIT_CONTINUOUS;
490         struct spi_transfer t[2];
491         struct spi_message m;
492         int ret;
493
494         dev_dbg(trf->dev, "read_cont(0x%x, %zd)\n", addr, len);
495
496         spi_message_init(&m);
497
498         memset(&t, 0, sizeof(t));
499
500         t[0].tx_buf = &addr;
501         t[0].len = sizeof(addr);
502         spi_message_add_tail(&t[0], &m);
503
504         t[1].rx_buf = buf;
505         t[1].len = len;
506         spi_message_add_tail(&t[1], &m);
507
508         ret = spi_sync(trf->spi, &m);
509         if (ret)
510                 dev_err(trf->dev, "%s - addr: 0x%x, ret: %d\n", __func__, addr,
511                         ret);
512         return ret;
513 }
514
515 static int trf7970a_write(struct trf7970a *trf, u8 reg, u8 val)
516 {
517         u8 buf[2] = { reg, val };
518         int ret;
519
520         dev_dbg(trf->dev, "write(0x%x): 0x%x\n", reg, val);
521
522         ret = spi_write(trf->spi, buf, 2);
523         if (ret)
524                 dev_err(trf->dev, "%s - write: 0x%x 0x%x, ret: %d\n", __func__,
525                         buf[0], buf[1], ret);
526
527         return ret;
528 }
529
530 static int trf7970a_read_irqstatus(struct trf7970a *trf, u8 *status)
531 {
532         int ret;
533         u8 buf[2];
534         u8 addr;
535
536         addr = TRF7970A_IRQ_STATUS | TRF7970A_CMD_BIT_RW;
537
538         if (trf->quirks & TRF7970A_QUIRK_IRQ_STATUS_READ) {
539                 addr |= TRF7970A_CMD_BIT_CONTINUOUS;
540                 ret = spi_write_then_read(trf->spi, &addr, 1, buf, 2);
541         } else {
542                 ret = spi_write_then_read(trf->spi, &addr, 1, buf, 1);
543         }
544
545         if (ret)
546                 dev_err(trf->dev, "%s - irqstatus: Status read failed: %d\n",
547                         __func__, ret);
548         else
549                 *status = buf[0];
550
551         return ret;
552 }
553
554 static int trf7970a_read_target_proto(struct trf7970a *trf, u8 *target_proto)
555 {
556         int ret;
557         u8 buf[2];
558         u8 addr;
559
560         addr = TRF79070A_NFC_TARGET_PROTOCOL | TRF7970A_CMD_BIT_RW |
561                TRF7970A_CMD_BIT_CONTINUOUS;
562
563         ret = spi_write_then_read(trf->spi, &addr, 1, buf, 2);
564         if (ret)
565                 dev_err(trf->dev, "%s - target_proto: Read failed: %d\n",
566                         __func__, ret);
567         else
568                 *target_proto = buf[0];
569
570         return ret;
571 }
572
573 static int trf7970a_mode_detect(struct trf7970a *trf, u8 *rf_tech)
574 {
575         int ret;
576         u8 target_proto, tech;
577
578         ret = trf7970a_read_target_proto(trf, &target_proto);
579         if (ret)
580                 return ret;
581
582         switch (target_proto) {
583         case TRF79070A_NFC_TARGET_PROTOCOL_106A:
584                 tech = NFC_DIGITAL_RF_TECH_106A;
585                 break;
586         case TRF79070A_NFC_TARGET_PROTOCOL_106B:
587                 tech = NFC_DIGITAL_RF_TECH_106B;
588                 break;
589         case TRF79070A_NFC_TARGET_PROTOCOL_212F:
590                 tech = NFC_DIGITAL_RF_TECH_212F;
591                 break;
592         case TRF79070A_NFC_TARGET_PROTOCOL_424F:
593                 tech = NFC_DIGITAL_RF_TECH_424F;
594                 break;
595         default:
596                 dev_dbg(trf->dev, "%s - mode_detect: target_proto: 0x%x\n",
597                         __func__, target_proto);
598                 return -EIO;
599         }
600
601         *rf_tech = tech;
602
603         return ret;
604 }
605
606 static void trf7970a_send_upstream(struct trf7970a *trf)
607 {
608         dev_kfree_skb_any(trf->tx_skb);
609         trf->tx_skb = NULL;
610
611         if (trf->rx_skb && !IS_ERR(trf->rx_skb) && !trf->aborting)
612                 print_hex_dump_debug("trf7970a rx data: ", DUMP_PREFIX_NONE,
613                                      16, 1, trf->rx_skb->data, trf->rx_skb->len,
614                                      false);
615
616         trf->state = TRF7970A_ST_IDLE;
617
618         if (trf->aborting) {
619                 dev_dbg(trf->dev, "Abort process complete\n");
620
621                 if (!IS_ERR(trf->rx_skb)) {
622                         kfree_skb(trf->rx_skb);
623                         trf->rx_skb = ERR_PTR(-ECANCELED);
624                 }
625
626                 trf->aborting = false;
627         }
628
629         trf->cb(trf->ddev, trf->cb_arg, trf->rx_skb);
630
631         trf->rx_skb = NULL;
632 }
633
634 static void trf7970a_send_err_upstream(struct trf7970a *trf, int errno)
635 {
636         dev_dbg(trf->dev, "Error - state: %d, errno: %d\n", trf->state, errno);
637
638         cancel_delayed_work(&trf->timeout_work);
639
640         kfree_skb(trf->rx_skb);
641         trf->rx_skb = ERR_PTR(errno);
642
643         trf7970a_send_upstream(trf);
644 }
645
646 static int trf7970a_transmit(struct trf7970a *trf, struct sk_buff *skb,
647                              unsigned int len, const u8 *prefix,
648                              unsigned int prefix_len)
649 {
650         struct spi_transfer t[2];
651         struct spi_message m;
652         unsigned int timeout;
653         int ret;
654
655         print_hex_dump_debug("trf7970a tx data: ", DUMP_PREFIX_NONE,
656                              16, 1, skb->data, len, false);
657
658         spi_message_init(&m);
659
660         memset(&t, 0, sizeof(t));
661
662         t[0].tx_buf = prefix;
663         t[0].len = prefix_len;
664         spi_message_add_tail(&t[0], &m);
665
666         t[1].tx_buf = skb->data;
667         t[1].len = len;
668         spi_message_add_tail(&t[1], &m);
669
670         ret = spi_sync(trf->spi, &m);
671         if (ret) {
672                 dev_err(trf->dev, "%s - Can't send tx data: %d\n", __func__,
673                         ret);
674                 return ret;
675         }
676
677         skb_pull(skb, len);
678
679         if (skb->len > 0) {
680                 trf->state = TRF7970A_ST_WAIT_FOR_TX_FIFO;
681                 timeout = TRF7970A_WAIT_FOR_FIFO_DRAIN_TIMEOUT;
682         } else {
683                 if (trf->issue_eof) {
684                         trf->state = TRF7970A_ST_WAIT_TO_ISSUE_EOF;
685                         timeout = TRF7970A_WAIT_TO_ISSUE_ISO15693_EOF;
686                 } else {
687                         trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA;
688
689                         if (!trf->timeout)
690                                 timeout = TRF7970A_WAIT_FOR_TX_IRQ;
691                         else
692                                 timeout = trf->timeout;
693                 }
694         }
695
696         dev_dbg(trf->dev, "Setting timeout for %d ms, state: %d\n", timeout,
697                 trf->state);
698
699         schedule_delayed_work(&trf->timeout_work, msecs_to_jiffies(timeout));
700
701         return 0;
702 }
703
704 static void trf7970a_fill_fifo(struct trf7970a *trf)
705 {
706         struct sk_buff *skb = trf->tx_skb;
707         unsigned int len;
708         int ret;
709         u8 fifo_bytes;
710         u8 prefix;
711
712         ret = trf7970a_read(trf, TRF7970A_FIFO_STATUS, &fifo_bytes);
713         if (ret) {
714                 trf7970a_send_err_upstream(trf, ret);
715                 return;
716         }
717
718         dev_dbg(trf->dev, "Filling FIFO - fifo_bytes: 0x%x\n", fifo_bytes);
719
720         fifo_bytes &= ~TRF7970A_FIFO_STATUS_OVERFLOW;
721
722         /* Calculate how much more data can be written to the fifo */
723         len = TRF7970A_FIFO_SIZE - fifo_bytes;
724         if (!len) {
725                 schedule_delayed_work(&trf->timeout_work,
726                         msecs_to_jiffies(TRF7970A_WAIT_FOR_FIFO_DRAIN_TIMEOUT));
727                 return;
728         }
729
730         len = min(skb->len, len);
731
732         prefix = TRF7970A_CMD_BIT_CONTINUOUS | TRF7970A_FIFO_IO_REGISTER;
733
734         ret = trf7970a_transmit(trf, skb, len, &prefix, sizeof(prefix));
735         if (ret)
736                 trf7970a_send_err_upstream(trf, ret);
737 }
738
739 static void trf7970a_drain_fifo(struct trf7970a *trf, u8 status)
740 {
741         struct sk_buff *skb = trf->rx_skb;
742         int ret;
743         u8 fifo_bytes;
744
745         if (status & TRF7970A_IRQ_STATUS_ERROR) {
746                 trf7970a_send_err_upstream(trf, -EIO);
747                 return;
748         }
749
750         ret = trf7970a_read(trf, TRF7970A_FIFO_STATUS, &fifo_bytes);
751         if (ret) {
752                 trf7970a_send_err_upstream(trf, ret);
753                 return;
754         }
755
756         dev_dbg(trf->dev, "Draining FIFO - fifo_bytes: 0x%x\n", fifo_bytes);
757
758         fifo_bytes &= ~TRF7970A_FIFO_STATUS_OVERFLOW;
759
760         if (!fifo_bytes)
761                 goto no_rx_data;
762
763         if (fifo_bytes > skb_tailroom(skb)) {
764                 skb = skb_copy_expand(skb, skb_headroom(skb),
765                                       max_t(int, fifo_bytes,
766                                             TRF7970A_RX_SKB_ALLOC_SIZE),
767                                       GFP_KERNEL);
768                 if (!skb) {
769                         trf7970a_send_err_upstream(trf, -ENOMEM);
770                         return;
771                 }
772
773                 kfree_skb(trf->rx_skb);
774                 trf->rx_skb = skb;
775         }
776
777         ret = trf7970a_read_cont(trf, TRF7970A_FIFO_IO_REGISTER,
778                                  skb_put(skb, fifo_bytes), fifo_bytes);
779         if (ret) {
780                 trf7970a_send_err_upstream(trf, ret);
781                 return;
782         }
783
784         /* If received Type 2 ACK/NACK, shift right 4 bits and pass up */
785         if ((trf->framing == NFC_DIGITAL_FRAMING_NFCA_T2T) && (skb->len == 1) &&
786             (trf->special_fcn_reg1 == TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX)) {
787                 skb->data[0] >>= 4;
788                 status = TRF7970A_IRQ_STATUS_SRX;
789         } else {
790                 trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA_CONT;
791
792                 ret = trf7970a_read(trf, TRF7970A_FIFO_STATUS, &fifo_bytes);
793                 if (ret) {
794                         trf7970a_send_err_upstream(trf, ret);
795                         return;
796                 }
797
798                 fifo_bytes &= ~TRF7970A_FIFO_STATUS_OVERFLOW;
799
800                 /* If there are bytes in the FIFO, set status to '0' so
801                  * the if stmt below doesn't fire and the driver will wait
802                  * for the trf7970a to generate another RX interrupt.
803                  */
804                 if (fifo_bytes)
805                         status = 0;
806         }
807
808 no_rx_data:
809         if (status == TRF7970A_IRQ_STATUS_SRX) {        /* Receive complete */
810                 trf7970a_send_upstream(trf);
811                 return;
812         }
813
814         dev_dbg(trf->dev, "Setting timeout for %d ms\n",
815                 TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT);
816
817         schedule_delayed_work(&trf->timeout_work,
818                            msecs_to_jiffies(TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT));
819 }
820
821 static irqreturn_t trf7970a_irq(int irq, void *dev_id)
822 {
823         struct trf7970a *trf = dev_id;
824         int ret;
825         u8 status, fifo_bytes, iso_ctrl;
826
827         mutex_lock(&trf->lock);
828
829         if (trf->state == TRF7970A_ST_RF_OFF) {
830                 mutex_unlock(&trf->lock);
831                 return IRQ_NONE;
832         }
833
834         ret = trf7970a_read_irqstatus(trf, &status);
835         if (ret) {
836                 mutex_unlock(&trf->lock);
837                 return IRQ_NONE;
838         }
839
840         dev_dbg(trf->dev, "IRQ - state: %d, status: 0x%x\n", trf->state,
841                 status);
842
843         if (!status) {
844                 mutex_unlock(&trf->lock);
845                 return IRQ_NONE;
846         }
847
848         switch (trf->state) {
849         case TRF7970A_ST_IDLE:
850         case TRF7970A_ST_IDLE_RX_BLOCKED:
851                 /* If initiator and getting interrupts caused by RF noise,
852                  * turn off the receiver to avoid unnecessary interrupts.
853                  * It will be turned back on in trf7970a_send_cmd() when
854                  * the next command is issued.
855                  */
856                 if (trf->is_initiator && (status & TRF7970A_IRQ_STATUS_ERROR)) {
857                         trf7970a_cmd(trf, TRF7970A_CMD_BLOCK_RX);
858                         trf->state = TRF7970A_ST_IDLE_RX_BLOCKED;
859                 }
860
861                 trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
862                 break;
863         case TRF7970A_ST_WAIT_FOR_TX_FIFO:
864                 if (status & TRF7970A_IRQ_STATUS_TX) {
865                         trf->ignore_timeout =
866                             !cancel_delayed_work(&trf->timeout_work);
867                         trf7970a_fill_fifo(trf);
868                 } else {
869                         trf7970a_send_err_upstream(trf, -EIO);
870                 }
871                 break;
872         case TRF7970A_ST_WAIT_FOR_RX_DATA:
873         case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT:
874                 if (status & TRF7970A_IRQ_STATUS_SRX) {
875                         trf->ignore_timeout =
876                             !cancel_delayed_work(&trf->timeout_work);
877                         trf7970a_drain_fifo(trf, status);
878                 } else if (status & TRF7970A_IRQ_STATUS_FIFO) {
879                         ret = trf7970a_read(trf, TRF7970A_FIFO_STATUS,
880                                             &fifo_bytes);
881
882                         fifo_bytes &= ~TRF7970A_FIFO_STATUS_OVERFLOW;
883
884                         if (ret)
885                                 trf7970a_send_err_upstream(trf, ret);
886                         else if (!fifo_bytes)
887                                 trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
888                 } else if ((status == TRF7970A_IRQ_STATUS_TX) ||
889                            (!trf->is_initiator &&
890                             (status == (TRF7970A_IRQ_STATUS_TX |
891                                         TRF7970A_IRQ_STATUS_NFC_RF)))) {
892                         trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
893
894                         if (!trf->timeout) {
895                                 trf->ignore_timeout =
896                                     !cancel_delayed_work(&trf->timeout_work);
897                                 trf->rx_skb = ERR_PTR(0);
898                                 trf7970a_send_upstream(trf);
899                                 break;
900                         }
901
902                         if (trf->is_initiator)
903                                 break;
904
905                         iso_ctrl = trf->iso_ctrl;
906
907                         switch (trf->framing) {
908                         case NFC_DIGITAL_FRAMING_NFCA_STANDARD:
909                                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC;
910                                 iso_ctrl |= TRF7970A_ISO_CTRL_RX_CRC_N;
911                                 trf->iso_ctrl = 0xff; /* Force ISO_CTRL write */
912                                 break;
913                         case NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A:
914                                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
915                                 iso_ctrl &= ~TRF7970A_ISO_CTRL_RX_CRC_N;
916                                 trf->iso_ctrl = 0xff; /* Force ISO_CTRL write */
917                                 break;
918                         case NFC_DIGITAL_FRAMING_NFCA_ANTICOL_COMPLETE:
919                                 ret = trf7970a_write(trf,
920                                          TRF7970A_SPECIAL_FCN_REG1,
921                                          TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL);
922                                 if (ret)
923                                         goto err_unlock_exit;
924
925                                 trf->special_fcn_reg1 =
926                                     TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL;
927                                 break;
928                         default:
929                                 break;
930                         }
931
932                         if (iso_ctrl != trf->iso_ctrl) {
933                                 ret = trf7970a_write(trf, TRF7970A_ISO_CTRL,
934                                                      iso_ctrl);
935                                 if (ret)
936                                         goto err_unlock_exit;
937
938                                 trf->iso_ctrl = iso_ctrl;
939                         }
940                 } else {
941                         trf7970a_send_err_upstream(trf, -EIO);
942                 }
943                 break;
944         case TRF7970A_ST_WAIT_TO_ISSUE_EOF:
945                 if (status != TRF7970A_IRQ_STATUS_TX)
946                         trf7970a_send_err_upstream(trf, -EIO);
947                 break;
948         case TRF7970A_ST_LISTENING:
949                 if (status & TRF7970A_IRQ_STATUS_SRX) {
950                         trf->ignore_timeout =
951                             !cancel_delayed_work(&trf->timeout_work);
952                         trf7970a_drain_fifo(trf, status);
953                 } else if (!(status & TRF7970A_IRQ_STATUS_NFC_RF)) {
954                         trf7970a_send_err_upstream(trf, -EIO);
955                 }
956                 break;
957         case TRF7970A_ST_LISTENING_MD:
958                 if (status & TRF7970A_IRQ_STATUS_SRX) {
959                         trf->ignore_timeout =
960                             !cancel_delayed_work(&trf->timeout_work);
961
962                         ret = trf7970a_mode_detect(trf, &trf->md_rf_tech);
963                         if (ret) {
964                                 trf7970a_send_err_upstream(trf, ret);
965                         } else {
966                                 trf->state = TRF7970A_ST_LISTENING;
967                                 trf7970a_drain_fifo(trf, status);
968                         }
969                 } else if (!(status & TRF7970A_IRQ_STATUS_NFC_RF)) {
970                         trf7970a_send_err_upstream(trf, -EIO);
971                 }
972                 break;
973         default:
974                 dev_err(trf->dev, "%s - Driver in invalid state: %d\n",
975                         __func__, trf->state);
976         }
977
978 err_unlock_exit:
979         mutex_unlock(&trf->lock);
980         return IRQ_HANDLED;
981 }
982
983 static void trf7970a_issue_eof(struct trf7970a *trf)
984 {
985         int ret;
986
987         dev_dbg(trf->dev, "Issuing EOF\n");
988
989         ret = trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
990         if (ret)
991                 trf7970a_send_err_upstream(trf, ret);
992
993         ret = trf7970a_cmd(trf, TRF7970A_CMD_EOF);
994         if (ret)
995                 trf7970a_send_err_upstream(trf, ret);
996
997         trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA;
998
999         dev_dbg(trf->dev, "Setting timeout for %d ms, state: %d\n",
1000                 trf->timeout, trf->state);
1001
1002         schedule_delayed_work(&trf->timeout_work,
1003                               msecs_to_jiffies(trf->timeout));
1004 }
1005
1006 static void trf7970a_timeout_work_handler(struct work_struct *work)
1007 {
1008         struct trf7970a *trf = container_of(work, struct trf7970a,
1009                                             timeout_work.work);
1010
1011         dev_dbg(trf->dev, "Timeout - state: %d, ignore_timeout: %d\n",
1012                 trf->state, trf->ignore_timeout);
1013
1014         mutex_lock(&trf->lock);
1015
1016         if (trf->ignore_timeout)
1017                 trf->ignore_timeout = false;
1018         else if (trf->state == TRF7970A_ST_WAIT_FOR_RX_DATA_CONT)
1019                 trf7970a_drain_fifo(trf, TRF7970A_IRQ_STATUS_SRX);
1020         else if (trf->state == TRF7970A_ST_WAIT_TO_ISSUE_EOF)
1021                 trf7970a_issue_eof(trf);
1022         else
1023                 trf7970a_send_err_upstream(trf, -ETIMEDOUT);
1024
1025         mutex_unlock(&trf->lock);
1026 }
1027
1028 static int trf7970a_init(struct trf7970a *trf)
1029 {
1030         int ret;
1031
1032         dev_dbg(trf->dev, "Initializing device - state: %d\n", trf->state);
1033
1034         ret = trf7970a_cmd(trf, TRF7970A_CMD_SOFT_INIT);
1035         if (ret)
1036                 goto err_out;
1037
1038         ret = trf7970a_cmd(trf, TRF7970A_CMD_IDLE);
1039         if (ret)
1040                 goto err_out;
1041
1042         ret = trf7970a_write(trf, TRF7970A_REG_IO_CTRL,
1043                              trf->io_ctrl | TRF7970A_REG_IO_CTRL_VRS(0x1));
1044         if (ret)
1045                 goto err_out;
1046
1047         ret = trf7970a_write(trf, TRF7970A_NFC_TARGET_LEVEL, 0);
1048         if (ret)
1049                 goto err_out;
1050
1051         usleep_range(1000, 2000);
1052
1053         trf->chip_status_ctrl &= ~TRF7970A_CHIP_STATUS_RF_ON;
1054
1055         ret = trf7970a_write(trf, TRF7970A_MODULATOR_SYS_CLK_CTRL,
1056                              trf->modulator_sys_clk_ctrl);
1057         if (ret)
1058                 goto err_out;
1059
1060         ret = trf7970a_write(trf, TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS,
1061                              TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_96 |
1062                              TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_32);
1063         if (ret)
1064                 goto err_out;
1065
1066         ret = trf7970a_write(trf, TRF7970A_SPECIAL_FCN_REG1, 0);
1067         if (ret)
1068                 goto err_out;
1069
1070         trf->special_fcn_reg1 = 0;
1071
1072         trf->iso_ctrl = 0xff;
1073         return 0;
1074
1075 err_out:
1076         dev_dbg(trf->dev, "Couldn't init device: %d\n", ret);
1077         return ret;
1078 }
1079
1080 static void trf7970a_switch_rf_off(struct trf7970a *trf)
1081 {
1082         if ((trf->state == TRF7970A_ST_PWR_OFF) ||
1083             (trf->state == TRF7970A_ST_RF_OFF))
1084                 return;
1085
1086         dev_dbg(trf->dev, "Switching rf off\n");
1087
1088         trf->chip_status_ctrl &= ~TRF7970A_CHIP_STATUS_RF_ON;
1089
1090         trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL, trf->chip_status_ctrl);
1091
1092         trf->aborting = false;
1093         trf->state = TRF7970A_ST_RF_OFF;
1094
1095         pm_runtime_mark_last_busy(trf->dev);
1096         pm_runtime_put_autosuspend(trf->dev);
1097 }
1098
1099 static int trf7970a_switch_rf_on(struct trf7970a *trf)
1100 {
1101         int ret;
1102
1103         dev_dbg(trf->dev, "Switching rf on\n");
1104
1105         pm_runtime_get_sync(trf->dev);
1106
1107         if (trf->state != TRF7970A_ST_RF_OFF) { /* Power on, RF off */
1108                 dev_err(trf->dev, "%s - Incorrect state: %d\n", __func__,
1109                         trf->state);
1110                 return -EINVAL;
1111         }
1112
1113         ret = trf7970a_init(trf);
1114         if (ret) {
1115                 dev_err(trf->dev, "%s - Can't initialize: %d\n", __func__, ret);
1116                 return ret;
1117         }
1118
1119         trf->state = TRF7970A_ST_IDLE;
1120
1121         return 0;
1122 }
1123
1124 static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
1125 {
1126         struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1127         int ret = 0;
1128
1129         dev_dbg(trf->dev, "Switching RF - state: %d, on: %d\n", trf->state, on);
1130
1131         mutex_lock(&trf->lock);
1132
1133         if (on) {
1134                 switch (trf->state) {
1135                 case TRF7970A_ST_PWR_OFF:
1136                 case TRF7970A_ST_RF_OFF:
1137                         ret = trf7970a_switch_rf_on(trf);
1138                         break;
1139                 case TRF7970A_ST_IDLE:
1140                 case TRF7970A_ST_IDLE_RX_BLOCKED:
1141                         break;
1142                 default:
1143                         dev_err(trf->dev, "%s - Invalid request: %d %d\n",
1144                                 __func__, trf->state, on);
1145                         trf7970a_switch_rf_off(trf);
1146                         ret = -EINVAL;
1147                 }
1148         } else {
1149                 switch (trf->state) {
1150                 case TRF7970A_ST_PWR_OFF:
1151                 case TRF7970A_ST_RF_OFF:
1152                         break;
1153                 default:
1154                         dev_err(trf->dev, "%s - Invalid request: %d %d\n",
1155                                 __func__, trf->state, on);
1156                         ret = -EINVAL;
1157                         fallthrough;
1158                 case TRF7970A_ST_IDLE:
1159                 case TRF7970A_ST_IDLE_RX_BLOCKED:
1160                 case TRF7970A_ST_WAIT_FOR_RX_DATA:
1161                 case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT:
1162                         trf7970a_switch_rf_off(trf);
1163                 }
1164         }
1165
1166         mutex_unlock(&trf->lock);
1167         return ret;
1168 }
1169
1170 static int trf7970a_in_config_rf_tech(struct trf7970a *trf, int tech)
1171 {
1172         int ret = 0;
1173
1174         dev_dbg(trf->dev, "rf technology: %d\n", tech);
1175
1176         switch (tech) {
1177         case NFC_DIGITAL_RF_TECH_106A:
1178                 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_14443A_106;
1179                 trf->modulator_sys_clk_ctrl =
1180                     (trf->modulator_sys_clk_ctrl & 0xf8) |
1181                     TRF7970A_MODULATOR_DEPTH_OOK;
1182                 trf->guard_time = TRF7970A_GUARD_TIME_NFCA;
1183                 break;
1184         case NFC_DIGITAL_RF_TECH_106B:
1185                 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_14443B_106;
1186                 trf->modulator_sys_clk_ctrl =
1187                     (trf->modulator_sys_clk_ctrl & 0xf8) |
1188                     TRF7970A_MODULATOR_DEPTH_ASK10;
1189                 trf->guard_time = TRF7970A_GUARD_TIME_NFCB;
1190                 break;
1191         case NFC_DIGITAL_RF_TECH_212F:
1192                 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_212;
1193                 trf->modulator_sys_clk_ctrl =
1194                     (trf->modulator_sys_clk_ctrl & 0xf8) |
1195                     TRF7970A_MODULATOR_DEPTH_ASK10;
1196                 trf->guard_time = TRF7970A_GUARD_TIME_NFCF;
1197                 break;
1198         case NFC_DIGITAL_RF_TECH_424F:
1199                 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_424;
1200                 trf->modulator_sys_clk_ctrl =
1201                     (trf->modulator_sys_clk_ctrl & 0xf8) |
1202                     TRF7970A_MODULATOR_DEPTH_ASK10;
1203                 trf->guard_time = TRF7970A_GUARD_TIME_NFCF;
1204                 break;
1205         case NFC_DIGITAL_RF_TECH_ISO15693:
1206                 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648;
1207                 trf->modulator_sys_clk_ctrl =
1208                     (trf->modulator_sys_clk_ctrl & 0xf8) |
1209                     TRF7970A_MODULATOR_DEPTH_OOK;
1210                 trf->guard_time = TRF7970A_GUARD_TIME_15693;
1211                 break;
1212         default:
1213                 dev_dbg(trf->dev, "Unsupported rf technology: %d\n", tech);
1214                 return -EINVAL;
1215         }
1216
1217         trf->technology = tech;
1218
1219         /* If in initiator mode and not changing the RF tech due to a
1220          * PSL sequence (indicated by 'trf->iso_ctrl == 0xff' from
1221          * trf7970a_init()), clear the NFC Target Detection Level register
1222          * due to erratum.
1223          */
1224         if (trf->iso_ctrl == 0xff)
1225                 ret = trf7970a_write(trf, TRF7970A_NFC_TARGET_LEVEL, 0);
1226
1227         return ret;
1228 }
1229
1230 static int trf7970a_is_rf_field(struct trf7970a *trf, bool *is_rf_field)
1231 {
1232         int ret;
1233         u8 rssi;
1234
1235         ret = trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL,
1236                              trf->chip_status_ctrl |
1237                              TRF7970A_CHIP_STATUS_REC_ON);
1238         if (ret)
1239                 return ret;
1240
1241         ret = trf7970a_cmd(trf, TRF7970A_CMD_TEST_EXT_RF);
1242         if (ret)
1243                 return ret;
1244
1245         usleep_range(50, 60);
1246
1247         ret = trf7970a_read(trf, TRF7970A_RSSI_OSC_STATUS, &rssi);
1248         if (ret)
1249                 return ret;
1250
1251         ret = trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL,
1252                              trf->chip_status_ctrl);
1253         if (ret)
1254                 return ret;
1255
1256         if (rssi & TRF7970A_RSSI_OSC_STATUS_RSSI_MASK)
1257                 *is_rf_field = true;
1258         else
1259                 *is_rf_field = false;
1260
1261         return 0;
1262 }
1263
1264 static int trf7970a_in_config_framing(struct trf7970a *trf, int framing)
1265 {
1266         u8 iso_ctrl = trf->iso_ctrl_tech;
1267         bool is_rf_field = false;
1268         int ret;
1269
1270         dev_dbg(trf->dev, "framing: %d\n", framing);
1271
1272         switch (framing) {
1273         case NFC_DIGITAL_FRAMING_NFCA_SHORT:
1274         case NFC_DIGITAL_FRAMING_NFCA_STANDARD:
1275                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC;
1276                 iso_ctrl |= TRF7970A_ISO_CTRL_RX_CRC_N;
1277                 break;
1278         case NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A:
1279         case NFC_DIGITAL_FRAMING_NFCA_T4T:
1280         case NFC_DIGITAL_FRAMING_NFCB:
1281         case NFC_DIGITAL_FRAMING_NFCB_T4T:
1282         case NFC_DIGITAL_FRAMING_NFCF:
1283         case NFC_DIGITAL_FRAMING_NFCF_T3T:
1284         case NFC_DIGITAL_FRAMING_ISO15693_INVENTORY:
1285         case NFC_DIGITAL_FRAMING_ISO15693_T5T:
1286         case NFC_DIGITAL_FRAMING_NFCA_NFC_DEP:
1287         case NFC_DIGITAL_FRAMING_NFCF_NFC_DEP:
1288                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
1289                 iso_ctrl &= ~TRF7970A_ISO_CTRL_RX_CRC_N;
1290                 break;
1291         case NFC_DIGITAL_FRAMING_NFCA_T2T:
1292                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
1293                 iso_ctrl |= TRF7970A_ISO_CTRL_RX_CRC_N;
1294                 break;
1295         default:
1296                 dev_dbg(trf->dev, "Unsupported Framing: %d\n", framing);
1297                 return -EINVAL;
1298         }
1299
1300         trf->framing = framing;
1301
1302         if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) {
1303                 ret = trf7970a_is_rf_field(trf, &is_rf_field);
1304                 if (ret)
1305                         return ret;
1306
1307                 if (is_rf_field)
1308                         return -EBUSY;
1309         }
1310
1311         if (iso_ctrl != trf->iso_ctrl) {
1312                 ret = trf7970a_write(trf, TRF7970A_ISO_CTRL, iso_ctrl);
1313                 if (ret)
1314                         return ret;
1315
1316                 trf->iso_ctrl = iso_ctrl;
1317
1318                 ret = trf7970a_write(trf, TRF7970A_MODULATOR_SYS_CLK_CTRL,
1319                                      trf->modulator_sys_clk_ctrl);
1320                 if (ret)
1321                         return ret;
1322         }
1323
1324         if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) {
1325                 ret = trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL,
1326                                      trf->chip_status_ctrl |
1327                                      TRF7970A_CHIP_STATUS_RF_ON);
1328                 if (ret)
1329                         return ret;
1330
1331                 trf->chip_status_ctrl |= TRF7970A_CHIP_STATUS_RF_ON;
1332
1333                 usleep_range(trf->guard_time, trf->guard_time + 1000);
1334         }
1335
1336         return 0;
1337 }
1338
1339 static int trf7970a_in_configure_hw(struct nfc_digital_dev *ddev, int type,
1340                                     int param)
1341 {
1342         struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1343         int ret;
1344
1345         dev_dbg(trf->dev, "Configure hw - type: %d, param: %d\n", type, param);
1346
1347         mutex_lock(&trf->lock);
1348
1349         trf->is_initiator = true;
1350
1351         if ((trf->state == TRF7970A_ST_PWR_OFF) ||
1352             (trf->state == TRF7970A_ST_RF_OFF)) {
1353                 ret = trf7970a_switch_rf_on(trf);
1354                 if (ret)
1355                         goto err_unlock;
1356         }
1357
1358         switch (type) {
1359         case NFC_DIGITAL_CONFIG_RF_TECH:
1360                 ret = trf7970a_in_config_rf_tech(trf, param);
1361                 break;
1362         case NFC_DIGITAL_CONFIG_FRAMING:
1363                 ret = trf7970a_in_config_framing(trf, param);
1364                 break;
1365         default:
1366                 dev_dbg(trf->dev, "Unknown type: %d\n", type);
1367                 ret = -EINVAL;
1368         }
1369
1370 err_unlock:
1371         mutex_unlock(&trf->lock);
1372         return ret;
1373 }
1374
1375 static int trf7970a_is_iso15693_write_or_lock(u8 cmd)
1376 {
1377         switch (cmd) {
1378         case ISO15693_CMD_WRITE_SINGLE_BLOCK:
1379         case ISO15693_CMD_LOCK_BLOCK:
1380         case ISO15693_CMD_WRITE_MULTIPLE_BLOCK:
1381         case ISO15693_CMD_WRITE_AFI:
1382         case ISO15693_CMD_LOCK_AFI:
1383         case ISO15693_CMD_WRITE_DSFID:
1384         case ISO15693_CMD_LOCK_DSFID:
1385                 return 1;
1386         default:
1387                 return 0;
1388         }
1389 }
1390
1391 static int trf7970a_per_cmd_config(struct trf7970a *trf,
1392                                    const struct sk_buff *skb)
1393 {
1394         const u8 *req = skb->data;
1395         u8 special_fcn_reg1, iso_ctrl;
1396         int ret;
1397
1398         trf->issue_eof = false;
1399
1400         /* When issuing Type 2 read command, make sure the '4_bit_RX' bit in
1401          * special functions register 1 is cleared; otherwise, its a write or
1402          * sector select command and '4_bit_RX' must be set.
1403          *
1404          * When issuing an ISO 15693 command, inspect the flags byte to see
1405          * what speed to use.  Also, remember if the OPTION flag is set on
1406          * a Type 5 write or lock command so the driver will know that it
1407          * has to send an EOF in order to get a response.
1408          */
1409         if ((trf->technology == NFC_DIGITAL_RF_TECH_106A) &&
1410             (trf->framing == NFC_DIGITAL_FRAMING_NFCA_T2T)) {
1411                 if (req[0] == NFC_T2T_CMD_READ)
1412                         special_fcn_reg1 = 0;
1413                 else
1414                         special_fcn_reg1 = TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX;
1415
1416                 if (special_fcn_reg1 != trf->special_fcn_reg1) {
1417                         ret = trf7970a_write(trf, TRF7970A_SPECIAL_FCN_REG1,
1418                                              special_fcn_reg1);
1419                         if (ret)
1420                                 return ret;
1421
1422                         trf->special_fcn_reg1 = special_fcn_reg1;
1423                 }
1424         } else if (trf->technology == NFC_DIGITAL_RF_TECH_ISO15693) {
1425                 iso_ctrl = trf->iso_ctrl & ~TRF7970A_ISO_CTRL_RFID_SPEED_MASK;
1426
1427                 switch (req[0] & ISO15693_REQ_FLAG_SPEED_MASK) {
1428                 case 0x00:
1429                         iso_ctrl |= TRF7970A_ISO_CTRL_15693_SGL_1OF4_662;
1430                         break;
1431                 case ISO15693_REQ_FLAG_SUB_CARRIER:
1432                         iso_ctrl |= TRF7970A_ISO_CTRL_15693_DBL_1OF4_667a;
1433                         break;
1434                 case ISO15693_REQ_FLAG_DATA_RATE:
1435                         iso_ctrl |= TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648;
1436                         break;
1437                 case (ISO15693_REQ_FLAG_SUB_CARRIER |
1438                       ISO15693_REQ_FLAG_DATA_RATE):
1439                         iso_ctrl |= TRF7970A_ISO_CTRL_15693_DBL_1OF4_2669;
1440                         break;
1441                 }
1442
1443                 if (iso_ctrl != trf->iso_ctrl) {
1444                         ret = trf7970a_write(trf, TRF7970A_ISO_CTRL, iso_ctrl);
1445                         if (ret)
1446                                 return ret;
1447
1448                         trf->iso_ctrl = iso_ctrl;
1449                 }
1450
1451                 if ((trf->framing == NFC_DIGITAL_FRAMING_ISO15693_T5T) &&
1452                     trf7970a_is_iso15693_write_or_lock(req[1]) &&
1453                     (req[0] & ISO15693_REQ_FLAG_OPTION))
1454                         trf->issue_eof = true;
1455         }
1456
1457         return 0;
1458 }
1459
1460 static int trf7970a_send_cmd(struct nfc_digital_dev *ddev,
1461                              struct sk_buff *skb, u16 timeout,
1462                              nfc_digital_cmd_complete_t cb, void *arg)
1463 {
1464         struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1465         u8 prefix[5];
1466         unsigned int len;
1467         int ret;
1468         u8 status;
1469
1470         dev_dbg(trf->dev, "New request - state: %d, timeout: %d ms, len: %d\n",
1471                 trf->state, timeout, skb->len);
1472
1473         if (skb->len > TRF7970A_TX_MAX)
1474                 return -EINVAL;
1475
1476         mutex_lock(&trf->lock);
1477
1478         if ((trf->state != TRF7970A_ST_IDLE) &&
1479             (trf->state != TRF7970A_ST_IDLE_RX_BLOCKED)) {
1480                 dev_err(trf->dev, "%s - Bogus state: %d\n", __func__,
1481                         trf->state);
1482                 ret = -EIO;
1483                 goto out_err;
1484         }
1485
1486         if (trf->aborting) {
1487                 dev_dbg(trf->dev, "Abort process complete\n");
1488                 trf->aborting = false;
1489                 ret = -ECANCELED;
1490                 goto out_err;
1491         }
1492
1493         if (timeout) {
1494                 trf->rx_skb = nfc_alloc_recv_skb(TRF7970A_RX_SKB_ALLOC_SIZE,
1495                                                  GFP_KERNEL);
1496                 if (!trf->rx_skb) {
1497                         dev_dbg(trf->dev, "Can't alloc rx_skb\n");
1498                         ret = -ENOMEM;
1499                         goto out_err;
1500                 }
1501         }
1502
1503         if (trf->state == TRF7970A_ST_IDLE_RX_BLOCKED) {
1504                 ret = trf7970a_cmd(trf, TRF7970A_CMD_ENABLE_RX);
1505                 if (ret)
1506                         goto out_err;
1507
1508                 trf->state = TRF7970A_ST_IDLE;
1509         }
1510
1511         if (trf->is_initiator) {
1512                 ret = trf7970a_per_cmd_config(trf, skb);
1513                 if (ret)
1514                         goto out_err;
1515         }
1516
1517         trf->ddev = ddev;
1518         trf->tx_skb = skb;
1519         trf->cb = cb;
1520         trf->cb_arg = arg;
1521         trf->timeout = timeout;
1522         trf->ignore_timeout = false;
1523
1524         len = skb->len;
1525
1526         /* TX data must be prefixed with a FIFO reset cmd, a cmd that depends
1527          * on what the current framing is, the address of the TX length byte 1
1528          * register (0x1d), and the 2 byte length of the data to be transmitted.
1529          * That totals 5 bytes.
1530          */
1531         prefix[0] = TRF7970A_CMD_BIT_CTRL |
1532             TRF7970A_CMD_BIT_OPCODE(TRF7970A_CMD_FIFO_RESET);
1533         prefix[1] = TRF7970A_CMD_BIT_CTRL |
1534             TRF7970A_CMD_BIT_OPCODE(trf->tx_cmd);
1535         prefix[2] = TRF7970A_CMD_BIT_CONTINUOUS | TRF7970A_TX_LENGTH_BYTE1;
1536
1537         if (trf->framing == NFC_DIGITAL_FRAMING_NFCA_SHORT) {
1538                 prefix[3] = 0x00;
1539                 prefix[4] = 0x0f;       /* 7 bits */
1540         } else {
1541                 prefix[3] = (len & 0xf00) >> 4;
1542                 prefix[3] |= ((len & 0xf0) >> 4);
1543                 prefix[4] = ((len & 0x0f) << 4);
1544         }
1545
1546         len = min_t(int, skb->len, TRF7970A_FIFO_SIZE);
1547
1548         /* Clear possible spurious interrupt */
1549         ret = trf7970a_read_irqstatus(trf, &status);
1550         if (ret)
1551                 goto out_err;
1552
1553         ret = trf7970a_transmit(trf, skb, len, prefix, sizeof(prefix));
1554         if (ret) {
1555                 kfree_skb(trf->rx_skb);
1556                 trf->rx_skb = NULL;
1557         }
1558
1559 out_err:
1560         mutex_unlock(&trf->lock);
1561         return ret;
1562 }
1563
1564 static int trf7970a_tg_config_rf_tech(struct trf7970a *trf, int tech)
1565 {
1566         int ret = 0;
1567
1568         dev_dbg(trf->dev, "rf technology: %d\n", tech);
1569
1570         switch (tech) {
1571         case NFC_DIGITAL_RF_TECH_106A:
1572                 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
1573                     TRF7970A_ISO_CTRL_NFC_CE | TRF7970A_ISO_CTRL_NFC_CE_14443A;
1574                 trf->modulator_sys_clk_ctrl =
1575                     (trf->modulator_sys_clk_ctrl & 0xf8) |
1576                     TRF7970A_MODULATOR_DEPTH_OOK;
1577                 break;
1578         case NFC_DIGITAL_RF_TECH_212F:
1579                 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
1580                     TRF7970A_ISO_CTRL_NFC_NFCF_212;
1581                 trf->modulator_sys_clk_ctrl =
1582                     (trf->modulator_sys_clk_ctrl & 0xf8) |
1583                     TRF7970A_MODULATOR_DEPTH_ASK10;
1584                 break;
1585         case NFC_DIGITAL_RF_TECH_424F:
1586                 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
1587                     TRF7970A_ISO_CTRL_NFC_NFCF_424;
1588                 trf->modulator_sys_clk_ctrl =
1589                     (trf->modulator_sys_clk_ctrl & 0xf8) |
1590                     TRF7970A_MODULATOR_DEPTH_ASK10;
1591                 break;
1592         default:
1593                 dev_dbg(trf->dev, "Unsupported rf technology: %d\n", tech);
1594                 return -EINVAL;
1595         }
1596
1597         trf->technology = tech;
1598
1599         /* Normally we write the ISO_CTRL register in
1600          * trf7970a_tg_config_framing() because the framing can change
1601          * the value written.  However, when sending a PSL RES,
1602          * digital_tg_send_psl_res_complete() doesn't call
1603          * trf7970a_tg_config_framing() so we must write the register
1604          * here.
1605          */
1606         if ((trf->framing == NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED) &&
1607             (trf->iso_ctrl_tech != trf->iso_ctrl)) {
1608                 ret = trf7970a_write(trf, TRF7970A_ISO_CTRL,
1609                                      trf->iso_ctrl_tech);
1610
1611                 trf->iso_ctrl = trf->iso_ctrl_tech;
1612         }
1613
1614         return ret;
1615 }
1616
1617 /* Since this is a target routine, several of the framing calls are
1618  * made between receiving the request and sending the response so they
1619  * should take effect until after the response is sent.  This is accomplished
1620  * by skipping the ISO_CTRL register write here and doing it in the interrupt
1621  * handler.
1622  */
1623 static int trf7970a_tg_config_framing(struct trf7970a *trf, int framing)
1624 {
1625         u8 iso_ctrl = trf->iso_ctrl_tech;
1626         int ret;
1627
1628         dev_dbg(trf->dev, "framing: %d\n", framing);
1629
1630         switch (framing) {
1631         case NFC_DIGITAL_FRAMING_NFCA_NFC_DEP:
1632                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC;
1633                 iso_ctrl |= TRF7970A_ISO_CTRL_RX_CRC_N;
1634                 break;
1635         case NFC_DIGITAL_FRAMING_NFCA_STANDARD:
1636         case NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A:
1637         case NFC_DIGITAL_FRAMING_NFCA_ANTICOL_COMPLETE:
1638                 /* These ones are applied in the interrupt handler */
1639                 iso_ctrl = trf->iso_ctrl; /* Don't write to ISO_CTRL yet */
1640                 break;
1641         case NFC_DIGITAL_FRAMING_NFCF_NFC_DEP:
1642                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
1643                 iso_ctrl &= ~TRF7970A_ISO_CTRL_RX_CRC_N;
1644                 break;
1645         case NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED:
1646                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
1647                 iso_ctrl &= ~TRF7970A_ISO_CTRL_RX_CRC_N;
1648                 break;
1649         default:
1650                 dev_dbg(trf->dev, "Unsupported Framing: %d\n", framing);
1651                 return -EINVAL;
1652         }
1653
1654         trf->framing = framing;
1655
1656         if (iso_ctrl != trf->iso_ctrl) {
1657                 ret = trf7970a_write(trf, TRF7970A_ISO_CTRL, iso_ctrl);
1658                 if (ret)
1659                         return ret;
1660
1661                 trf->iso_ctrl = iso_ctrl;
1662
1663                 ret = trf7970a_write(trf, TRF7970A_MODULATOR_SYS_CLK_CTRL,
1664                                      trf->modulator_sys_clk_ctrl);
1665                 if (ret)
1666                         return ret;
1667         }
1668
1669         if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) {
1670                 ret = trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL,
1671                                      trf->chip_status_ctrl |
1672                                      TRF7970A_CHIP_STATUS_RF_ON);
1673                 if (ret)
1674                         return ret;
1675
1676                 trf->chip_status_ctrl |= TRF7970A_CHIP_STATUS_RF_ON;
1677         }
1678
1679         return 0;
1680 }
1681
1682 static int trf7970a_tg_configure_hw(struct nfc_digital_dev *ddev, int type,
1683                                     int param)
1684 {
1685         struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1686         int ret;
1687
1688         dev_dbg(trf->dev, "Configure hw - type: %d, param: %d\n", type, param);
1689
1690         mutex_lock(&trf->lock);
1691
1692         trf->is_initiator = false;
1693
1694         if ((trf->state == TRF7970A_ST_PWR_OFF) ||
1695             (trf->state == TRF7970A_ST_RF_OFF)) {
1696                 ret = trf7970a_switch_rf_on(trf);
1697                 if (ret)
1698                         goto err_unlock;
1699         }
1700
1701         switch (type) {
1702         case NFC_DIGITAL_CONFIG_RF_TECH:
1703                 ret = trf7970a_tg_config_rf_tech(trf, param);
1704                 break;
1705         case NFC_DIGITAL_CONFIG_FRAMING:
1706                 ret = trf7970a_tg_config_framing(trf, param);
1707                 break;
1708         default:
1709                 dev_dbg(trf->dev, "Unknown type: %d\n", type);
1710                 ret = -EINVAL;
1711         }
1712
1713 err_unlock:
1714         mutex_unlock(&trf->lock);
1715         return ret;
1716 }
1717
1718 static int _trf7970a_tg_listen(struct nfc_digital_dev *ddev, u16 timeout,
1719                                nfc_digital_cmd_complete_t cb, void *arg,
1720                                bool mode_detect)
1721 {
1722         struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1723         int ret;
1724
1725         mutex_lock(&trf->lock);
1726
1727         if ((trf->state != TRF7970A_ST_IDLE) &&
1728             (trf->state != TRF7970A_ST_IDLE_RX_BLOCKED)) {
1729                 dev_err(trf->dev, "%s - Bogus state: %d\n", __func__,
1730                         trf->state);
1731                 ret = -EIO;
1732                 goto out_err;
1733         }
1734
1735         if (trf->aborting) {
1736                 dev_dbg(trf->dev, "Abort process complete\n");
1737                 trf->aborting = false;
1738                 ret = -ECANCELED;
1739                 goto out_err;
1740         }
1741
1742         trf->rx_skb = nfc_alloc_recv_skb(TRF7970A_RX_SKB_ALLOC_SIZE,
1743                                          GFP_KERNEL);
1744         if (!trf->rx_skb) {
1745                 dev_dbg(trf->dev, "Can't alloc rx_skb\n");
1746                 ret = -ENOMEM;
1747                 goto out_err;
1748         }
1749
1750         ret = trf7970a_write(trf, TRF7970A_RX_SPECIAL_SETTINGS,
1751                              TRF7970A_RX_SPECIAL_SETTINGS_HBT |
1752                              TRF7970A_RX_SPECIAL_SETTINGS_M848 |
1753                              TRF7970A_RX_SPECIAL_SETTINGS_C424 |
1754                              TRF7970A_RX_SPECIAL_SETTINGS_C212);
1755         if (ret)
1756                 goto out_err;
1757
1758         ret = trf7970a_write(trf, TRF7970A_REG_IO_CTRL,
1759                              trf->io_ctrl | TRF7970A_REG_IO_CTRL_VRS(0x1));
1760         if (ret)
1761                 goto out_err;
1762
1763         ret = trf7970a_write(trf, TRF7970A_NFC_LOW_FIELD_LEVEL,
1764                              TRF7970A_NFC_LOW_FIELD_LEVEL_RFDET(0x3));
1765         if (ret)
1766                 goto out_err;
1767
1768         ret = trf7970a_write(trf, TRF7970A_NFC_TARGET_LEVEL,
1769                              TRF7970A_NFC_TARGET_LEVEL_RFDET(0x7));
1770         if (ret)
1771                 goto out_err;
1772
1773         trf->ddev = ddev;
1774         trf->cb = cb;
1775         trf->cb_arg = arg;
1776         trf->timeout = timeout;
1777         trf->ignore_timeout = false;
1778
1779         ret = trf7970a_cmd(trf, TRF7970A_CMD_ENABLE_RX);
1780         if (ret)
1781                 goto out_err;
1782
1783         trf->state = mode_detect ? TRF7970A_ST_LISTENING_MD :
1784                                    TRF7970A_ST_LISTENING;
1785
1786         schedule_delayed_work(&trf->timeout_work, msecs_to_jiffies(timeout));
1787
1788 out_err:
1789         mutex_unlock(&trf->lock);
1790         return ret;
1791 }
1792
1793 static int trf7970a_tg_listen(struct nfc_digital_dev *ddev, u16 timeout,
1794                               nfc_digital_cmd_complete_t cb, void *arg)
1795 {
1796         const struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1797
1798         dev_dbg(trf->dev, "Listen - state: %d, timeout: %d ms\n",
1799                 trf->state, timeout);
1800
1801         return _trf7970a_tg_listen(ddev, timeout, cb, arg, false);
1802 }
1803
1804 static int trf7970a_tg_listen_md(struct nfc_digital_dev *ddev,
1805                                  u16 timeout, nfc_digital_cmd_complete_t cb,
1806                                  void *arg)
1807 {
1808         const struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1809         int ret;
1810
1811         dev_dbg(trf->dev, "Listen MD - state: %d, timeout: %d ms\n",
1812                 trf->state, timeout);
1813
1814         ret = trf7970a_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH,
1815                                        NFC_DIGITAL_RF_TECH_106A);
1816         if (ret)
1817                 return ret;
1818
1819         ret = trf7970a_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING,
1820                                        NFC_DIGITAL_FRAMING_NFCA_NFC_DEP);
1821         if (ret)
1822                 return ret;
1823
1824         return _trf7970a_tg_listen(ddev, timeout, cb, arg, true);
1825 }
1826
1827 static int trf7970a_tg_get_rf_tech(struct nfc_digital_dev *ddev, u8 *rf_tech)
1828 {
1829         const struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1830
1831         dev_dbg(trf->dev, "Get RF Tech - state: %d, rf_tech: %d\n",
1832                 trf->state, trf->md_rf_tech);
1833
1834         *rf_tech = trf->md_rf_tech;
1835
1836         return 0;
1837 }
1838
1839 static void trf7970a_abort_cmd(struct nfc_digital_dev *ddev)
1840 {
1841         struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1842
1843         dev_dbg(trf->dev, "Abort process initiated\n");
1844
1845         mutex_lock(&trf->lock);
1846
1847         switch (trf->state) {
1848         case TRF7970A_ST_WAIT_FOR_TX_FIFO:
1849         case TRF7970A_ST_WAIT_FOR_RX_DATA:
1850         case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT:
1851         case TRF7970A_ST_WAIT_TO_ISSUE_EOF:
1852                 trf->aborting = true;
1853                 break;
1854         case TRF7970A_ST_LISTENING:
1855                 trf->ignore_timeout = !cancel_delayed_work(&trf->timeout_work);
1856                 trf7970a_send_err_upstream(trf, -ECANCELED);
1857                 dev_dbg(trf->dev, "Abort process complete\n");
1858                 break;
1859         default:
1860                 break;
1861         }
1862
1863         mutex_unlock(&trf->lock);
1864 }
1865
1866 static const struct nfc_digital_ops trf7970a_nfc_ops = {
1867         .in_configure_hw        = trf7970a_in_configure_hw,
1868         .in_send_cmd            = trf7970a_send_cmd,
1869         .tg_configure_hw        = trf7970a_tg_configure_hw,
1870         .tg_send_cmd            = trf7970a_send_cmd,
1871         .tg_listen              = trf7970a_tg_listen,
1872         .tg_listen_md           = trf7970a_tg_listen_md,
1873         .tg_get_rf_tech         = trf7970a_tg_get_rf_tech,
1874         .switch_rf              = trf7970a_switch_rf,
1875         .abort_cmd              = trf7970a_abort_cmd,
1876 };
1877
1878 static int trf7970a_power_up(struct trf7970a *trf)
1879 {
1880         int ret;
1881
1882         dev_dbg(trf->dev, "Powering up - state: %d\n", trf->state);
1883
1884         if (trf->state != TRF7970A_ST_PWR_OFF)
1885                 return 0;
1886
1887         ret = regulator_enable(trf->vin_regulator);
1888         if (ret) {
1889                 dev_err(trf->dev, "%s - Can't enable VIN: %d\n", __func__, ret);
1890                 return ret;
1891         }
1892
1893         usleep_range(5000, 6000);
1894
1895         if (trf->en2_gpiod &&
1896             !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW)) {
1897                 gpiod_set_value_cansleep(trf->en2_gpiod, 1);
1898                 usleep_range(1000, 2000);
1899         }
1900
1901         gpiod_set_value_cansleep(trf->en_gpiod, 1);
1902
1903         usleep_range(20000, 21000);
1904
1905         trf->state = TRF7970A_ST_RF_OFF;
1906
1907         return 0;
1908 }
1909
1910 static int trf7970a_power_down(struct trf7970a *trf)
1911 {
1912         int ret;
1913
1914         dev_dbg(trf->dev, "Powering down - state: %d\n", trf->state);
1915
1916         if (trf->state == TRF7970A_ST_PWR_OFF)
1917                 return 0;
1918
1919         if (trf->state != TRF7970A_ST_RF_OFF) {
1920                 dev_dbg(trf->dev, "Can't power down - not RF_OFF state (%d)\n",
1921                         trf->state);
1922                 return -EBUSY;
1923         }
1924
1925         gpiod_set_value_cansleep(trf->en_gpiod, 0);
1926
1927         if (trf->en2_gpiod && !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW))
1928                 gpiod_set_value_cansleep(trf->en2_gpiod, 0);
1929
1930         ret = regulator_disable(trf->vin_regulator);
1931         if (ret)
1932                 dev_err(trf->dev, "%s - Can't disable VIN: %d\n", __func__,
1933                         ret);
1934
1935         trf->state = TRF7970A_ST_PWR_OFF;
1936
1937         return ret;
1938 }
1939
1940 static int trf7970a_startup(struct trf7970a *trf)
1941 {
1942         int ret;
1943
1944         ret = trf7970a_power_up(trf);
1945         if (ret)
1946                 return ret;
1947
1948         pm_runtime_set_active(trf->dev);
1949         pm_runtime_enable(trf->dev);
1950         pm_runtime_mark_last_busy(trf->dev);
1951
1952         return 0;
1953 }
1954
1955 static void trf7970a_shutdown(struct trf7970a *trf)
1956 {
1957         switch (trf->state) {
1958         case TRF7970A_ST_WAIT_FOR_TX_FIFO:
1959         case TRF7970A_ST_WAIT_FOR_RX_DATA:
1960         case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT:
1961         case TRF7970A_ST_WAIT_TO_ISSUE_EOF:
1962         case TRF7970A_ST_LISTENING:
1963                 trf7970a_send_err_upstream(trf, -ECANCELED);
1964                 fallthrough;
1965         case TRF7970A_ST_IDLE:
1966         case TRF7970A_ST_IDLE_RX_BLOCKED:
1967                 trf7970a_switch_rf_off(trf);
1968                 break;
1969         default:
1970                 break;
1971         }
1972
1973         pm_runtime_disable(trf->dev);
1974         pm_runtime_set_suspended(trf->dev);
1975
1976         trf7970a_power_down(trf);
1977 }
1978
1979 static int trf7970a_get_autosuspend_delay(const struct device_node *np)
1980 {
1981         int autosuspend_delay, ret;
1982
1983         ret = of_property_read_u32(np, "autosuspend-delay", &autosuspend_delay);
1984         if (ret)
1985                 autosuspend_delay = TRF7970A_AUTOSUSPEND_DELAY;
1986
1987         return autosuspend_delay;
1988 }
1989
1990 static int trf7970a_probe(struct spi_device *spi)
1991 {
1992         const struct device_node *np = spi->dev.of_node;
1993         struct trf7970a *trf;
1994         int uvolts, autosuspend_delay, ret;
1995         u32 clk_freq = TRF7970A_13MHZ_CLOCK_FREQUENCY;
1996
1997         if (!np) {
1998                 dev_err(&spi->dev, "No Device Tree entry\n");
1999                 return -EINVAL;
2000         }
2001
2002         trf = devm_kzalloc(&spi->dev, sizeof(*trf), GFP_KERNEL);
2003         if (!trf)
2004                 return -ENOMEM;
2005
2006         trf->state = TRF7970A_ST_PWR_OFF;
2007         trf->dev = &spi->dev;
2008         trf->spi = spi;
2009
2010         spi->mode = SPI_MODE_1;
2011         spi->bits_per_word = 8;
2012
2013         ret = spi_setup(spi);
2014         if (ret < 0) {
2015                 dev_err(trf->dev, "Can't set up SPI Communication\n");
2016                 return ret;
2017         }
2018
2019         if (of_property_read_bool(np, "irq-status-read-quirk"))
2020                 trf->quirks |= TRF7970A_QUIRK_IRQ_STATUS_READ;
2021
2022         /* There are two enable pins - only EN must be present in the DT */
2023         trf->en_gpiod = devm_gpiod_get_index(trf->dev, "ti,enable", 0,
2024                                              GPIOD_OUT_LOW);
2025         if (IS_ERR(trf->en_gpiod)) {
2026                 dev_err(trf->dev, "No EN GPIO property\n");
2027                 return PTR_ERR(trf->en_gpiod);
2028         }
2029
2030         trf->en2_gpiod = devm_gpiod_get_index_optional(trf->dev, "ti,enable", 1,
2031                                                        GPIOD_OUT_LOW);
2032         if (!trf->en2_gpiod) {
2033                 dev_info(trf->dev, "No EN2 GPIO property\n");
2034         } else if (IS_ERR(trf->en2_gpiod)) {
2035                 dev_err(trf->dev, "Error getting EN2 GPIO property: %ld\n",
2036                         PTR_ERR(trf->en2_gpiod));
2037                 return PTR_ERR(trf->en2_gpiod);
2038         } else if (of_property_read_bool(np, "en2-rf-quirk")) {
2039                 trf->quirks |= TRF7970A_QUIRK_EN2_MUST_STAY_LOW;
2040         }
2041
2042         of_property_read_u32(np, "clock-frequency", &clk_freq);
2043         if ((clk_freq != TRF7970A_27MHZ_CLOCK_FREQUENCY) &&
2044             (clk_freq != TRF7970A_13MHZ_CLOCK_FREQUENCY)) {
2045                 dev_err(trf->dev,
2046                         "clock-frequency (%u Hz) unsupported\n", clk_freq);
2047                 return -EINVAL;
2048         }
2049
2050         if (clk_freq == TRF7970A_27MHZ_CLOCK_FREQUENCY) {
2051                 trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_27MHZ;
2052                 dev_dbg(trf->dev, "trf7970a configured for 27MHz crystal\n");
2053         } else {
2054                 trf->modulator_sys_clk_ctrl = 0;
2055         }
2056
2057         ret = devm_request_threaded_irq(trf->dev, spi->irq, NULL,
2058                                         trf7970a_irq,
2059                                         IRQF_TRIGGER_RISING | IRQF_ONESHOT,
2060                                         "trf7970a", trf);
2061         if (ret) {
2062                 dev_err(trf->dev, "Can't request IRQ#%d: %d\n", spi->irq, ret);
2063                 return ret;
2064         }
2065
2066         mutex_init(&trf->lock);
2067         INIT_DELAYED_WORK(&trf->timeout_work, trf7970a_timeout_work_handler);
2068
2069         trf->vin_regulator = devm_regulator_get(&spi->dev, "vin");
2070         if (IS_ERR(trf->vin_regulator)) {
2071                 ret = PTR_ERR(trf->vin_regulator);
2072                 dev_err(trf->dev, "Can't get VIN regulator: %d\n", ret);
2073                 goto err_destroy_lock;
2074         }
2075
2076         ret = regulator_enable(trf->vin_regulator);
2077         if (ret) {
2078                 dev_err(trf->dev, "Can't enable VIN: %d\n", ret);
2079                 goto err_destroy_lock;
2080         }
2081
2082         uvolts = regulator_get_voltage(trf->vin_regulator);
2083         if (uvolts > 4000000)
2084                 trf->chip_status_ctrl = TRF7970A_CHIP_STATUS_VRS5_3;
2085
2086         trf->vddio_regulator = devm_regulator_get(&spi->dev, "vdd-io");
2087         if (IS_ERR(trf->vddio_regulator)) {
2088                 ret = PTR_ERR(trf->vddio_regulator);
2089                 dev_err(trf->dev, "Can't get VDD_IO regulator: %d\n", ret);
2090                 goto err_disable_vin_regulator;
2091         }
2092
2093         ret = regulator_enable(trf->vddio_regulator);
2094         if (ret) {
2095                 dev_err(trf->dev, "Can't enable VDD_IO: %d\n", ret);
2096                 goto err_disable_vin_regulator;
2097         }
2098
2099         if (regulator_get_voltage(trf->vddio_regulator) == 1800000) {
2100                 trf->io_ctrl = TRF7970A_REG_IO_CTRL_IO_LOW;
2101                 dev_dbg(trf->dev, "trf7970a config vdd_io to 1.8V\n");
2102         }
2103
2104         trf->ddev = nfc_digital_allocate_device(&trf7970a_nfc_ops,
2105                                                 TRF7970A_SUPPORTED_PROTOCOLS,
2106                                                 NFC_DIGITAL_DRV_CAPS_IN_CRC |
2107                                                 NFC_DIGITAL_DRV_CAPS_TG_CRC, 0,
2108                                                 0);
2109         if (!trf->ddev) {
2110                 dev_err(trf->dev, "Can't allocate NFC digital device\n");
2111                 ret = -ENOMEM;
2112                 goto err_disable_vddio_regulator;
2113         }
2114
2115         nfc_digital_set_parent_dev(trf->ddev, trf->dev);
2116         nfc_digital_set_drvdata(trf->ddev, trf);
2117         spi_set_drvdata(spi, trf);
2118
2119         autosuspend_delay = trf7970a_get_autosuspend_delay(np);
2120
2121         pm_runtime_set_autosuspend_delay(trf->dev, autosuspend_delay);
2122         pm_runtime_use_autosuspend(trf->dev);
2123
2124         ret = trf7970a_startup(trf);
2125         if (ret)
2126                 goto err_free_ddev;
2127
2128         ret = nfc_digital_register_device(trf->ddev);
2129         if (ret) {
2130                 dev_err(trf->dev, "Can't register NFC digital device: %d\n",
2131                         ret);
2132                 goto err_shutdown;
2133         }
2134
2135         return 0;
2136
2137 err_shutdown:
2138         trf7970a_shutdown(trf);
2139 err_free_ddev:
2140         nfc_digital_free_device(trf->ddev);
2141 err_disable_vddio_regulator:
2142         regulator_disable(trf->vddio_regulator);
2143 err_disable_vin_regulator:
2144         regulator_disable(trf->vin_regulator);
2145 err_destroy_lock:
2146         mutex_destroy(&trf->lock);
2147         return ret;
2148 }
2149
2150 static void trf7970a_remove(struct spi_device *spi)
2151 {
2152         struct trf7970a *trf = spi_get_drvdata(spi);
2153
2154         mutex_lock(&trf->lock);
2155
2156         trf7970a_shutdown(trf);
2157
2158         mutex_unlock(&trf->lock);
2159
2160         nfc_digital_unregister_device(trf->ddev);
2161         nfc_digital_free_device(trf->ddev);
2162
2163         regulator_disable(trf->vddio_regulator);
2164         regulator_disable(trf->vin_regulator);
2165
2166         mutex_destroy(&trf->lock);
2167 }
2168
2169 #ifdef CONFIG_PM_SLEEP
2170 static int trf7970a_suspend(struct device *dev)
2171 {
2172         struct spi_device *spi = to_spi_device(dev);
2173         struct trf7970a *trf = spi_get_drvdata(spi);
2174
2175         mutex_lock(&trf->lock);
2176
2177         trf7970a_shutdown(trf);
2178
2179         mutex_unlock(&trf->lock);
2180
2181         return 0;
2182 }
2183
2184 static int trf7970a_resume(struct device *dev)
2185 {
2186         struct spi_device *spi = to_spi_device(dev);
2187         struct trf7970a *trf = spi_get_drvdata(spi);
2188         int ret;
2189
2190         mutex_lock(&trf->lock);
2191
2192         ret = trf7970a_startup(trf);
2193
2194         mutex_unlock(&trf->lock);
2195
2196         return ret;
2197 }
2198 #endif
2199
2200 #ifdef CONFIG_PM
2201 static int trf7970a_pm_runtime_suspend(struct device *dev)
2202 {
2203         struct spi_device *spi = to_spi_device(dev);
2204         struct trf7970a *trf = spi_get_drvdata(spi);
2205         int ret;
2206
2207         mutex_lock(&trf->lock);
2208
2209         ret = trf7970a_power_down(trf);
2210
2211         mutex_unlock(&trf->lock);
2212
2213         return ret;
2214 }
2215
2216 static int trf7970a_pm_runtime_resume(struct device *dev)
2217 {
2218         struct spi_device *spi = to_spi_device(dev);
2219         struct trf7970a *trf = spi_get_drvdata(spi);
2220         int ret;
2221
2222         ret = trf7970a_power_up(trf);
2223         if (!ret)
2224                 pm_runtime_mark_last_busy(dev);
2225
2226         return ret;
2227 }
2228 #endif
2229
2230 static const struct dev_pm_ops trf7970a_pm_ops = {
2231         SET_SYSTEM_SLEEP_PM_OPS(trf7970a_suspend, trf7970a_resume)
2232         SET_RUNTIME_PM_OPS(trf7970a_pm_runtime_suspend,
2233                            trf7970a_pm_runtime_resume, NULL)
2234 };
2235
2236 static const struct of_device_id trf7970a_of_match[] __maybe_unused = {
2237         {.compatible = "ti,trf7970a",},
2238         {},
2239 };
2240
2241 MODULE_DEVICE_TABLE(of, trf7970a_of_match);
2242
2243 static const struct spi_device_id trf7970a_id_table[] = {
2244         {"trf7970a", 0},
2245         {}
2246 };
2247
2248 MODULE_DEVICE_TABLE(spi, trf7970a_id_table);
2249
2250 static struct spi_driver trf7970a_spi_driver = {
2251         .probe          = trf7970a_probe,
2252         .remove         = trf7970a_remove,
2253         .id_table       = trf7970a_id_table,
2254         .driver = {
2255                 .name           = "trf7970a",
2256                 .of_match_table = of_match_ptr(trf7970a_of_match),
2257                 .pm             = &trf7970a_pm_ops,
2258         },
2259 };
2260
2261 module_spi_driver(trf7970a_spi_driver);
2262
2263 MODULE_AUTHOR("Mark A. Greer <[email protected]>");
2264 MODULE_LICENSE("GPL v2");
2265 MODULE_DESCRIPTION("TI trf7970a RFID/NFC Transceiver Driver");
This page took 0.168968 seconds and 4 git commands to generate.