1/*
2    Montage Technology TS2020 - Silicon Tuner driver
3    Copyright (C) 2009-2012 Konstantin Dimitrov <kosio.dimitrov@gmail.com>
4
5    Copyright (C) 2009-2012 TurboSight.com
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program; if not, write to the Free Software
19    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 */
21
22#ifndef TS2020_H
23#define TS2020_H
24
25#include <linux/kconfig.h>
26#include <linux/dvb/frontend.h>
27
28struct ts2020_config {
29	u8 tuner_address;
30	u32 frequency_div;
31
32	/*
33	 * RF loop-through
34	 */
35	bool loop_through:1;
36
37	/*
38	 * clock output
39	 */
40#define TS2020_CLK_OUT_DISABLED        0
41#define TS2020_CLK_OUT_ENABLED         1
42#define TS2020_CLK_OUT_ENABLED_XTALOUT 2
43	u8 clk_out:2;
44
45	/*
46	 * clock output divider
47	 * 1 - 31
48	 */
49	u8 clk_out_div:5;
50
51	/* Set to true to suppress stat polling */
52	bool dont_poll:1;
53
54	/*
55	 * pointer to DVB frontend
56	 */
57	struct dvb_frontend *fe;
58
59	/*
60	 * driver private, do not set value
61	 */
62	u8 attach_in_use:1;
63
64	/* Operation to be called by the ts2020 driver to get the value of the
65	 * AGC PWM tuner input as theoretically output by the demodulator.
66	 */
67	int (*get_agc_pwm)(struct dvb_frontend *fe, u8 *_agc_pwm);
68};
69
70/* Do not add new ts2020_attach() users! Use I2C bindings instead. */
71#if IS_REACHABLE(CONFIG_DVB_TS2020)
72extern struct dvb_frontend *ts2020_attach(
73	struct dvb_frontend *fe,
74	const struct ts2020_config *config,
75	struct i2c_adapter *i2c);
76#else
77static inline struct dvb_frontend *ts2020_attach(
78	struct dvb_frontend *fe,
79	const struct ts2020_config *config,
80	struct i2c_adapter *i2c)
81{
82	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
83	return NULL;
84}
85#endif
86
87#endif /* TS2020_H */
88