xref: /openbmc/linux/drivers/media/dvb-frontends/cxd2880/cxd2880_tnrdmd.h (revision c13aca79ff3c4af5fd31a5b2743a90eba6e36a26)
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