1*e5835488SYasunari Takiguchi /* SPDX-License-Identifier: GPL-2.0 */ 2*e5835488SYasunari Takiguchi /* 3*e5835488SYasunari Takiguchi * cxd2880_tnrdmd.h 4*e5835488SYasunari Takiguchi * Sony CXD2880 DVB-T2/T tuner + demodulator driver 5*e5835488SYasunari Takiguchi * common control interface 6*e5835488SYasunari Takiguchi * 7*e5835488SYasunari Takiguchi * Copyright (C) 2016, 2017, 2018 Sony Semiconductor Solutions Corporation 8*e5835488SYasunari Takiguchi */ 9*e5835488SYasunari Takiguchi 10*e5835488SYasunari Takiguchi #ifndef CXD2880_TNRDMD_H 11*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_H 12*e5835488SYasunari Takiguchi 13*e5835488SYasunari Takiguchi #include <linux/atomic.h> 14*e5835488SYasunari Takiguchi 15*e5835488SYasunari Takiguchi #include "cxd2880_common.h" 16*e5835488SYasunari Takiguchi #include "cxd2880_io.h" 17*e5835488SYasunari Takiguchi #include "cxd2880_dtv.h" 18*e5835488SYasunari Takiguchi #include "cxd2880_dvbt.h" 19*e5835488SYasunari Takiguchi #include "cxd2880_dvbt2.h" 20*e5835488SYasunari Takiguchi 21*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_MAX_CFG_MEM_COUNT 100 22*e5835488SYasunari Takiguchi 23*e5835488SYasunari Takiguchi #define slvt_unfreeze_reg(tnr_dmd) ((void)((tnr_dmd)->io->write_reg\ 24*e5835488SYasunari Takiguchi ((tnr_dmd)->io, CXD2880_IO_TGT_DMD, 0x01, 0x00))) 25*e5835488SYasunari Takiguchi 26*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_UNDERFLOW 0x0001 27*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_OVERFLOW 0x0002 28*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_ALMOST_EMPTY 0x0004 29*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_ALMOST_FULL 0x0008 30*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_RRDY 0x0010 31*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_ILLEGAL_COMMAND 0x0020 32*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_ILLEGAL_ACCESS 0x0040 33*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_CPU_ERROR 0x0100 34*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_LOCK 0x0200 35*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_INV_LOCK 0x0400 36*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_NOOFDM 0x0800 37*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_EWS 0x1000 38*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_EEW 0x2000 39*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_TYPE_FEC_FAIL 0x4000 40*e5835488SYasunari Takiguchi 41*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_L1POST_OK 0x01 42*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_DMD_LOCK 0x02 43*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_TS_LOCK 0x04 44*e5835488SYasunari Takiguchi 45*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_chip_id { 46*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CHIP_ID_UNKNOWN = 0x00, 47*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_0X = 0x62, 48*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_11 = 0x6a 49*e5835488SYasunari Takiguchi }; 50*e5835488SYasunari Takiguchi 51*e5835488SYasunari Takiguchi #define CXD2880_TNRDMD_CHIP_ID_VALID(chip_id) \ 52*e5835488SYasunari Takiguchi (((chip_id) == CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_0X) || \ 53*e5835488SYasunari Takiguchi ((chip_id) == CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_11)) 54*e5835488SYasunari Takiguchi 55*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_state { 56*e5835488SYasunari Takiguchi CXD2880_TNRDMD_STATE_UNKNOWN, 57*e5835488SYasunari Takiguchi CXD2880_TNRDMD_STATE_SLEEP, 58*e5835488SYasunari Takiguchi CXD2880_TNRDMD_STATE_ACTIVE, 59*e5835488SYasunari Takiguchi CXD2880_TNRDMD_STATE_INVALID 60*e5835488SYasunari Takiguchi }; 61*e5835488SYasunari Takiguchi 62*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_divermode { 63*e5835488SYasunari Takiguchi CXD2880_TNRDMD_DIVERMODE_SINGLE, 64*e5835488SYasunari Takiguchi CXD2880_TNRDMD_DIVERMODE_MAIN, 65*e5835488SYasunari Takiguchi CXD2880_TNRDMD_DIVERMODE_SUB 66*e5835488SYasunari Takiguchi }; 67*e5835488SYasunari Takiguchi 68*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_clockmode { 69*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CLOCKMODE_UNKNOWN, 70*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CLOCKMODE_A, 71*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CLOCKMODE_B, 72*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CLOCKMODE_C 73*e5835488SYasunari Takiguchi }; 74*e5835488SYasunari Takiguchi 75*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_tsout_if { 76*e5835488SYasunari Takiguchi CXD2880_TNRDMD_TSOUT_IF_TS, 77*e5835488SYasunari Takiguchi CXD2880_TNRDMD_TSOUT_IF_SPI, 78*e5835488SYasunari Takiguchi CXD2880_TNRDMD_TSOUT_IF_SDIO 79*e5835488SYasunari Takiguchi }; 80*e5835488SYasunari Takiguchi 81*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_xtal_share { 82*e5835488SYasunari Takiguchi CXD2880_TNRDMD_XTAL_SHARE_NONE, 83*e5835488SYasunari Takiguchi CXD2880_TNRDMD_XTAL_SHARE_EXTREF, 84*e5835488SYasunari Takiguchi CXD2880_TNRDMD_XTAL_SHARE_MASTER, 85*e5835488SYasunari Takiguchi CXD2880_TNRDMD_XTAL_SHARE_SLAVE 86*e5835488SYasunari Takiguchi }; 87*e5835488SYasunari Takiguchi 88*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_spectrum_sense { 89*e5835488SYasunari Takiguchi CXD2880_TNRDMD_SPECTRUM_NORMAL, 90*e5835488SYasunari Takiguchi CXD2880_TNRDMD_SPECTRUM_INV 91*e5835488SYasunari Takiguchi }; 92*e5835488SYasunari Takiguchi 93*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_cfg_id { 94*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_OUTPUT_SEL_MSB, 95*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSVALID_ACTIVE_HI, 96*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSSYNC_ACTIVE_HI, 97*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSERR_ACTIVE_HI, 98*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_LATCH_ON_POSEDGE, 99*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSCLK_CONT, 100*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSCLK_MASK, 101*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSVALID_MASK, 102*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSERR_MASK, 103*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSERR_VALID_DIS, 104*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSPIN_CURRENT, 105*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSPIN_PULLUP_MANUAL, 106*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSPIN_PULLUP, 107*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSCLK_FREQ, 108*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TSBYTECLK_MANUAL, 109*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TS_PACKET_GAP, 110*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TS_BACKWARDS_COMPATIBLE, 111*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_PWM_VALUE, 112*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_INTERRUPT, 113*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_INTERRUPT_LOCK_SEL, 114*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_INTERRUPT_INV_LOCK_SEL, 115*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TS_BUF_ALMOST_EMPTY_THRS, 116*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TS_BUF_ALMOST_FULL_THRS, 117*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_TS_BUF_RRDY_THRS, 118*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_FIXED_CLOCKMODE, 119*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_CABLE_INPUT, 120*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_DVBT2_FEF_INTERMITTENT_BASE, 121*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_DVBT2_FEF_INTERMITTENT_LITE, 122*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_BLINDTUNE_DVBT2_FIRST, 123*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_DVBT_BERN_PERIOD, 124*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_DVBT_VBER_PERIOD, 125*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_DVBT_PER_MES, 126*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_DVBT2_BBER_MES, 127*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_DVBT2_LBER_MES, 128*e5835488SYasunari Takiguchi CXD2880_TNRDMD_CFG_DVBT2_PER_MES, 129*e5835488SYasunari Takiguchi }; 130*e5835488SYasunari Takiguchi 131*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_lock_result { 132*e5835488SYasunari Takiguchi CXD2880_TNRDMD_LOCK_RESULT_NOTDETECT, 133*e5835488SYasunari Takiguchi CXD2880_TNRDMD_LOCK_RESULT_LOCKED, 134*e5835488SYasunari Takiguchi CXD2880_TNRDMD_LOCK_RESULT_UNLOCKED 135*e5835488SYasunari Takiguchi }; 136*e5835488SYasunari Takiguchi 137*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_gpio_mode { 138*e5835488SYasunari Takiguchi CXD2880_TNRDMD_GPIO_MODE_OUTPUT = 0x00, 139*e5835488SYasunari Takiguchi CXD2880_TNRDMD_GPIO_MODE_INPUT = 0x01, 140*e5835488SYasunari Takiguchi CXD2880_TNRDMD_GPIO_MODE_INT = 0x02, 141*e5835488SYasunari Takiguchi CXD2880_TNRDMD_GPIO_MODE_FEC_FAIL = 0x03, 142*e5835488SYasunari Takiguchi CXD2880_TNRDMD_GPIO_MODE_PWM = 0x04, 143*e5835488SYasunari Takiguchi CXD2880_TNRDMD_GPIO_MODE_EWS = 0x05, 144*e5835488SYasunari Takiguchi CXD2880_TNRDMD_GPIO_MODE_EEW = 0x06 145*e5835488SYasunari Takiguchi }; 146*e5835488SYasunari Takiguchi 147*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_serial_ts_clk { 148*e5835488SYasunari Takiguchi CXD2880_TNRDMD_SERIAL_TS_CLK_FULL, 149*e5835488SYasunari Takiguchi CXD2880_TNRDMD_SERIAL_TS_CLK_HALF 150*e5835488SYasunari Takiguchi }; 151*e5835488SYasunari Takiguchi 152*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_cfg_mem { 153*e5835488SYasunari Takiguchi enum cxd2880_io_tgt tgt; 154*e5835488SYasunari Takiguchi u8 bank; 155*e5835488SYasunari Takiguchi u8 address; 156*e5835488SYasunari Takiguchi u8 value; 157*e5835488SYasunari Takiguchi u8 bit_mask; 158*e5835488SYasunari Takiguchi }; 159*e5835488SYasunari Takiguchi 160*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_pid_cfg { 161*e5835488SYasunari Takiguchi u8 is_en; 162*e5835488SYasunari Takiguchi u16 pid; 163*e5835488SYasunari Takiguchi }; 164*e5835488SYasunari Takiguchi 165*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_pid_ftr_cfg { 166*e5835488SYasunari Takiguchi u8 is_negative; 167*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_pid_cfg pid_cfg[32]; 168*e5835488SYasunari Takiguchi }; 169*e5835488SYasunari Takiguchi 170*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_lna_thrs { 171*e5835488SYasunari Takiguchi u8 off_on; 172*e5835488SYasunari Takiguchi u8 on_off; 173*e5835488SYasunari Takiguchi }; 174*e5835488SYasunari Takiguchi 175*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_lna_thrs_tbl_air { 176*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_lna_thrs thrs[24]; 177*e5835488SYasunari Takiguchi }; 178*e5835488SYasunari Takiguchi 179*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_lna_thrs_tbl_cable { 180*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_lna_thrs thrs[32]; 181*e5835488SYasunari Takiguchi }; 182*e5835488SYasunari Takiguchi 183*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_create_param { 184*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_tsout_if ts_output_if; 185*e5835488SYasunari Takiguchi u8 en_internal_ldo; 186*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_xtal_share xtal_share_type; 187*e5835488SYasunari Takiguchi u8 xosc_cap; 188*e5835488SYasunari Takiguchi u8 xosc_i; 189*e5835488SYasunari Takiguchi u8 is_cxd2881gg; 190*e5835488SYasunari Takiguchi u8 stationary_use; 191*e5835488SYasunari Takiguchi }; 192*e5835488SYasunari Takiguchi 193*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_diver_create_param { 194*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_tsout_if ts_output_if; 195*e5835488SYasunari Takiguchi u8 en_internal_ldo; 196*e5835488SYasunari Takiguchi u8 xosc_cap_main; 197*e5835488SYasunari Takiguchi u8 xosc_i_main; 198*e5835488SYasunari Takiguchi u8 xosc_i_sub; 199*e5835488SYasunari Takiguchi u8 is_cxd2881gg; 200*e5835488SYasunari Takiguchi u8 stationary_use; 201*e5835488SYasunari Takiguchi }; 202*e5835488SYasunari Takiguchi 203*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd { 204*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd *diver_sub; 205*e5835488SYasunari Takiguchi struct cxd2880_io *io; 206*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_create_param create_param; 207*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_divermode diver_mode; 208*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_clockmode fixed_clk_mode; 209*e5835488SYasunari Takiguchi u8 is_cable_input; 210*e5835488SYasunari Takiguchi u8 en_fef_intmtnt_base; 211*e5835488SYasunari Takiguchi u8 en_fef_intmtnt_lite; 212*e5835488SYasunari Takiguchi u8 blind_tune_dvbt2_first; 213*e5835488SYasunari Takiguchi int (*rf_lvl_cmpstn)(struct cxd2880_tnrdmd *tnr_dmd, 214*e5835488SYasunari Takiguchi int *rf_lvl_db); 215*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_lna_thrs_tbl_air *lna_thrs_tbl_air; 216*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_lna_thrs_tbl_cable *lna_thrs_tbl_cable; 217*e5835488SYasunari Takiguchi u8 srl_ts_clk_mod_cnts; 218*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_serial_ts_clk srl_ts_clk_frq; 219*e5835488SYasunari Takiguchi u8 ts_byte_clk_manual_setting; 220*e5835488SYasunari Takiguchi u8 is_ts_backwards_compatible_mode; 221*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_cfg_mem cfg_mem[CXD2880_TNRDMD_MAX_CFG_MEM_COUNT]; 222*e5835488SYasunari Takiguchi u8 cfg_mem_last_entry; 223*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_pid_ftr_cfg pid_ftr_cfg; 224*e5835488SYasunari Takiguchi u8 pid_ftr_cfg_en; 225*e5835488SYasunari Takiguchi void *user; 226*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_chip_id chip_id; 227*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_state state; 228*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_clockmode clk_mode; 229*e5835488SYasunari Takiguchi u32 frequency_khz; 230*e5835488SYasunari Takiguchi enum cxd2880_dtv_sys sys; 231*e5835488SYasunari Takiguchi enum cxd2880_dtv_bandwidth bandwidth; 232*e5835488SYasunari Takiguchi u8 scan_mode; 233*e5835488SYasunari Takiguchi atomic_t cancel; 234*e5835488SYasunari Takiguchi }; 235*e5835488SYasunari Takiguchi 236*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_create(struct cxd2880_tnrdmd *tnr_dmd, 237*e5835488SYasunari Takiguchi struct cxd2880_io *io, 238*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_create_param 239*e5835488SYasunari Takiguchi *create_param); 240*e5835488SYasunari Takiguchi 241*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_diver_create(struct cxd2880_tnrdmd 242*e5835488SYasunari Takiguchi *tnr_dmd_main, 243*e5835488SYasunari Takiguchi struct cxd2880_io *io_main, 244*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd *tnr_dmd_sub, 245*e5835488SYasunari Takiguchi struct cxd2880_io *io_sub, 246*e5835488SYasunari Takiguchi struct 247*e5835488SYasunari Takiguchi cxd2880_tnrdmd_diver_create_param 248*e5835488SYasunari Takiguchi *create_param); 249*e5835488SYasunari Takiguchi 250*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_init1(struct cxd2880_tnrdmd *tnr_dmd); 251*e5835488SYasunari Takiguchi 252*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_init2(struct cxd2880_tnrdmd *tnr_dmd); 253*e5835488SYasunari Takiguchi 254*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_check_internal_cpu_status(struct cxd2880_tnrdmd 255*e5835488SYasunari Takiguchi *tnr_dmd, 256*e5835488SYasunari Takiguchi u8 *task_completed); 257*e5835488SYasunari Takiguchi 258*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_common_tune_setting1(struct cxd2880_tnrdmd 259*e5835488SYasunari Takiguchi *tnr_dmd, 260*e5835488SYasunari Takiguchi enum cxd2880_dtv_sys sys, 261*e5835488SYasunari Takiguchi u32 frequency_khz, 262*e5835488SYasunari Takiguchi enum cxd2880_dtv_bandwidth 263*e5835488SYasunari Takiguchi bandwidth, u8 one_seg_opt, 264*e5835488SYasunari Takiguchi u8 one_seg_opt_shft_dir); 265*e5835488SYasunari Takiguchi 266*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_common_tune_setting2(struct cxd2880_tnrdmd 267*e5835488SYasunari Takiguchi *tnr_dmd, 268*e5835488SYasunari Takiguchi enum cxd2880_dtv_sys sys, 269*e5835488SYasunari Takiguchi u8 en_fef_intmtnt_ctrl); 270*e5835488SYasunari Takiguchi 271*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_sleep(struct cxd2880_tnrdmd *tnr_dmd); 272*e5835488SYasunari Takiguchi 273*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_cfg(struct cxd2880_tnrdmd *tnr_dmd, 274*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_cfg_id id, 275*e5835488SYasunari Takiguchi int value); 276*e5835488SYasunari Takiguchi 277*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_gpio_set_cfg(struct cxd2880_tnrdmd *tnr_dmd, 278*e5835488SYasunari Takiguchi u8 id, 279*e5835488SYasunari Takiguchi u8 en, 280*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_gpio_mode mode, 281*e5835488SYasunari Takiguchi u8 open_drain, u8 invert); 282*e5835488SYasunari Takiguchi 283*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_gpio_set_cfg_sub(struct cxd2880_tnrdmd *tnr_dmd, 284*e5835488SYasunari Takiguchi u8 id, 285*e5835488SYasunari Takiguchi u8 en, 286*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_gpio_mode 287*e5835488SYasunari Takiguchi mode, u8 open_drain, 288*e5835488SYasunari Takiguchi u8 invert); 289*e5835488SYasunari Takiguchi 290*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_gpio_read(struct cxd2880_tnrdmd *tnr_dmd, 291*e5835488SYasunari Takiguchi u8 id, u8 *value); 292*e5835488SYasunari Takiguchi 293*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_gpio_read_sub(struct cxd2880_tnrdmd *tnr_dmd, 294*e5835488SYasunari Takiguchi u8 id, u8 *value); 295*e5835488SYasunari Takiguchi 296*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_gpio_write(struct cxd2880_tnrdmd *tnr_dmd, 297*e5835488SYasunari Takiguchi u8 id, u8 value); 298*e5835488SYasunari Takiguchi 299*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_gpio_write_sub(struct cxd2880_tnrdmd *tnr_dmd, 300*e5835488SYasunari Takiguchi u8 id, u8 value); 301*e5835488SYasunari Takiguchi 302*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_interrupt_read(struct cxd2880_tnrdmd *tnr_dmd, 303*e5835488SYasunari Takiguchi u16 *value); 304*e5835488SYasunari Takiguchi 305*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_interrupt_clear(struct cxd2880_tnrdmd *tnr_dmd, 306*e5835488SYasunari Takiguchi u16 value); 307*e5835488SYasunari Takiguchi 308*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_ts_buf_clear(struct cxd2880_tnrdmd *tnr_dmd, 309*e5835488SYasunari Takiguchi u8 clear_overflow_flag, 310*e5835488SYasunari Takiguchi u8 clear_underflow_flag, 311*e5835488SYasunari Takiguchi u8 clear_buf); 312*e5835488SYasunari Takiguchi 313*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_chip_id(struct cxd2880_tnrdmd *tnr_dmd, 314*e5835488SYasunari Takiguchi enum cxd2880_tnrdmd_chip_id *chip_id); 315*e5835488SYasunari Takiguchi 316*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_and_save_reg_bits(struct cxd2880_tnrdmd 317*e5835488SYasunari Takiguchi *tnr_dmd, 318*e5835488SYasunari Takiguchi enum cxd2880_io_tgt tgt, 319*e5835488SYasunari Takiguchi u8 bank, u8 address, 320*e5835488SYasunari Takiguchi u8 value, u8 bit_mask); 321*e5835488SYasunari Takiguchi 322*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_scan_mode(struct cxd2880_tnrdmd *tnr_dmd, 323*e5835488SYasunari Takiguchi enum cxd2880_dtv_sys sys, 324*e5835488SYasunari Takiguchi u8 scan_mode_end); 325*e5835488SYasunari Takiguchi 326*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_pid_ftr(struct cxd2880_tnrdmd *tnr_dmd, 327*e5835488SYasunari Takiguchi struct cxd2880_tnrdmd_pid_ftr_cfg 328*e5835488SYasunari Takiguchi *pid_ftr_cfg); 329*e5835488SYasunari Takiguchi 330*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_rf_lvl_cmpstn(struct cxd2880_tnrdmd 331*e5835488SYasunari Takiguchi *tnr_dmd, 332*e5835488SYasunari Takiguchi int (*rf_lvl_cmpstn) 333*e5835488SYasunari Takiguchi (struct cxd2880_tnrdmd *, 334*e5835488SYasunari Takiguchi int *)); 335*e5835488SYasunari Takiguchi 336*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_rf_lvl_cmpstn_sub(struct cxd2880_tnrdmd *tnr_dmd, 337*e5835488SYasunari Takiguchi int (*rf_lvl_cmpstn) 338*e5835488SYasunari Takiguchi (struct cxd2880_tnrdmd *, 339*e5835488SYasunari Takiguchi int *)); 340*e5835488SYasunari Takiguchi 341*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_lna_thrs(struct cxd2880_tnrdmd *tnr_dmd, 342*e5835488SYasunari Takiguchi struct 343*e5835488SYasunari Takiguchi cxd2880_tnrdmd_lna_thrs_tbl_air 344*e5835488SYasunari Takiguchi *tbl_air, 345*e5835488SYasunari Takiguchi struct 346*e5835488SYasunari Takiguchi cxd2880_tnrdmd_lna_thrs_tbl_cable 347*e5835488SYasunari Takiguchi *tbl_cable); 348*e5835488SYasunari Takiguchi 349*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_lna_thrs_sub(struct cxd2880_tnrdmd *tnr_dmd, 350*e5835488SYasunari Takiguchi struct 351*e5835488SYasunari Takiguchi cxd2880_tnrdmd_lna_thrs_tbl_air 352*e5835488SYasunari Takiguchi *tbl_air, 353*e5835488SYasunari Takiguchi struct 354*e5835488SYasunari Takiguchi cxd2880_tnrdmd_lna_thrs_tbl_cable 355*e5835488SYasunari Takiguchi *tbl_cable); 356*e5835488SYasunari Takiguchi 357*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_ts_pin_high_low(struct cxd2880_tnrdmd 358*e5835488SYasunari Takiguchi *tnr_dmd, u8 en, u8 value); 359*e5835488SYasunari Takiguchi 360*e5835488SYasunari Takiguchi int cxd2880_tnrdmd_set_ts_output(struct cxd2880_tnrdmd *tnr_dmd, 361*e5835488SYasunari Takiguchi u8 en); 362*e5835488SYasunari Takiguchi 363*e5835488SYasunari Takiguchi int slvt_freeze_reg(struct cxd2880_tnrdmd *tnr_dmd); 364*e5835488SYasunari Takiguchi 365*e5835488SYasunari Takiguchi #endif 366