xref: /OK3568_Linux_fs/kernel/drivers/media/dvb-frontends/ts2020.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun     Montage Technology TS2020 - Silicon Tuner driver
4*4882a593Smuzhiyun     Copyright (C) 2009-2012 Konstantin Dimitrov <kosio.dimitrov@gmail.com>
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun     Copyright (C) 2009-2012 TurboSight.com
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun  */
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #ifndef TS2020_H
11*4882a593Smuzhiyun #define TS2020_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun #include <linux/dvb/frontend.h>
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun struct ts2020_config {
16*4882a593Smuzhiyun 	u8 tuner_address;
17*4882a593Smuzhiyun 	u32 frequency_div;
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun 	/*
20*4882a593Smuzhiyun 	 * RF loop-through
21*4882a593Smuzhiyun 	 */
22*4882a593Smuzhiyun 	bool loop_through:1;
23*4882a593Smuzhiyun 
24*4882a593Smuzhiyun 	/*
25*4882a593Smuzhiyun 	 * clock output
26*4882a593Smuzhiyun 	 */
27*4882a593Smuzhiyun #define TS2020_CLK_OUT_DISABLED        0
28*4882a593Smuzhiyun #define TS2020_CLK_OUT_ENABLED         1
29*4882a593Smuzhiyun #define TS2020_CLK_OUT_ENABLED_XTALOUT 2
30*4882a593Smuzhiyun 	u8 clk_out:2;
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun 	/*
33*4882a593Smuzhiyun 	 * clock output divider
34*4882a593Smuzhiyun 	 * 1 - 31
35*4882a593Smuzhiyun 	 */
36*4882a593Smuzhiyun 	u8 clk_out_div:5;
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun 	/* Set to true to suppress stat polling */
39*4882a593Smuzhiyun 	bool dont_poll:1;
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun 	/*
42*4882a593Smuzhiyun 	 * pointer to DVB frontend
43*4882a593Smuzhiyun 	 */
44*4882a593Smuzhiyun 	struct dvb_frontend *fe;
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun 	/*
47*4882a593Smuzhiyun 	 * driver private, do not set value
48*4882a593Smuzhiyun 	 */
49*4882a593Smuzhiyun 	u8 attach_in_use:1;
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun 	/* Operation to be called by the ts2020 driver to get the value of the
52*4882a593Smuzhiyun 	 * AGC PWM tuner input as theoretically output by the demodulator.
53*4882a593Smuzhiyun 	 */
54*4882a593Smuzhiyun 	int (*get_agc_pwm)(struct dvb_frontend *fe, u8 *_agc_pwm);
55*4882a593Smuzhiyun };
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun /* Do not add new ts2020_attach() users! Use I2C bindings instead. */
58*4882a593Smuzhiyun #if IS_REACHABLE(CONFIG_DVB_TS2020)
59*4882a593Smuzhiyun extern struct dvb_frontend *ts2020_attach(
60*4882a593Smuzhiyun 	struct dvb_frontend *fe,
61*4882a593Smuzhiyun 	const struct ts2020_config *config,
62*4882a593Smuzhiyun 	struct i2c_adapter *i2c);
63*4882a593Smuzhiyun #else
ts2020_attach(struct dvb_frontend * fe,const struct ts2020_config * config,struct i2c_adapter * i2c)64*4882a593Smuzhiyun static inline struct dvb_frontend *ts2020_attach(
65*4882a593Smuzhiyun 	struct dvb_frontend *fe,
66*4882a593Smuzhiyun 	const struct ts2020_config *config,
67*4882a593Smuzhiyun 	struct i2c_adapter *i2c)
68*4882a593Smuzhiyun {
69*4882a593Smuzhiyun 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
70*4882a593Smuzhiyun 	return NULL;
71*4882a593Smuzhiyun }
72*4882a593Smuzhiyun #endif
73*4882a593Smuzhiyun 
74*4882a593Smuzhiyun #endif /* TS2020_H */
75