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