@ -20,9 +20,8 @@
# include <linux/nfc.h>
# include <linux/skbuff.h>
# include <linux/delay.h>
# include <linux/gpio.h>
# include <linux/gpio/consumer .h>
# include <linux/of.h>
# include <linux/of_gpio.h>
# include <linux/spi/spi.h>
# include <linux/regulator/consumer.h>
@ -123,11 +122,10 @@
NFC_PROTO_ISO14443_B_MASK | NFC_PROTO_FELICA_MASK | \
NFC_PROTO_ISO15693_MASK | NFC_PROTO_NFC_DEP_MASK )
# define TRF7970A_AUTOSUSPEND_DELAY 30000 /* 30 seconds */
# define TRF7970A_AUTOSUSPEND_DELAY 30000 /* 30 seconds */
# define TRF7970A_13MHZ_CLOCK_FREQUENCY 13560000
# define TRF7970A_27MHZ_CLOCK_FREQUENCY 27120000
# define TRF7970A_RX_SKB_ALLOC_SIZE 256
# define TRF7970A_FIFO_SIZE 127
@ -152,7 +150,6 @@
*/
# define TRF7970A_QUIRK_IRQ_STATUS_READ BIT(0)
# define TRF7970A_QUIRK_EN2_MUST_STAY_LOW BIT(1)
# define TRF7970A_QUIRK_T5T_RMB_EXTRA_BYTE BIT(2)
/* Direct commands */
# define TRF7970A_CMD_IDLE 0x00
@ -295,7 +292,7 @@
# define TRF7970A_REG_IO_CTRL_AUTO_REG BIT(7)
/* IRQ Status Register Bits */
# define TRF7970A_IRQ_STATUS_NORESP BIT(0) /* ISO15693 only */
# define TRF7970A_IRQ_STATUS_NORESP BIT(0) /* ISO15693 only */
# define TRF7970A_IRQ_STATUS_NFC_COL_ERROR BIT(0)
# define TRF7970A_IRQ_STATUS_COL BIT(1)
# define TRF7970A_IRQ_STATUS_FRAMING_EOF_ERROR BIT(2)
@ -451,16 +448,14 @@ struct trf7970a {
u8 md_rf_tech ;
u8 tx_cmd ;
bool issue_eof ;
bool adjust_resp_len ;
int en2_gpio ;
int en_gpio ;
struct gpio_desc * en_gpiod ;
struct gpio_desc * en2_gpiod ;
struct mutex lock ;
unsigned int timeout ;
bool ignore_timeout ;
struct delayed_work timeout_work ;
} ;
static int trf7970a_cmd ( struct trf7970a * trf , u8 opcode )
{
u8 cmd = TRF7970A_CMD_BIT_CTRL | TRF7970A_CMD_BIT_OPCODE ( opcode ) ;
@ -471,7 +466,7 @@ static int trf7970a_cmd(struct trf7970a *trf, u8 opcode)
ret = spi_write ( trf - > spi , & cmd , 1 ) ;
if ( ret )
dev_err ( trf - > dev , " %s - cmd: 0x%x, ret: %d \n " , __func__ , cmd ,
ret ) ;
ret ) ;
return ret ;
}
@ -483,14 +478,15 @@ static int trf7970a_read(struct trf7970a *trf, u8 reg, u8 *val)
ret = spi_write_then_read ( trf - > spi , & addr , 1 , val , 1 ) ;
if ( ret )
dev_err ( trf - > dev , " %s - addr: 0x%x, ret: %d \n " , __func__ , addr ,
ret ) ;
ret ) ;
dev_dbg ( trf - > dev , " read(0x%x): 0x%x \n " , addr , * val ) ;
return ret ;
}
static int trf7970a_read_cont ( struct trf7970a * trf , u8 reg , u8 * buf , size_t len )
static int trf7970a_read_cont ( struct trf7970a * trf , u8 reg , u8 * buf ,
size_t len )
{
u8 addr = reg | TRF7970A_CMD_BIT_RW | TRF7970A_CMD_BIT_CONTINUOUS ;
struct spi_transfer t [ 2 ] ;
@ -514,7 +510,7 @@ static int trf7970a_read_cont(struct trf7970a *trf, u8 reg, u8 *buf, size_t len)
ret = spi_sync ( trf - > spi , & m ) ;
if ( ret )
dev_err ( trf - > dev , " %s - addr: 0x%x, ret: %d \n " , __func__ , addr ,
ret ) ;
ret ) ;
return ret ;
}
@ -528,7 +524,7 @@ static int trf7970a_write(struct trf7970a *trf, u8 reg, u8 val)
ret = spi_write ( trf - > spi , buf , 2 ) ;
if ( ret )
dev_err ( trf - > dev , " %s - write: 0x%x 0x%x, ret: %d \n " , __func__ ,
buf [ 0 ] , buf [ 1 ] , ret ) ;
buf [ 0 ] , buf [ 1 ] , ret ) ;
return ret ;
}
@ -550,7 +546,7 @@ static int trf7970a_read_irqstatus(struct trf7970a *trf, u8 *status)
if ( ret )
dev_err ( trf - > dev , " %s - irqstatus: Status read failed: %d \n " ,
__func__ , ret ) ;
__func__ , ret ) ;
else
* status = buf [ 0 ] ;
@ -564,12 +560,12 @@ static int trf7970a_read_target_proto(struct trf7970a *trf, u8 *target_proto)
u8 addr ;
addr = TRF79070A_NFC_TARGET_PROTOCOL | TRF7970A_CMD_BIT_RW |
TRF7970A_CMD_BIT_CONTINUOUS ;
TRF7970A_CMD_BIT_CONTINUOUS ;
ret = spi_write_then_read ( trf - > spi , & addr , 1 , buf , 2 ) ;
if ( ret )
dev_err ( trf - > dev , " %s - target_proto: Read failed: %d \n " ,
__func__ , ret ) ;
__func__ , ret ) ;
else
* target_proto = buf [ 0 ] ;
@ -600,7 +596,7 @@ static int trf7970a_mode_detect(struct trf7970a *trf, u8 *rf_tech)
break ;
default :
dev_dbg ( trf - > dev , " %s - mode_detect: target_proto: 0x%x \n " ,
__func__ , target_proto ) ;
__func__ , target_proto ) ;
return - EIO ;
}
@ -616,8 +612,8 @@ static void trf7970a_send_upstream(struct trf7970a *trf)
if ( trf - > rx_skb & & ! IS_ERR ( trf - > rx_skb ) & & ! trf - > aborting )
print_hex_dump_debug ( " trf7970a rx data: " , DUMP_PREFIX_NONE ,
16 , 1 , trf - > rx_skb - > data , trf - > rx_skb - > len ,
false ) ;
16 , 1 , trf - > rx_skb - > data , trf - > rx_skb - > len ,
false ) ;
trf - > state = TRF7970A_ST_IDLE ;
@ -632,13 +628,6 @@ static void trf7970a_send_upstream(struct trf7970a *trf)
trf - > aborting = false ;
}
if ( trf - > adjust_resp_len ) {
if ( trf - > rx_skb )
skb_trim ( trf - > rx_skb , trf - > rx_skb - > len - 1 ) ;
trf - > adjust_resp_len = false ;
}
trf - > cb ( trf - > ddev , trf - > cb_arg , trf - > rx_skb ) ;
trf - > rx_skb = NULL ;
@ -657,7 +646,8 @@ static void trf7970a_send_err_upstream(struct trf7970a *trf, int errno)
}
static int trf7970a_transmit ( struct trf7970a * trf , struct sk_buff * skb ,
unsigned int len , u8 * prefix , unsigned int prefix_len )
unsigned int len , u8 * prefix ,
unsigned int prefix_len )
{
struct spi_transfer t [ 2 ] ;
struct spi_message m ;
@ -665,7 +655,7 @@ static int trf7970a_transmit(struct trf7970a *trf, struct sk_buff *skb,
int ret ;
print_hex_dump_debug ( " trf7970a tx data: " , DUMP_PREFIX_NONE ,
16 , 1 , skb - > data , len , false ) ;
16 , 1 , skb - > data , len , false ) ;
spi_message_init ( & m ) ;
@ -682,7 +672,7 @@ static int trf7970a_transmit(struct trf7970a *trf, struct sk_buff *skb,
ret = spi_sync ( trf - > spi , & m ) ;
if ( ret ) {
dev_err ( trf - > dev , " %s - Can't send tx data: %d \n " , __func__ ,
ret ) ;
ret ) ;
return ret ;
}
@ -706,7 +696,7 @@ static int trf7970a_transmit(struct trf7970a *trf, struct sk_buff *skb,
}
dev_dbg ( trf - > dev , " Setting timeout for %d ms, state: %d \n " , timeout ,
trf - > state ) ;
trf - > state ) ;
schedule_delayed_work ( & trf - > timeout_work , msecs_to_jiffies ( timeout ) ) ;
@ -774,9 +764,9 @@ static void trf7970a_drain_fifo(struct trf7970a *trf, u8 status)
if ( fifo_bytes > skb_tailroom ( skb ) ) {
skb = skb_copy_expand ( skb , skb_headroom ( skb ) ,
max_t ( int , fifo_bytes ,
TRF7970A_RX_SKB_ALLOC_SIZE ) ,
GFP_KERNEL ) ;
max_t ( int , fifo_bytes ,
TRF7970A_RX_SKB_ALLOC_SIZE ) ,
GFP_KERNEL ) ;
if ( ! skb ) {
trf7970a_send_err_upstream ( trf , - ENOMEM ) ;
return ;
@ -787,7 +777,7 @@ static void trf7970a_drain_fifo(struct trf7970a *trf, u8 status)
}
ret = trf7970a_read_cont ( trf , TRF7970A_FIFO_IO_REGISTER ,
skb_put ( skb , fifo_bytes ) , fifo_bytes ) ;
skb_put ( skb , fifo_bytes ) , fifo_bytes ) ;
if ( ret ) {
trf7970a_send_err_upstream ( trf , ret ) ;
return ;
@ -795,8 +785,7 @@ static void trf7970a_drain_fifo(struct trf7970a *trf, u8 status)
/* If received Type 2 ACK/NACK, shift right 4 bits and pass up */
if ( ( trf - > framing = = NFC_DIGITAL_FRAMING_NFCA_T2T ) & & ( skb - > len = = 1 ) & &
( trf - > special_fcn_reg1 = =
TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX ) ) {
( trf - > special_fcn_reg1 = = TRF7970A_SPECIAL_FCN_REG1_4_BIT_RX ) ) {
skb - > data [ 0 ] > > = 4 ;
status = TRF7970A_IRQ_STATUS_SRX ;
} else {
@ -819,16 +808,16 @@ static void trf7970a_drain_fifo(struct trf7970a *trf, u8 status)
}
no_rx_data :
if ( status = = TRF7970A_IRQ_STATUS_SRX ) { /* Receive complete */
if ( status = = TRF7970A_IRQ_STATUS_SRX ) { /* Receive complete */
trf7970a_send_upstream ( trf ) ;
return ;
}
dev_dbg ( trf - > dev , " Setting timeout for %d ms \n " ,
TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT ) ;
TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT ) ;
schedule_delayed_work ( & trf - > timeout_work ,
msecs_to_jiffies ( TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT ) ) ;
msecs_to_jiffies ( TRF7970A_WAIT_FOR_RX_DATA_TIMEOUT ) ) ;
}
static irqreturn_t trf7970a_irq ( int irq , void * dev_id )
@ -851,7 +840,7 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
}
dev_dbg ( trf - > dev , " IRQ - state: %d, status: 0x%x \n " , trf - > state ,
status ) ;
status ) ;
if ( ! status ) {
mutex_unlock ( & trf - > lock ) ;
@ -876,7 +865,7 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
case TRF7970A_ST_WAIT_FOR_TX_FIFO :
if ( status & TRF7970A_IRQ_STATUS_TX ) {
trf - > ignore_timeout =
! cancel_delayed_work ( & trf - > timeout_work ) ;
! cancel_delayed_work ( & trf - > timeout_work ) ;
trf7970a_fill_fifo ( trf ) ;
} else {
trf7970a_send_err_upstream ( trf , - EIO ) ;
@ -886,11 +875,11 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
case TRF7970A_ST_WAIT_FOR_RX_DATA_CONT :
if ( status & TRF7970A_IRQ_STATUS_SRX ) {
trf - > ignore_timeout =
! cancel_delayed_work ( & trf - > timeout_work ) ;
! cancel_delayed_work ( & trf - > timeout_work ) ;
trf7970a_drain_fifo ( trf , status ) ;
} else if ( status & TRF7970A_IRQ_STATUS_FIFO ) {
ret = trf7970a_read ( trf , TRF7970A_FIFO_STATUS ,
& fifo_bytes ) ;
& fifo_bytes ) ;
fifo_bytes & = ~ TRF7970A_FIFO_STATUS_OVERFLOW ;
@ -899,14 +888,14 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
else if ( ! fifo_bytes )
trf7970a_cmd ( trf , TRF7970A_CMD_FIFO_RESET ) ;
} else if ( ( status = = TRF7970A_IRQ_STATUS_TX ) | |
( ! trf - > is_initiator & &
( status = = ( TRF7970A_IRQ_STATUS_TX |
TRF7970A_IRQ_STATUS_NFC_RF ) ) ) ) {
( ! trf - > is_initiator & &
( status = = ( TRF7970A_IRQ_STATUS_TX |
TRF7970A_IRQ_STATUS_NFC_RF ) ) ) ) {
trf7970a_cmd ( trf , TRF7970A_CMD_FIFO_RESET ) ;
if ( ! trf - > timeout ) {
trf - > ignore_timeout = ! cancel_delayed_work (
& trf - > timeout_work ) ;
trf - > ignore_timeout =
! cancel_delayed_work ( & trf - > timeout_work ) ;
trf - > rx_skb = ERR_PTR ( 0 ) ;
trf7970a_send_upstream ( trf ) ;
break ;
@ -930,13 +919,13 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
break ;
case NFC_DIGITAL_FRAMING_NFCA_ANTICOL_COMPLETE :
ret = trf7970a_write ( trf ,
TRF7970A_SPECIAL_FCN_REG1 ,
TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL ) ;
TRF7970A_SPECIAL_FCN_REG1 ,
TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL ) ;
if ( ret )
goto err_unlock_exit ;
trf - > special_fcn_reg1 =
TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL ;
TRF7970A_SPECIAL_FCN_REG1_14_ANTICOLL ;
break ;
default :
break ;
@ -944,7 +933,7 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
if ( iso_ctrl ! = trf - > iso_ctrl ) {
ret = trf7970a_write ( trf , TRF7970A_ISO_CTRL ,
iso_ctrl ) ;
iso_ctrl ) ;
if ( ret )
goto err_unlock_exit ;
@ -961,7 +950,7 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
case TRF7970A_ST_LISTENING :
if ( status & TRF7970A_IRQ_STATUS_SRX ) {
trf - > ignore_timeout =
! cancel_delayed_work ( & trf - > timeout_work ) ;
! cancel_delayed_work ( & trf - > timeout_work ) ;
trf7970a_drain_fifo ( trf , status ) ;
} else if ( ! ( status & TRF7970A_IRQ_STATUS_NFC_RF ) ) {
trf7970a_send_err_upstream ( trf , - EIO ) ;
@ -970,7 +959,7 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
case TRF7970A_ST_LISTENING_MD :
if ( status & TRF7970A_IRQ_STATUS_SRX ) {
trf - > ignore_timeout =
! cancel_delayed_work ( & trf - > timeout_work ) ;
! cancel_delayed_work ( & trf - > timeout_work ) ;
ret = trf7970a_mode_detect ( trf , & trf - > md_rf_tech ) ;
if ( ret ) {
@ -985,7 +974,7 @@ static irqreturn_t trf7970a_irq(int irq, void *dev_id)
break ;
default :
dev_err ( trf - > dev , " %s - Driver in invalid state: %d \n " ,
__func__ , trf - > state ) ;
__func__ , trf - > state ) ;
}
err_unlock_exit :
@ -1010,19 +999,19 @@ static void trf7970a_issue_eof(struct trf7970a *trf)
trf - > state = TRF7970A_ST_WAIT_FOR_RX_DATA ;
dev_dbg ( trf - > dev , " Setting timeout for %d ms, state: %d \n " ,
trf - > timeout , trf - > state ) ;
trf - > timeout , trf - > state ) ;
schedule_delayed_work ( & trf - > timeout_work ,
msecs_to_jiffies ( trf - > timeout ) ) ;
msecs_to_jiffies ( trf - > timeout ) ) ;
}
static void trf7970a_timeout_work_handler ( struct work_struct * work )
{
struct trf7970a * trf = container_of ( work , struct trf7970a ,
timeout_work . work ) ;
timeout_work . work ) ;
dev_dbg ( trf - > dev , " Timeout - state: %d, ignore_timeout: %d \n " ,
trf - > state , trf - > ignore_timeout ) ;
trf - > state , trf - > ignore_timeout ) ;
mutex_lock ( & trf - > lock ) ;
@ -1053,7 +1042,7 @@ static int trf7970a_init(struct trf7970a *trf)
goto err_out ;
ret = trf7970a_write ( trf , TRF7970A_REG_IO_CTRL ,
trf - > io_ctrl | TRF7970A_REG_IO_CTRL_VRS ( 0x1 ) ) ;
trf - > io_ctrl | TRF7970A_REG_IO_CTRL_VRS ( 0x1 ) ) ;
if ( ret )
goto err_out ;
@ -1066,13 +1055,13 @@ static int trf7970a_init(struct trf7970a *trf)
trf - > chip_status_ctrl & = ~ TRF7970A_CHIP_STATUS_RF_ON ;
ret = trf7970a_write ( trf , TRF7970A_MODULATOR_SYS_CLK_CTRL ,
trf - > modulator_sys_clk_ctrl ) ;
trf - > modulator_sys_clk_ctrl ) ;
if ( ret )
goto err_out ;
ret = trf7970a_write ( trf , TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS ,
TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_96 |
TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_32 ) ;
TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLH_96 |
TRF7970A_ADJUTABLE_FIFO_IRQ_LEVELS_WLL_32 ) ;
if ( ret )
goto err_out ;
@ -1093,7 +1082,7 @@ err_out:
static void trf7970a_switch_rf_off ( struct trf7970a * trf )
{
if ( ( trf - > state = = TRF7970A_ST_PWR_OFF ) | |
( trf - > state = = TRF7970A_ST_RF_OFF ) )
( trf - > state = = TRF7970A_ST_RF_OFF ) )
return ;
dev_dbg ( trf - > dev , " Switching rf off \n " ) ;
@ -1117,9 +1106,9 @@ static int trf7970a_switch_rf_on(struct trf7970a *trf)
pm_runtime_get_sync ( trf - > dev ) ;
if ( trf - > state ! = TRF7970A_ST_RF_OFF ) { /* Power on, RF off */
if ( trf - > state ! = TRF7970A_ST_RF_OFF ) { /* Power on, RF off */
dev_err ( trf - > dev , " %s - Incorrect state: %d \n " , __func__ ,
trf - > state ) ;
trf - > state ) ;
return - EINVAL ;
}
@ -1154,7 +1143,7 @@ static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
break ;
default :
dev_err ( trf - > dev , " %s - Invalid request: %d %d \n " ,
__func__ , trf - > state , on ) ;
__func__ , trf - > state , on ) ;
trf7970a_switch_rf_off ( trf ) ;
ret = - EINVAL ;
}
@ -1165,7 +1154,7 @@ static int trf7970a_switch_rf(struct nfc_digital_dev *ddev, bool on)
break ;
default :
dev_err ( trf - > dev , " %s - Invalid request: %d %d \n " ,
__func__ , trf - > state , on ) ;
__func__ , trf - > state , on ) ;
ret = - EINVAL ;
/* FALLTHROUGH */
case TRF7970A_ST_IDLE :
@ -1190,36 +1179,36 @@ static int trf7970a_in_config_rf_tech(struct trf7970a *trf, int tech)
case NFC_DIGITAL_RF_TECH_106A :
trf - > iso_ctrl_tech = TRF7970A_ISO_CTRL_14443A_106 ;
trf - > modulator_sys_clk_ctrl =
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_OOK ;
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_OOK ;
trf - > guard_time = TRF7970A_GUARD_TIME_NFCA ;
break ;
case NFC_DIGITAL_RF_TECH_106B :
trf - > iso_ctrl_tech = TRF7970A_ISO_CTRL_14443B_106 ;
trf - > modulator_sys_clk_ctrl =
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
trf - > guard_time = TRF7970A_GUARD_TIME_NFCB ;
break ;
case NFC_DIGITAL_RF_TECH_212F :
trf - > iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_212 ;
trf - > modulator_sys_clk_ctrl =
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
trf - > guard_time = TRF7970A_GUARD_TIME_NFCF ;
break ;
case NFC_DIGITAL_RF_TECH_424F :
trf - > iso_ctrl_tech = TRF7970A_ISO_CTRL_FELICA_424 ;
trf - > modulator_sys_clk_ctrl =
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
trf - > guard_time = TRF7970A_GUARD_TIME_NFCF ;
break ;
case NFC_DIGITAL_RF_TECH_ISO15693 :
trf - > iso_ctrl_tech = TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648 ;
trf - > modulator_sys_clk_ctrl =
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_OOK ;
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_OOK ;
trf - > guard_time = TRF7970A_GUARD_TIME_15693 ;
break ;
default :
@ -1246,7 +1235,8 @@ static int trf7970a_is_rf_field(struct trf7970a *trf, bool *is_rf_field)
u8 rssi ;
ret = trf7970a_write ( trf , TRF7970A_CHIP_STATUS_CTRL ,
trf - > chip_status_ctrl | TRF7970A_CHIP_STATUS_REC_ON ) ;
trf - > chip_status_ctrl |
TRF7970A_CHIP_STATUS_REC_ON ) ;
if ( ret )
return ret ;
@ -1261,7 +1251,7 @@ static int trf7970a_is_rf_field(struct trf7970a *trf, bool *is_rf_field)
return ret ;
ret = trf7970a_write ( trf , TRF7970A_CHIP_STATUS_CTRL ,
trf - > chip_status_ctrl ) ;
trf - > chip_status_ctrl ) ;
if ( ret )
return ret ;
@ -1328,15 +1318,15 @@ static int trf7970a_in_config_framing(struct trf7970a *trf, int framing)
trf - > iso_ctrl = iso_ctrl ;
ret = trf7970a_write ( trf , TRF7970A_MODULATOR_SYS_CLK_CTRL ,
trf - > modulator_sys_clk_ctrl ) ;
trf - > modulator_sys_clk_ctrl ) ;
if ( ret )
return ret ;
}
if ( ! ( trf - > chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON ) ) {
ret = trf7970a_write ( trf , TRF7970A_CHIP_STATUS_CTRL ,
trf - > chip_status_ctrl |
TRF7970A_CHIP_STATUS_RF_ON ) ;
trf - > chip_status_ctrl |
TRF7970A_CHIP_STATUS_RF_ON ) ;
if ( ret )
return ret ;
@ -1349,7 +1339,7 @@ static int trf7970a_in_config_framing(struct trf7970a *trf, int framing)
}
static int trf7970a_in_configure_hw ( struct nfc_digital_dev * ddev , int type ,
int param )
int param )
{
struct trf7970a * trf = nfc_digital_get_drvdata ( ddev ) ;
int ret ;
@ -1361,7 +1351,7 @@ static int trf7970a_in_configure_hw(struct nfc_digital_dev *ddev, int type,
trf - > is_initiator = true ;
if ( ( trf - > state = = TRF7970A_ST_PWR_OFF ) | |
( trf - > state = = TRF7970A_ST_RF_OFF ) ) {
( trf - > state = = TRF7970A_ST_RF_OFF ) ) {
ret = trf7970a_switch_rf_on ( trf ) ;
if ( ret )
goto err_unlock ;
@ -1419,7 +1409,7 @@ static int trf7970a_per_cmd_config(struct trf7970a *trf, struct sk_buff *skb)
* has to send an EOF in order to get a response .
*/
if ( ( trf - > technology = = NFC_DIGITAL_RF_TECH_106A ) & &
( trf - > framing = = NFC_DIGITAL_FRAMING_NFCA_T2T ) ) {
( trf - > framing = = NFC_DIGITAL_FRAMING_NFCA_T2T ) ) {
if ( req [ 0 ] = = NFC_T2T_CMD_READ )
special_fcn_reg1 = 0 ;
else
@ -1427,7 +1417,7 @@ static int trf7970a_per_cmd_config(struct trf7970a *trf, struct sk_buff *skb)
if ( special_fcn_reg1 ! = trf - > special_fcn_reg1 ) {
ret = trf7970a_write ( trf , TRF7970A_SPECIAL_FCN_REG1 ,
special_fcn_reg1 ) ;
special_fcn_reg1 ) ;
if ( ret )
return ret ;
@ -1447,7 +1437,7 @@ static int trf7970a_per_cmd_config(struct trf7970a *trf, struct sk_buff *skb)
iso_ctrl | = TRF7970A_ISO_CTRL_15693_SGL_1OF4_2648 ;
break ;
case ( ISO15693_REQ_FLAG_SUB_CARRIER |
ISO15693_REQ_FLAG_DATA_RATE ) :
ISO15693_REQ_FLAG_DATA_RATE ) :
iso_ctrl | = TRF7970A_ISO_CTRL_15693_DBL_1OF4_2669 ;
break ;
}
@ -1460,23 +1450,18 @@ static int trf7970a_per_cmd_config(struct trf7970a *trf, struct sk_buff *skb)
trf - > iso_ctrl = iso_ctrl ;
}
if ( trf - > framing = = NFC_DIGITAL_FRAMING_ISO15693_T5T ) {
if ( trf7970a_is_iso15693_write_or_lock ( req [ 1 ] ) & &
( req [ 0 ] & ISO15693_REQ_FLAG_OPTION ) )
trf - > issue_eof = true ;
else if ( ( trf - > quirks &
TRF7970A_QUIRK_T5T_RMB_EXTRA_BYTE ) & &
( req [ 1 ] = = ISO15693_CMD_READ_MULTIPLE_BLOCK ) )
trf - > adjust_resp_len = true ;
}
if ( ( trf - > framing = = NFC_DIGITAL_FRAMING_ISO15693_T5T ) & &
trf7970a_is_iso15693_write_or_lock ( req [ 1 ] ) & &
( req [ 0 ] & ISO15693_REQ_FLAG_OPTION ) )
trf - > issue_eof = true ;
}
return 0 ;
}
static int trf7970a_send_cmd ( struct nfc_digital_dev * ddev ,
struct sk_buff * skb , u16 timeout ,
nfc_digital_cmd_complete_t cb , void * arg )
struct sk_buff * skb , u16 timeout ,
nfc_digital_cmd_complete_t cb , void * arg )
{
struct trf7970a * trf = nfc_digital_get_drvdata ( ddev ) ;
u8 prefix [ 5 ] ;
@ -1485,7 +1470,7 @@ static int trf7970a_send_cmd(struct nfc_digital_dev *ddev,
u8 status ;
dev_dbg ( trf - > dev , " New request - state: %d, timeout: %d ms, len: %d \n " ,
trf - > state , timeout , skb - > len ) ;
trf - > state , timeout , skb - > len ) ;
if ( skb - > len > TRF7970A_TX_MAX )
return - EINVAL ;
@ -1493,9 +1478,9 @@ static int trf7970a_send_cmd(struct nfc_digital_dev *ddev,
mutex_lock ( & trf - > lock ) ;
if ( ( trf - > state ! = TRF7970A_ST_IDLE ) & &
( trf - > state ! = TRF7970A_ST_IDLE_RX_BLOCKED ) ) {
( trf - > state ! = TRF7970A_ST_IDLE_RX_BLOCKED ) ) {
dev_err ( trf - > dev , " %s - Bogus state: %d \n " , __func__ ,
trf - > state ) ;
trf - > state ) ;
ret = - EIO ;
goto out_err ;
}
@ -1509,7 +1494,7 @@ static int trf7970a_send_cmd(struct nfc_digital_dev *ddev,
if ( timeout ) {
trf - > rx_skb = nfc_alloc_recv_skb ( TRF7970A_RX_SKB_ALLOC_SIZE ,
GFP_KERNEL ) ;
GFP_KERNEL ) ;
if ( ! trf - > rx_skb ) {
dev_dbg ( trf - > dev , " Can't alloc rx_skb \n " ) ;
ret = - ENOMEM ;
@ -1546,14 +1531,14 @@ static int trf7970a_send_cmd(struct nfc_digital_dev *ddev,
* That totals 5 bytes .
*/
prefix [ 0 ] = TRF7970A_CMD_BIT_CTRL |
TRF7970A_CMD_BIT_OPCODE ( TRF7970A_CMD_FIFO_RESET ) ;
TRF7970A_CMD_BIT_OPCODE ( TRF7970A_CMD_FIFO_RESET ) ;
prefix [ 1 ] = TRF7970A_CMD_BIT_CTRL |
TRF7970A_CMD_BIT_OPCODE ( trf - > tx_cmd ) ;
TRF7970A_CMD_BIT_OPCODE ( trf - > tx_cmd ) ;
prefix [ 2 ] = TRF7970A_CMD_BIT_CONTINUOUS | TRF7970A_TX_LENGTH_BYTE1 ;
if ( trf - > framing = = NFC_DIGITAL_FRAMING_NFCA_SHORT ) {
prefix [ 3 ] = 0x00 ;
prefix [ 4 ] = 0x0f ; /* 7 bits */
prefix [ 4 ] = 0x0f ; /* 7 bits */
} else {
prefix [ 3 ] = ( len & 0xf00 ) > > 4 ;
prefix [ 3 ] | = ( ( len & 0xf0 ) > > 4 ) ;
@ -1587,25 +1572,24 @@ static int trf7970a_tg_config_rf_tech(struct trf7970a *trf, int tech)
switch ( tech ) {
case NFC_DIGITAL_RF_TECH_106A :
trf - > iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
TRF7970A_ISO_CTRL_NFC_CE |
TRF7970A_ISO_CTRL_NFC_CE_14443A ;
TRF7970A_ISO_CTRL_NFC_CE | TRF7970A_ISO_CTRL_NFC_CE_14443A ;
trf - > modulator_sys_clk_ctrl =
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_OOK ;
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_OOK ;
break ;
case NFC_DIGITAL_RF_TECH_212F :
trf - > iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
TRF7970A_ISO_CTRL_NFC_NFCF_212 ;
TRF7970A_ISO_CTRL_NFC_NFCF_212 ;
trf - > modulator_sys_clk_ctrl =
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
break ;
case NFC_DIGITAL_RF_TECH_424F :
trf - > iso_ctrl_tech = TRF7970A_ISO_CTRL_NFC_NFC_CE_MODE |
TRF7970A_ISO_CTRL_NFC_NFCF_424 ;
TRF7970A_ISO_CTRL_NFC_NFCF_424 ;
trf - > modulator_sys_clk_ctrl =
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
( trf - > modulator_sys_clk_ctrl & 0xf8 ) |
TRF7970A_MODULATOR_DEPTH_ASK10 ;
break ;
default :
dev_dbg ( trf - > dev , " Unsupported rf technology: %d \n " , tech ) ;
@ -1622,9 +1606,9 @@ static int trf7970a_tg_config_rf_tech(struct trf7970a *trf, int tech)
* here .
*/
if ( ( trf - > framing = = NFC_DIGITAL_FRAMING_NFC_DEP_ACTIVATED ) & &
( trf - > iso_ctrl_tech ! = trf - > iso_ctrl ) ) {
( trf - > iso_ctrl_tech ! = trf - > iso_ctrl ) ) {
ret = trf7970a_write ( trf , TRF7970A_ISO_CTRL ,
trf - > iso_ctrl_tech ) ;
trf - > iso_ctrl_tech ) ;
trf - > iso_ctrl = trf - > iso_ctrl_tech ;
}
@ -1679,15 +1663,15 @@ static int trf7970a_tg_config_framing(struct trf7970a *trf, int framing)
trf - > iso_ctrl = iso_ctrl ;
ret = trf7970a_write ( trf , TRF7970A_MODULATOR_SYS_CLK_CTRL ,
trf - > modulator_sys_clk_ctrl ) ;
trf - > modulator_sys_clk_ctrl ) ;
if ( ret )
return ret ;
}
if ( ! ( trf - > chip_status_ctrl & TRF7970A_CHIP_STATUS_RF_ON ) ) {
ret = trf7970a_write ( trf , TRF7970A_CHIP_STATUS_CTRL ,
trf - > chip_status_ctrl |
TRF7970A_CHIP_STATUS_RF_ON ) ;
trf - > chip_status_ctrl |
TRF7970A_CHIP_STATUS_RF_ON ) ;
if ( ret )
return ret ;
@ -1698,7 +1682,7 @@ static int trf7970a_tg_config_framing(struct trf7970a *trf, int framing)
}
static int trf7970a_tg_configure_hw ( struct nfc_digital_dev * ddev , int type ,
int param )
int param )
{
struct trf7970a * trf = nfc_digital_get_drvdata ( ddev ) ;
int ret ;
@ -1710,7 +1694,7 @@ static int trf7970a_tg_configure_hw(struct nfc_digital_dev *ddev, int type,
trf - > is_initiator = false ;
if ( ( trf - > state = = TRF7970A_ST_PWR_OFF ) | |
( trf - > state = = TRF7970A_ST_RF_OFF ) ) {
( trf - > state = = TRF7970A_ST_RF_OFF ) ) {
ret = trf7970a_switch_rf_on ( trf ) ;
if ( ret )
goto err_unlock ;
@ -1734,7 +1718,8 @@ err_unlock:
}
static int _trf7970a_tg_listen ( struct nfc_digital_dev * ddev , u16 timeout ,
nfc_digital_cmd_complete_t cb , void * arg , bool mode_detect )
nfc_digital_cmd_complete_t cb , void * arg ,
bool mode_detect )
{
struct trf7970a * trf = nfc_digital_get_drvdata ( ddev ) ;
int ret ;
@ -1742,9 +1727,9 @@ static int _trf7970a_tg_listen(struct nfc_digital_dev *ddev, u16 timeout,
mutex_lock ( & trf - > lock ) ;
if ( ( trf - > state ! = TRF7970A_ST_IDLE ) & &
( trf - > state ! = TRF7970A_ST_IDLE_RX_BLOCKED ) ) {
( trf - > state ! = TRF7970A_ST_IDLE_RX_BLOCKED ) ) {
dev_err ( trf - > dev , " %s - Bogus state: %d \n " , __func__ ,
trf - > state ) ;
trf - > state ) ;
ret = - EIO ;
goto out_err ;
}
@ -1757,7 +1742,7 @@ static int _trf7970a_tg_listen(struct nfc_digital_dev *ddev, u16 timeout,
}
trf - > rx_skb = nfc_alloc_recv_skb ( TRF7970A_RX_SKB_ALLOC_SIZE ,
GFP_KERNEL ) ;
GFP_KERNEL ) ;
if ( ! trf - > rx_skb ) {
dev_dbg ( trf - > dev , " Can't alloc rx_skb \n " ) ;
ret = - ENOMEM ;
@ -1765,25 +1750,25 @@ static int _trf7970a_tg_listen(struct nfc_digital_dev *ddev, u16 timeout,
}
ret = trf7970a_write ( trf , TRF7970A_RX_SPECIAL_SETTINGS ,
TRF7970A_RX_SPECIAL_SETTINGS_HBT |
TRF7970A_RX_SPECIAL_SETTINGS_M848 |
TRF7970A_RX_SPECIAL_SETTINGS_C424 |
TRF7970A_RX_SPECIAL_SETTINGS_C212 ) ;
TRF7970A_RX_SPECIAL_SETTINGS_HBT |
TRF7970A_RX_SPECIAL_SETTINGS_M848 |
TRF7970A_RX_SPECIAL_SETTINGS_C424 |
TRF7970A_RX_SPECIAL_SETTINGS_C212 ) ;
if ( ret )
goto out_err ;
ret = trf7970a_write ( trf , TRF7970A_REG_IO_CTRL ,
trf - > io_ctrl | TRF7970A_REG_IO_CTRL_VRS ( 0x1 ) ) ;
trf - > io_ctrl | TRF7970A_REG_IO_CTRL_VRS ( 0x1 ) ) ;
if ( ret )
goto out_err ;
ret = trf7970a_write ( trf , TRF7970A_NFC_LOW_FIELD_LEVEL ,
TRF7970A_NFC_LOW_FIELD_LEVEL_RFDET ( 0x3 ) ) ;
TRF7970A_NFC_LOW_FIELD_LEVEL_RFDET ( 0x3 ) ) ;
if ( ret )
goto out_err ;
ret = trf7970a_write ( trf , TRF7970A_NFC_TARGET_LEVEL ,
TRF7970A_NFC_TARGET_LEVEL_RFDET ( 0x7 ) ) ;
TRF7970A_NFC_TARGET_LEVEL_RFDET ( 0x7 ) ) ;
if ( ret )
goto out_err ;
@ -1808,32 +1793,33 @@ out_err:
}
static int trf7970a_tg_listen ( struct nfc_digital_dev * ddev , u16 timeout ,
nfc_digital_cmd_complete_t cb , void * arg )
nfc_digital_cmd_complete_t cb , void * arg )
{
struct trf7970a * trf = nfc_digital_get_drvdata ( ddev ) ;
dev_dbg ( trf - > dev , " Listen - state: %d, timeout: %d ms \n " ,
trf - > state , timeout ) ;
trf - > state , timeout ) ;
return _trf7970a_tg_listen ( ddev , timeout , cb , arg , false ) ;
}
static int trf7970a_tg_listen_md ( struct nfc_digital_dev * ddev ,
u16 timeout , nfc_digital_cmd_complete_t cb , void * arg )
u16 timeout , nfc_digital_cmd_complete_t cb ,
void * arg )
{
struct trf7970a * trf = nfc_digital_get_drvdata ( ddev ) ;
int ret ;
dev_dbg ( trf - > dev , " Listen MD - state: %d, timeout: %d ms \n " ,
trf - > state , timeout ) ;
trf - > state , timeout ) ;
ret = trf7970a_tg_configure_hw ( ddev , NFC_DIGITAL_CONFIG_RF_TECH ,
NFC_DIGITAL_RF_TECH_106A ) ;
NFC_DIGITAL_RF_TECH_106A ) ;
if ( ret )
return ret ;
ret = trf7970a_tg_configure_hw ( ddev , NFC_DIGITAL_CONFIG_FRAMING ,
NFC_DIGITAL_FRAMING_NFCA_NFC_DEP ) ;
NFC_DIGITAL_FRAMING_NFCA_NFC_DEP ) ;
if ( ret )
return ret ;
@ -1845,7 +1831,7 @@ static int trf7970a_tg_get_rf_tech(struct nfc_digital_dev *ddev, u8 *rf_tech)
struct trf7970a * trf = nfc_digital_get_drvdata ( ddev ) ;
dev_dbg ( trf - > dev , " Get RF Tech - state: %d, rf_tech: %d \n " ,
trf - > state , trf - > md_rf_tech ) ;
trf - > state , trf - > md_rf_tech ) ;
* rf_tech = trf - > md_rf_tech ;
@ -1908,14 +1894,13 @@ static int trf7970a_power_up(struct trf7970a *trf)
usleep_range ( 5000 , 6000 ) ;
if ( ! ( trf - > quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW ) ) {
if ( gpio_is_valid ( trf - > en2_gpio ) ) {
gpio_set_value ( trf - > en2_gpio , 1 ) ;
usleep_range ( 1000 , 2000 ) ;
}
if ( trf - > en2_gpiod & &
! ( trf - > quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW ) ) {
gpiod_set_value_cansleep ( trf - > en2_gpiod , 1 ) ;
usleep_range ( 1000 , 2000 ) ;
}
gpio_set_value ( trf - > en_gpio , 1 ) ;
gpiod _set_value_cansleep ( trf - > en_gpiod , 1 ) ;
usleep_range ( 20000 , 21000 ) ;
@ -1935,18 +1920,19 @@ static int trf7970a_power_down(struct trf7970a *trf)
if ( trf - > state ! = TRF7970A_ST_RF_OFF ) {
dev_dbg ( trf - > dev , " Can't power down - not RF_OFF state (%d) \n " ,
trf - > state ) ;
trf - > state ) ;
return - EBUSY ;
}
gpio_set_value ( trf - > en_gpio , 0 ) ;
if ( gpio_is_valid ( trf - > en2_gpio ) )
gpio_set_value ( trf - > en2_gpio , 0 ) ;
gpiod_set_value_cansleep ( trf - > en_gpiod , 0 ) ;
if ( trf - > en2_gpiod & & ! ( trf - > quirks & TRF7970A_QUIRK_EN2_MUST_STAY_LOW ) )
gpiod_set_value_cansleep ( trf - > en2_gpiod , 0 ) ;
ret = regulator_disable ( trf - > regulator ) ;
if ( ret )
dev_err ( trf - > dev , " %s - Can't disable VIN: %d \n " , __func__ ,
ret ) ;
ret ) ;
trf - > state = TRF7970A_ST_PWR_OFF ;
@ -2003,12 +1989,6 @@ static int trf7970a_get_autosuspend_delay(struct device_node *np)
return autosuspend_delay ;
}
static int trf7970a_get_vin_voltage_override ( struct device_node * np ,
u32 * vin_uvolts )
{
return of_property_read_u32 ( np , " vin-voltage-override " , vin_uvolts ) ;
}
static int trf7970a_probe ( struct spi_device * spi )
{
struct device_node * np = spi - > dev . of_node ;
@ -2038,53 +2018,48 @@ static int trf7970a_probe(struct spi_device *spi)
return ret ;
}
if ( of_property_read_bool ( np , " t5t-rmb-extra-byte-quirk " ) )
trf - > quirks | = TRF7970A_QUIRK_T5T_RMB_EXTRA_BYTE ;
if ( of_property_read_bool ( np , " irq-status-read-quirk " ) )
trf - > quirks | = TRF7970A_QUIRK_IRQ_STATUS_READ ;
/* There are two enable pins - both must be present */
trf - > en_gpio = of_get_named_gpio ( np , " ti,enable-gpios " , 0 ) ;
if ( ! gpio_is_valid ( trf - > en_gpio ) ) {
/* There are two enable pins - only EN must be present in the DT */
trf - > en_gpiod = devm_gpiod_get_index ( trf - > dev , " ti,enable " , 0 ,
GPIOD_OUT_LOW ) ;
if ( IS_ERR ( trf - > en_gpiod ) ) {
dev_err ( trf - > dev , " No EN GPIO property \n " ) ;
return trf - > en_gpio ;
return PTR_ERR ( trf - > en_gpiod ) ;
}
ret = devm_gpio_request_one ( trf - > dev , trf - > en_gpio ,
GPIOF_DIR_OUT | GPIOF_INIT_LOW , " trf7970a EN " ) ;
if ( ret ) {
dev_err ( trf - > dev , " Can't request EN GPIO: %d \n " , ret ) ;
return ret ;
}
trf - > en2_gpio = of_get_named_gpio ( np , " ti,enable-gpios " , 1 ) ;
if ( ! gpio_is_valid ( trf - > en2_gpio ) ) {
trf - > en2_gpiod = devm_gpiod_get_index_optional ( trf - > dev , " ti,enable " , 1 ,
GPIOD_OUT_LOW ) ;
if ( ! trf - > en2_gpiod ) {
dev_info ( trf - > dev , " No EN2 GPIO property \n " ) ;
} else {
ret = devm_gpio_request_one ( trf - > dev , trf - > en2_gpio ,
GPIOF_DIR_OUT | GPIOF_INIT_LOW , " trf7970a EN2 " ) ;
if ( ret ) {
dev_err ( trf - > dev , " Can't request EN2 GPIO: %d \n " , ret ) ;
return ret ;
}
} else if ( IS_ERR ( trf - > en2_gpiod ) ) {
dev_err ( trf - > dev , " Error getting EN2 GPIO property: %ld \n " ,
PTR_ERR ( trf - > en2_gpiod ) ) ;
return PTR_ERR ( trf - > en2_gpiod ) ;
} else if ( of_property_read_bool ( np , " en2-rf-quirk " ) ) {
trf - > quirks | = TRF7970A_QUIRK_EN2_MUST_STAY_LOW ;
}
of_property_read_u32 ( np , " clock-frequency " , & clk_freq ) ;
if ( ( clk_freq ! = TRF7970A_27MHZ_CLOCK_FREQUENCY ) | |
( clk_freq ! = TRF7970A_13MHZ_CLOCK_FREQUENCY ) ) {
if ( ( clk_freq ! = TRF7970A_27MHZ_CLOCK_FREQUENCY ) & &
( clk_freq ! = TRF7970A_13MHZ_CLOCK_FREQUENCY ) ) {
dev_err ( trf - > dev ,
" clock-frequency (%u Hz) unsupported \n " ,
clk_freq ) ;
" clock-frequency (%u Hz) unsupported \n " , clk_freq ) ;
return - EINVAL ;
}
if ( of_property_read_bool ( np , " en2-rf-quirk " ) )
trf - > quirks | = TRF7970A_QUIRK_EN2_MUST_STAY_LOW ;
if ( clk_freq = = TRF7970A_27MHZ_CLOCK_FREQUENCY ) {
trf - > modulator_sys_clk_ctrl = TRF7970A_MODULATOR_27MHZ ;
dev_dbg ( trf - > dev , " trf7970a configured for 27MHz crystal \n " ) ;
} else {
trf - > modulator_sys_clk_ctrl = 0 ;
}
ret = devm_request_threaded_irq ( trf - > dev , spi - > irq , NULL ,
trf7970a_irq , IRQF_TRIGGER_RISING | IRQF_ONESHOT ,
" trf7970a " , trf ) ;
trf7970a_irq ,
IRQF_TRIGGER_RISING | IRQF_ONESHOT ,
" trf7970a " , trf ) ;
if ( ret ) {
dev_err ( trf - > dev , " Can't request IRQ#%d: %d \n " , spi - > irq , ret ) ;
return ret ;
@ -2106,10 +2081,7 @@ static int trf7970a_probe(struct spi_device *spi)
goto err_destroy_lock ;
}
ret = trf7970a_get_vin_voltage_override ( np , & uvolts ) ;
if ( ret )
uvolts = regulator_get_voltage ( trf - > regulator ) ;
uvolts = regulator_get_voltage ( trf - > regulator ) ;
if ( uvolts > 4000000 )
trf - > chip_status_ctrl = TRF7970A_CHIP_STATUS_VRS5_3 ;
@ -2132,9 +2104,10 @@ static int trf7970a_probe(struct spi_device *spi)
}
trf - > ddev = nfc_digital_allocate_device ( & trf7970a_nfc_ops ,
TRF7970A_SUPPORTED_PROTOCOLS ,
NFC_DIGITAL_DRV_CAPS_IN_CRC |
NFC_DIGITAL_DRV_CAPS_TG_CRC , 0 , 0 ) ;
TRF7970A_SUPPORTED_PROTOCOLS ,
NFC_DIGITAL_DRV_CAPS_IN_CRC |
NFC_DIGITAL_DRV_CAPS_TG_CRC , 0 ,
0 ) ;
if ( ! trf - > ddev ) {
dev_err ( trf - > dev , " Can't allocate NFC digital device \n " ) ;
ret = - ENOMEM ;
@ -2157,7 +2130,7 @@ static int trf7970a_probe(struct spi_device *spi)
ret = nfc_digital_register_device ( trf - > ddev ) ;
if ( ret ) {
dev_err ( trf - > dev , " Can't register NFC digital device: %d \n " ,
ret ) ;
ret ) ;
goto err_shutdown ;
}
@ -2266,29 +2239,31 @@ static int trf7970a_pm_runtime_resume(struct device *dev)
static const struct dev_pm_ops trf7970a_pm_ops = {
SET_SYSTEM_SLEEP_PM_OPS ( trf7970a_suspend , trf7970a_resume )
SET_RUNTIME_PM_OPS ( trf7970a_pm_runtime_suspend ,
trf7970a_pm_runtime_resume , NULL )
trf7970a_pm_runtime_resume , NULL )
} ;
static const struct of_device_id trf7970a_of_match [ ] = {
{ . compatible = " ti,trf7970a " , } ,
{ /* sentinel */ } ,
{ . compatible = " ti,trf7970a " , } ,
{ } ,
} ;
MODULE_DEVICE_TABLE ( of , trf7970a_of_match ) ;
static const struct spi_device_id trf7970a_id_table [ ] = {
{ " trf7970a " , 0 } ,
{ }
{ " trf7970a " , 0 } ,
{ }
} ;
MODULE_DEVICE_TABLE ( spi , trf7970a_id_table ) ;
static struct spi_driver trf7970a_spi_driver = {
. probe = trf7970a_probe ,
. remove = trf7970a_remove ,
. id_table = trf7970a_id_table ,
. driver = {
. name = " trf7970a " ,
. of_match_table = of_match_ptr ( trf7970a_of_match ) ,
. pm = & trf7970a_pm_ops ,
. driver = {
. name = " trf7970a " ,
. of_match_table = of_match_ptr ( trf7970a_of_match ) ,
. pm = & trf7970a_pm_ops ,
} ,
} ;