18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * cxd2880_tnrdmd.h 48c2ecf20Sopenharmony_ci * Sony CXD2880 DVB-T2/T tuner + demodulator driver 58c2ecf20Sopenharmony_ci * common control interface 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Copyright (C) 2016, 2017, 2018 Sony Semiconductor Solutions Corporation 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#ifndef CXD2880_TNRDMD_H 118c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_H 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#include <linux/atomic.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include "cxd2880_common.h" 168c2ecf20Sopenharmony_ci#include "cxd2880_io.h" 178c2ecf20Sopenharmony_ci#include "cxd2880_dtv.h" 188c2ecf20Sopenharmony_ci#include "cxd2880_dvbt.h" 198c2ecf20Sopenharmony_ci#include "cxd2880_dvbt2.h" 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_MAX_CFG_MEM_COUNT 100 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#define slvt_unfreeze_reg(tnr_dmd) ((void)((tnr_dmd)->io->write_reg\ 248c2ecf20Sopenharmony_ci((tnr_dmd)->io, CXD2880_IO_TGT_DMD, 0x01, 0x00))) 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_UNDERFLOW 0x0001 278c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_OVERFLOW 0x0002 288c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_ALMOST_EMPTY 0x0004 298c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_ALMOST_FULL 0x0008 308c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_RRDY 0x0010 318c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_ILLEGAL_COMMAND 0x0020 328c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_ILLEGAL_ACCESS 0x0040 338c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_CPU_ERROR 0x0100 348c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_LOCK 0x0200 358c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_INV_LOCK 0x0400 368c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_NOOFDM 0x0800 378c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_EWS 0x1000 388c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_EEW 0x2000 398c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_FEC_FAIL 0x4000 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_L1POST_OK 0x01 428c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_DMD_LOCK 0x02 438c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_TS_LOCK 0x04 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_chip_id { 468c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CHIP_ID_UNKNOWN = 0x00, 478c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_0X = 0x62, 488c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_11 = 0x6a 498c2ecf20Sopenharmony_ci}; 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci#define CXD2880_TNRDMD_CHIP_ID_VALID(chip_id) \ 528c2ecf20Sopenharmony_ci (((chip_id) == CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_0X) || \ 538c2ecf20Sopenharmony_ci ((chip_id) == CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_11)) 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_state { 568c2ecf20Sopenharmony_ci CXD2880_TNRDMD_STATE_UNKNOWN, 578c2ecf20Sopenharmony_ci CXD2880_TNRDMD_STATE_SLEEP, 588c2ecf20Sopenharmony_ci CXD2880_TNRDMD_STATE_ACTIVE, 598c2ecf20Sopenharmony_ci CXD2880_TNRDMD_STATE_INVALID 608c2ecf20Sopenharmony_ci}; 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_divermode { 638c2ecf20Sopenharmony_ci CXD2880_TNRDMD_DIVERMODE_SINGLE, 648c2ecf20Sopenharmony_ci CXD2880_TNRDMD_DIVERMODE_MAIN, 658c2ecf20Sopenharmony_ci CXD2880_TNRDMD_DIVERMODE_SUB 668c2ecf20Sopenharmony_ci}; 678c2ecf20Sopenharmony_ci 688c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_clockmode { 698c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CLOCKMODE_UNKNOWN, 708c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CLOCKMODE_A, 718c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CLOCKMODE_B, 728c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CLOCKMODE_C 738c2ecf20Sopenharmony_ci}; 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_tsout_if { 768c2ecf20Sopenharmony_ci CXD2880_TNRDMD_TSOUT_IF_TS, 778c2ecf20Sopenharmony_ci CXD2880_TNRDMD_TSOUT_IF_SPI, 788c2ecf20Sopenharmony_ci CXD2880_TNRDMD_TSOUT_IF_SDIO 798c2ecf20Sopenharmony_ci}; 808c2ecf20Sopenharmony_ci 818c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_xtal_share { 828c2ecf20Sopenharmony_ci CXD2880_TNRDMD_XTAL_SHARE_NONE, 838c2ecf20Sopenharmony_ci CXD2880_TNRDMD_XTAL_SHARE_EXTREF, 848c2ecf20Sopenharmony_ci CXD2880_TNRDMD_XTAL_SHARE_MASTER, 858c2ecf20Sopenharmony_ci CXD2880_TNRDMD_XTAL_SHARE_SLAVE 868c2ecf20Sopenharmony_ci}; 878c2ecf20Sopenharmony_ci 888c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_spectrum_sense { 898c2ecf20Sopenharmony_ci CXD2880_TNRDMD_SPECTRUM_NORMAL, 908c2ecf20Sopenharmony_ci CXD2880_TNRDMD_SPECTRUM_INV 918c2ecf20Sopenharmony_ci}; 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_cfg_id { 948c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_OUTPUT_SEL_MSB, 958c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSVALID_ACTIVE_HI, 968c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSSYNC_ACTIVE_HI, 978c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSERR_ACTIVE_HI, 988c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_LATCH_ON_POSEDGE, 998c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSCLK_CONT, 1008c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSCLK_MASK, 1018c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSVALID_MASK, 1028c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSERR_MASK, 1038c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSERR_VALID_DIS, 1048c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSPIN_CURRENT, 1058c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSPIN_PULLUP_MANUAL, 1068c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSPIN_PULLUP, 1078c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSCLK_FREQ, 1088c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TSBYTECLK_MANUAL, 1098c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TS_PACKET_GAP, 1108c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TS_BACKWARDS_COMPATIBLE, 1118c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_PWM_VALUE, 1128c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_INTERRUPT, 1138c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_INTERRUPT_LOCK_SEL, 1148c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_INTERRUPT_INV_LOCK_SEL, 1158c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TS_BUF_ALMOST_EMPTY_THRS, 1168c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TS_BUF_ALMOST_FULL_THRS, 1178c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_TS_BUF_RRDY_THRS, 1188c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_FIXED_CLOCKMODE, 1198c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_CABLE_INPUT, 1208c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_DVBT2_FEF_INTERMITTENT_BASE, 1218c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_DVBT2_FEF_INTERMITTENT_LITE, 1228c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_BLINDTUNE_DVBT2_FIRST, 1238c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_DVBT_BERN_PERIOD, 1248c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_DVBT_VBER_PERIOD, 1258c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_DVBT_PER_MES, 1268c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_DVBT2_BBER_MES, 1278c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_DVBT2_LBER_MES, 1288c2ecf20Sopenharmony_ci CXD2880_TNRDMD_CFG_DVBT2_PER_MES, 1298c2ecf20Sopenharmony_ci}; 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_lock_result { 1328c2ecf20Sopenharmony_ci CXD2880_TNRDMD_LOCK_RESULT_NOTDETECT, 1338c2ecf20Sopenharmony_ci CXD2880_TNRDMD_LOCK_RESULT_LOCKED, 1348c2ecf20Sopenharmony_ci CXD2880_TNRDMD_LOCK_RESULT_UNLOCKED 1358c2ecf20Sopenharmony_ci}; 1368c2ecf20Sopenharmony_ci 1378c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_gpio_mode { 1388c2ecf20Sopenharmony_ci CXD2880_TNRDMD_GPIO_MODE_OUTPUT = 0x00, 1398c2ecf20Sopenharmony_ci CXD2880_TNRDMD_GPIO_MODE_INPUT = 0x01, 1408c2ecf20Sopenharmony_ci CXD2880_TNRDMD_GPIO_MODE_INT = 0x02, 1418c2ecf20Sopenharmony_ci CXD2880_TNRDMD_GPIO_MODE_FEC_FAIL = 0x03, 1428c2ecf20Sopenharmony_ci CXD2880_TNRDMD_GPIO_MODE_PWM = 0x04, 1438c2ecf20Sopenharmony_ci CXD2880_TNRDMD_GPIO_MODE_EWS = 0x05, 1448c2ecf20Sopenharmony_ci CXD2880_TNRDMD_GPIO_MODE_EEW = 0x06 1458c2ecf20Sopenharmony_ci}; 1468c2ecf20Sopenharmony_ci 1478c2ecf20Sopenharmony_cienum cxd2880_tnrdmd_serial_ts_clk { 1488c2ecf20Sopenharmony_ci CXD2880_TNRDMD_SERIAL_TS_CLK_FULL, 1498c2ecf20Sopenharmony_ci CXD2880_TNRDMD_SERIAL_TS_CLK_HALF 1508c2ecf20Sopenharmony_ci}; 1518c2ecf20Sopenharmony_ci 1528c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd_cfg_mem { 1538c2ecf20Sopenharmony_ci enum cxd2880_io_tgt tgt; 1548c2ecf20Sopenharmony_ci u8 bank; 1558c2ecf20Sopenharmony_ci u8 address; 1568c2ecf20Sopenharmony_ci u8 value; 1578c2ecf20Sopenharmony_ci u8 bit_mask; 1588c2ecf20Sopenharmony_ci}; 1598c2ecf20Sopenharmony_ci 1608c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd_pid_cfg { 1618c2ecf20Sopenharmony_ci u8 is_en; 1628c2ecf20Sopenharmony_ci u16 pid; 1638c2ecf20Sopenharmony_ci}; 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd_pid_ftr_cfg { 1668c2ecf20Sopenharmony_ci u8 is_negative; 1678c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_pid_cfg pid_cfg[32]; 1688c2ecf20Sopenharmony_ci}; 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd_lna_thrs { 1718c2ecf20Sopenharmony_ci u8 off_on; 1728c2ecf20Sopenharmony_ci u8 on_off; 1738c2ecf20Sopenharmony_ci}; 1748c2ecf20Sopenharmony_ci 1758c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd_lna_thrs_tbl_air { 1768c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_lna_thrs thrs[24]; 1778c2ecf20Sopenharmony_ci}; 1788c2ecf20Sopenharmony_ci 1798c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd_lna_thrs_tbl_cable { 1808c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_lna_thrs thrs[32]; 1818c2ecf20Sopenharmony_ci}; 1828c2ecf20Sopenharmony_ci 1838c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd_create_param { 1848c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_tsout_if ts_output_if; 1858c2ecf20Sopenharmony_ci u8 en_internal_ldo; 1868c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_xtal_share xtal_share_type; 1878c2ecf20Sopenharmony_ci u8 xosc_cap; 1888c2ecf20Sopenharmony_ci u8 xosc_i; 1898c2ecf20Sopenharmony_ci u8 is_cxd2881gg; 1908c2ecf20Sopenharmony_ci u8 stationary_use; 1918c2ecf20Sopenharmony_ci}; 1928c2ecf20Sopenharmony_ci 1938c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd_diver_create_param { 1948c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_tsout_if ts_output_if; 1958c2ecf20Sopenharmony_ci u8 en_internal_ldo; 1968c2ecf20Sopenharmony_ci u8 xosc_cap_main; 1978c2ecf20Sopenharmony_ci u8 xosc_i_main; 1988c2ecf20Sopenharmony_ci u8 xosc_i_sub; 1998c2ecf20Sopenharmony_ci u8 is_cxd2881gg; 2008c2ecf20Sopenharmony_ci u8 stationary_use; 2018c2ecf20Sopenharmony_ci}; 2028c2ecf20Sopenharmony_ci 2038c2ecf20Sopenharmony_cistruct cxd2880_tnrdmd { 2048c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd *diver_sub; 2058c2ecf20Sopenharmony_ci struct cxd2880_io *io; 2068c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_create_param create_param; 2078c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_divermode diver_mode; 2088c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_clockmode fixed_clk_mode; 2098c2ecf20Sopenharmony_ci u8 is_cable_input; 2108c2ecf20Sopenharmony_ci u8 en_fef_intmtnt_base; 2118c2ecf20Sopenharmony_ci u8 en_fef_intmtnt_lite; 2128c2ecf20Sopenharmony_ci u8 blind_tune_dvbt2_first; 2138c2ecf20Sopenharmony_ci int (*rf_lvl_cmpstn)(struct cxd2880_tnrdmd *tnr_dmd, 2148c2ecf20Sopenharmony_ci int *rf_lvl_db); 2158c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_lna_thrs_tbl_air *lna_thrs_tbl_air; 2168c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_lna_thrs_tbl_cable *lna_thrs_tbl_cable; 2178c2ecf20Sopenharmony_ci u8 srl_ts_clk_mod_cnts; 2188c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_serial_ts_clk srl_ts_clk_frq; 2198c2ecf20Sopenharmony_ci u8 ts_byte_clk_manual_setting; 2208c2ecf20Sopenharmony_ci u8 is_ts_backwards_compatible_mode; 2218c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_cfg_mem cfg_mem[CXD2880_TNRDMD_MAX_CFG_MEM_COUNT]; 2228c2ecf20Sopenharmony_ci u8 cfg_mem_last_entry; 2238c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_pid_ftr_cfg pid_ftr_cfg; 2248c2ecf20Sopenharmony_ci u8 pid_ftr_cfg_en; 2258c2ecf20Sopenharmony_ci void *user; 2268c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_chip_id chip_id; 2278c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_state state; 2288c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_clockmode clk_mode; 2298c2ecf20Sopenharmony_ci u32 frequency_khz; 2308c2ecf20Sopenharmony_ci enum cxd2880_dtv_sys sys; 2318c2ecf20Sopenharmony_ci enum cxd2880_dtv_bandwidth bandwidth; 2328c2ecf20Sopenharmony_ci u8 scan_mode; 2338c2ecf20Sopenharmony_ci atomic_t cancel; 2348c2ecf20Sopenharmony_ci}; 2358c2ecf20Sopenharmony_ci 2368c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_create(struct cxd2880_tnrdmd *tnr_dmd, 2378c2ecf20Sopenharmony_ci struct cxd2880_io *io, 2388c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_create_param 2398c2ecf20Sopenharmony_ci *create_param); 2408c2ecf20Sopenharmony_ci 2418c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_diver_create(struct cxd2880_tnrdmd 2428c2ecf20Sopenharmony_ci *tnr_dmd_main, 2438c2ecf20Sopenharmony_ci struct cxd2880_io *io_main, 2448c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd *tnr_dmd_sub, 2458c2ecf20Sopenharmony_ci struct cxd2880_io *io_sub, 2468c2ecf20Sopenharmony_ci struct 2478c2ecf20Sopenharmony_ci cxd2880_tnrdmd_diver_create_param 2488c2ecf20Sopenharmony_ci *create_param); 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_init1(struct cxd2880_tnrdmd *tnr_dmd); 2518c2ecf20Sopenharmony_ci 2528c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_init2(struct cxd2880_tnrdmd *tnr_dmd); 2538c2ecf20Sopenharmony_ci 2548c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_check_internal_cpu_status(struct cxd2880_tnrdmd 2558c2ecf20Sopenharmony_ci *tnr_dmd, 2568c2ecf20Sopenharmony_ci u8 *task_completed); 2578c2ecf20Sopenharmony_ci 2588c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_common_tune_setting1(struct cxd2880_tnrdmd 2598c2ecf20Sopenharmony_ci *tnr_dmd, 2608c2ecf20Sopenharmony_ci enum cxd2880_dtv_sys sys, 2618c2ecf20Sopenharmony_ci u32 frequency_khz, 2628c2ecf20Sopenharmony_ci enum cxd2880_dtv_bandwidth 2638c2ecf20Sopenharmony_ci bandwidth, u8 one_seg_opt, 2648c2ecf20Sopenharmony_ci u8 one_seg_opt_shft_dir); 2658c2ecf20Sopenharmony_ci 2668c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_common_tune_setting2(struct cxd2880_tnrdmd 2678c2ecf20Sopenharmony_ci *tnr_dmd, 2688c2ecf20Sopenharmony_ci enum cxd2880_dtv_sys sys, 2698c2ecf20Sopenharmony_ci u8 en_fef_intmtnt_ctrl); 2708c2ecf20Sopenharmony_ci 2718c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_sleep(struct cxd2880_tnrdmd *tnr_dmd); 2728c2ecf20Sopenharmony_ci 2738c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_cfg(struct cxd2880_tnrdmd *tnr_dmd, 2748c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_cfg_id id, 2758c2ecf20Sopenharmony_ci int value); 2768c2ecf20Sopenharmony_ci 2778c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_gpio_set_cfg(struct cxd2880_tnrdmd *tnr_dmd, 2788c2ecf20Sopenharmony_ci u8 id, 2798c2ecf20Sopenharmony_ci u8 en, 2808c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_gpio_mode mode, 2818c2ecf20Sopenharmony_ci u8 open_drain, u8 invert); 2828c2ecf20Sopenharmony_ci 2838c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_gpio_set_cfg_sub(struct cxd2880_tnrdmd *tnr_dmd, 2848c2ecf20Sopenharmony_ci u8 id, 2858c2ecf20Sopenharmony_ci u8 en, 2868c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_gpio_mode 2878c2ecf20Sopenharmony_ci mode, u8 open_drain, 2888c2ecf20Sopenharmony_ci u8 invert); 2898c2ecf20Sopenharmony_ci 2908c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_gpio_read(struct cxd2880_tnrdmd *tnr_dmd, 2918c2ecf20Sopenharmony_ci u8 id, u8 *value); 2928c2ecf20Sopenharmony_ci 2938c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_gpio_read_sub(struct cxd2880_tnrdmd *tnr_dmd, 2948c2ecf20Sopenharmony_ci u8 id, u8 *value); 2958c2ecf20Sopenharmony_ci 2968c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_gpio_write(struct cxd2880_tnrdmd *tnr_dmd, 2978c2ecf20Sopenharmony_ci u8 id, u8 value); 2988c2ecf20Sopenharmony_ci 2998c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_gpio_write_sub(struct cxd2880_tnrdmd *tnr_dmd, 3008c2ecf20Sopenharmony_ci u8 id, u8 value); 3018c2ecf20Sopenharmony_ci 3028c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_interrupt_read(struct cxd2880_tnrdmd *tnr_dmd, 3038c2ecf20Sopenharmony_ci u16 *value); 3048c2ecf20Sopenharmony_ci 3058c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_interrupt_clear(struct cxd2880_tnrdmd *tnr_dmd, 3068c2ecf20Sopenharmony_ci u16 value); 3078c2ecf20Sopenharmony_ci 3088c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_ts_buf_clear(struct cxd2880_tnrdmd *tnr_dmd, 3098c2ecf20Sopenharmony_ci u8 clear_overflow_flag, 3108c2ecf20Sopenharmony_ci u8 clear_underflow_flag, 3118c2ecf20Sopenharmony_ci u8 clear_buf); 3128c2ecf20Sopenharmony_ci 3138c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_chip_id(struct cxd2880_tnrdmd *tnr_dmd, 3148c2ecf20Sopenharmony_ci enum cxd2880_tnrdmd_chip_id *chip_id); 3158c2ecf20Sopenharmony_ci 3168c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_and_save_reg_bits(struct cxd2880_tnrdmd 3178c2ecf20Sopenharmony_ci *tnr_dmd, 3188c2ecf20Sopenharmony_ci enum cxd2880_io_tgt tgt, 3198c2ecf20Sopenharmony_ci u8 bank, u8 address, 3208c2ecf20Sopenharmony_ci u8 value, u8 bit_mask); 3218c2ecf20Sopenharmony_ci 3228c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_scan_mode(struct cxd2880_tnrdmd *tnr_dmd, 3238c2ecf20Sopenharmony_ci enum cxd2880_dtv_sys sys, 3248c2ecf20Sopenharmony_ci u8 scan_mode_end); 3258c2ecf20Sopenharmony_ci 3268c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_pid_ftr(struct cxd2880_tnrdmd *tnr_dmd, 3278c2ecf20Sopenharmony_ci struct cxd2880_tnrdmd_pid_ftr_cfg 3288c2ecf20Sopenharmony_ci *pid_ftr_cfg); 3298c2ecf20Sopenharmony_ci 3308c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_rf_lvl_cmpstn(struct cxd2880_tnrdmd 3318c2ecf20Sopenharmony_ci *tnr_dmd, 3328c2ecf20Sopenharmony_ci int (*rf_lvl_cmpstn) 3338c2ecf20Sopenharmony_ci (struct cxd2880_tnrdmd *, 3348c2ecf20Sopenharmony_ci int *)); 3358c2ecf20Sopenharmony_ci 3368c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_rf_lvl_cmpstn_sub(struct cxd2880_tnrdmd *tnr_dmd, 3378c2ecf20Sopenharmony_ci int (*rf_lvl_cmpstn) 3388c2ecf20Sopenharmony_ci (struct cxd2880_tnrdmd *, 3398c2ecf20Sopenharmony_ci int *)); 3408c2ecf20Sopenharmony_ci 3418c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_lna_thrs(struct cxd2880_tnrdmd *tnr_dmd, 3428c2ecf20Sopenharmony_ci struct 3438c2ecf20Sopenharmony_ci cxd2880_tnrdmd_lna_thrs_tbl_air 3448c2ecf20Sopenharmony_ci *tbl_air, 3458c2ecf20Sopenharmony_ci struct 3468c2ecf20Sopenharmony_ci cxd2880_tnrdmd_lna_thrs_tbl_cable 3478c2ecf20Sopenharmony_ci *tbl_cable); 3488c2ecf20Sopenharmony_ci 3498c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_lna_thrs_sub(struct cxd2880_tnrdmd *tnr_dmd, 3508c2ecf20Sopenharmony_ci struct 3518c2ecf20Sopenharmony_ci cxd2880_tnrdmd_lna_thrs_tbl_air 3528c2ecf20Sopenharmony_ci *tbl_air, 3538c2ecf20Sopenharmony_ci struct 3548c2ecf20Sopenharmony_ci cxd2880_tnrdmd_lna_thrs_tbl_cable 3558c2ecf20Sopenharmony_ci *tbl_cable); 3568c2ecf20Sopenharmony_ci 3578c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_ts_pin_high_low(struct cxd2880_tnrdmd 3588c2ecf20Sopenharmony_ci *tnr_dmd, u8 en, u8 value); 3598c2ecf20Sopenharmony_ci 3608c2ecf20Sopenharmony_ciint cxd2880_tnrdmd_set_ts_output(struct cxd2880_tnrdmd *tnr_dmd, 3618c2ecf20Sopenharmony_ci u8 en); 3628c2ecf20Sopenharmony_ci 3638c2ecf20Sopenharmony_ciint slvt_freeze_reg(struct cxd2880_tnrdmd *tnr_dmd); 3648c2ecf20Sopenharmony_ci 3658c2ecf20Sopenharmony_ci#endif 366