Lines Matching +full:autosuspend +full:- +full:delay +full:- +full:ms
4 * Copyright (C) 2013 Texas Instruments Incorporated - http://www.ti.com
22 #include <linux/delay.h>
42 * when EN2 is left low. The 'en2-rf-quirk' device tree property
65 * has sent the command to the tag, it simply returns -ECANCELED. If the
68 * sending the data upstream, it frees the rx_skb and sends -ECANCELED
76 * those cases, the timeout mechanism is used to wait 20 ms in case more
77 * data arrives. After 20 ms, it is assumed that all of the data has been
82 * been received and there isn't an error). The delay is 20 ms since delays
83 * of ~16 ms have been observed during testing.
86 * driver will wait 20 ms for the FIFO to drain past the low-watermark
87 * and generate an interrupt. The low-watermark set to 32 bytes so the
88 * interrupt should fire after 127 - 32 = 95 bytes have been sent. At
90 * to ~14.35 ms so 20 ms is used for the timeout.
92 * Type 2 write and sector select commands respond with a 4-bit ACK or NACK.
102 * ISO/IEC 15693 frames specify whether to use single or double sub-carrier
111 * Note under Table 1-1 in section 1.6 of
113 * 10 ms for TI Tag-it HF-I tags; however testing has shown that is not long
114 * enough so 20 ms is used. So the timer is set to 40 ms - 20 ms to drain
115 * up to 127 bytes in the FIFO at the lowest bit rate plus another 20 ms to
133 /* TX length is 3 nibbles long ==> 4KB - 1 bytes max */
134 #define TRF7970A_TX_MAX (4096 - 1)
464 dev_dbg(trf->dev, "cmd: 0x%x\n", cmd); in trf7970a_cmd()
466 ret = spi_write(trf->spi, &cmd, 1); in trf7970a_cmd()
468 dev_err(trf->dev, "%s - cmd: 0x%x, ret: %d\n", __func__, cmd, in trf7970a_cmd()
478 ret = spi_write_then_read(trf->spi, &addr, 1, val, 1); in trf7970a_read()
480 dev_err(trf->dev, "%s - addr: 0x%x, ret: %d\n", __func__, addr, in trf7970a_read()
483 dev_dbg(trf->dev, "read(0x%x): 0x%x\n", addr, *val); in trf7970a_read()
496 dev_dbg(trf->dev, "read_cont(0x%x, %zd)\n", addr, len); in trf7970a_read_cont()
510 ret = spi_sync(trf->spi, &m); in trf7970a_read_cont()
512 dev_err(trf->dev, "%s - addr: 0x%x, ret: %d\n", __func__, addr, in trf7970a_read_cont()
522 dev_dbg(trf->dev, "write(0x%x): 0x%x\n", reg, val); in trf7970a_write()
524 ret = spi_write(trf->spi, buf, 2); in trf7970a_write()
526 dev_err(trf->dev, "%s - write: 0x%x 0x%x, ret: %d\n", __func__, in trf7970a_write()
540 if (trf->quirks & TRF7970A_QUIRK_IRQ_STATUS_READ) { in trf7970a_read_irqstatus()
542 ret = spi_write_then_read(trf->spi, &addr, 1, buf, 2); in trf7970a_read_irqstatus()
544 ret = spi_write_then_read(trf->spi, &addr, 1, buf, 1); in trf7970a_read_irqstatus()
548 dev_err(trf->dev, "%s - irqstatus: Status read failed: %d\n", in trf7970a_read_irqstatus()
565 ret = spi_write_then_read(trf->spi, &addr, 1, buf, 2); in trf7970a_read_target_proto()
567 dev_err(trf->dev, "%s - target_proto: Read failed: %d\n", in trf7970a_read_target_proto()
598 dev_dbg(trf->dev, "%s - mode_detect: target_proto: 0x%x\n", in trf7970a_mode_detect()
600 return -EIO; in trf7970a_mode_detect()
610 dev_kfree_skb_any(trf->tx_skb); in trf7970a_send_upstream()
611 trf->tx_skb = NULL; in trf7970a_send_upstream()
613 if (trf->rx_skb && !IS_ERR(trf->rx_skb) && !trf->aborting) in trf7970a_send_upstream()
615 16, 1, trf->rx_skb->data, trf->rx_skb->len, in trf7970a_send_upstream()
618 trf->state = TRF7970A_ST_IDLE; in trf7970a_send_upstream()
620 if (trf->aborting) { in trf7970a_send_upstream()
621 dev_dbg(trf->dev, "Abort process complete\n"); in trf7970a_send_upstream()
623 if (!IS_ERR(trf->rx_skb)) { in trf7970a_send_upstream()
624 kfree_skb(trf->rx_skb); in trf7970a_send_upstream()
625 trf->rx_skb = ERR_PTR(-ECANCELED); in trf7970a_send_upstream()
628 trf->aborting = false; in trf7970a_send_upstream()
631 trf->cb(trf->ddev, trf->cb_arg, trf->rx_skb); in trf7970a_send_upstream()
633 trf->rx_skb = NULL; in trf7970a_send_upstream()
638 dev_dbg(trf->dev, "Error - state: %d, errno: %d\n", trf->state, errno); in trf7970a_send_err_upstream()
640 cancel_delayed_work(&trf->timeout_work); in trf7970a_send_err_upstream()
642 kfree_skb(trf->rx_skb); in trf7970a_send_err_upstream()
643 trf->rx_skb = ERR_PTR(errno); in trf7970a_send_err_upstream()
658 16, 1, skb->data, len, false); in trf7970a_transmit()
668 t[1].tx_buf = skb->data; in trf7970a_transmit()
672 ret = spi_sync(trf->spi, &m); in trf7970a_transmit()
674 dev_err(trf->dev, "%s - Can't send tx data: %d\n", __func__, in trf7970a_transmit()
681 if (skb->len > 0) { in trf7970a_transmit()
682 trf->state = TRF7970A_ST_WAIT_FOR_TX_FIFO; in trf7970a_transmit()
685 if (trf->issue_eof) { in trf7970a_transmit()
686 trf->state = TRF7970A_ST_WAIT_TO_ISSUE_EOF; in trf7970a_transmit()
689 trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA; in trf7970a_transmit()
691 if (!trf->timeout) in trf7970a_transmit()
694 timeout = trf->timeout; in trf7970a_transmit()
698 dev_dbg(trf->dev, "Setting timeout for %d ms, state: %d\n", timeout, in trf7970a_transmit()
699 trf->state); in trf7970a_transmit()
701 schedule_delayed_work(&trf->timeout_work, msecs_to_jiffies(timeout)); in trf7970a_transmit()
708 struct sk_buff *skb = trf->tx_skb; in trf7970a_fill_fifo()
720 dev_dbg(trf->dev, "Filling FIFO - fifo_bytes: 0x%x\n", fifo_bytes); in trf7970a_fill_fifo()
725 len = TRF7970A_FIFO_SIZE - fifo_bytes; in trf7970a_fill_fifo()
727 schedule_delayed_work(&trf->timeout_work, in trf7970a_fill_fifo()
732 len = min(skb->len, len); in trf7970a_fill_fifo()
743 struct sk_buff *skb = trf->rx_skb; in trf7970a_drain_fifo()
748 trf7970a_send_err_upstream(trf, -EIO); in trf7970a_drain_fifo()
758 dev_dbg(trf->dev, "Draining FIFO - fifo_bytes: 0x%x\n", fifo_bytes); in trf7970a_drain_fifo()
771 trf7970a_send_err_upstream(trf, -ENOMEM); in trf7970a_drain_fifo()
775 kfree_skb(trf->rx_skb); in trf7970a_drain_fifo()
776 trf->rx_skb = skb; in trf7970a_drain_fifo()
787 if ((trf->framing == NFC_DIGITAL_FRAMING_NFCA_T2T) && (skb->len == 1) && in trf7970a_drain_fifo()
788 (trf->special_fcn_reg1 == TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX)) { in trf7970a_drain_fifo()
789 skb->data[0] >>= 4; in trf7970a_drain_fifo()
792 trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA_CONT; in trf7970a_drain_fifo()
816 dev_dbg(trf->dev, "Setting timeout for %d ms\n", in trf7970a_drain_fifo()
819 schedule_delayed_work(&trf->timeout_work, in trf7970a_drain_fifo()
829 mutex_lock(&trf->lock); in trf7970a_irq()
831 if (trf->state == TRF7970A_ST_RF_OFF) { in trf7970a_irq()
832 mutex_unlock(&trf->lock); in trf7970a_irq()
838 mutex_unlock(&trf->lock); in trf7970a_irq()
842 dev_dbg(trf->dev, "IRQ - state: %d, status: 0x%x\n", trf->state, in trf7970a_irq()
846 mutex_unlock(&trf->lock); in trf7970a_irq()
850 switch (trf->state) { in trf7970a_irq()
858 if (trf->is_initiator && (status & TRF7970A_IRQ_STATUS_ERROR)) { in trf7970a_irq()
860 trf->state = TRF7970A_ST_IDLE_RX_BLOCKED; in trf7970a_irq()
867 trf->ignore_timeout = in trf7970a_irq()
868 !cancel_delayed_work(&trf->timeout_work); in trf7970a_irq()
871 trf7970a_send_err_upstream(trf, -EIO); in trf7970a_irq()
877 trf->ignore_timeout = in trf7970a_irq()
878 !cancel_delayed_work(&trf->timeout_work); in trf7970a_irq()
891 (!trf->is_initiator && in trf7970a_irq()
896 if (!trf->timeout) { in trf7970a_irq()
897 trf->ignore_timeout = in trf7970a_irq()
898 !cancel_delayed_work(&trf->timeout_work); in trf7970a_irq()
899 trf->rx_skb = ERR_PTR(0); in trf7970a_irq()
904 if (trf->is_initiator) in trf7970a_irq()
907 iso_ctrl = trf->iso_ctrl; in trf7970a_irq()
909 switch (trf->framing) { in trf7970a_irq()
911 trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC; in trf7970a_irq()
913 trf->iso_ctrl = 0xff; /* Force ISO_CTRL write */ in trf7970a_irq()
916 trf->tx_cmd = TRF7970A_CMD_TRANSMIT; in trf7970a_irq()
918 trf->iso_ctrl = 0xff; /* Force ISO_CTRL write */ in trf7970a_irq()
927 trf->special_fcn_reg1 = in trf7970a_irq()
934 if (iso_ctrl != trf->iso_ctrl) { in trf7970a_irq()
940 trf->iso_ctrl = iso_ctrl; in trf7970a_irq()
943 trf7970a_send_err_upstream(trf, -EIO); in trf7970a_irq()
948 trf7970a_send_err_upstream(trf, -EIO); in trf7970a_irq()
952 trf->ignore_timeout = in trf7970a_irq()
953 !cancel_delayed_work(&trf->timeout_work); in trf7970a_irq()
956 trf7970a_send_err_upstream(trf, -EIO); in trf7970a_irq()
961 trf->ignore_timeout = in trf7970a_irq()
962 !cancel_delayed_work(&trf->timeout_work); in trf7970a_irq()
964 ret = trf7970a_mode_detect(trf, &trf->md_rf_tech); in trf7970a_irq()
968 trf->state = TRF7970A_ST_LISTENING; in trf7970a_irq()
972 trf7970a_send_err_upstream(trf, -EIO); in trf7970a_irq()
976 dev_err(trf->dev, "%s - Driver in invalid state: %d\n", in trf7970a_irq()
977 __func__, trf->state); in trf7970a_irq()
981 mutex_unlock(&trf->lock); in trf7970a_irq()
989 dev_dbg(trf->dev, "Issuing EOF\n"); in trf7970a_issue_eof()
999 trf->state = TRF7970A_ST_WAIT_FOR_RX_DATA; in trf7970a_issue_eof()
1001 dev_dbg(trf->dev, "Setting timeout for %d ms, state: %d\n", in trf7970a_issue_eof()
1002 trf->timeout, trf->state); in trf7970a_issue_eof()
1004 schedule_delayed_work(&trf->timeout_work, in trf7970a_issue_eof()
1005 msecs_to_jiffies(trf->timeout)); in trf7970a_issue_eof()
1013 dev_dbg(trf->dev, "Timeout - state: %d, ignore_timeout: %d\n", in trf7970a_timeout_work_handler()
1014 trf->state, trf->ignore_timeout); in trf7970a_timeout_work_handler()
1016 mutex_lock(&trf->lock); in trf7970a_timeout_work_handler()
1018 if (trf->ignore_timeout) in trf7970a_timeout_work_handler()
1019 trf->ignore_timeout = false; in trf7970a_timeout_work_handler()
1020 else if (trf->state == TRF7970A_ST_WAIT_FOR_RX_DATA_CONT) in trf7970a_timeout_work_handler()
1022 else if (trf->state == TRF7970A_ST_WAIT_TO_ISSUE_EOF) in trf7970a_timeout_work_handler()
1025 trf7970a_send_err_upstream(trf, -ETIMEDOUT); in trf7970a_timeout_work_handler()
1027 mutex_unlock(&trf->lock); in trf7970a_timeout_work_handler()
1034 dev_dbg(trf->dev, "Initializing device - state: %d\n", trf->state); in trf7970a_init()
1045 trf->io_ctrl | TRF7970A_REG_IO_CTRL_VRS(0x1)); in trf7970a_init()
1055 trf->chip_status_ctrl &= ~TRF7970A_CHIP_STATUS_RF_ON; in trf7970a_init()
1058 trf->modulator_sys_clk_ctrl); in trf7970a_init()
1072 trf->special_fcn_reg1 = 0; in trf7970a_init()
1074 trf->iso_ctrl = 0xff; in trf7970a_init()
1078 dev_dbg(trf->dev, "Couldn't init device: %d\n", ret); in trf7970a_init()
1084 if ((trf->state == TRF7970A_ST_PWR_OFF) || in trf7970a_switch_rf_off()
1085 (trf->state == TRF7970A_ST_RF_OFF)) in trf7970a_switch_rf_off()
1088 dev_dbg(trf->dev, "Switching rf off\n"); in trf7970a_switch_rf_off()
1090 trf->chip_status_ctrl &= ~TRF7970A_CHIP_STATUS_RF_ON; in trf7970a_switch_rf_off()
1092 trf7970a_write(trf, TRF7970A_CHIP_STATUS_CTRL, trf->chip_status_ctrl); in trf7970a_switch_rf_off()
1094 trf->aborting = false; in trf7970a_switch_rf_off()
1095 trf->state = TRF7970A_ST_RF_OFF; in trf7970a_switch_rf_off()
1097 pm_runtime_mark_last_busy(trf->dev); in trf7970a_switch_rf_off()
1098 pm_runtime_put_autosuspend(trf->dev); in trf7970a_switch_rf_off()
1105 dev_dbg(trf->dev, "Switching rf on\n"); in trf7970a_switch_rf_on()
1107 pm_runtime_get_sync(trf->dev); in trf7970a_switch_rf_on()
1109 if (trf->state != TRF7970A_ST_RF_OFF) { /* Power on, RF off */ in trf7970a_switch_rf_on()
1110 dev_err(trf->dev, "%s - Incorrect state: %d\n", __func__, in trf7970a_switch_rf_on()
1111 trf->state); in trf7970a_switch_rf_on()
1112 return -EINVAL; in trf7970a_switch_rf_on()
1117 dev_err(trf->dev, "%s - Can't initialize: %d\n", __func__, ret); in trf7970a_switch_rf_on()
1121 trf->state = TRF7970A_ST_IDLE; in trf7970a_switch_rf_on()
1131 dev_dbg(trf->dev, "Switching RF - state: %d, on: %d\n", trf->state, on); in trf7970a_switch_rf()
1133 mutex_lock(&trf->lock); in trf7970a_switch_rf()
1136 switch (trf->state) { in trf7970a_switch_rf()
1145 dev_err(trf->dev, "%s - Invalid request: %d %d\n", in trf7970a_switch_rf()
1146 __func__, trf->state, on); in trf7970a_switch_rf()
1148 ret = -EINVAL; in trf7970a_switch_rf()
1151 switch (trf->state) { in trf7970a_switch_rf()
1156 dev_err(trf->dev, "%s - Invalid request: %d %d\n", in trf7970a_switch_rf()
1157 __func__, trf->state, on); in trf7970a_switch_rf()
1158 ret = -EINVAL; in trf7970a_switch_rf()
1168 mutex_unlock(&trf->lock); in trf7970a_switch_rf()
1176 dev_dbg(trf->dev, "rf technology: %d\n", tech); in trf7970a_in_config_rf_tech()
1180 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_14443A_106; in trf7970a_in_config_rf_tech()
1181 trf->modulator_sys_clk_ctrl = in trf7970a_in_config_rf_tech()
1182 (trf->modulator_sys_clk_ctrl & 0xf8) | in trf7970a_in_config_rf_tech()
1184 trf->guard_time = TRF7970A_GUARD_TIME_NFCA; in trf7970a_in_config_rf_tech()
1187 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_14443B_106; in trf7970a_in_config_rf_tech()
1188 trf->modulator_sys_clk_ctrl = in trf7970a_in_config_rf_tech()
1189 (trf->modulator_sys_clk_ctrl & 0xf8) | in trf7970a_in_config_rf_tech()
1191 trf->guard_time = TRF7970A_GUARD_TIME_NFCB; in trf7970a_in_config_rf_tech()
1194 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_212; in trf7970a_in_config_rf_tech()
1195 trf->modulator_sys_clk_ctrl = in trf7970a_in_config_rf_tech()
1196 (trf->modulator_sys_clk_ctrl & 0xf8) | in trf7970a_in_config_rf_tech()
1198 trf->guard_time = TRF7970A_GUARD_TIME_NFCF; in trf7970a_in_config_rf_tech()
1201 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_424; in trf7970a_in_config_rf_tech()
1202 trf->modulator_sys_clk_ctrl = in trf7970a_in_config_rf_tech()
1203 (trf->modulator_sys_clk_ctrl & 0xf8) | in trf7970a_in_config_rf_tech()
1205 trf->guard_time = TRF7970A_GUARD_TIME_NFCF; in trf7970a_in_config_rf_tech()
1208 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648; in trf7970a_in_config_rf_tech()
1209 trf->modulator_sys_clk_ctrl = in trf7970a_in_config_rf_tech()
1210 (trf->modulator_sys_clk_ctrl & 0xf8) | in trf7970a_in_config_rf_tech()
1212 trf->guard_time = TRF7970A_GUARD_TIME_15693; in trf7970a_in_config_rf_tech()
1215 dev_dbg(trf->dev, "Unsupported rf technology: %d\n", tech); in trf7970a_in_config_rf_tech()
1216 return -EINVAL; in trf7970a_in_config_rf_tech()
1219 trf->technology = tech; in trf7970a_in_config_rf_tech()
1222 * PSL sequence (indicated by 'trf->iso_ctrl == 0xff' from in trf7970a_in_config_rf_tech()
1226 if (trf->iso_ctrl == 0xff) in trf7970a_in_config_rf_tech()
1238 trf->chip_status_ctrl | in trf7970a_is_rf_field()
1254 trf->chip_status_ctrl); in trf7970a_is_rf_field()
1268 u8 iso_ctrl = trf->iso_ctrl_tech; in trf7970a_in_config_framing()
1272 dev_dbg(trf->dev, "framing: %d\n", framing); in trf7970a_in_config_framing()
1277 trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC; in trf7970a_in_config_framing()
1290 trf->tx_cmd = TRF7970A_CMD_TRANSMIT; in trf7970a_in_config_framing()
1294 trf->tx_cmd = TRF7970A_CMD_TRANSMIT; in trf7970a_in_config_framing()
1298 dev_dbg(trf->dev, "Unsupported Framing: %d\n", framing); in trf7970a_in_config_framing()
1299 return -EINVAL; in trf7970a_in_config_framing()
1302 trf->framing = framing; in trf7970a_in_config_framing()
1304 if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) { in trf7970a_in_config_framing()
1310 return -EBUSY; in trf7970a_in_config_framing()
1313 if (iso_ctrl != trf->iso_ctrl) { in trf7970a_in_config_framing()
1318 trf->iso_ctrl = iso_ctrl; in trf7970a_in_config_framing()
1321 trf->modulator_sys_clk_ctrl); in trf7970a_in_config_framing()
1326 if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) { in trf7970a_in_config_framing()
1328 trf->chip_status_ctrl | in trf7970a_in_config_framing()
1333 trf->chip_status_ctrl |= TRF7970A_CHIP_STATUS_RF_ON; in trf7970a_in_config_framing()
1335 usleep_range(trf->guard_time, trf->guard_time + 1000); in trf7970a_in_config_framing()
1347 dev_dbg(trf->dev, "Configure hw - type: %d, param: %d\n", type, param); in trf7970a_in_configure_hw()
1349 mutex_lock(&trf->lock); in trf7970a_in_configure_hw()
1351 trf->is_initiator = true; in trf7970a_in_configure_hw()
1353 if ((trf->state == TRF7970A_ST_PWR_OFF) || in trf7970a_in_configure_hw()
1354 (trf->state == TRF7970A_ST_RF_OFF)) { in trf7970a_in_configure_hw()
1368 dev_dbg(trf->dev, "Unknown type: %d\n", type); in trf7970a_in_configure_hw()
1369 ret = -EINVAL; in trf7970a_in_configure_hw()
1373 mutex_unlock(&trf->lock); in trf7970a_in_configure_hw()
1396 u8 *req = skb->data; in trf7970a_per_cmd_config()
1400 trf->issue_eof = false; in trf7970a_per_cmd_config()
1411 if ((trf->technology == NFC_DIGITAL_RF_TECH_106A) && in trf7970a_per_cmd_config()
1412 (trf->framing == NFC_DIGITAL_FRAMING_NFCA_T2T)) { in trf7970a_per_cmd_config()
1418 if (special_fcn_reg1 != trf->special_fcn_reg1) { in trf7970a_per_cmd_config()
1424 trf->special_fcn_reg1 = special_fcn_reg1; in trf7970a_per_cmd_config()
1426 } else if (trf->technology == NFC_DIGITAL_RF_TECH_ISO15693) { in trf7970a_per_cmd_config()
1427 iso_ctrl = trf->iso_ctrl & ~TRF7970A_ISO_CTRL_RFID_SPEED_MASK; in trf7970a_per_cmd_config()
1445 if (iso_ctrl != trf->iso_ctrl) { in trf7970a_per_cmd_config()
1450 trf->iso_ctrl = iso_ctrl; in trf7970a_per_cmd_config()
1453 if ((trf->framing == NFC_DIGITAL_FRAMING_ISO15693_T5T) && in trf7970a_per_cmd_config()
1456 trf->issue_eof = true; in trf7970a_per_cmd_config()
1472 dev_dbg(trf->dev, "New request - state: %d, timeout: %d ms, len: %d\n", in trf7970a_send_cmd()
1473 trf->state, timeout, skb->len); in trf7970a_send_cmd()
1475 if (skb->len > TRF7970A_TX_MAX) in trf7970a_send_cmd()
1476 return -EINVAL; in trf7970a_send_cmd()
1478 mutex_lock(&trf->lock); in trf7970a_send_cmd()
1480 if ((trf->state != TRF7970A_ST_IDLE) && in trf7970a_send_cmd()
1481 (trf->state != TRF7970A_ST_IDLE_RX_BLOCKED)) { in trf7970a_send_cmd()
1482 dev_err(trf->dev, "%s - Bogus state: %d\n", __func__, in trf7970a_send_cmd()
1483 trf->state); in trf7970a_send_cmd()
1484 ret = -EIO; in trf7970a_send_cmd()
1488 if (trf->aborting) { in trf7970a_send_cmd()
1489 dev_dbg(trf->dev, "Abort process complete\n"); in trf7970a_send_cmd()
1490 trf->aborting = false; in trf7970a_send_cmd()
1491 ret = -ECANCELED; in trf7970a_send_cmd()
1496 trf->rx_skb = nfc_alloc_recv_skb(TRF7970A_RX_SKB_ALLOC_SIZE, in trf7970a_send_cmd()
1498 if (!trf->rx_skb) { in trf7970a_send_cmd()
1499 dev_dbg(trf->dev, "Can't alloc rx_skb\n"); in trf7970a_send_cmd()
1500 ret = -ENOMEM; in trf7970a_send_cmd()
1505 if (trf->state == TRF7970A_ST_IDLE_RX_BLOCKED) { in trf7970a_send_cmd()
1510 trf->state = TRF7970A_ST_IDLE; in trf7970a_send_cmd()
1513 if (trf->is_initiator) { in trf7970a_send_cmd()
1519 trf->ddev = ddev; in trf7970a_send_cmd()
1520 trf->tx_skb = skb; in trf7970a_send_cmd()
1521 trf->cb = cb; in trf7970a_send_cmd()
1522 trf->cb_arg = arg; in trf7970a_send_cmd()
1523 trf->timeout = timeout; in trf7970a_send_cmd()
1524 trf->ignore_timeout = false; in trf7970a_send_cmd()
1526 len = skb->len; in trf7970a_send_cmd()
1536 TRF7970A_CMD_BIT_OPCODE(trf->tx_cmd); in trf7970a_send_cmd()
1539 if (trf->framing == NFC_DIGITAL_FRAMING_NFCA_SHORT) { in trf7970a_send_cmd()
1548 len = min_t(int, skb->len, TRF7970A_FIFO_SIZE); in trf7970a_send_cmd()
1557 kfree_skb(trf->rx_skb); in trf7970a_send_cmd()
1558 trf->rx_skb = NULL; in trf7970a_send_cmd()
1562 mutex_unlock(&trf->lock); in trf7970a_send_cmd()
1570 dev_dbg(trf->dev, "rf technology: %d\n", tech); in trf7970a_tg_config_rf_tech()
1574 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE | in trf7970a_tg_config_rf_tech()
1576 trf->modulator_sys_clk_ctrl = in trf7970a_tg_config_rf_tech()
1577 (trf->modulator_sys_clk_ctrl & 0xf8) | in trf7970a_tg_config_rf_tech()
1581 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE | in trf7970a_tg_config_rf_tech()
1583 trf->modulator_sys_clk_ctrl = in trf7970a_tg_config_rf_tech()
1584 (trf->modulator_sys_clk_ctrl & 0xf8) | in trf7970a_tg_config_rf_tech()
1588 trf->iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE | in trf7970a_tg_config_rf_tech()
1590 trf->modulator_sys_clk_ctrl = in trf7970a_tg_config_rf_tech()
1591 (trf->modulator_sys_clk_ctrl & 0xf8) | in trf7970a_tg_config_rf_tech()
1595 dev_dbg(trf->dev, "Unsupported rf technology: %d\n", tech); in trf7970a_tg_config_rf_tech()
1596 return -EINVAL; in trf7970a_tg_config_rf_tech()
1599 trf->technology = tech; in trf7970a_tg_config_rf_tech()
1608 if ((trf->framing == NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED) && in trf7970a_tg_config_rf_tech()
1609 (trf->iso_ctrl_tech != trf->iso_ctrl)) { in trf7970a_tg_config_rf_tech()
1611 trf->iso_ctrl_tech); in trf7970a_tg_config_rf_tech()
1613 trf->iso_ctrl = trf->iso_ctrl_tech; in trf7970a_tg_config_rf_tech()
1627 u8 iso_ctrl = trf->iso_ctrl_tech; in trf7970a_tg_config_framing()
1630 dev_dbg(trf->dev, "framing: %d\n", framing); in trf7970a_tg_config_framing()
1634 trf->tx_cmd = TRF7970A_CMD_TRANSMIT_NO_CRC; in trf7970a_tg_config_framing()
1641 iso_ctrl = trf->iso_ctrl; /* Don't write to ISO_CTRL yet */ in trf7970a_tg_config_framing()
1644 trf->tx_cmd = TRF7970A_CMD_TRANSMIT; in trf7970a_tg_config_framing()
1648 trf->tx_cmd = TRF7970A_CMD_TRANSMIT; in trf7970a_tg_config_framing()
1652 dev_dbg(trf->dev, "Unsupported Framing: %d\n", framing); in trf7970a_tg_config_framing()
1653 return -EINVAL; in trf7970a_tg_config_framing()
1656 trf->framing = framing; in trf7970a_tg_config_framing()
1658 if (iso_ctrl != trf->iso_ctrl) { in trf7970a_tg_config_framing()
1663 trf->iso_ctrl = iso_ctrl; in trf7970a_tg_config_framing()
1666 trf->modulator_sys_clk_ctrl); in trf7970a_tg_config_framing()
1671 if (!(trf->chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON)) { in trf7970a_tg_config_framing()
1673 trf->chip_status_ctrl | in trf7970a_tg_config_framing()
1678 trf->chip_status_ctrl |= TRF7970A_CHIP_STATUS_RF_ON; in trf7970a_tg_config_framing()
1690 dev_dbg(trf->dev, "Configure hw - type: %d, param: %d\n", type, param); in trf7970a_tg_configure_hw()
1692 mutex_lock(&trf->lock); in trf7970a_tg_configure_hw()
1694 trf->is_initiator = false; in trf7970a_tg_configure_hw()
1696 if ((trf->state == TRF7970A_ST_PWR_OFF) || in trf7970a_tg_configure_hw()
1697 (trf->state == TRF7970A_ST_RF_OFF)) { in trf7970a_tg_configure_hw()
1711 dev_dbg(trf->dev, "Unknown type: %d\n", type); in trf7970a_tg_configure_hw()
1712 ret = -EINVAL; in trf7970a_tg_configure_hw()
1716 mutex_unlock(&trf->lock); in trf7970a_tg_configure_hw()
1727 mutex_lock(&trf->lock); in _trf7970a_tg_listen()
1729 if ((trf->state != TRF7970A_ST_IDLE) && in _trf7970a_tg_listen()
1730 (trf->state != TRF7970A_ST_IDLE_RX_BLOCKED)) { in _trf7970a_tg_listen()
1731 dev_err(trf->dev, "%s - Bogus state: %d\n", __func__, in _trf7970a_tg_listen()
1732 trf->state); in _trf7970a_tg_listen()
1733 ret = -EIO; in _trf7970a_tg_listen()
1737 if (trf->aborting) { in _trf7970a_tg_listen()
1738 dev_dbg(trf->dev, "Abort process complete\n"); in _trf7970a_tg_listen()
1739 trf->aborting = false; in _trf7970a_tg_listen()
1740 ret = -ECANCELED; in _trf7970a_tg_listen()
1744 trf->rx_skb = nfc_alloc_recv_skb(TRF7970A_RX_SKB_ALLOC_SIZE, in _trf7970a_tg_listen()
1746 if (!trf->rx_skb) { in _trf7970a_tg_listen()
1747 dev_dbg(trf->dev, "Can't alloc rx_skb\n"); in _trf7970a_tg_listen()
1748 ret = -ENOMEM; in _trf7970a_tg_listen()
1761 trf->io_ctrl | TRF7970A_REG_IO_CTRL_VRS(0x1)); in _trf7970a_tg_listen()
1775 trf->ddev = ddev; in _trf7970a_tg_listen()
1776 trf->cb = cb; in _trf7970a_tg_listen()
1777 trf->cb_arg = arg; in _trf7970a_tg_listen()
1778 trf->timeout = timeout; in _trf7970a_tg_listen()
1779 trf->ignore_timeout = false; in _trf7970a_tg_listen()
1785 trf->state = mode_detect ? TRF7970A_ST_LISTENING_MD : in _trf7970a_tg_listen()
1788 schedule_delayed_work(&trf->timeout_work, msecs_to_jiffies(timeout)); in _trf7970a_tg_listen()
1791 mutex_unlock(&trf->lock); in _trf7970a_tg_listen()
1800 dev_dbg(trf->dev, "Listen - state: %d, timeout: %d ms\n", in trf7970a_tg_listen()
1801 trf->state, timeout); in trf7970a_tg_listen()
1813 dev_dbg(trf->dev, "Listen MD - state: %d, timeout: %d ms\n", in trf7970a_tg_listen_md()
1814 trf->state, timeout); in trf7970a_tg_listen_md()
1833 dev_dbg(trf->dev, "Get RF Tech - state: %d, rf_tech: %d\n", in trf7970a_tg_get_rf_tech()
1834 trf->state, trf->md_rf_tech); in trf7970a_tg_get_rf_tech()
1836 *rf_tech = trf->md_rf_tech; in trf7970a_tg_get_rf_tech()
1845 dev_dbg(trf->dev, "Abort process initiated\n"); in trf7970a_abort_cmd()
1847 mutex_lock(&trf->lock); in trf7970a_abort_cmd()
1849 switch (trf->state) { in trf7970a_abort_cmd()
1854 trf->aborting = true; in trf7970a_abort_cmd()
1857 trf->ignore_timeout = !cancel_delayed_work(&trf->timeout_work); in trf7970a_abort_cmd()
1858 trf7970a_send_err_upstream(trf, -ECANCELED); in trf7970a_abort_cmd()
1859 dev_dbg(trf->dev, "Abort process complete\n"); in trf7970a_abort_cmd()
1865 mutex_unlock(&trf->lock); in trf7970a_abort_cmd()
1884 dev_dbg(trf->dev, "Powering up - state: %d\n", trf->state); in trf7970a_power_up()
1886 if (trf->state != TRF7970A_ST_PWR_OFF) in trf7970a_power_up()
1889 ret = regulator_enable(trf->regulator); in trf7970a_power_up()
1891 dev_err(trf->dev, "%s - Can't enable VIN: %d\n", __func__, ret); in trf7970a_power_up()
1897 if (trf->en2_gpiod && in trf7970a_power_up()
1898 !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW)) { in trf7970a_power_up()
1899 gpiod_set_value_cansleep(trf->en2_gpiod, 1); in trf7970a_power_up()
1903 gpiod_set_value_cansleep(trf->en_gpiod, 1); in trf7970a_power_up()
1907 trf->state = TRF7970A_ST_RF_OFF; in trf7970a_power_up()
1916 dev_dbg(trf->dev, "Powering down - state: %d\n", trf->state); in trf7970a_power_down()
1918 if (trf->state == TRF7970A_ST_PWR_OFF) in trf7970a_power_down()
1921 if (trf->state != TRF7970A_ST_RF_OFF) { in trf7970a_power_down()
1922 dev_dbg(trf->dev, "Can't power down - not RF_OFF state (%d)\n", in trf7970a_power_down()
1923 trf->state); in trf7970a_power_down()
1924 return -EBUSY; in trf7970a_power_down()
1927 gpiod_set_value_cansleep(trf->en_gpiod, 0); in trf7970a_power_down()
1929 if (trf->en2_gpiod && !(trf->quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW)) in trf7970a_power_down()
1930 gpiod_set_value_cansleep(trf->en2_gpiod, 0); in trf7970a_power_down()
1932 ret = regulator_disable(trf->regulator); in trf7970a_power_down()
1934 dev_err(trf->dev, "%s - Can't disable VIN: %d\n", __func__, in trf7970a_power_down()
1937 trf->state = TRF7970A_ST_PWR_OFF; in trf7970a_power_down()
1950 pm_runtime_set_active(trf->dev); in trf7970a_startup()
1951 pm_runtime_enable(trf->dev); in trf7970a_startup()
1952 pm_runtime_mark_last_busy(trf->dev); in trf7970a_startup()
1959 switch (trf->state) { in trf7970a_shutdown()
1965 trf7970a_send_err_upstream(trf, -ECANCELED); in trf7970a_shutdown()
1975 pm_runtime_disable(trf->dev); in trf7970a_shutdown()
1976 pm_runtime_set_suspended(trf->dev); in trf7970a_shutdown()
1985 ret = of_property_read_u32(np, "autosuspend-delay", &autosuspend_delay); in trf7970a_get_autosuspend_delay()
1994 struct device_node *np = spi->dev.of_node; in trf7970a_probe()
2000 dev_err(&spi->dev, "No Device Tree entry\n"); in trf7970a_probe()
2001 return -EINVAL; in trf7970a_probe()
2004 trf = devm_kzalloc(&spi->dev, sizeof(*trf), GFP_KERNEL); in trf7970a_probe()
2006 return -ENOMEM; in trf7970a_probe()
2008 trf->state = TRF7970A_ST_PWR_OFF; in trf7970a_probe()
2009 trf->dev = &spi->dev; in trf7970a_probe()
2010 trf->spi = spi; in trf7970a_probe()
2012 spi->mode = SPI_MODE_1; in trf7970a_probe()
2013 spi->bits_per_word = 8; in trf7970a_probe()
2017 dev_err(trf->dev, "Can't set up SPI Communication\n"); in trf7970a_probe()
2021 if (of_property_read_bool(np, "irq-status-read-quirk")) in trf7970a_probe()
2022 trf->quirks |= TRF7970A_QUIRK_IRQ_STATUS_READ; in trf7970a_probe()
2024 /* There are two enable pins - only EN must be present in the DT */ in trf7970a_probe()
2025 trf->en_gpiod = devm_gpiod_get_index(trf->dev, "ti,enable", 0, in trf7970a_probe()
2027 if (IS_ERR(trf->en_gpiod)) { in trf7970a_probe()
2028 dev_err(trf->dev, "No EN GPIO property\n"); in trf7970a_probe()
2029 return PTR_ERR(trf->en_gpiod); in trf7970a_probe()
2032 trf->en2_gpiod = devm_gpiod_get_index_optional(trf->dev, "ti,enable", 1, in trf7970a_probe()
2034 if (!trf->en2_gpiod) { in trf7970a_probe()
2035 dev_info(trf->dev, "No EN2 GPIO property\n"); in trf7970a_probe()
2036 } else if (IS_ERR(trf->en2_gpiod)) { in trf7970a_probe()
2037 dev_err(trf->dev, "Error getting EN2 GPIO property: %ld\n", in trf7970a_probe()
2038 PTR_ERR(trf->en2_gpiod)); in trf7970a_probe()
2039 return PTR_ERR(trf->en2_gpiod); in trf7970a_probe()
2040 } else if (of_property_read_bool(np, "en2-rf-quirk")) { in trf7970a_probe()
2041 trf->quirks |= TRF7970A_QUIRK_EN2_MUST_STAY_LOW; in trf7970a_probe()
2044 of_property_read_u32(np, "clock-frequency", &clk_freq); in trf7970a_probe()
2047 dev_err(trf->dev, in trf7970a_probe()
2048 "clock-frequency (%u Hz) unsupported\n", clk_freq); in trf7970a_probe()
2049 return -EINVAL; in trf7970a_probe()
2053 trf->modulator_sys_clk_ctrl = TRF7970A_MODULATOR_27MHZ; in trf7970a_probe()
2054 dev_dbg(trf->dev, "trf7970a configured for 27MHz crystal\n"); in trf7970a_probe()
2056 trf->modulator_sys_clk_ctrl = 0; in trf7970a_probe()
2059 ret = devm_request_threaded_irq(trf->dev, spi->irq, NULL, in trf7970a_probe()
2064 dev_err(trf->dev, "Can't request IRQ#%d: %d\n", spi->irq, ret); in trf7970a_probe()
2068 mutex_init(&trf->lock); in trf7970a_probe()
2069 INIT_DELAYED_WORK(&trf->timeout_work, trf7970a_timeout_work_handler); in trf7970a_probe()
2071 trf->regulator = devm_regulator_get(&spi->dev, "vin"); in trf7970a_probe()
2072 if (IS_ERR(trf->regulator)) { in trf7970a_probe()
2073 ret = PTR_ERR(trf->regulator); in trf7970a_probe()
2074 dev_err(trf->dev, "Can't get VIN regulator: %d\n", ret); in trf7970a_probe()
2078 ret = regulator_enable(trf->regulator); in trf7970a_probe()
2080 dev_err(trf->dev, "Can't enable VIN: %d\n", ret); in trf7970a_probe()
2084 uvolts = regulator_get_voltage(trf->regulator); in trf7970a_probe()
2086 trf->chip_status_ctrl = TRF7970A_CHIP_STATUS_VRS5_3; in trf7970a_probe()
2088 trf->regulator = devm_regulator_get(&spi->dev, "vdd-io"); in trf7970a_probe()
2089 if (IS_ERR(trf->regulator)) { in trf7970a_probe()
2090 ret = PTR_ERR(trf->regulator); in trf7970a_probe()
2091 dev_err(trf->dev, "Can't get VDD_IO regulator: %d\n", ret); in trf7970a_probe()
2095 ret = regulator_enable(trf->regulator); in trf7970a_probe()
2097 dev_err(trf->dev, "Can't enable VDD_IO: %d\n", ret); in trf7970a_probe()
2101 if (regulator_get_voltage(trf->regulator) == 1800000) { in trf7970a_probe()
2102 trf->io_ctrl = TRF7970A_REG_IO_CTRL_IO_LOW; in trf7970a_probe()
2103 dev_dbg(trf->dev, "trf7970a config vdd_io to 1.8V\n"); in trf7970a_probe()
2106 trf->ddev = nfc_digital_allocate_device(&trf7970a_nfc_ops, in trf7970a_probe()
2111 if (!trf->ddev) { in trf7970a_probe()
2112 dev_err(trf->dev, "Can't allocate NFC digital device\n"); in trf7970a_probe()
2113 ret = -ENOMEM; in trf7970a_probe()
2117 nfc_digital_set_parent_dev(trf->ddev, trf->dev); in trf7970a_probe()
2118 nfc_digital_set_drvdata(trf->ddev, trf); in trf7970a_probe()
2123 pm_runtime_set_autosuspend_delay(trf->dev, autosuspend_delay); in trf7970a_probe()
2124 pm_runtime_use_autosuspend(trf->dev); in trf7970a_probe()
2130 ret = nfc_digital_register_device(trf->ddev); in trf7970a_probe()
2132 dev_err(trf->dev, "Can't register NFC digital device: %d\n", in trf7970a_probe()
2142 nfc_digital_free_device(trf->ddev); in trf7970a_probe()
2144 regulator_disable(trf->regulator); in trf7970a_probe()
2146 mutex_destroy(&trf->lock); in trf7970a_probe()
2154 mutex_lock(&trf->lock); in trf7970a_remove()
2158 mutex_unlock(&trf->lock); in trf7970a_remove()
2160 nfc_digital_unregister_device(trf->ddev); in trf7970a_remove()
2161 nfc_digital_free_device(trf->ddev); in trf7970a_remove()
2163 regulator_disable(trf->regulator); in trf7970a_remove()
2165 mutex_destroy(&trf->lock); in trf7970a_remove()
2178 mutex_lock(&trf->lock); in trf7970a_suspend()
2182 mutex_unlock(&trf->lock); in trf7970a_suspend()
2195 mutex_lock(&trf->lock); in trf7970a_resume()
2199 mutex_unlock(&trf->lock); in trf7970a_resume()
2214 mutex_lock(&trf->lock); in trf7970a_pm_runtime_suspend()
2218 mutex_unlock(&trf->lock); in trf7970a_pm_runtime_suspend()