Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-only
0002 /*
0003  * TI TRF7970a RFID/NFC Transceiver Driver
0004  *
0005  * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
0006  *
0007  * Author: Erick Macias <emacias@ti.com>
0008  * Author: Felipe Balbi <balbi@ti.com>
0009  * Author: Mark A. Greer <mgreer@animalcreek.com>
0010  */
0011 
0012 #include <linux/module.h>
0013 #include <linux/device.h>
0014 #include <linux/netdevice.h>
0015 #include <linux/interrupt.h>
0016 #include <linux/pm_runtime.h>
0017 #include <linux/nfc.h>
0018 #include <linux/skbuff.h>
0019 #include <linux/delay.h>
0020 #include <linux/gpio/consumer.h>
0021 #include <linux/of.h>
0022 #include <linux/spi/spi.h>
0023 #include <linux/regulator/consumer.h>
0024 
0025 #include <net/nfc/nfc.h>
0026 #include <net/nfc/digital.h>
0027 
0028 /* There are 3 ways the host can communicate with the trf7970a:
0029  * parallel mode, SPI with Slave Select (SS) mode, and SPI without
0030  * SS mode.  The driver only supports the two SPI modes.
0031  *
0032  * The trf7970a is very timing sensitive and the VIN, EN2, and EN
0033  * pins must asserted in that order and with specific delays in between.
0034  * The delays used in the driver were provided by TI and have been
0035  * confirmed to work with this driver.  There is a bug with the current
0036  * version of the trf7970a that requires that EN2 remain low no matter
0037  * what.  If it goes high, it will generate an RF field even when in
0038  * passive target mode.  TI has indicated that the chip will work okay
0039  * when EN2 is left low.  The 'en2-rf-quirk' device tree property
0040  * indicates that trf7970a currently being used has the erratum and
0041  * that EN2 must be kept low.
0042  *
0043  * Timeouts are implemented using the delayed workqueue kernel facility.
0044  * Timeouts are required so things don't hang when there is no response
0045  * from the trf7970a (or tag).  Using this mechanism creates a race with
0046  * interrupts, however.  That is, an interrupt and a timeout could occur
0047  * closely enough together that one is blocked by the mutex while the other
0048  * executes.  When the timeout handler executes first and blocks the
0049  * interrupt handler, it will eventually set the state to IDLE so the
0050  * interrupt handler will check the state and exit with no harm done.
0051  * When the interrupt handler executes first and blocks the timeout handler,
0052  * the cancel_delayed_work() call will know that it didn't cancel the
0053  * work item (i.e., timeout) and will return zero.  That return code is
0054  * used by the timer handler to indicate that it should ignore the timeout
0055  * once its unblocked.
0056  *
0057  * Aborting an active command isn't as simple as it seems because the only
0058  * way to abort a command that's already been sent to the tag is so turn
0059  * off power to the tag.  If we do that, though, we'd have to go through
0060  * the entire anticollision procedure again but the digital layer doesn't
0061  * support that.  So, if an abort is received before trf7970a_send_cmd()
0062  * has sent the command to the tag, it simply returns -ECANCELED.  If the
0063  * command has already been sent to the tag, then the driver continues
0064  * normally and recieves the response data (or error) but just before
0065  * sending the data upstream, it frees the rx_skb and sends -ECANCELED
0066  * upstream instead.  If the command failed, that error will be sent
0067  * upstream.
0068  *
0069  * When recieving data from a tag and the interrupt status register has
0070  * only the SRX bit set, it means that all of the data has been received
0071  * (once what's in the fifo has been read).  However, depending on timing
0072  * an interrupt status with only the SRX bit set may not be recived.  In
0073  * those cases, the timeout mechanism is used to wait 20 ms in case more
0074  * data arrives.  After 20 ms, it is assumed that all of the data has been
0075  * received and the accumulated rx data is sent upstream.  The
0076  * 'TRF7970A_ST_WAIT_FOR_RX_DATA_CONT' state is used for this purpose
0077  * (i.e., it indicates that some data has been received but we're not sure
0078  * if there is more coming so a timeout in this state means all data has
0079  * been received and there isn't an error).  The delay is 20 ms since delays
0080  * of ~16 ms have been observed during testing.
0081  *
0082  * When transmitting a frame larger than the FIFO size (127 bytes), the
0083  * driver will wait 20 ms for the FIFO to drain past the low-watermark
0084  * and generate an interrupt.  The low-watermark set to 32 bytes so the
0085  * interrupt should fire after 127 - 32 = 95 bytes have been sent.  At
0086  * the lowest possible bit rate (6.62 kbps for 15693), it will take up
0087  * to ~14.35 ms so 20 ms is used for the timeout.
0088  *
0089  * Type 2 write and sector select commands respond with a 4-bit ACK or NACK.
0090  * Having only 4 bits in the FIFO won't normally generate an interrupt so
0091  * driver enables the '4_bit_RX' bit of the Special Functions register 1
0092  * to cause an interrupt in that case.  Leaving that bit for a read command
0093  * messes up the data returned so it is only enabled when the framing is
0094  * 'NFC_DIGITAL_FRAMING_NFCA_T2T' and the command is not a read command.
0095  * Unfortunately, that means that the driver has to peek into tx frames
0096  * when the framing is 'NFC_DIGITAL_FRAMING_NFCA_T2T'.  This is done by
0097  * the trf7970a_per_cmd_config() routine.
0098  *
0099  * ISO/IEC 15693 frames specify whether to use single or double sub-carrier
0100  * frequencies and whether to use low or high data rates in the flags byte
0101  * of the frame.  This means that the driver has to peek at all 15693 frames
0102  * to determine what speed to set the communication to.  In addition, write
0103  * and lock commands use the OPTION flag to indicate that an EOF must be
0104  * sent to the tag before it will send its response.  So the driver has to
0105  * examine all frames for that reason too.
0106  *
0107  * It is unclear how long to wait before sending the EOF.  According to the
0108  * Note under Table 1-1 in section 1.6 of
0109  * http://www.ti.com/lit/ug/scbu011/scbu011.pdf, that wait should be at least
0110  * 10 ms for TI Tag-it HF-I tags; however testing has shown that is not long
0111  * enough so 20 ms is used.  So the timer is set to 40 ms - 20 ms to drain
0112  * up to 127 bytes in the FIFO at the lowest bit rate plus another 20 ms to
0113  * ensure the wait is long enough before sending the EOF.  This seems to work
0114  * reliably.
0115  */
0116 
0117 #define TRF7970A_SUPPORTED_PROTOCOLS \
0118         (NFC_PROTO_MIFARE_MASK | NFC_PROTO_ISO14443_MASK |  \
0119          NFC_PROTO_ISO14443_B_MASK | NFC_PROTO_FELICA_MASK | \
0120          NFC_PROTO_ISO15693_MASK | NFC_PROTO_NFC_DEP_MASK)
0121 
0122 #define TRF7970A_AUTOSUSPEND_DELAY      30000   /* 30 seconds */
0123 #define TRF7970A_13MHZ_CLOCK_FREQUENCY      13560000
0124 #define TRF7970A_27MHZ_CLOCK_FREQUENCY      27120000
0125 
0126 #define TRF7970A_RX_SKB_ALLOC_SIZE      256
0127 
0128 #define TRF7970A_FIFO_SIZE          127
0129 
0130 /* TX length is 3 nibbles long ==> 4KB - 1 bytes max */
0131 #define TRF7970A_TX_MAX             (4096 - 1)
0132 
0133 #define TRF7970A_WAIT_FOR_TX_IRQ        20
0134 #define TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT   20
0135 #define TRF7970A_WAIT_FOR_FIFO_DRAIN_TIMEOUT    20
0136 #define TRF7970A_WAIT_TO_ISSUE_ISO15693_EOF 40
0137 
0138 /* Guard times for various RF technologies (in us) */
0139 #define TRF7970A_GUARD_TIME_NFCA        5000
0140 #define TRF7970A_GUARD_TIME_NFCB        5000
0141 #define TRF7970A_GUARD_TIME_NFCF        20000
0142 #define TRF7970A_GUARD_TIME_15693       1000
0143 
0144 /* Quirks */
0145 /* Erratum: When reading IRQ Status register on trf7970a, we must issue a
0146  * read continuous command for IRQ Status and Collision Position registers.
0147  */
0148 #define TRF7970A_QUIRK_IRQ_STATUS_READ      BIT(0)
0149 #define TRF7970A_QUIRK_EN2_MUST_STAY_LOW    BIT(1)
0150 
0151 /* Direct commands */
0152 #define TRF7970A_CMD_IDLE           0x00
0153 #define TRF7970A_CMD_SOFT_INIT          0x03
0154 #define TRF7970A_CMD_RF_COLLISION       0x04
0155 #define TRF7970A_CMD_RF_COLLISION_RESPONSE_N    0x05
0156 #define TRF7970A_CMD_RF_COLLISION_RESPONSE_0    0x06
0157 #define TRF7970A_CMD_FIFO_RESET         0x0f
0158 #define TRF7970A_CMD_TRANSMIT_NO_CRC        0x10
0159 #define TRF7970A_CMD_TRANSMIT           0x11
0160 #define TRF7970A_CMD_DELAY_TRANSMIT_NO_CRC  0x12
0161 #define TRF7970A_CMD_DELAY_TRANSMIT     0x13
0162 #define TRF7970A_CMD_EOF            0x14
0163 #define TRF7970A_CMD_CLOSE_SLOT         0x15
0164 #define TRF7970A_CMD_BLOCK_RX           0x16
0165 #define TRF7970A_CMD_ENABLE_RX          0x17
0166 #define TRF7970A_CMD_TEST_INT_RF        0x18
0167 #define TRF7970A_CMD_TEST_EXT_RF        0x19
0168 #define TRF7970A_CMD_RX_GAIN_ADJUST     0x1a
0169 
0170 /* Bits determining whether its a direct command or register R/W,
0171  * whether to use a continuous SPI transaction or not, and the actual
0172  * direct cmd opcode or register address.
0173  */
0174 #define TRF7970A_CMD_BIT_CTRL           BIT(7)
0175 #define TRF7970A_CMD_BIT_RW         BIT(6)
0176 #define TRF7970A_CMD_BIT_CONTINUOUS     BIT(5)
0177 #define TRF7970A_CMD_BIT_OPCODE(opcode)     ((opcode) & 0x1f)
0178 
0179 /* Registers addresses */
0180 #define TRF7970A_CHIP_STATUS_CTRL       0x00
0181 #define TRF7970A_ISO_CTRL           0x01
0182 #define TRF7970A_ISO14443B_TX_OPTIONS       0x02
0183 #define TRF7970A_ISO14443A_HIGH_BITRATE_OPTIONS 0x03
0184 #define TRF7970A_TX_TIMER_SETTING_H_BYTE    0x04
0185 #define TRF7970A_TX_TIMER_SETTING_L_BYTE    0x05
0186 #define TRF7970A_TX_PULSE_LENGTH_CTRL       0x06
0187 #define TRF7970A_RX_NO_RESPONSE_WAIT        0x07
0188 #define TRF7970A_RX_WAIT_TIME           0x08
0189 #define TRF7970A_MODULATOR_SYS_CLK_CTRL     0x09
0190 #define TRF7970A_RX_SPECIAL_SETTINGS        0x0a
0191 #define TRF7970A_REG_IO_CTRL            0x0b
0192 #define TRF7970A_IRQ_STATUS         0x0c
0193 #define TRF7970A_COLLISION_IRQ_MASK     0x0d
0194 #define TRF7970A_COLLISION_POSITION     0x0e
0195 #define TRF7970A_RSSI_OSC_STATUS        0x0f
0196 #define TRF7970A_SPECIAL_FCN_REG1       0x10
0197 #define TRF7970A_SPECIAL_FCN_REG2       0x11
0198 #define TRF7970A_RAM1               0x12
0199 #define TRF7970A_RAM2               0x13
0200 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS  0x14
0201 #define TRF7970A_NFC_LOW_FIELD_LEVEL        0x16
0202 #define TRF7970A_NFCID1             0x17
0203 #define TRF7970A_NFC_TARGET_LEVEL       0x18
0204 #define TRF79070A_NFC_TARGET_PROTOCOL       0x19
0205 #define TRF7970A_TEST_REGISTER1         0x1a
0206 #define TRF7970A_TEST_REGISTER2         0x1b
0207 #define TRF7970A_FIFO_STATUS            0x1c
0208 #define TRF7970A_TX_LENGTH_BYTE1        0x1d
0209 #define TRF7970A_TX_LENGTH_BYTE2        0x1e
0210 #define TRF7970A_FIFO_IO_REGISTER       0x1f
0211 
0212 /* Chip Status Control Register Bits */
0213 #define TRF7970A_CHIP_STATUS_VRS5_3     BIT(0)
0214 #define TRF7970A_CHIP_STATUS_REC_ON     BIT(1)
0215 #define TRF7970A_CHIP_STATUS_AGC_ON     BIT(2)
0216 #define TRF7970A_CHIP_STATUS_PM_ON      BIT(3)
0217 #define TRF7970A_CHIP_STATUS_RF_PWR     BIT(4)
0218 #define TRF7970A_CHIP_STATUS_RF_ON      BIT(5)
0219 #define TRF7970A_CHIP_STATUS_DIRECT     BIT(6)
0220 #define TRF7970A_CHIP_STATUS_STBY       BIT(7)
0221 
0222 /* ISO Control Register Bits */
0223 #define TRF7970A_ISO_CTRL_15693_SGL_1OF4_662    0x00
0224 #define TRF7970A_ISO_CTRL_15693_SGL_1OF256_662  0x01
0225 #define TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648   0x02
0226 #define TRF7970A_ISO_CTRL_15693_SGL_1OF256_2648 0x03
0227 #define TRF7970A_ISO_CTRL_15693_DBL_1OF4_667a   0x04
0228 #define TRF7970A_ISO_CTRL_15693_DBL_1OF256_667  0x05
0229 #define TRF7970A_ISO_CTRL_15693_DBL_1OF4_2669   0x06
0230 #define TRF7970A_ISO_CTRL_15693_DBL_1OF256_2669 0x07
0231 #define TRF7970A_ISO_CTRL_14443A_106        0x08
0232 #define TRF7970A_ISO_CTRL_14443A_212        0x09
0233 #define TRF7970A_ISO_CTRL_14443A_424        0x0a
0234 #define TRF7970A_ISO_CTRL_14443A_848        0x0b
0235 #define TRF7970A_ISO_CTRL_14443B_106        0x0c
0236 #define TRF7970A_ISO_CTRL_14443B_212        0x0d
0237 #define TRF7970A_ISO_CTRL_14443B_424        0x0e
0238 #define TRF7970A_ISO_CTRL_14443B_848        0x0f
0239 #define TRF7970A_ISO_CTRL_FELICA_212        0x1a
0240 #define TRF7970A_ISO_CTRL_FELICA_424        0x1b
0241 #define TRF7970A_ISO_CTRL_NFC_NFCA_106      0x01
0242 #define TRF7970A_ISO_CTRL_NFC_NFCF_212      0x02
0243 #define TRF7970A_ISO_CTRL_NFC_NFCF_424      0x03
0244 #define TRF7970A_ISO_CTRL_NFC_CE_14443A     0x00
0245 #define TRF7970A_ISO_CTRL_NFC_CE_14443B     0x01
0246 #define TRF7970A_ISO_CTRL_NFC_CE        BIT(2)
0247 #define TRF7970A_ISO_CTRL_NFC_ACTIVE        BIT(3)
0248 #define TRF7970A_ISO_CTRL_NFC_INITIATOR     BIT(4)
0249 #define TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE   BIT(5)
0250 #define TRF7970A_ISO_CTRL_RFID          BIT(5)
0251 #define TRF7970A_ISO_CTRL_DIR_MODE      BIT(6)
0252 #define TRF7970A_ISO_CTRL_RX_CRC_N      BIT(7)  /* true == No CRC */
0253 
0254 #define TRF7970A_ISO_CTRL_RFID_SPEED_MASK   0x1f
0255 
0256 /* Modulator and SYS_CLK Control Register Bits */
0257 #define TRF7970A_MODULATOR_DEPTH(n)     ((n) & 0x7)
0258 #define TRF7970A_MODULATOR_DEPTH_ASK10      (TRF7970A_MODULATOR_DEPTH(0))
0259 #define TRF7970A_MODULATOR_DEPTH_OOK        (TRF7970A_MODULATOR_DEPTH(1))
0260 #define TRF7970A_MODULATOR_DEPTH_ASK7       (TRF7970A_MODULATOR_DEPTH(2))
0261 #define TRF7970A_MODULATOR_DEPTH_ASK8_5     (TRF7970A_MODULATOR_DEPTH(3))
0262 #define TRF7970A_MODULATOR_DEPTH_ASK13      (TRF7970A_MODULATOR_DEPTH(4))
0263 #define TRF7970A_MODULATOR_DEPTH_ASK16      (TRF7970A_MODULATOR_DEPTH(5))
0264 #define TRF7970A_MODULATOR_DEPTH_ASK22      (TRF7970A_MODULATOR_DEPTH(6))
0265 #define TRF7970A_MODULATOR_DEPTH_ASK30      (TRF7970A_MODULATOR_DEPTH(7))
0266 #define TRF7970A_MODULATOR_EN_ANA       BIT(3)
0267 #define TRF7970A_MODULATOR_CLK(n)       (((n) & 0x3) << 4)
0268 #define TRF7970A_MODULATOR_CLK_DISABLED     (TRF7970A_MODULATOR_CLK(0))
0269 #define TRF7970A_MODULATOR_CLK_3_6      (TRF7970A_MODULATOR_CLK(1))
0270 #define TRF7970A_MODULATOR_CLK_6_13     (TRF7970A_MODULATOR_CLK(2))
0271 #define TRF7970A_MODULATOR_CLK_13_27        (TRF7970A_MODULATOR_CLK(3))
0272 #define TRF7970A_MODULATOR_EN_OOK       BIT(6)
0273 #define TRF7970A_MODULATOR_27MHZ        BIT(7)
0274 
0275 #define TRF7970A_RX_SPECIAL_SETTINGS_NO_LIM BIT(0)
0276 #define TRF7970A_RX_SPECIAL_SETTINGS_AGCR   BIT(1)
0277 #define TRF7970A_RX_SPECIAL_SETTINGS_GD_0DB (0x0 << 2)
0278 #define TRF7970A_RX_SPECIAL_SETTINGS_GD_5DB (0x1 << 2)
0279 #define TRF7970A_RX_SPECIAL_SETTINGS_GD_10DB    (0x2 << 2)
0280 #define TRF7970A_RX_SPECIAL_SETTINGS_GD_15DB    (0x3 << 2)
0281 #define TRF7970A_RX_SPECIAL_SETTINGS_HBT    BIT(4)
0282 #define TRF7970A_RX_SPECIAL_SETTINGS_M848   BIT(5)
0283 #define TRF7970A_RX_SPECIAL_SETTINGS_C424   BIT(6)
0284 #define TRF7970A_RX_SPECIAL_SETTINGS_C212   BIT(7)
0285 
0286 #define TRF7970A_REG_IO_CTRL_VRS(v)     ((v) & 0x07)
0287 #define TRF7970A_REG_IO_CTRL_IO_LOW     BIT(5)
0288 #define TRF7970A_REG_IO_CTRL_EN_EXT_PA      BIT(6)
0289 #define TRF7970A_REG_IO_CTRL_AUTO_REG       BIT(7)
0290 
0291 /* IRQ Status Register Bits */
0292 #define TRF7970A_IRQ_STATUS_NORESP      BIT(0)  /* ISO15693 only */
0293 #define TRF7970A_IRQ_STATUS_NFC_COL_ERROR   BIT(0)
0294 #define TRF7970A_IRQ_STATUS_COL         BIT(1)
0295 #define TRF7970A_IRQ_STATUS_FRAMING_EOF_ERROR   BIT(2)
0296 #define TRF7970A_IRQ_STATUS_NFC_RF      BIT(2)
0297 #define TRF7970A_IRQ_STATUS_PARITY_ERROR    BIT(3)
0298 #define TRF7970A_IRQ_STATUS_NFC_SDD     BIT(3)
0299 #define TRF7970A_IRQ_STATUS_CRC_ERROR       BIT(4)
0300 #define TRF7970A_IRQ_STATUS_NFC_PROTO_ERROR BIT(4)
0301 #define TRF7970A_IRQ_STATUS_FIFO        BIT(5)
0302 #define TRF7970A_IRQ_STATUS_SRX         BIT(6)
0303 #define TRF7970A_IRQ_STATUS_TX          BIT(7)
0304 
0305 #define TRF7970A_IRQ_STATUS_ERROR               \
0306         (TRF7970A_IRQ_STATUS_COL |          \
0307          TRF7970A_IRQ_STATUS_FRAMING_EOF_ERROR |    \
0308          TRF7970A_IRQ_STATUS_PARITY_ERROR |     \
0309          TRF7970A_IRQ_STATUS_CRC_ERROR)
0310 
0311 #define TRF7970A_RSSI_OSC_STATUS_RSSI_MASK  (BIT(2) | BIT(1) | BIT(0))
0312 #define TRF7970A_RSSI_OSC_STATUS_RSSI_X_MASK    (BIT(5) | BIT(4) | BIT(3))
0313 #define TRF7970A_RSSI_OSC_STATUS_RSSI_OSC_OK    BIT(6)
0314 
0315 #define TRF7970A_SPECIAL_FCN_REG1_COL_7_6       BIT(0)
0316 #define TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL       BIT(1)
0317 #define TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX      BIT(2)
0318 #define TRF7970A_SPECIAL_FCN_REG1_SP_DIR_MODE       BIT(3)
0319 #define TRF7970A_SPECIAL_FCN_REG1_NEXT_SLOT_37US    BIT(4)
0320 #define TRF7970A_SPECIAL_FCN_REG1_PAR43         BIT(5)
0321 
0322 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_124  (0x0 << 2)
0323 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_120  (0x1 << 2)
0324 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_112  (0x2 << 2)
0325 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_96   (0x3 << 2)
0326 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_4    0x0
0327 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_8    0x1
0328 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_16   0x2
0329 #define TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_32   0x3
0330 
0331 #define TRF7970A_NFC_LOW_FIELD_LEVEL_RFDET(v)   ((v) & 0x07)
0332 #define TRF7970A_NFC_LOW_FIELD_LEVEL_CLEX_DIS   BIT(7)
0333 
0334 #define TRF7970A_NFC_TARGET_LEVEL_RFDET(v)  ((v) & 0x07)
0335 #define TRF7970A_NFC_TARGET_LEVEL_HI_RF     BIT(3)
0336 #define TRF7970A_NFC_TARGET_LEVEL_SDD_EN    BIT(5)
0337 #define TRF7970A_NFC_TARGET_LEVEL_LD_S_4BYTES   (0x0 << 6)
0338 #define TRF7970A_NFC_TARGET_LEVEL_LD_S_7BYTES   (0x1 << 6)
0339 #define TRF7970A_NFC_TARGET_LEVEL_LD_S_10BYTES  (0x2 << 6)
0340 
0341 #define TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_106     BIT(0)
0342 #define TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_212     BIT(1)
0343 #define TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_424     (BIT(0) | BIT(1))
0344 #define TRF79070A_NFC_TARGET_PROTOCOL_PAS_14443B    BIT(2)
0345 #define TRF79070A_NFC_TARGET_PROTOCOL_PAS_106       BIT(3)
0346 #define TRF79070A_NFC_TARGET_PROTOCOL_FELICA        BIT(4)
0347 #define TRF79070A_NFC_TARGET_PROTOCOL_RF_L      BIT(6)
0348 #define TRF79070A_NFC_TARGET_PROTOCOL_RF_H      BIT(7)
0349 
0350 #define TRF79070A_NFC_TARGET_PROTOCOL_106A      \
0351      (TRF79070A_NFC_TARGET_PROTOCOL_RF_H |      \
0352       TRF79070A_NFC_TARGET_PROTOCOL_RF_L |      \
0353       TRF79070A_NFC_TARGET_PROTOCOL_PAS_106 |   \
0354       TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_106)
0355 
0356 #define TRF79070A_NFC_TARGET_PROTOCOL_106B      \
0357      (TRF79070A_NFC_TARGET_PROTOCOL_RF_H |      \
0358       TRF79070A_NFC_TARGET_PROTOCOL_RF_L |      \
0359       TRF79070A_NFC_TARGET_PROTOCOL_PAS_14443B |    \
0360       TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_106)
0361 
0362 #define TRF79070A_NFC_TARGET_PROTOCOL_212F      \
0363      (TRF79070A_NFC_TARGET_PROTOCOL_RF_H |      \
0364       TRF79070A_NFC_TARGET_PROTOCOL_RF_L |      \
0365       TRF79070A_NFC_TARGET_PROTOCOL_FELICA |    \
0366       TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_212)
0367 
0368 #define TRF79070A_NFC_TARGET_PROTOCOL_424F      \
0369      (TRF79070A_NFC_TARGET_PROTOCOL_RF_H |      \
0370       TRF79070A_NFC_TARGET_PROTOCOL_RF_L |      \
0371       TRF79070A_NFC_TARGET_PROTOCOL_FELICA |    \
0372       TRF79070A_NFC_TARGET_PROTOCOL_NFCBR_424)
0373 
0374 #define TRF7970A_FIFO_STATUS_OVERFLOW       BIT(7)
0375 
0376 /* NFC (ISO/IEC 14443A) Type 2 Tag commands */
0377 #define NFC_T2T_CMD_READ            0x30
0378 
0379 /* ISO 15693 commands codes */
0380 #define ISO15693_CMD_INVENTORY          0x01
0381 #define ISO15693_CMD_READ_SINGLE_BLOCK      0x20
0382 #define ISO15693_CMD_WRITE_SINGLE_BLOCK     0x21
0383 #define ISO15693_CMD_LOCK_BLOCK         0x22
0384 #define ISO15693_CMD_READ_MULTIPLE_BLOCK    0x23
0385 #define ISO15693_CMD_WRITE_MULTIPLE_BLOCK   0x24
0386 #define ISO15693_CMD_SELECT         0x25
0387 #define ISO15693_CMD_RESET_TO_READY     0x26
0388 #define ISO15693_CMD_WRITE_AFI          0x27
0389 #define ISO15693_CMD_LOCK_AFI           0x28
0390 #define ISO15693_CMD_WRITE_DSFID        0x29
0391 #define ISO15693_CMD_LOCK_DSFID         0x2a
0392 #define ISO15693_CMD_GET_SYSTEM_INFO        0x2b
0393 #define ISO15693_CMD_GET_MULTIPLE_BLOCK_SECURITY_STATUS 0x2c
0394 
0395 /* ISO 15693 request and response flags */
0396 #define ISO15693_REQ_FLAG_SUB_CARRIER       BIT(0)
0397 #define ISO15693_REQ_FLAG_DATA_RATE     BIT(1)
0398 #define ISO15693_REQ_FLAG_INVENTORY     BIT(2)
0399 #define ISO15693_REQ_FLAG_PROTOCOL_EXT      BIT(3)
0400 #define ISO15693_REQ_FLAG_SELECT        BIT(4)
0401 #define ISO15693_REQ_FLAG_AFI           BIT(4)
0402 #define ISO15693_REQ_FLAG_ADDRESS       BIT(5)
0403 #define ISO15693_REQ_FLAG_NB_SLOTS      BIT(5)
0404 #define ISO15693_REQ_FLAG_OPTION        BIT(6)
0405 
0406 #define ISO15693_REQ_FLAG_SPEED_MASK \
0407         (ISO15693_REQ_FLAG_SUB_CARRIER | ISO15693_REQ_FLAG_DATA_RATE)
0408 
0409 enum trf7970a_state {
0410     TRF7970A_ST_PWR_OFF,
0411     TRF7970A_ST_RF_OFF,
0412     TRF7970A_ST_IDLE,
0413     TRF7970A_ST_IDLE_RX_BLOCKED,
0414     TRF7970A_ST_WAIT_FOR_TX_FIFO,
0415     TRF7970A_ST_WAIT_FOR_RX_DATA,
0416     TRF7970A_ST_WAIT_FOR_RX_DATA_CONT,
0417     TRF7970A_ST_WAIT_TO_ISSUE_EOF,
0418     TRF7970A_ST_LISTENING,
0419     TRF7970A_ST_LISTENING_MD,
0420     TRF7970A_ST_MAX
0421 };
0422 
0423 struct trf7970a {
0424     enum trf7970a_state     state;
0425     struct device           *dev;
0426     struct spi_device       *spi;
0427     struct regulator        *regulator;
0428     struct nfc_digital_dev      *ddev;
0429     u32             quirks;
0430     bool                is_initiator;
0431     bool                aborting;
0432     struct sk_buff          *tx_skb;
0433     struct sk_buff          *rx_skb;
0434     nfc_digital_cmd_complete_t  cb;
0435     void                *cb_arg;
0436     u8              chip_status_ctrl;
0437     u8              iso_ctrl;
0438     u8              iso_ctrl_tech;
0439     u8              modulator_sys_clk_ctrl;
0440     u8              special_fcn_reg1;
0441     u8              io_ctrl;
0442     unsigned int            guard_time;
0443     int             technology;
0444     int             framing;
0445     u8              md_rf_tech;
0446     u8              tx_cmd;
0447     bool                issue_eof;
0448     struct gpio_desc        *en_gpiod;
0449     struct gpio_desc        *en2_gpiod;
0450     struct mutex            lock;
0451     unsigned int            timeout;
0452     bool                ignore_timeout;
0453     struct delayed_work     timeout_work;
0454 };
0455 
0456 static int trf7970a_cmd(struct trf7970a *trf, u8 opcode)
0457 {
0458     u8 cmd = TRF7970A_CMD_BIT_CTRL | TRF7970A_CMD_BIT_OPCODE(opcode);
0459     int ret;
0460 
0461     dev_dbg(trf->dev, "cmd: 0x%x\n", cmd);
0462 
0463     ret = spi_write(trf->spi, &cmd, 1);
0464     if (ret)
0465         dev_err(trf->dev, "%s - cmd: 0x%x, ret: %d\n", __func__, cmd,
0466             ret);
0467     return ret;
0468 }
0469 
0470 static int trf7970a_read(struct trf7970a *trf, u8 reg, u8 *val)
0471 {
0472     u8 addr = TRF7970A_CMD_BIT_RW | reg;
0473     int ret;
0474 
0475     ret = spi_write_then_read(trf->spi, &addr, 1, val, 1);
0476     if (ret)
0477         dev_err(trf->dev, "%s - addr: 0x%x, ret: %d\n", __func__, addr,
0478             ret);
0479 
0480     dev_dbg(trf->dev, "read(0x%x): 0x%x\n", addr, *val);
0481 
0482     return ret;
0483 }
0484 
0485 static int trf7970a_read_cont(struct trf7970a *trf, u8 reg, u8 *buf,
0486                   size_t len)
0487 {
0488     u8 addr = reg | TRF7970A_CMD_BIT_RW | TRF7970A_CMD_BIT_CONTINUOUS;
0489     struct spi_transfer t[2];
0490     struct spi_message m;
0491     int ret;
0492 
0493     dev_dbg(trf->dev, "read_cont(0x%x, %zd)\n", addr, len);
0494 
0495     spi_message_init(&m);
0496 
0497     memset(&t, 0, sizeof(t));
0498 
0499     t[0].tx_buf = &addr;
0500     t[0].len = sizeof(addr);
0501     spi_message_add_tail(&t[0], &m);
0502 
0503     t[1].rx_buf = buf;
0504     t[1].len = len;
0505     spi_message_add_tail(&t[1], &m);
0506 
0507     ret = spi_sync(trf->spi, &m);
0508     if (ret)
0509         dev_err(trf->dev, "%s - addr: 0x%x, ret: %d\n", __func__, addr,
0510             ret);
0511     return ret;
0512 }
0513 
0514 static int trf7970a_write(struct trf7970a *trf, u8 reg, u8 val)
0515 {
0516     u8 buf[2] = { reg, val };
0517     int ret;
0518 
0519     dev_dbg(trf->dev, "write(0x%x): 0x%x\n", reg, val);
0520 
0521     ret = spi_write(trf->spi, buf, 2);
0522     if (ret)
0523         dev_err(trf->dev, "%s - write: 0x%x 0x%x, ret: %d\n", __func__,
0524             buf[0], buf[1], ret);
0525 
0526     return ret;
0527 }
0528 
0529 static int trf7970a_read_irqstatus(struct trf7970a *trf, u8 *status)
0530 {
0531     int ret;
0532     u8 buf[2];
0533     u8 addr;
0534 
0535     addr = TRF7970A_IRQ_STATUS | TRF7970A_CMD_BIT_RW;
0536 
0537     if (trf->quirks & TRF7970A_QUIRK_IRQ_STATUS_READ) {
0538         addr |= TRF7970A_CMD_BIT_CONTINUOUS;
0539         ret = spi_write_then_read(trf->spi, &addr, 1, buf, 2);
0540     } else {
0541         ret = spi_write_then_read(trf->spi, &addr, 1, buf, 1);
0542     }
0543 
0544     if (ret)
0545         dev_err(trf->dev, "%s - irqstatus: Status read failed: %d\n",
0546             __func__, ret);
0547     else
0548         *status = buf[0];
0549 
0550     return ret;
0551 }
0552 
0553 static int trf7970a_read_target_proto(struct trf7970a *trf, u8 *target_proto)
0554 {
0555     int ret;
0556     u8 buf[2];
0557     u8 addr;
0558 
0559     addr = TRF79070A_NFC_TARGET_PROTOCOL | TRF7970A_CMD_BIT_RW |
0560            TRF7970A_CMD_BIT_CONTINUOUS;
0561 
0562     ret = spi_write_then_read(trf->spi, &addr, 1, buf, 2);
0563     if (ret)
0564         dev_err(trf->dev, "%s - target_proto: Read failed: %d\n",
0565             __func__, ret);
0566     else
0567         *target_proto = buf[0];
0568 
0569     return ret;
0570 }
0571 
0572 static int trf7970a_mode_detect(struct trf7970a *trf, u8 *rf_tech)
0573 {
0574     int ret;
0575     u8 target_proto, tech;
0576 
0577     ret = trf7970a_read_target_proto(trf, &target_proto);
0578     if (ret)
0579         return ret;
0580 
0581     switch (target_proto) {
0582     case TRF79070A_NFC_TARGET_PROTOCOL_106A:
0583         tech = NFC_DIGITAL_RF_TECH_106A;
0584         break;
0585     case TRF79070A_NFC_TARGET_PROTOCOL_106B:
0586         tech = NFC_DIGITAL_RF_TECH_106B;
0587         break;
0588     case TRF79070A_NFC_TARGET_PROTOCOL_212F:
0589         tech = NFC_DIGITAL_RF_TECH_212F;
0590         break;
0591     case TRF79070A_NFC_TARGET_PROTOCOL_424F:
0592         tech = NFC_DIGITAL_RF_TECH_424F;
0593         break;
0594     default:
0595         dev_dbg(trf->dev, "%s - mode_detect: target_proto: 0x%x\n",
0596             __func__, target_proto);
0597         return -EIO;
0598     }
0599 
0600     *rf_tech = tech;
0601 
0602     return ret;
0603 }
0604 
0605 static void trf7970a_send_upstream(struct trf7970a *trf)
0606 {
0607     dev_kfree_skb_any(trf->tx_skb);
0608     trf->tx_skb = NULL;
0609 
0610     if (trf->rx_skb && !IS_ERR(trf->rx_skb) && !trf->aborting)
0611         print_hex_dump_debug("trf7970a rx data: ", DUMP_PREFIX_NONE,
0612                      16, 1, trf->rx_skb->data, trf->rx_skb->len,
0613                      false);
0614 
0615     trf->state = TRF7970A_ST_IDLE;
0616 
0617     if (trf->aborting) {
0618         dev_dbg(trf->dev, "Abort process complete\n");
0619 
0620         if (!IS_ERR(trf->rx_skb)) {
0621             kfree_skb(trf->rx_skb);
0622             trf->rx_skb = ERR_PTR(-ECANCELED);
0623         }
0624 
0625         trf->aborting = false;
0626     }
0627 
0628     trf->cb(trf->ddev, trf->cb_arg, trf->rx_skb);
0629 
0630     trf->rx_skb = NULL;
0631 }
0632 
0633 static void trf7970a_send_err_upstream(struct trf7970a *trf, int errno)
0634 {
0635     dev_dbg(trf->dev, "Error - state: %d, errno: %d\n", trf->state, errno);
0636 
0637     cancel_delayed_work(&trf->timeout_work);
0638 
0639     kfree_skb(trf->rx_skb);
0640     trf->rx_skb = ERR_PTR(errno);
0641 
0642     trf7970a_send_upstream(trf);
0643 }
0644 
0645 static int trf7970a_transmit(struct trf7970a *trf, struct sk_buff *skb,
0646                  unsigned int len, const u8 *prefix,
0647                  unsigned int prefix_len)
0648 {
0649     struct spi_transfer t[2];
0650     struct spi_message m;
0651     unsigned int timeout;
0652     int ret;
0653 
0654     print_hex_dump_debug("trf7970a tx data: ", DUMP_PREFIX_NONE,
0655                  16, 1, skb->data, len, false);
0656 
0657     spi_message_init(&m);
0658 
0659     memset(&t, 0, sizeof(t));
0660 
0661     t[0].tx_buf = prefix;
0662     t[0].len = prefix_len;
0663     spi_message_add_tail(&t[0], &m);
0664 
0665     t[1].tx_buf = skb->data;
0666     t[1].len = len;
0667     spi_message_add_tail(&t[1], &m);
0668 
0669     ret = spi_sync(trf->spi, &m);
0670     if (ret) {
0671         dev_err(trf->dev, "%s - Can't send tx data: %d\n", __func__,
0672             ret);
0673         return ret;
0674     }
0675 
0676     skb_pull(skb, len);
0677 
0678     if (skb->len > 0) {
0679         trf->state = TRF7970A_ST_WAIT_FOR_TX_FIFO;
0680         timeout = TRF7970A_WAIT_FOR_FIFO_DRAIN_TIMEOUT;
0681     } else {
0682         if (trf->issue_eof) {
0683             trf->state = TRF7970A_ST_WAIT_TO_ISSUE_EOF;
0684             timeout = TRF7970A_WAIT_TO_ISSUE_ISO15693_EOF;
0685         } else {
0686             trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA;
0687 
0688             if (!trf->timeout)
0689                 timeout = TRF7970A_WAIT_FOR_TX_IRQ;
0690             else
0691                 timeout = trf->timeout;
0692         }
0693     }
0694 
0695     dev_dbg(trf->dev, "Setting timeout for %d ms, state: %d\n", timeout,
0696         trf->state);
0697 
0698     schedule_delayed_work(&trf->timeout_work, msecs_to_jiffies(timeout));
0699 
0700     return 0;
0701 }
0702 
0703 static void trf7970a_fill_fifo(struct trf7970a *trf)
0704 {
0705     struct sk_buff *skb = trf->tx_skb;
0706     unsigned int len;
0707     int ret;
0708     u8 fifo_bytes;
0709     u8 prefix;
0710 
0711     ret = trf7970a_read(trf, TRF7970A_FIFO_STATUS, &fifo_bytes);
0712     if (ret) {
0713         trf7970a_send_err_upstream(trf, ret);
0714         return;
0715     }
0716 
0717     dev_dbg(trf->dev, "Filling FIFO - fifo_bytes: 0x%x\n", fifo_bytes);
0718 
0719     fifo_bytes &= ~TRF7970A_FIFO_STATUS_OVERFLOW;
0720 
0721     /* Calculate how much more data can be written to the fifo */
0722     len = TRF7970A_FIFO_SIZE - fifo_bytes;
0723     if (!len) {
0724         schedule_delayed_work(&trf->timeout_work,
0725             msecs_to_jiffies(TRF7970A_WAIT_FOR_FIFO_DRAIN_TIMEOUT));
0726         return;
0727     }
0728 
0729     len = min(skb->len, len);
0730 
0731     prefix = TRF7970A_CMD_BIT_CONTINUOUS | TRF7970A_FIFO_IO_REGISTER;
0732 
0733     ret = trf7970a_transmit(trf, skb, len, &prefix, sizeof(prefix));
0734     if (ret)
0735         trf7970a_send_err_upstream(trf, ret);
0736 }
0737 
0738 static void trf7970a_drain_fifo(struct trf7970a *trf, u8 status)
0739 {
0740     struct sk_buff *skb = trf->rx_skb;
0741     int ret;
0742     u8 fifo_bytes;
0743 
0744     if (status & TRF7970A_IRQ_STATUS_ERROR) {
0745         trf7970a_send_err_upstream(trf, -EIO);
0746         return;
0747     }
0748 
0749     ret = trf7970a_read(trf, TRF7970A_FIFO_STATUS, &fifo_bytes);
0750     if (ret) {
0751         trf7970a_send_err_upstream(trf, ret);
0752         return;
0753     }
0754 
0755     dev_dbg(trf->dev, "Draining FIFO - fifo_bytes: 0x%x\n", fifo_bytes);
0756 
0757     fifo_bytes &= ~TRF7970A_FIFO_STATUS_OVERFLOW;
0758 
0759     if (!fifo_bytes)
0760         goto no_rx_data;
0761 
0762     if (fifo_bytes > skb_tailroom(skb)) {
0763         skb = skb_copy_expand(skb, skb_headroom(skb),
0764                       max_t(int, fifo_bytes,
0765                         TRF7970A_RX_SKB_ALLOC_SIZE),
0766                       GFP_KERNEL);
0767         if (!skb) {
0768             trf7970a_send_err_upstream(trf, -ENOMEM);
0769             return;
0770         }
0771 
0772         kfree_skb(trf->rx_skb);
0773         trf->rx_skb = skb;
0774     }
0775 
0776     ret = trf7970a_read_cont(trf, TRF7970A_FIFO_IO_REGISTER,
0777                  skb_put(skb, fifo_bytes), fifo_bytes);
0778     if (ret) {
0779         trf7970a_send_err_upstream(trf, ret);
0780         return;
0781     }
0782 
0783     /* If received Type 2 ACK/NACK, shift right 4 bits and pass up */
0784     if ((trf->framing == NFC_DIGITAL_FRAMING_NFCA_T2T) && (skb->len == 1) &&
0785         (trf->special_fcn_reg1 == TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX)) {
0786         skb->data[0] >>= 4;
0787         status = TRF7970A_IRQ_STATUS_SRX;
0788     } else {
0789         trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA_CONT;
0790 
0791         ret = trf7970a_read(trf, TRF7970A_FIFO_STATUS, &fifo_bytes);
0792         if (ret) {
0793             trf7970a_send_err_upstream(trf, ret);
0794             return;
0795         }
0796 
0797         fifo_bytes &= ~TRF7970A_FIFO_STATUS_OVERFLOW;
0798 
0799         /* If there are bytes in the FIFO, set status to '0' so
0800          * the if stmt below doesn't fire and the driver will wait
0801          * for the trf7970a to generate another RX interrupt.
0802          */
0803         if (fifo_bytes)
0804             status = 0;
0805     }
0806 
0807 no_rx_data:
0808     if (status == TRF7970A_IRQ_STATUS_SRX) {    /* Receive complete */
0809         trf7970a_send_upstream(trf);
0810         return;
0811     }
0812 
0813     dev_dbg(trf->dev, "Setting timeout for %d ms\n",
0814         TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT);
0815 
0816     schedule_delayed_work(&trf->timeout_work,
0817                msecs_to_jiffies(TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT));
0818 }
0819 
0820 static irqreturn_t trf7970a_irq(int irq, void *dev_id)
0821 {
0822     struct trf7970a *trf = dev_id;
0823     int ret;
0824     u8 status, fifo_bytes, iso_ctrl;
0825 
0826     mutex_lock(&trf->lock);
0827 
0828     if (trf->state == TRF7970A_ST_RF_OFF) {
0829         mutex_unlock(&trf->lock);
0830         return IRQ_NONE;
0831     }
0832 
0833     ret = trf7970a_read_irqstatus(trf, &status);
0834     if (ret) {
0835         mutex_unlock(&trf->lock);
0836         return IRQ_NONE;
0837     }
0838 
0839     dev_dbg(trf->dev, "IRQ - state: %d, status: 0x%x\n", trf->state,
0840         status);
0841 
0842     if (!status) {
0843         mutex_unlock(&trf->lock);
0844         return IRQ_NONE;
0845     }
0846 
0847     switch (trf->state) {
0848     case TRF7970A_ST_IDLE:
0849     case TRF7970A_ST_IDLE_RX_BLOCKED:
0850         /* If initiator and getting interrupts caused by RF noise,
0851          * turn off the receiver to avoid unnecessary interrupts.
0852          * It will be turned back on in trf7970a_send_cmd() when
0853          * the next command is issued.
0854          */
0855         if (trf->is_initiator && (status & TRF7970A_IRQ_STATUS_ERROR)) {
0856             trf7970a_cmd(trf, TRF7970A_CMD_BLOCK_RX);
0857             trf->state = TRF7970A_ST_IDLE_RX_BLOCKED;
0858         }
0859 
0860         trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
0861         break;
0862     case TRF7970A_ST_WAIT_FOR_TX_FIFO:
0863         if (status & TRF7970A_IRQ_STATUS_TX) {
0864             trf->ignore_timeout =
0865                 !cancel_delayed_work(&trf->timeout_work);
0866             trf7970a_fill_fifo(trf);
0867         } else {
0868             trf7970a_send_err_upstream(trf, -EIO);
0869         }
0870         break;
0871     case TRF7970A_ST_WAIT_FOR_RX_DATA:
0872     case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT:
0873         if (status & TRF7970A_IRQ_STATUS_SRX) {
0874             trf->ignore_timeout =
0875                 !cancel_delayed_work(&trf->timeout_work);
0876             trf7970a_drain_fifo(trf, status);
0877         } else if (status & TRF7970A_IRQ_STATUS_FIFO) {
0878             ret = trf7970a_read(trf, TRF7970A_FIFO_STATUS,
0879                         &fifo_bytes);
0880 
0881             fifo_bytes &= ~TRF7970A_FIFO_STATUS_OVERFLOW;
0882 
0883             if (ret)
0884                 trf7970a_send_err_upstream(trf, ret);
0885             else if (!fifo_bytes)
0886                 trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
0887         } else if ((status == TRF7970A_IRQ_STATUS_TX) ||
0888                (!trf->is_initiator &&
0889                 (status == (TRF7970A_IRQ_STATUS_TX |
0890                     TRF7970A_IRQ_STATUS_NFC_RF)))) {
0891             trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
0892 
0893             if (!trf->timeout) {
0894                 trf->ignore_timeout =
0895                     !cancel_delayed_work(&trf->timeout_work);
0896                 trf->rx_skb = ERR_PTR(0);
0897                 trf7970a_send_upstream(trf);
0898                 break;
0899             }
0900 
0901             if (trf->is_initiator)
0902                 break;
0903 
0904             iso_ctrl = trf->iso_ctrl;
0905 
0906             switch (trf->framing) {
0907             case NFC_DIGITAL_FRAMING_NFCA_STANDARD:
0908                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC;
0909                 iso_ctrl |= TRF7970A_ISO_CTRL_RX_CRC_N;
0910                 trf->iso_ctrl = 0xff; /* Force ISO_CTRL write */
0911                 break;
0912             case NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A:
0913                 trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
0914                 iso_ctrl &= ~TRF7970A_ISO_CTRL_RX_CRC_N;
0915                 trf->iso_ctrl = 0xff; /* Force ISO_CTRL write */
0916                 break;
0917             case NFC_DIGITAL_FRAMING_NFCA_ANTICOL_COMPLETE:
0918                 ret = trf7970a_write(trf,
0919                      TRF7970A_SPECIAL_FCN_REG1,
0920                      TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL);
0921                 if (ret)
0922                     goto err_unlock_exit;
0923 
0924                 trf->special_fcn_reg1 =
0925                     TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL;
0926                 break;
0927             default:
0928                 break;
0929             }
0930 
0931             if (iso_ctrl != trf->iso_ctrl) {
0932                 ret = trf7970a_write(trf, TRF7970A_ISO_CTRL,
0933                              iso_ctrl);
0934                 if (ret)
0935                     goto err_unlock_exit;
0936 
0937                 trf->iso_ctrl = iso_ctrl;
0938             }
0939         } else {
0940             trf7970a_send_err_upstream(trf, -EIO);
0941         }
0942         break;
0943     case TRF7970A_ST_WAIT_TO_ISSUE_EOF:
0944         if (status != TRF7970A_IRQ_STATUS_TX)
0945             trf7970a_send_err_upstream(trf, -EIO);
0946         break;
0947     case TRF7970A_ST_LISTENING:
0948         if (status & TRF7970A_IRQ_STATUS_SRX) {
0949             trf->ignore_timeout =
0950                 !cancel_delayed_work(&trf->timeout_work);
0951             trf7970a_drain_fifo(trf, status);
0952         } else if (!(status & TRF7970A_IRQ_STATUS_NFC_RF)) {
0953             trf7970a_send_err_upstream(trf, -EIO);
0954         }
0955         break;
0956     case TRF7970A_ST_LISTENING_MD:
0957         if (status & TRF7970A_IRQ_STATUS_SRX) {
0958             trf->ignore_timeout =
0959                 !cancel_delayed_work(&trf->timeout_work);
0960 
0961             ret = trf7970a_mode_detect(trf, &trf->md_rf_tech);
0962             if (ret) {
0963                 trf7970a_send_err_upstream(trf, ret);
0964             } else {
0965                 trf->state = TRF7970A_ST_LISTENING;
0966                 trf7970a_drain_fifo(trf, status);
0967             }
0968         } else if (!(status & TRF7970A_IRQ_STATUS_NFC_RF)) {
0969             trf7970a_send_err_upstream(trf, -EIO);
0970         }
0971         break;
0972     default:
0973         dev_err(trf->dev, "%s - Driver in invalid state: %d\n",
0974             __func__, trf->state);
0975     }
0976 
0977 err_unlock_exit:
0978     mutex_unlock(&trf->lock);
0979     return IRQ_HANDLED;
0980 }
0981 
0982 static void trf7970a_issue_eof(struct trf7970a *trf)
0983 {
0984     int ret;
0985 
0986     dev_dbg(trf->dev, "Issuing EOF\n");
0987 
0988     ret = trf7970a_cmd(trf, TRF7970A_CMD_FIFO_RESET);
0989     if (ret)
0990         trf7970a_send_err_upstream(trf, ret);
0991 
0992     ret = trf7970a_cmd(trf, TRF7970A_CMD_EOF);
0993     if (ret)
0994         trf7970a_send_err_upstream(trf, ret);
0995 
0996     trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA;
0997 
0998     dev_dbg(trf->dev, "Setting timeout for %d ms, state: %d\n",
0999         trf->timeout, trf->state);
1000 
1001     schedule_delayed_work(&trf->timeout_work,
1002                   msecs_to_jiffies(trf->timeout));
1003 }
1004 
1005 static void trf7970a_timeout_work_handler(struct work_struct *work)
1006 {
1007     struct trf7970a *trf = container_of(work, struct trf7970a,
1008                         timeout_work.work);
1009 
1010     dev_dbg(trf->dev, "Timeout - state: %d, ignore_timeout: %d\n",
1011         trf->state, trf->ignore_timeout);
1012 
1013     mutex_lock(&trf->lock);
1014 
1015     if (trf->ignore_timeout)
1016         trf->ignore_timeout = false;
1017     else if (trf->state == TRF7970A_ST_WAIT_FOR_RX_DATA_CONT)
1018         trf7970a_drain_fifo(trf, TRF7970A_IRQ_STATUS_SRX);
1019     else if (trf->state == TRF7970A_ST_WAIT_TO_ISSUE_EOF)
1020         trf7970a_issue_eof(trf);
1021     else
1022         trf7970a_send_err_upstream(trf, -ETIMEDOUT);
1023 
1024     mutex_unlock(&trf->lock);
1025 }
1026 
1027 static int trf7970a_init(struct trf7970a *trf)
1028 {
1029     int ret;
1030 
1031     dev_dbg(trf->dev, "Initializing device - state: %d\n", trf->state);
1032 
1033     ret = trf7970a_cmd(trf, TRF7970A_CMD_SOFT_INIT);
1034     if (ret)
1035         goto err_out;
1036 
1037     ret = trf7970a_cmd(trf, TRF7970A_CMD_IDLE);
1038     if (ret)
1039         goto err_out;
1040 
1041     ret = trf7970a_write(trf, TRF7970A_REG_IO_CTRL,
1042                  trf->io_ctrl | TRF7970A_REG_IO_CTRL_VRS(0x1));
1043     if (ret)
1044         goto err_out;
1045 
1046     ret = trf7970a_write(trf, TRF7970A_NFC_TARGET_LEVEL, 0);
1047     if (ret)
1048         goto err_out;
1049 
1050     usleep_range(1000, 2000);
1051 
1052     trf->chip_status_ctrl &= ~TRF7970A_CHIP_STATUS_RF_ON;
1053 
1054     ret = trf7970a_write(trf, TRF7970A_MODULATOR_SYS_CLK_CTRL,
1055                  trf->modulator_sys_clk_ctrl);
1056     if (ret)
1057         goto err_out;
1058 
1059     ret = trf7970a_write(trf, TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS,
1060                  TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_96 |
1061                  TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_32);
1062     if (ret)
1063         goto err_out;
1064 
1065     ret = trf7970a_write(trf, TRF7970A_SPECIAL_FCN_REG1, 0);
1066     if (ret)
1067         goto err_out;
1068 
1069     trf->special_fcn_reg1 = 0;
1070 
1071     trf->iso_ctrl = 0xff;
1072     return 0;
1073 
1074 err_out:
1075     dev_dbg(trf->dev, "Couldn't init device: %d\n", ret);
1076     return ret;
1077 }
1078 
1079 static void trf7970a_switch_rf_off(struct trf7970a *trf)
1080 {
1081     if ((trf->state == TRF7970A_ST_PWR_OFF) ||
1082         (trf->state == TRF7970A_ST_RF_OFF))
1083         return;
1084 
1085     dev_dbg(trf->dev, "Switching rf off\n");
1086 
1087     trf->chip_status_ctrl &= ~TRF7970A_CHIP_STATUS_RF_ON;
1088 
1089     trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL, trf->chip_status_ctrl);
1090 
1091     trf->aborting = false;
1092     trf->state = TRF7970A_ST_RF_OFF;
1093 
1094     pm_runtime_mark_last_busy(trf->dev);
1095     pm_runtime_put_autosuspend(trf->dev);
1096 }
1097 
1098 static int trf7970a_switch_rf_on(struct trf7970a *trf)
1099 {
1100     int ret;
1101 
1102     dev_dbg(trf->dev, "Switching rf on\n");
1103 
1104     pm_runtime_get_sync(trf->dev);
1105 
1106     if (trf->state != TRF7970A_ST_RF_OFF) { /* Power on, RF off */
1107         dev_err(trf->dev, "%s - Incorrect state: %d\n", __func__,
1108             trf->state);
1109         return -EINVAL;
1110     }
1111 
1112     ret = trf7970a_init(trf);
1113     if (ret) {
1114         dev_err(trf->dev, "%s - Can't initialize: %d\n", __func__, ret);
1115         return ret;
1116     }
1117 
1118     trf->state = TRF7970A_ST_IDLE;
1119 
1120     return 0;
1121 }
1122 
1123 static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
1124 {
1125     struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1126     int ret = 0;
1127 
1128     dev_dbg(trf->dev, "Switching RF - state: %d, on: %d\n", trf->state, on);
1129 
1130     mutex_lock(&trf->lock);
1131 
1132     if (on) {
1133         switch (trf->state) {
1134         case TRF7970A_ST_PWR_OFF:
1135         case TRF7970A_ST_RF_OFF:
1136             ret = trf7970a_switch_rf_on(trf);
1137             break;
1138         case TRF7970A_ST_IDLE:
1139         case TRF7970A_ST_IDLE_RX_BLOCKED:
1140             break;
1141         default:
1142             dev_err(trf->dev, "%s - Invalid request: %d %d\n",
1143                 __func__, trf->state, on);
1144             trf7970a_switch_rf_off(trf);
1145             ret = -EINVAL;
1146         }
1147     } else {
1148         switch (trf->state) {
1149         case TRF7970A_ST_PWR_OFF:
1150         case TRF7970A_ST_RF_OFF:
1151             break;
1152         default:
1153             dev_err(trf->dev, "%s - Invalid request: %d %d\n",
1154                 __func__, trf->state, on);
1155             ret = -EINVAL;
1156             fallthrough;
1157         case TRF7970A_ST_IDLE:
1158         case TRF7970A_ST_IDLE_RX_BLOCKED:
1159         case TRF7970A_ST_WAIT_FOR_RX_DATA:
1160         case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT:
1161             trf7970a_switch_rf_off(trf);
1162         }
1163     }
1164 
1165     mutex_unlock(&trf->lock);
1166     return ret;
1167 }
1168 
1169 static int trf7970a_in_config_rf_tech(struct trf7970a *trf, int tech)
1170 {
1171     int ret = 0;
1172 
1173     dev_dbg(trf->dev, "rf technology: %d\n", tech);
1174 
1175     switch (tech) {
1176     case NFC_DIGITAL_RF_TECH_106A:
1177         trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_14443A_106;
1178         trf->modulator_sys_clk_ctrl =
1179             (trf->modulator_sys_clk_ctrl & 0xf8) |
1180             TRF7970A_MODULATOR_DEPTH_OOK;
1181         trf->guard_time = TRF7970A_GUARD_TIME_NFCA;
1182         break;
1183     case NFC_DIGITAL_RF_TECH_106B:
1184         trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_14443B_106;
1185         trf->modulator_sys_clk_ctrl =
1186             (trf->modulator_sys_clk_ctrl & 0xf8) |
1187             TRF7970A_MODULATOR_DEPTH_ASK10;
1188         trf->guard_time = TRF7970A_GUARD_TIME_NFCB;
1189         break;
1190     case NFC_DIGITAL_RF_TECH_212F:
1191         trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_212;
1192         trf->modulator_sys_clk_ctrl =
1193             (trf->modulator_sys_clk_ctrl & 0xf8) |
1194             TRF7970A_MODULATOR_DEPTH_ASK10;
1195         trf->guard_time = TRF7970A_GUARD_TIME_NFCF;
1196         break;
1197     case NFC_DIGITAL_RF_TECH_424F:
1198         trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_424;
1199         trf->modulator_sys_clk_ctrl =
1200             (trf->modulator_sys_clk_ctrl & 0xf8) |
1201             TRF7970A_MODULATOR_DEPTH_ASK10;
1202         trf->guard_time = TRF7970A_GUARD_TIME_NFCF;
1203         break;
1204     case NFC_DIGITAL_RF_TECH_ISO15693:
1205         trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648;
1206         trf->modulator_sys_clk_ctrl =
1207             (trf->modulator_sys_clk_ctrl & 0xf8) |
1208             TRF7970A_MODULATOR_DEPTH_OOK;
1209         trf->guard_time = TRF7970A_GUARD_TIME_15693;
1210         break;
1211     default:
1212         dev_dbg(trf->dev, "Unsupported rf technology: %d\n", tech);
1213         return -EINVAL;
1214     }
1215 
1216     trf->technology = tech;
1217 
1218     /* If in initiator mode and not changing the RF tech due to a
1219      * PSL sequence (indicated by 'trf->iso_ctrl == 0xff' from
1220      * trf7970a_init()), clear the NFC Target Detection Level register
1221      * due to erratum.
1222      */
1223     if (trf->iso_ctrl == 0xff)
1224         ret = trf7970a_write(trf, TRF7970A_NFC_TARGET_LEVEL, 0);
1225 
1226     return ret;
1227 }
1228 
1229 static int trf7970a_is_rf_field(struct trf7970a *trf, bool *is_rf_field)
1230 {
1231     int ret;
1232     u8 rssi;
1233 
1234     ret = trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL,
1235                  trf->chip_status_ctrl |
1236                  TRF7970A_CHIP_STATUS_REC_ON);
1237     if (ret)
1238         return ret;
1239 
1240     ret = trf7970a_cmd(trf, TRF7970A_CMD_TEST_EXT_RF);
1241     if (ret)
1242         return ret;
1243 
1244     usleep_range(50, 60);
1245 
1246     ret = trf7970a_read(trf, TRF7970A_RSSI_OSC_STATUS, &rssi);
1247     if (ret)
1248         return ret;
1249 
1250     ret = trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL,
1251                  trf->chip_status_ctrl);
1252     if (ret)
1253         return ret;
1254 
1255     if (rssi & TRF7970A_RSSI_OSC_STATUS_RSSI_MASK)
1256         *is_rf_field = true;
1257     else
1258         *is_rf_field = false;
1259 
1260     return 0;
1261 }
1262 
1263 static int trf7970a_in_config_framing(struct trf7970a *trf, int framing)
1264 {
1265     u8 iso_ctrl = trf->iso_ctrl_tech;
1266     bool is_rf_field = false;
1267     int ret;
1268 
1269     dev_dbg(trf->dev, "framing: %d\n", framing);
1270 
1271     switch (framing) {
1272     case NFC_DIGITAL_FRAMING_NFCA_SHORT:
1273     case NFC_DIGITAL_FRAMING_NFCA_STANDARD:
1274         trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC;
1275         iso_ctrl |= TRF7970A_ISO_CTRL_RX_CRC_N;
1276         break;
1277     case NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A:
1278     case NFC_DIGITAL_FRAMING_NFCA_T4T:
1279     case NFC_DIGITAL_FRAMING_NFCB:
1280     case NFC_DIGITAL_FRAMING_NFCB_T4T:
1281     case NFC_DIGITAL_FRAMING_NFCF:
1282     case NFC_DIGITAL_FRAMING_NFCF_T3T:
1283     case NFC_DIGITAL_FRAMING_ISO15693_INVENTORY:
1284     case NFC_DIGITAL_FRAMING_ISO15693_T5T:
1285     case NFC_DIGITAL_FRAMING_NFCA_NFC_DEP:
1286     case NFC_DIGITAL_FRAMING_NFCF_NFC_DEP:
1287         trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
1288         iso_ctrl &= ~TRF7970A_ISO_CTRL_RX_CRC_N;
1289         break;
1290     case NFC_DIGITAL_FRAMING_NFCA_T2T:
1291         trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
1292         iso_ctrl |= TRF7970A_ISO_CTRL_RX_CRC_N;
1293         break;
1294     default:
1295         dev_dbg(trf->dev, "Unsupported Framing: %d\n", framing);
1296         return -EINVAL;
1297     }
1298 
1299     trf->framing = framing;
1300 
1301     if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) {
1302         ret = trf7970a_is_rf_field(trf, &is_rf_field);
1303         if (ret)
1304             return ret;
1305 
1306         if (is_rf_field)
1307             return -EBUSY;
1308     }
1309 
1310     if (iso_ctrl != trf->iso_ctrl) {
1311         ret = trf7970a_write(trf, TRF7970A_ISO_CTRL, iso_ctrl);
1312         if (ret)
1313             return ret;
1314 
1315         trf->iso_ctrl = iso_ctrl;
1316 
1317         ret = trf7970a_write(trf, TRF7970A_MODULATOR_SYS_CLK_CTRL,
1318                      trf->modulator_sys_clk_ctrl);
1319         if (ret)
1320             return ret;
1321     }
1322 
1323     if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) {
1324         ret = trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL,
1325                      trf->chip_status_ctrl |
1326                      TRF7970A_CHIP_STATUS_RF_ON);
1327         if (ret)
1328             return ret;
1329 
1330         trf->chip_status_ctrl |= TRF7970A_CHIP_STATUS_RF_ON;
1331 
1332         usleep_range(trf->guard_time, trf->guard_time + 1000);
1333     }
1334 
1335     return 0;
1336 }
1337 
1338 static int trf7970a_in_configure_hw(struct nfc_digital_dev *ddev, int type,
1339                     int param)
1340 {
1341     struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1342     int ret;
1343 
1344     dev_dbg(trf->dev, "Configure hw - type: %d, param: %d\n", type, param);
1345 
1346     mutex_lock(&trf->lock);
1347 
1348     trf->is_initiator = true;
1349 
1350     if ((trf->state == TRF7970A_ST_PWR_OFF) ||
1351         (trf->state == TRF7970A_ST_RF_OFF)) {
1352         ret = trf7970a_switch_rf_on(trf);
1353         if (ret)
1354             goto err_unlock;
1355     }
1356 
1357     switch (type) {
1358     case NFC_DIGITAL_CONFIG_RF_TECH:
1359         ret = trf7970a_in_config_rf_tech(trf, param);
1360         break;
1361     case NFC_DIGITAL_CONFIG_FRAMING:
1362         ret = trf7970a_in_config_framing(trf, param);
1363         break;
1364     default:
1365         dev_dbg(trf->dev, "Unknown type: %d\n", type);
1366         ret = -EINVAL;
1367     }
1368 
1369 err_unlock:
1370     mutex_unlock(&trf->lock);
1371     return ret;
1372 }
1373 
1374 static int trf7970a_is_iso15693_write_or_lock(u8 cmd)
1375 {
1376     switch (cmd) {
1377     case ISO15693_CMD_WRITE_SINGLE_BLOCK:
1378     case ISO15693_CMD_LOCK_BLOCK:
1379     case ISO15693_CMD_WRITE_MULTIPLE_BLOCK:
1380     case ISO15693_CMD_WRITE_AFI:
1381     case ISO15693_CMD_LOCK_AFI:
1382     case ISO15693_CMD_WRITE_DSFID:
1383     case ISO15693_CMD_LOCK_DSFID:
1384         return 1;
1385     default:
1386         return 0;
1387     }
1388 }
1389 
1390 static int trf7970a_per_cmd_config(struct trf7970a *trf,
1391                    const struct sk_buff *skb)
1392 {
1393     const u8 *req = skb->data;
1394     u8 special_fcn_reg1, iso_ctrl;
1395     int ret;
1396 
1397     trf->issue_eof = false;
1398 
1399     /* When issuing Type 2 read command, make sure the '4_bit_RX' bit in
1400      * special functions register 1 is cleared; otherwise, its a write or
1401      * sector select command and '4_bit_RX' must be set.
1402      *
1403      * When issuing an ISO 15693 command, inspect the flags byte to see
1404      * what speed to use.  Also, remember if the OPTION flag is set on
1405      * a Type 5 write or lock command so the driver will know that it
1406      * has to send an EOF in order to get a response.
1407      */
1408     if ((trf->technology == NFC_DIGITAL_RF_TECH_106A) &&
1409         (trf->framing == NFC_DIGITAL_FRAMING_NFCA_T2T)) {
1410         if (req[0] == NFC_T2T_CMD_READ)
1411             special_fcn_reg1 = 0;
1412         else
1413             special_fcn_reg1 = TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX;
1414 
1415         if (special_fcn_reg1 != trf->special_fcn_reg1) {
1416             ret = trf7970a_write(trf, TRF7970A_SPECIAL_FCN_REG1,
1417                          special_fcn_reg1);
1418             if (ret)
1419                 return ret;
1420 
1421             trf->special_fcn_reg1 = special_fcn_reg1;
1422         }
1423     } else if (trf->technology == NFC_DIGITAL_RF_TECH_ISO15693) {
1424         iso_ctrl = trf->iso_ctrl & ~TRF7970A_ISO_CTRL_RFID_SPEED_MASK;
1425 
1426         switch (req[0] & ISO15693_REQ_FLAG_SPEED_MASK) {
1427         case 0x00:
1428             iso_ctrl |= TRF7970A_ISO_CTRL_15693_SGL_1OF4_662;
1429             break;
1430         case ISO15693_REQ_FLAG_SUB_CARRIER:
1431             iso_ctrl |= TRF7970A_ISO_CTRL_15693_DBL_1OF4_667a;
1432             break;
1433         case ISO15693_REQ_FLAG_DATA_RATE:
1434             iso_ctrl |= TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648;
1435             break;
1436         case (ISO15693_REQ_FLAG_SUB_CARRIER |
1437               ISO15693_REQ_FLAG_DATA_RATE):
1438             iso_ctrl |= TRF7970A_ISO_CTRL_15693_DBL_1OF4_2669;
1439             break;
1440         }
1441 
1442         if (iso_ctrl != trf->iso_ctrl) {
1443             ret = trf7970a_write(trf, TRF7970A_ISO_CTRL, iso_ctrl);
1444             if (ret)
1445                 return ret;
1446 
1447             trf->iso_ctrl = iso_ctrl;
1448         }
1449 
1450         if ((trf->framing == NFC_DIGITAL_FRAMING_ISO15693_T5T) &&
1451             trf7970a_is_iso15693_write_or_lock(req[1]) &&
1452             (req[0] & ISO15693_REQ_FLAG_OPTION))
1453             trf->issue_eof = true;
1454     }
1455 
1456     return 0;
1457 }
1458 
1459 static int trf7970a_send_cmd(struct nfc_digital_dev *ddev,
1460                  struct sk_buff *skb, u16 timeout,
1461                  nfc_digital_cmd_complete_t cb, void *arg)
1462 {
1463     struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1464     u8 prefix[5];
1465     unsigned int len;
1466     int ret;
1467     u8 status;
1468 
1469     dev_dbg(trf->dev, "New request - state: %d, timeout: %d ms, len: %d\n",
1470         trf->state, timeout, skb->len);
1471 
1472     if (skb->len > TRF7970A_TX_MAX)
1473         return -EINVAL;
1474 
1475     mutex_lock(&trf->lock);
1476 
1477     if ((trf->state != TRF7970A_ST_IDLE) &&
1478         (trf->state != TRF7970A_ST_IDLE_RX_BLOCKED)) {
1479         dev_err(trf->dev, "%s - Bogus state: %d\n", __func__,
1480             trf->state);
1481         ret = -EIO;
1482         goto out_err;
1483     }
1484 
1485     if (trf->aborting) {
1486         dev_dbg(trf->dev, "Abort process complete\n");
1487         trf->aborting = false;
1488         ret = -ECANCELED;
1489         goto out_err;
1490     }
1491 
1492     if (timeout) {
1493         trf->rx_skb = nfc_alloc_recv_skb(TRF7970A_RX_SKB_ALLOC_SIZE,
1494                          GFP_KERNEL);
1495         if (!trf->rx_skb) {
1496             dev_dbg(trf->dev, "Can't alloc rx_skb\n");
1497             ret = -ENOMEM;
1498             goto out_err;
1499         }
1500     }
1501 
1502     if (trf->state == TRF7970A_ST_IDLE_RX_BLOCKED) {
1503         ret = trf7970a_cmd(trf, TRF7970A_CMD_ENABLE_RX);
1504         if (ret)
1505             goto out_err;
1506 
1507         trf->state = TRF7970A_ST_IDLE;
1508     }
1509 
1510     if (trf->is_initiator) {
1511         ret = trf7970a_per_cmd_config(trf, skb);
1512         if (ret)
1513             goto out_err;
1514     }
1515 
1516     trf->ddev = ddev;
1517     trf->tx_skb = skb;
1518     trf->cb = cb;
1519     trf->cb_arg = arg;
1520     trf->timeout = timeout;
1521     trf->ignore_timeout = false;
1522 
1523     len = skb->len;
1524 
1525     /* TX data must be prefixed with a FIFO reset cmd, a cmd that depends
1526      * on what the current framing is, the address of the TX length byte 1
1527      * register (0x1d), and the 2 byte length of the data to be transmitted.
1528      * That totals 5 bytes.
1529      */
1530     prefix[0] = TRF7970A_CMD_BIT_CTRL |
1531         TRF7970A_CMD_BIT_OPCODE(TRF7970A_CMD_FIFO_RESET);
1532     prefix[1] = TRF7970A_CMD_BIT_CTRL |
1533         TRF7970A_CMD_BIT_OPCODE(trf->tx_cmd);
1534     prefix[2] = TRF7970A_CMD_BIT_CONTINUOUS | TRF7970A_TX_LENGTH_BYTE1;
1535 
1536     if (trf->framing == NFC_DIGITAL_FRAMING_NFCA_SHORT) {
1537         prefix[3] = 0x00;
1538         prefix[4] = 0x0f;   /* 7 bits */
1539     } else {
1540         prefix[3] = (len & 0xf00) >> 4;
1541         prefix[3] |= ((len & 0xf0) >> 4);
1542         prefix[4] = ((len & 0x0f) << 4);
1543     }
1544 
1545     len = min_t(int, skb->len, TRF7970A_FIFO_SIZE);
1546 
1547     /* Clear possible spurious interrupt */
1548     ret = trf7970a_read_irqstatus(trf, &status);
1549     if (ret)
1550         goto out_err;
1551 
1552     ret = trf7970a_transmit(trf, skb, len, prefix, sizeof(prefix));
1553     if (ret) {
1554         kfree_skb(trf->rx_skb);
1555         trf->rx_skb = NULL;
1556     }
1557 
1558 out_err:
1559     mutex_unlock(&trf->lock);
1560     return ret;
1561 }
1562 
1563 static int trf7970a_tg_config_rf_tech(struct trf7970a *trf, int tech)
1564 {
1565     int ret = 0;
1566 
1567     dev_dbg(trf->dev, "rf technology: %d\n", tech);
1568 
1569     switch (tech) {
1570     case NFC_DIGITAL_RF_TECH_106A:
1571         trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
1572             TRF7970A_ISO_CTRL_NFC_CE | TRF7970A_ISO_CTRL_NFC_CE_14443A;
1573         trf->modulator_sys_clk_ctrl =
1574             (trf->modulator_sys_clk_ctrl & 0xf8) |
1575             TRF7970A_MODULATOR_DEPTH_OOK;
1576         break;
1577     case NFC_DIGITAL_RF_TECH_212F:
1578         trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
1579             TRF7970A_ISO_CTRL_NFC_NFCF_212;
1580         trf->modulator_sys_clk_ctrl =
1581             (trf->modulator_sys_clk_ctrl & 0xf8) |
1582             TRF7970A_MODULATOR_DEPTH_ASK10;
1583         break;
1584     case NFC_DIGITAL_RF_TECH_424F:
1585         trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
1586             TRF7970A_ISO_CTRL_NFC_NFCF_424;
1587         trf->modulator_sys_clk_ctrl =
1588             (trf->modulator_sys_clk_ctrl & 0xf8) |
1589             TRF7970A_MODULATOR_DEPTH_ASK10;
1590         break;
1591     default:
1592         dev_dbg(trf->dev, "Unsupported rf technology: %d\n", tech);
1593         return -EINVAL;
1594     }
1595 
1596     trf->technology = tech;
1597 
1598     /* Normally we write the ISO_CTRL register in
1599      * trf7970a_tg_config_framing() because the framing can change
1600      * the value written.  However, when sending a PSL RES,
1601      * digital_tg_send_psl_res_complete() doesn't call
1602      * trf7970a_tg_config_framing() so we must write the register
1603      * here.
1604      */
1605     if ((trf->framing == NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED) &&
1606         (trf->iso_ctrl_tech != trf->iso_ctrl)) {
1607         ret = trf7970a_write(trf, TRF7970A_ISO_CTRL,
1608                      trf->iso_ctrl_tech);
1609 
1610         trf->iso_ctrl = trf->iso_ctrl_tech;
1611     }
1612 
1613     return ret;
1614 }
1615 
1616 /* Since this is a target routine, several of the framing calls are
1617  * made between receiving the request and sending the response so they
1618  * should take effect until after the response is sent.  This is accomplished
1619  * by skipping the ISO_CTRL register write here and doing it in the interrupt
1620  * handler.
1621  */
1622 static int trf7970a_tg_config_framing(struct trf7970a *trf, int framing)
1623 {
1624     u8 iso_ctrl = trf->iso_ctrl_tech;
1625     int ret;
1626 
1627     dev_dbg(trf->dev, "framing: %d\n", framing);
1628 
1629     switch (framing) {
1630     case NFC_DIGITAL_FRAMING_NFCA_NFC_DEP:
1631         trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC;
1632         iso_ctrl |= TRF7970A_ISO_CTRL_RX_CRC_N;
1633         break;
1634     case NFC_DIGITAL_FRAMING_NFCA_STANDARD:
1635     case NFC_DIGITAL_FRAMING_NFCA_STANDARD_WITH_CRC_A:
1636     case NFC_DIGITAL_FRAMING_NFCA_ANTICOL_COMPLETE:
1637         /* These ones are applied in the interrupt handler */
1638         iso_ctrl = trf->iso_ctrl; /* Don't write to ISO_CTRL yet */
1639         break;
1640     case NFC_DIGITAL_FRAMING_NFCF_NFC_DEP:
1641         trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
1642         iso_ctrl &= ~TRF7970A_ISO_CTRL_RX_CRC_N;
1643         break;
1644     case NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED:
1645         trf->tx_cmd = TRF7970A_CMD_TRANSMIT;
1646         iso_ctrl &= ~TRF7970A_ISO_CTRL_RX_CRC_N;
1647         break;
1648     default:
1649         dev_dbg(trf->dev, "Unsupported Framing: %d\n", framing);
1650         return -EINVAL;
1651     }
1652 
1653     trf->framing = framing;
1654 
1655     if (iso_ctrl != trf->iso_ctrl) {
1656         ret = trf7970a_write(trf, TRF7970A_ISO_CTRL, iso_ctrl);
1657         if (ret)
1658             return ret;
1659 
1660         trf->iso_ctrl = iso_ctrl;
1661 
1662         ret = trf7970a_write(trf, TRF7970A_MODULATOR_SYS_CLK_CTRL,
1663                      trf->modulator_sys_clk_ctrl);
1664         if (ret)
1665             return ret;
1666     }
1667 
1668     if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) {
1669         ret = trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL,
1670                      trf->chip_status_ctrl |
1671                      TRF7970A_CHIP_STATUS_RF_ON);
1672         if (ret)
1673             return ret;
1674 
1675         trf->chip_status_ctrl |= TRF7970A_CHIP_STATUS_RF_ON;
1676     }
1677 
1678     return 0;
1679 }
1680 
1681 static int trf7970a_tg_configure_hw(struct nfc_digital_dev *ddev, int type,
1682                     int param)
1683 {
1684     struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1685     int ret;
1686 
1687     dev_dbg(trf->dev, "Configure hw - type: %d, param: %d\n", type, param);
1688 
1689     mutex_lock(&trf->lock);
1690 
1691     trf->is_initiator = false;
1692 
1693     if ((trf->state == TRF7970A_ST_PWR_OFF) ||
1694         (trf->state == TRF7970A_ST_RF_OFF)) {
1695         ret = trf7970a_switch_rf_on(trf);
1696         if (ret)
1697             goto err_unlock;
1698     }
1699 
1700     switch (type) {
1701     case NFC_DIGITAL_CONFIG_RF_TECH:
1702         ret = trf7970a_tg_config_rf_tech(trf, param);
1703         break;
1704     case NFC_DIGITAL_CONFIG_FRAMING:
1705         ret = trf7970a_tg_config_framing(trf, param);
1706         break;
1707     default:
1708         dev_dbg(trf->dev, "Unknown type: %d\n", type);
1709         ret = -EINVAL;
1710     }
1711 
1712 err_unlock:
1713     mutex_unlock(&trf->lock);
1714     return ret;
1715 }
1716 
1717 static int _trf7970a_tg_listen(struct nfc_digital_dev *ddev, u16 timeout,
1718                    nfc_digital_cmd_complete_t cb, void *arg,
1719                    bool mode_detect)
1720 {
1721     struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1722     int ret;
1723 
1724     mutex_lock(&trf->lock);
1725 
1726     if ((trf->state != TRF7970A_ST_IDLE) &&
1727         (trf->state != TRF7970A_ST_IDLE_RX_BLOCKED)) {
1728         dev_err(trf->dev, "%s - Bogus state: %d\n", __func__,
1729             trf->state);
1730         ret = -EIO;
1731         goto out_err;
1732     }
1733 
1734     if (trf->aborting) {
1735         dev_dbg(trf->dev, "Abort process complete\n");
1736         trf->aborting = false;
1737         ret = -ECANCELED;
1738         goto out_err;
1739     }
1740 
1741     trf->rx_skb = nfc_alloc_recv_skb(TRF7970A_RX_SKB_ALLOC_SIZE,
1742                      GFP_KERNEL);
1743     if (!trf->rx_skb) {
1744         dev_dbg(trf->dev, "Can't alloc rx_skb\n");
1745         ret = -ENOMEM;
1746         goto out_err;
1747     }
1748 
1749     ret = trf7970a_write(trf, TRF7970A_RX_SPECIAL_SETTINGS,
1750                  TRF7970A_RX_SPECIAL_SETTINGS_HBT |
1751                  TRF7970A_RX_SPECIAL_SETTINGS_M848 |
1752                  TRF7970A_RX_SPECIAL_SETTINGS_C424 |
1753                  TRF7970A_RX_SPECIAL_SETTINGS_C212);
1754     if (ret)
1755         goto out_err;
1756 
1757     ret = trf7970a_write(trf, TRF7970A_REG_IO_CTRL,
1758                  trf->io_ctrl | TRF7970A_REG_IO_CTRL_VRS(0x1));
1759     if (ret)
1760         goto out_err;
1761 
1762     ret = trf7970a_write(trf, TRF7970A_NFC_LOW_FIELD_LEVEL,
1763                  TRF7970A_NFC_LOW_FIELD_LEVEL_RFDET(0x3));
1764     if (ret)
1765         goto out_err;
1766 
1767     ret = trf7970a_write(trf, TRF7970A_NFC_TARGET_LEVEL,
1768                  TRF7970A_NFC_TARGET_LEVEL_RFDET(0x7));
1769     if (ret)
1770         goto out_err;
1771 
1772     trf->ddev = ddev;
1773     trf->cb = cb;
1774     trf->cb_arg = arg;
1775     trf->timeout = timeout;
1776     trf->ignore_timeout = false;
1777 
1778     ret = trf7970a_cmd(trf, TRF7970A_CMD_ENABLE_RX);
1779     if (ret)
1780         goto out_err;
1781 
1782     trf->state = mode_detect ? TRF7970A_ST_LISTENING_MD :
1783                    TRF7970A_ST_LISTENING;
1784 
1785     schedule_delayed_work(&trf->timeout_work, msecs_to_jiffies(timeout));
1786 
1787 out_err:
1788     mutex_unlock(&trf->lock);
1789     return ret;
1790 }
1791 
1792 static int trf7970a_tg_listen(struct nfc_digital_dev *ddev, u16 timeout,
1793                   nfc_digital_cmd_complete_t cb, void *arg)
1794 {
1795     const struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1796 
1797     dev_dbg(trf->dev, "Listen - state: %d, timeout: %d ms\n",
1798         trf->state, timeout);
1799 
1800     return _trf7970a_tg_listen(ddev, timeout, cb, arg, false);
1801 }
1802 
1803 static int trf7970a_tg_listen_md(struct nfc_digital_dev *ddev,
1804                  u16 timeout, nfc_digital_cmd_complete_t cb,
1805                  void *arg)
1806 {
1807     const struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1808     int ret;
1809 
1810     dev_dbg(trf->dev, "Listen MD - state: %d, timeout: %d ms\n",
1811         trf->state, timeout);
1812 
1813     ret = trf7970a_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_RF_TECH,
1814                        NFC_DIGITAL_RF_TECH_106A);
1815     if (ret)
1816         return ret;
1817 
1818     ret = trf7970a_tg_configure_hw(ddev, NFC_DIGITAL_CONFIG_FRAMING,
1819                        NFC_DIGITAL_FRAMING_NFCA_NFC_DEP);
1820     if (ret)
1821         return ret;
1822 
1823     return _trf7970a_tg_listen(ddev, timeout, cb, arg, true);
1824 }
1825 
1826 static int trf7970a_tg_get_rf_tech(struct nfc_digital_dev *ddev, u8 *rf_tech)
1827 {
1828     const struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1829 
1830     dev_dbg(trf->dev, "Get RF Tech - state: %d, rf_tech: %d\n",
1831         trf->state, trf->md_rf_tech);
1832 
1833     *rf_tech = trf->md_rf_tech;
1834 
1835     return 0;
1836 }
1837 
1838 static void trf7970a_abort_cmd(struct nfc_digital_dev *ddev)
1839 {
1840     struct trf7970a *trf = nfc_digital_get_drvdata(ddev);
1841 
1842     dev_dbg(trf->dev, "Abort process initiated\n");
1843 
1844     mutex_lock(&trf->lock);
1845 
1846     switch (trf->state) {
1847     case TRF7970A_ST_WAIT_FOR_TX_FIFO:
1848     case TRF7970A_ST_WAIT_FOR_RX_DATA:
1849     case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT:
1850     case TRF7970A_ST_WAIT_TO_ISSUE_EOF:
1851         trf->aborting = true;
1852         break;
1853     case TRF7970A_ST_LISTENING:
1854         trf->ignore_timeout = !cancel_delayed_work(&trf->timeout_work);
1855         trf7970a_send_err_upstream(trf, -ECANCELED);
1856         dev_dbg(trf->dev, "Abort process complete\n");
1857         break;
1858     default:
1859         break;
1860     }
1861 
1862     mutex_unlock(&trf->lock);
1863 }
1864 
1865 static const struct nfc_digital_ops trf7970a_nfc_ops = {
1866     .in_configure_hw    = trf7970a_in_configure_hw,
1867     .in_send_cmd        = trf7970a_send_cmd,
1868     .tg_configure_hw    = trf7970a_tg_configure_hw,
1869     .tg_send_cmd        = trf7970a_send_cmd,
1870     .tg_listen      = trf7970a_tg_listen,
1871     .tg_listen_md       = trf7970a_tg_listen_md,
1872     .tg_get_rf_tech     = trf7970a_tg_get_rf_tech,
1873     .switch_rf      = trf7970a_switch_rf,
1874     .abort_cmd      = trf7970a_abort_cmd,
1875 };
1876 
1877 static int trf7970a_power_up(struct trf7970a *trf)
1878 {
1879     int ret;
1880 
1881     dev_dbg(trf->dev, "Powering up - state: %d\n", trf->state);
1882 
1883     if (trf->state != TRF7970A_ST_PWR_OFF)
1884         return 0;
1885 
1886     ret = regulator_enable(trf->regulator);
1887     if (ret) {
1888         dev_err(trf->dev, "%s - Can't enable VIN: %d\n", __func__, ret);
1889         return ret;
1890     }
1891 
1892     usleep_range(5000, 6000);
1893 
1894     if (trf->en2_gpiod &&
1895         !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW)) {
1896         gpiod_set_value_cansleep(trf->en2_gpiod, 1);
1897         usleep_range(1000, 2000);
1898     }
1899 
1900     gpiod_set_value_cansleep(trf->en_gpiod, 1);
1901 
1902     usleep_range(20000, 21000);
1903 
1904     trf->state = TRF7970A_ST_RF_OFF;
1905 
1906     return 0;
1907 }
1908 
1909 static int trf7970a_power_down(struct trf7970a *trf)
1910 {
1911     int ret;
1912 
1913     dev_dbg(trf->dev, "Powering down - state: %d\n", trf->state);
1914 
1915     if (trf->state == TRF7970A_ST_PWR_OFF)
1916         return 0;
1917 
1918     if (trf->state != TRF7970A_ST_RF_OFF) {
1919         dev_dbg(trf->dev, "Can't power down - not RF_OFF state (%d)\n",
1920             trf->state);
1921         return -EBUSY;
1922     }
1923 
1924     gpiod_set_value_cansleep(trf->en_gpiod, 0);
1925 
1926     if (trf->en2_gpiod && !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW))
1927         gpiod_set_value_cansleep(trf->en2_gpiod, 0);
1928 
1929     ret = regulator_disable(trf->regulator);
1930     if (ret)
1931         dev_err(trf->dev, "%s - Can't disable VIN: %d\n", __func__,
1932             ret);
1933 
1934     trf->state = TRF7970A_ST_PWR_OFF;
1935 
1936     return ret;
1937 }
1938 
1939 static int trf7970a_startup(struct trf7970a *trf)
1940 {
1941     int ret;
1942 
1943     ret = trf7970a_power_up(trf);
1944     if (ret)
1945         return ret;
1946 
1947     pm_runtime_set_active(trf->dev);
1948     pm_runtime_enable(trf->dev);
1949     pm_runtime_mark_last_busy(trf->dev);
1950 
1951     return 0;
1952 }
1953 
1954 static void trf7970a_shutdown(struct trf7970a *trf)
1955 {
1956     switch (trf->state) {
1957     case TRF7970A_ST_WAIT_FOR_TX_FIFO:
1958     case TRF7970A_ST_WAIT_FOR_RX_DATA:
1959     case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT:
1960     case TRF7970A_ST_WAIT_TO_ISSUE_EOF:
1961     case TRF7970A_ST_LISTENING:
1962         trf7970a_send_err_upstream(trf, -ECANCELED);
1963         fallthrough;
1964     case TRF7970A_ST_IDLE:
1965     case TRF7970A_ST_IDLE_RX_BLOCKED:
1966         trf7970a_switch_rf_off(trf);
1967         break;
1968     default:
1969         break;
1970     }
1971 
1972     pm_runtime_disable(trf->dev);
1973     pm_runtime_set_suspended(trf->dev);
1974 
1975     trf7970a_power_down(trf);
1976 }
1977 
1978 static int trf7970a_get_autosuspend_delay(const struct device_node *np)
1979 {
1980     int autosuspend_delay, ret;
1981 
1982     ret = of_property_read_u32(np, "autosuspend-delay", &autosuspend_delay);
1983     if (ret)
1984         autosuspend_delay = TRF7970A_AUTOSUSPEND_DELAY;
1985 
1986     return autosuspend_delay;
1987 }
1988 
1989 static int trf7970a_probe(struct spi_device *spi)
1990 {
1991     const struct device_node *np = spi->dev.of_node;
1992     struct trf7970a *trf;
1993     int uvolts, autosuspend_delay, ret;
1994     u32 clk_freq = TRF7970A_13MHZ_CLOCK_FREQUENCY;
1995 
1996     if (!np) {
1997         dev_err(&spi->dev, "No Device Tree entry\n");
1998         return -EINVAL;
1999     }
2000 
2001     trf = devm_kzalloc(&spi->dev, sizeof(*trf), GFP_KERNEL);
2002     if (!trf)
2003         return -ENOMEM;
2004 
2005     trf->state = TRF7970A_ST_PWR_OFF;
2006     trf->dev = &spi->dev;
2007     trf->spi = spi;
2008 
2009     spi->mode = SPI_MODE_1;
2010     spi->bits_per_word = 8;
2011 
2012     ret = spi_setup(spi);
2013     if (ret < 0) {
2014         dev_err(trf->dev, "Can't set up SPI Communication\n");
2015         return ret;
2016     }
2017 
2018     if (of_property_read_bool(np, "irq-status-read-quirk"))
2019         trf->quirks |= TRF7970A_QUIRK_IRQ_STATUS_READ;
2020 
2021     /* There are two enable pins - only EN must be present in the DT */
2022     trf->en_gpiod = devm_gpiod_get_index(trf->dev, "ti,enable", 0,
2023                          GPIOD_OUT_LOW);
2024     if (IS_ERR(trf->en_gpiod)) {
2025         dev_err(trf->dev, "No EN GPIO property\n");
2026         return PTR_ERR(trf->en_gpiod);
2027     }
2028 
2029     trf->en2_gpiod = devm_gpiod_get_index_optional(trf->dev, "ti,enable", 1,
2030                                GPIOD_OUT_LOW);
2031     if (!trf->en2_gpiod) {
2032         dev_info(trf->dev, "No EN2 GPIO property\n");
2033     } else if (IS_ERR(trf->en2_gpiod)) {
2034         dev_err(trf->dev, "Error getting EN2 GPIO property: %ld\n",
2035             PTR_ERR(trf->en2_gpiod));
2036         return PTR_ERR(trf->en2_gpiod);
2037     } else if (of_property_read_bool(np, "en2-rf-quirk")) {
2038         trf->quirks |= TRF7970A_QUIRK_EN2_MUST_STAY_LOW;
2039     }
2040 
2041     of_property_read_u32(np, "clock-frequency", &clk_freq);
2042     if ((clk_freq != TRF7970A_27MHZ_CLOCK_FREQUENCY) &&
2043         (clk_freq != TRF7970A_13MHZ_CLOCK_FREQUENCY)) {
2044         dev_err(trf->dev,
2045             "clock-frequency (%u Hz) unsupported\n", clk_freq);
2046         return -EINVAL;
2047     }
2048 
2049     if (clk_freq == TRF7970A_27MHZ_CLOCK_FREQUENCY) {
2050         trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_27MHZ;
2051         dev_dbg(trf->dev, "trf7970a configured for 27MHz crystal\n");
2052     } else {
2053         trf->modulator_sys_clk_ctrl = 0;
2054     }
2055 
2056     ret = devm_request_threaded_irq(trf->dev, spi->irq, NULL,
2057                     trf7970a_irq,
2058                     IRQF_TRIGGER_RISING | IRQF_ONESHOT,
2059                     "trf7970a", trf);
2060     if (ret) {
2061         dev_err(trf->dev, "Can't request IRQ#%d: %d\n", spi->irq, ret);
2062         return ret;
2063     }
2064 
2065     mutex_init(&trf->lock);
2066     INIT_DELAYED_WORK(&trf->timeout_work, trf7970a_timeout_work_handler);
2067 
2068     trf->regulator = devm_regulator_get(&spi->dev, "vin");
2069     if (IS_ERR(trf->regulator)) {
2070         ret = PTR_ERR(trf->regulator);
2071         dev_err(trf->dev, "Can't get VIN regulator: %d\n", ret);
2072         goto err_destroy_lock;
2073     }
2074 
2075     ret = regulator_enable(trf->regulator);
2076     if (ret) {
2077         dev_err(trf->dev, "Can't enable VIN: %d\n", ret);
2078         goto err_destroy_lock;
2079     }
2080 
2081     uvolts = regulator_get_voltage(trf->regulator);
2082     if (uvolts > 4000000)
2083         trf->chip_status_ctrl = TRF7970A_CHIP_STATUS_VRS5_3;
2084 
2085     trf->regulator = devm_regulator_get(&spi->dev, "vdd-io");
2086     if (IS_ERR(trf->regulator)) {
2087         ret = PTR_ERR(trf->regulator);
2088         dev_err(trf->dev, "Can't get VDD_IO regulator: %d\n", ret);
2089         goto err_destroy_lock;
2090     }
2091 
2092     ret = regulator_enable(trf->regulator);
2093     if (ret) {
2094         dev_err(trf->dev, "Can't enable VDD_IO: %d\n", ret);
2095         goto err_destroy_lock;
2096     }
2097 
2098     if (regulator_get_voltage(trf->regulator) == 1800000) {
2099         trf->io_ctrl = TRF7970A_REG_IO_CTRL_IO_LOW;
2100         dev_dbg(trf->dev, "trf7970a config vdd_io to 1.8V\n");
2101     }
2102 
2103     trf->ddev = nfc_digital_allocate_device(&trf7970a_nfc_ops,
2104                         TRF7970A_SUPPORTED_PROTOCOLS,
2105                         NFC_DIGITAL_DRV_CAPS_IN_CRC |
2106                         NFC_DIGITAL_DRV_CAPS_TG_CRC, 0,
2107                         0);
2108     if (!trf->ddev) {
2109         dev_err(trf->dev, "Can't allocate NFC digital device\n");
2110         ret = -ENOMEM;
2111         goto err_disable_regulator;
2112     }
2113 
2114     nfc_digital_set_parent_dev(trf->ddev, trf->dev);
2115     nfc_digital_set_drvdata(trf->ddev, trf);
2116     spi_set_drvdata(spi, trf);
2117 
2118     autosuspend_delay = trf7970a_get_autosuspend_delay(np);
2119 
2120     pm_runtime_set_autosuspend_delay(trf->dev, autosuspend_delay);
2121     pm_runtime_use_autosuspend(trf->dev);
2122 
2123     ret = trf7970a_startup(trf);
2124     if (ret)
2125         goto err_free_ddev;
2126 
2127     ret = nfc_digital_register_device(trf->ddev);
2128     if (ret) {
2129         dev_err(trf->dev, "Can't register NFC digital device: %d\n",
2130             ret);
2131         goto err_shutdown;
2132     }
2133 
2134     return 0;
2135 
2136 err_shutdown:
2137     trf7970a_shutdown(trf);
2138 err_free_ddev:
2139     nfc_digital_free_device(trf->ddev);
2140 err_disable_regulator:
2141     regulator_disable(trf->regulator);
2142 err_destroy_lock:
2143     mutex_destroy(&trf->lock);
2144     return ret;
2145 }
2146 
2147 static void trf7970a_remove(struct spi_device *spi)
2148 {
2149     struct trf7970a *trf = spi_get_drvdata(spi);
2150 
2151     mutex_lock(&trf->lock);
2152 
2153     trf7970a_shutdown(trf);
2154 
2155     mutex_unlock(&trf->lock);
2156 
2157     nfc_digital_unregister_device(trf->ddev);
2158     nfc_digital_free_device(trf->ddev);
2159 
2160     regulator_disable(trf->regulator);
2161 
2162     mutex_destroy(&trf->lock);
2163 }
2164 
2165 #ifdef CONFIG_PM_SLEEP
2166 static int trf7970a_suspend(struct device *dev)
2167 {
2168     struct spi_device *spi = to_spi_device(dev);
2169     struct trf7970a *trf = spi_get_drvdata(spi);
2170 
2171     mutex_lock(&trf->lock);
2172 
2173     trf7970a_shutdown(trf);
2174 
2175     mutex_unlock(&trf->lock);
2176 
2177     return 0;
2178 }
2179 
2180 static int trf7970a_resume(struct device *dev)
2181 {
2182     struct spi_device *spi = to_spi_device(dev);
2183     struct trf7970a *trf = spi_get_drvdata(spi);
2184     int ret;
2185 
2186     mutex_lock(&trf->lock);
2187 
2188     ret = trf7970a_startup(trf);
2189 
2190     mutex_unlock(&trf->lock);
2191 
2192     return ret;
2193 }
2194 #endif
2195 
2196 #ifdef CONFIG_PM
2197 static int trf7970a_pm_runtime_suspend(struct device *dev)
2198 {
2199     struct spi_device *spi = to_spi_device(dev);
2200     struct trf7970a *trf = spi_get_drvdata(spi);
2201     int ret;
2202 
2203     mutex_lock(&trf->lock);
2204 
2205     ret = trf7970a_power_down(trf);
2206 
2207     mutex_unlock(&trf->lock);
2208 
2209     return ret;
2210 }
2211 
2212 static int trf7970a_pm_runtime_resume(struct device *dev)
2213 {
2214     struct spi_device *spi = to_spi_device(dev);
2215     struct trf7970a *trf = spi_get_drvdata(spi);
2216     int ret;
2217 
2218     ret = trf7970a_power_up(trf);
2219     if (!ret)
2220         pm_runtime_mark_last_busy(dev);
2221 
2222     return ret;
2223 }
2224 #endif
2225 
2226 static const struct dev_pm_ops trf7970a_pm_ops = {
2227     SET_SYSTEM_SLEEP_PM_OPS(trf7970a_suspend, trf7970a_resume)
2228     SET_RUNTIME_PM_OPS(trf7970a_pm_runtime_suspend,
2229                trf7970a_pm_runtime_resume, NULL)
2230 };
2231 
2232 static const struct of_device_id trf7970a_of_match[] = {
2233     {.compatible = "ti,trf7970a",},
2234     {},
2235 };
2236 
2237 MODULE_DEVICE_TABLE(of, trf7970a_of_match);
2238 
2239 static const struct spi_device_id trf7970a_id_table[] = {
2240     {"trf7970a", 0},
2241     {}
2242 };
2243 
2244 MODULE_DEVICE_TABLE(spi, trf7970a_id_table);
2245 
2246 static struct spi_driver trf7970a_spi_driver = {
2247     .probe      = trf7970a_probe,
2248     .remove     = trf7970a_remove,
2249     .id_table   = trf7970a_id_table,
2250     .driver = {
2251         .name       = "trf7970a",
2252         .of_match_table = of_match_ptr(trf7970a_of_match),
2253         .pm     = &trf7970a_pm_ops,
2254     },
2255 };
2256 
2257 module_spi_driver(trf7970a_spi_driver);
2258 
2259 MODULE_AUTHOR("Mark A. Greer <mgreer@animalcreek.com>");
2260 MODULE_LICENSE("GPL v2");
2261 MODULE_DESCRIPTION("TI trf7970a RFID/NFC Transceiver Driver");