162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * cxd2880_tnrdmd.h
462306a36Sopenharmony_ci * Sony CXD2880 DVB-T2/T tuner + demodulator driver
562306a36Sopenharmony_ci * common control interface
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Copyright (C) 2016, 2017, 2018 Sony Semiconductor Solutions Corporation
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef CXD2880_TNRDMD_H
1162306a36Sopenharmony_ci#define CXD2880_TNRDMD_H
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <linux/atomic.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include "cxd2880_common.h"
1662306a36Sopenharmony_ci#include "cxd2880_io.h"
1762306a36Sopenharmony_ci#include "cxd2880_dtv.h"
1862306a36Sopenharmony_ci#include "cxd2880_dvbt.h"
1962306a36Sopenharmony_ci#include "cxd2880_dvbt2.h"
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define CXD2880_TNRDMD_MAX_CFG_MEM_COUNT 100
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci#define slvt_unfreeze_reg(tnr_dmd) ((void)((tnr_dmd)->io->write_reg\
2462306a36Sopenharmony_ci((tnr_dmd)->io, CXD2880_IO_TGT_DMD, 0x01, 0x00)))
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_UNDERFLOW     0x0001
2762306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_OVERFLOW      0x0002
2862306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_ALMOST_EMPTY  0x0004
2962306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_ALMOST_FULL   0x0008
3062306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_BUF_RRDY	  0x0010
3162306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_ILLEGAL_COMMAND      0x0020
3262306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_ILLEGAL_ACCESS       0x0040
3362306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_CPU_ERROR	    0x0100
3462306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_LOCK		 0x0200
3562306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_INV_LOCK	     0x0400
3662306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_NOOFDM	       0x0800
3762306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_EWS		  0x1000
3862306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_EEW		  0x2000
3962306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_TYPE_FEC_FAIL	     0x4000
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_L1POST_OK	0x01
4262306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_DMD_LOCK	 0x02
4362306a36Sopenharmony_ci#define CXD2880_TNRDMD_INTERRUPT_LOCK_SEL_TS_LOCK	  0x04
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cienum cxd2880_tnrdmd_chip_id {
4662306a36Sopenharmony_ci	CXD2880_TNRDMD_CHIP_ID_UNKNOWN = 0x00,
4762306a36Sopenharmony_ci	CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_0X = 0x62,
4862306a36Sopenharmony_ci	CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_11 = 0x6a
4962306a36Sopenharmony_ci};
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci#define CXD2880_TNRDMD_CHIP_ID_VALID(chip_id) \
5262306a36Sopenharmony_ci	(((chip_id) == CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_0X) || \
5362306a36Sopenharmony_ci	 ((chip_id) == CXD2880_TNRDMD_CHIP_ID_CXD2880_ES1_11))
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cienum cxd2880_tnrdmd_state {
5662306a36Sopenharmony_ci	CXD2880_TNRDMD_STATE_UNKNOWN,
5762306a36Sopenharmony_ci	CXD2880_TNRDMD_STATE_SLEEP,
5862306a36Sopenharmony_ci	CXD2880_TNRDMD_STATE_ACTIVE,
5962306a36Sopenharmony_ci	CXD2880_TNRDMD_STATE_INVALID
6062306a36Sopenharmony_ci};
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_cienum cxd2880_tnrdmd_divermode {
6362306a36Sopenharmony_ci	CXD2880_TNRDMD_DIVERMODE_SINGLE,
6462306a36Sopenharmony_ci	CXD2880_TNRDMD_DIVERMODE_MAIN,
6562306a36Sopenharmony_ci	CXD2880_TNRDMD_DIVERMODE_SUB
6662306a36Sopenharmony_ci};
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cienum cxd2880_tnrdmd_clockmode {
6962306a36Sopenharmony_ci	CXD2880_TNRDMD_CLOCKMODE_UNKNOWN,
7062306a36Sopenharmony_ci	CXD2880_TNRDMD_CLOCKMODE_A,
7162306a36Sopenharmony_ci	CXD2880_TNRDMD_CLOCKMODE_B,
7262306a36Sopenharmony_ci	CXD2880_TNRDMD_CLOCKMODE_C
7362306a36Sopenharmony_ci};
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_cienum cxd2880_tnrdmd_tsout_if {
7662306a36Sopenharmony_ci	CXD2880_TNRDMD_TSOUT_IF_TS,
7762306a36Sopenharmony_ci	CXD2880_TNRDMD_TSOUT_IF_SPI,
7862306a36Sopenharmony_ci	CXD2880_TNRDMD_TSOUT_IF_SDIO
7962306a36Sopenharmony_ci};
8062306a36Sopenharmony_ci
8162306a36Sopenharmony_cienum cxd2880_tnrdmd_xtal_share {
8262306a36Sopenharmony_ci	CXD2880_TNRDMD_XTAL_SHARE_NONE,
8362306a36Sopenharmony_ci	CXD2880_TNRDMD_XTAL_SHARE_EXTREF,
8462306a36Sopenharmony_ci	CXD2880_TNRDMD_XTAL_SHARE_MASTER,
8562306a36Sopenharmony_ci	CXD2880_TNRDMD_XTAL_SHARE_SLAVE
8662306a36Sopenharmony_ci};
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_cienum cxd2880_tnrdmd_spectrum_sense {
8962306a36Sopenharmony_ci	CXD2880_TNRDMD_SPECTRUM_NORMAL,
9062306a36Sopenharmony_ci	CXD2880_TNRDMD_SPECTRUM_INV
9162306a36Sopenharmony_ci};
9262306a36Sopenharmony_ci
9362306a36Sopenharmony_cienum cxd2880_tnrdmd_cfg_id {
9462306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_OUTPUT_SEL_MSB,
9562306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSVALID_ACTIVE_HI,
9662306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSSYNC_ACTIVE_HI,
9762306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSERR_ACTIVE_HI,
9862306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_LATCH_ON_POSEDGE,
9962306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSCLK_CONT,
10062306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSCLK_MASK,
10162306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSVALID_MASK,
10262306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSERR_MASK,
10362306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSERR_VALID_DIS,
10462306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSPIN_CURRENT,
10562306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSPIN_PULLUP_MANUAL,
10662306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSPIN_PULLUP,
10762306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSCLK_FREQ,
10862306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TSBYTECLK_MANUAL,
10962306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TS_PACKET_GAP,
11062306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TS_BACKWARDS_COMPATIBLE,
11162306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_PWM_VALUE,
11262306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_INTERRUPT,
11362306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_INTERRUPT_LOCK_SEL,
11462306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_INTERRUPT_INV_LOCK_SEL,
11562306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TS_BUF_ALMOST_EMPTY_THRS,
11662306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TS_BUF_ALMOST_FULL_THRS,
11762306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_TS_BUF_RRDY_THRS,
11862306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_FIXED_CLOCKMODE,
11962306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_CABLE_INPUT,
12062306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_DVBT2_FEF_INTERMITTENT_BASE,
12162306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_DVBT2_FEF_INTERMITTENT_LITE,
12262306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_BLINDTUNE_DVBT2_FIRST,
12362306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_DVBT_BERN_PERIOD,
12462306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_DVBT_VBER_PERIOD,
12562306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_DVBT_PER_MES,
12662306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_DVBT2_BBER_MES,
12762306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_DVBT2_LBER_MES,
12862306a36Sopenharmony_ci	CXD2880_TNRDMD_CFG_DVBT2_PER_MES,
12962306a36Sopenharmony_ci};
13062306a36Sopenharmony_ci
13162306a36Sopenharmony_cienum cxd2880_tnrdmd_lock_result {
13262306a36Sopenharmony_ci	CXD2880_TNRDMD_LOCK_RESULT_NOTDETECT,
13362306a36Sopenharmony_ci	CXD2880_TNRDMD_LOCK_RESULT_LOCKED,
13462306a36Sopenharmony_ci	CXD2880_TNRDMD_LOCK_RESULT_UNLOCKED
13562306a36Sopenharmony_ci};
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_cienum cxd2880_tnrdmd_gpio_mode {
13862306a36Sopenharmony_ci	CXD2880_TNRDMD_GPIO_MODE_OUTPUT = 0x00,
13962306a36Sopenharmony_ci	CXD2880_TNRDMD_GPIO_MODE_INPUT = 0x01,
14062306a36Sopenharmony_ci	CXD2880_TNRDMD_GPIO_MODE_INT = 0x02,
14162306a36Sopenharmony_ci	CXD2880_TNRDMD_GPIO_MODE_FEC_FAIL = 0x03,
14262306a36Sopenharmony_ci	CXD2880_TNRDMD_GPIO_MODE_PWM = 0x04,
14362306a36Sopenharmony_ci	CXD2880_TNRDMD_GPIO_MODE_EWS = 0x05,
14462306a36Sopenharmony_ci	CXD2880_TNRDMD_GPIO_MODE_EEW = 0x06
14562306a36Sopenharmony_ci};
14662306a36Sopenharmony_ci
14762306a36Sopenharmony_cienum cxd2880_tnrdmd_serial_ts_clk {
14862306a36Sopenharmony_ci	CXD2880_TNRDMD_SERIAL_TS_CLK_FULL,
14962306a36Sopenharmony_ci	CXD2880_TNRDMD_SERIAL_TS_CLK_HALF
15062306a36Sopenharmony_ci};
15162306a36Sopenharmony_ci
15262306a36Sopenharmony_cistruct cxd2880_tnrdmd_cfg_mem {
15362306a36Sopenharmony_ci	enum cxd2880_io_tgt tgt;
15462306a36Sopenharmony_ci	u8 bank;
15562306a36Sopenharmony_ci	u8 address;
15662306a36Sopenharmony_ci	u8 value;
15762306a36Sopenharmony_ci	u8 bit_mask;
15862306a36Sopenharmony_ci};
15962306a36Sopenharmony_ci
16062306a36Sopenharmony_cistruct cxd2880_tnrdmd_pid_cfg {
16162306a36Sopenharmony_ci	u8 is_en;
16262306a36Sopenharmony_ci	u16 pid;
16362306a36Sopenharmony_ci};
16462306a36Sopenharmony_ci
16562306a36Sopenharmony_cistruct cxd2880_tnrdmd_pid_ftr_cfg {
16662306a36Sopenharmony_ci	u8 is_negative;
16762306a36Sopenharmony_ci	struct cxd2880_tnrdmd_pid_cfg pid_cfg[32];
16862306a36Sopenharmony_ci};
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_cistruct cxd2880_tnrdmd_lna_thrs {
17162306a36Sopenharmony_ci	u8 off_on;
17262306a36Sopenharmony_ci	u8 on_off;
17362306a36Sopenharmony_ci};
17462306a36Sopenharmony_ci
17562306a36Sopenharmony_cistruct cxd2880_tnrdmd_lna_thrs_tbl_air {
17662306a36Sopenharmony_ci	struct cxd2880_tnrdmd_lna_thrs thrs[24];
17762306a36Sopenharmony_ci};
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_cistruct cxd2880_tnrdmd_lna_thrs_tbl_cable {
18062306a36Sopenharmony_ci	struct cxd2880_tnrdmd_lna_thrs thrs[32];
18162306a36Sopenharmony_ci};
18262306a36Sopenharmony_ci
18362306a36Sopenharmony_cistruct cxd2880_tnrdmd_create_param {
18462306a36Sopenharmony_ci	enum cxd2880_tnrdmd_tsout_if ts_output_if;
18562306a36Sopenharmony_ci	u8 en_internal_ldo;
18662306a36Sopenharmony_ci	enum cxd2880_tnrdmd_xtal_share xtal_share_type;
18762306a36Sopenharmony_ci	u8 xosc_cap;
18862306a36Sopenharmony_ci	u8 xosc_i;
18962306a36Sopenharmony_ci	u8 is_cxd2881gg;
19062306a36Sopenharmony_ci	u8 stationary_use;
19162306a36Sopenharmony_ci};
19262306a36Sopenharmony_ci
19362306a36Sopenharmony_cistruct cxd2880_tnrdmd_diver_create_param {
19462306a36Sopenharmony_ci	enum cxd2880_tnrdmd_tsout_if ts_output_if;
19562306a36Sopenharmony_ci	u8 en_internal_ldo;
19662306a36Sopenharmony_ci	u8 xosc_cap_main;
19762306a36Sopenharmony_ci	u8 xosc_i_main;
19862306a36Sopenharmony_ci	u8 xosc_i_sub;
19962306a36Sopenharmony_ci	u8 is_cxd2881gg;
20062306a36Sopenharmony_ci	u8 stationary_use;
20162306a36Sopenharmony_ci};
20262306a36Sopenharmony_ci
20362306a36Sopenharmony_cistruct cxd2880_tnrdmd {
20462306a36Sopenharmony_ci	struct cxd2880_tnrdmd *diver_sub;
20562306a36Sopenharmony_ci	struct cxd2880_io *io;
20662306a36Sopenharmony_ci	struct cxd2880_tnrdmd_create_param create_param;
20762306a36Sopenharmony_ci	enum cxd2880_tnrdmd_divermode diver_mode;
20862306a36Sopenharmony_ci	enum cxd2880_tnrdmd_clockmode fixed_clk_mode;
20962306a36Sopenharmony_ci	u8 is_cable_input;
21062306a36Sopenharmony_ci	u8 en_fef_intmtnt_base;
21162306a36Sopenharmony_ci	u8 en_fef_intmtnt_lite;
21262306a36Sopenharmony_ci	u8 blind_tune_dvbt2_first;
21362306a36Sopenharmony_ci	int (*rf_lvl_cmpstn)(struct cxd2880_tnrdmd *tnr_dmd,
21462306a36Sopenharmony_ci			     int *rf_lvl_db);
21562306a36Sopenharmony_ci	struct cxd2880_tnrdmd_lna_thrs_tbl_air *lna_thrs_tbl_air;
21662306a36Sopenharmony_ci	struct cxd2880_tnrdmd_lna_thrs_tbl_cable *lna_thrs_tbl_cable;
21762306a36Sopenharmony_ci	u8 srl_ts_clk_mod_cnts;
21862306a36Sopenharmony_ci	enum cxd2880_tnrdmd_serial_ts_clk srl_ts_clk_frq;
21962306a36Sopenharmony_ci	u8 ts_byte_clk_manual_setting;
22062306a36Sopenharmony_ci	u8 is_ts_backwards_compatible_mode;
22162306a36Sopenharmony_ci	struct cxd2880_tnrdmd_cfg_mem cfg_mem[CXD2880_TNRDMD_MAX_CFG_MEM_COUNT];
22262306a36Sopenharmony_ci	u8 cfg_mem_last_entry;
22362306a36Sopenharmony_ci	struct cxd2880_tnrdmd_pid_ftr_cfg pid_ftr_cfg;
22462306a36Sopenharmony_ci	u8 pid_ftr_cfg_en;
22562306a36Sopenharmony_ci	void *user;
22662306a36Sopenharmony_ci	enum cxd2880_tnrdmd_chip_id chip_id;
22762306a36Sopenharmony_ci	enum cxd2880_tnrdmd_state state;
22862306a36Sopenharmony_ci	enum cxd2880_tnrdmd_clockmode clk_mode;
22962306a36Sopenharmony_ci	u32 frequency_khz;
23062306a36Sopenharmony_ci	enum cxd2880_dtv_sys sys;
23162306a36Sopenharmony_ci	enum cxd2880_dtv_bandwidth bandwidth;
23262306a36Sopenharmony_ci	u8 scan_mode;
23362306a36Sopenharmony_ci	atomic_t cancel;
23462306a36Sopenharmony_ci};
23562306a36Sopenharmony_ci
23662306a36Sopenharmony_ciint cxd2880_tnrdmd_create(struct cxd2880_tnrdmd *tnr_dmd,
23762306a36Sopenharmony_ci			  struct cxd2880_io *io,
23862306a36Sopenharmony_ci			  struct cxd2880_tnrdmd_create_param
23962306a36Sopenharmony_ci			  *create_param);
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ciint cxd2880_tnrdmd_diver_create(struct cxd2880_tnrdmd
24262306a36Sopenharmony_ci				*tnr_dmd_main,
24362306a36Sopenharmony_ci				struct cxd2880_io *io_main,
24462306a36Sopenharmony_ci				struct cxd2880_tnrdmd *tnr_dmd_sub,
24562306a36Sopenharmony_ci				struct cxd2880_io *io_sub,
24662306a36Sopenharmony_ci				struct
24762306a36Sopenharmony_ci				cxd2880_tnrdmd_diver_create_param
24862306a36Sopenharmony_ci				*create_param);
24962306a36Sopenharmony_ci
25062306a36Sopenharmony_ciint cxd2880_tnrdmd_init1(struct cxd2880_tnrdmd *tnr_dmd);
25162306a36Sopenharmony_ci
25262306a36Sopenharmony_ciint cxd2880_tnrdmd_init2(struct cxd2880_tnrdmd *tnr_dmd);
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ciint cxd2880_tnrdmd_check_internal_cpu_status(struct cxd2880_tnrdmd
25562306a36Sopenharmony_ci					     *tnr_dmd,
25662306a36Sopenharmony_ci					     u8 *task_completed);
25762306a36Sopenharmony_ci
25862306a36Sopenharmony_ciint cxd2880_tnrdmd_common_tune_setting1(struct cxd2880_tnrdmd
25962306a36Sopenharmony_ci					*tnr_dmd,
26062306a36Sopenharmony_ci					enum cxd2880_dtv_sys sys,
26162306a36Sopenharmony_ci					u32 frequency_khz,
26262306a36Sopenharmony_ci					enum cxd2880_dtv_bandwidth
26362306a36Sopenharmony_ci					bandwidth, u8 one_seg_opt,
26462306a36Sopenharmony_ci					u8 one_seg_opt_shft_dir);
26562306a36Sopenharmony_ci
26662306a36Sopenharmony_ciint cxd2880_tnrdmd_common_tune_setting2(struct cxd2880_tnrdmd
26762306a36Sopenharmony_ci					*tnr_dmd,
26862306a36Sopenharmony_ci					enum cxd2880_dtv_sys sys,
26962306a36Sopenharmony_ci					u8 en_fef_intmtnt_ctrl);
27062306a36Sopenharmony_ci
27162306a36Sopenharmony_ciint cxd2880_tnrdmd_sleep(struct cxd2880_tnrdmd *tnr_dmd);
27262306a36Sopenharmony_ci
27362306a36Sopenharmony_ciint cxd2880_tnrdmd_set_cfg(struct cxd2880_tnrdmd *tnr_dmd,
27462306a36Sopenharmony_ci			   enum cxd2880_tnrdmd_cfg_id id,
27562306a36Sopenharmony_ci			   int value);
27662306a36Sopenharmony_ci
27762306a36Sopenharmony_ciint cxd2880_tnrdmd_gpio_set_cfg(struct cxd2880_tnrdmd *tnr_dmd,
27862306a36Sopenharmony_ci				u8 id,
27962306a36Sopenharmony_ci				u8 en,
28062306a36Sopenharmony_ci				enum cxd2880_tnrdmd_gpio_mode mode,
28162306a36Sopenharmony_ci				u8 open_drain, u8 invert);
28262306a36Sopenharmony_ci
28362306a36Sopenharmony_ciint cxd2880_tnrdmd_gpio_set_cfg_sub(struct cxd2880_tnrdmd *tnr_dmd,
28462306a36Sopenharmony_ci				    u8 id,
28562306a36Sopenharmony_ci				    u8 en,
28662306a36Sopenharmony_ci				    enum cxd2880_tnrdmd_gpio_mode
28762306a36Sopenharmony_ci				    mode, u8 open_drain,
28862306a36Sopenharmony_ci				    u8 invert);
28962306a36Sopenharmony_ci
29062306a36Sopenharmony_ciint cxd2880_tnrdmd_gpio_read(struct cxd2880_tnrdmd *tnr_dmd,
29162306a36Sopenharmony_ci			     u8 id, u8 *value);
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_ciint cxd2880_tnrdmd_gpio_read_sub(struct cxd2880_tnrdmd *tnr_dmd,
29462306a36Sopenharmony_ci				 u8 id, u8 *value);
29562306a36Sopenharmony_ci
29662306a36Sopenharmony_ciint cxd2880_tnrdmd_gpio_write(struct cxd2880_tnrdmd *tnr_dmd,
29762306a36Sopenharmony_ci			      u8 id, u8 value);
29862306a36Sopenharmony_ci
29962306a36Sopenharmony_ciint cxd2880_tnrdmd_gpio_write_sub(struct cxd2880_tnrdmd *tnr_dmd,
30062306a36Sopenharmony_ci				  u8 id, u8 value);
30162306a36Sopenharmony_ci
30262306a36Sopenharmony_ciint cxd2880_tnrdmd_interrupt_read(struct cxd2880_tnrdmd *tnr_dmd,
30362306a36Sopenharmony_ci				  u16 *value);
30462306a36Sopenharmony_ci
30562306a36Sopenharmony_ciint cxd2880_tnrdmd_interrupt_clear(struct cxd2880_tnrdmd *tnr_dmd,
30662306a36Sopenharmony_ci				   u16 value);
30762306a36Sopenharmony_ci
30862306a36Sopenharmony_ciint cxd2880_tnrdmd_ts_buf_clear(struct cxd2880_tnrdmd *tnr_dmd,
30962306a36Sopenharmony_ci				u8 clear_overflow_flag,
31062306a36Sopenharmony_ci				u8 clear_underflow_flag,
31162306a36Sopenharmony_ci				u8 clear_buf);
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ciint cxd2880_tnrdmd_chip_id(struct cxd2880_tnrdmd *tnr_dmd,
31462306a36Sopenharmony_ci			   enum cxd2880_tnrdmd_chip_id *chip_id);
31562306a36Sopenharmony_ci
31662306a36Sopenharmony_ciint cxd2880_tnrdmd_set_and_save_reg_bits(struct cxd2880_tnrdmd
31762306a36Sopenharmony_ci					 *tnr_dmd,
31862306a36Sopenharmony_ci					 enum cxd2880_io_tgt tgt,
31962306a36Sopenharmony_ci					 u8 bank, u8 address,
32062306a36Sopenharmony_ci					 u8 value, u8 bit_mask);
32162306a36Sopenharmony_ci
32262306a36Sopenharmony_ciint cxd2880_tnrdmd_set_scan_mode(struct cxd2880_tnrdmd *tnr_dmd,
32362306a36Sopenharmony_ci				 enum cxd2880_dtv_sys sys,
32462306a36Sopenharmony_ci				 u8 scan_mode_end);
32562306a36Sopenharmony_ci
32662306a36Sopenharmony_ciint cxd2880_tnrdmd_set_pid_ftr(struct cxd2880_tnrdmd *tnr_dmd,
32762306a36Sopenharmony_ci			       struct cxd2880_tnrdmd_pid_ftr_cfg
32862306a36Sopenharmony_ci			       *pid_ftr_cfg);
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ciint cxd2880_tnrdmd_set_rf_lvl_cmpstn(struct cxd2880_tnrdmd
33162306a36Sopenharmony_ci				     *tnr_dmd,
33262306a36Sopenharmony_ci				     int (*rf_lvl_cmpstn)
33362306a36Sopenharmony_ci				     (struct cxd2880_tnrdmd *,
33462306a36Sopenharmony_ci				     int *));
33562306a36Sopenharmony_ci
33662306a36Sopenharmony_ciint cxd2880_tnrdmd_set_rf_lvl_cmpstn_sub(struct cxd2880_tnrdmd *tnr_dmd,
33762306a36Sopenharmony_ci					 int (*rf_lvl_cmpstn)
33862306a36Sopenharmony_ci					 (struct cxd2880_tnrdmd *,
33962306a36Sopenharmony_ci					 int *));
34062306a36Sopenharmony_ci
34162306a36Sopenharmony_ciint cxd2880_tnrdmd_set_lna_thrs(struct cxd2880_tnrdmd *tnr_dmd,
34262306a36Sopenharmony_ci				struct
34362306a36Sopenharmony_ci				cxd2880_tnrdmd_lna_thrs_tbl_air
34462306a36Sopenharmony_ci				*tbl_air,
34562306a36Sopenharmony_ci				struct
34662306a36Sopenharmony_ci				cxd2880_tnrdmd_lna_thrs_tbl_cable
34762306a36Sopenharmony_ci				*tbl_cable);
34862306a36Sopenharmony_ci
34962306a36Sopenharmony_ciint cxd2880_tnrdmd_set_lna_thrs_sub(struct cxd2880_tnrdmd *tnr_dmd,
35062306a36Sopenharmony_ci				    struct
35162306a36Sopenharmony_ci				    cxd2880_tnrdmd_lna_thrs_tbl_air
35262306a36Sopenharmony_ci				    *tbl_air,
35362306a36Sopenharmony_ci				    struct
35462306a36Sopenharmony_ci				    cxd2880_tnrdmd_lna_thrs_tbl_cable
35562306a36Sopenharmony_ci				    *tbl_cable);
35662306a36Sopenharmony_ci
35762306a36Sopenharmony_ciint cxd2880_tnrdmd_set_ts_pin_high_low(struct cxd2880_tnrdmd
35862306a36Sopenharmony_ci				       *tnr_dmd, u8 en, u8 value);
35962306a36Sopenharmony_ci
36062306a36Sopenharmony_ciint cxd2880_tnrdmd_set_ts_output(struct cxd2880_tnrdmd *tnr_dmd,
36162306a36Sopenharmony_ci				 u8 en);
36262306a36Sopenharmony_ci
36362306a36Sopenharmony_ciint slvt_freeze_reg(struct cxd2880_tnrdmd *tnr_dmd);
36462306a36Sopenharmony_ci
36562306a36Sopenharmony_ci#endif
366