0001
0002
0003
0004
0005
0006
0007
0008
0009
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
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
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
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
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
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
0145
0146
0147
0148 #define TRF7970A_QUIRK_IRQ_STATUS_READ BIT(0)
0149 #define TRF7970A_QUIRK_EN2_MUST_STAY_LOW BIT(1)
0150
0151
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
0171
0172
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
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
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
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)
0253
0254 #define TRF7970A_ISO_CTRL_RFID_SPEED_MASK 0x1f
0255
0256
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
0292 #define TRF7970A_IRQ_STATUS_NORESP BIT(0)
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
0377 #define NFC_T2T_CMD_READ 0x30
0378
0379
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
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
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
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
0800
0801
0802
0803 if (fifo_bytes)
0804 status = 0;
0805 }
0806
0807 no_rx_data:
0808 if (status == TRF7970A_IRQ_STATUS_SRX) {
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
0851
0852
0853
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;
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;
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) {
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
1219
1220
1221
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
1400
1401
1402
1403
1404
1405
1406
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
1526
1527
1528
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;
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
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
1599
1600
1601
1602
1603
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
1617
1618
1619
1620
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
1638 iso_ctrl = trf->iso_ctrl;
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
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");