1 /*
2 	STV6110(A) Silicon tuner driver
3 
4 	Copyright (C) Manu Abraham <abraham.manu@gmail.com>
5 
6 	Copyright (C) ST Microelectronics
7 
8 	This program is free software; you can redistribute it and/or modify
9 	it under the terms of the GNU General Public License as published by
10 	the Free Software Foundation; either version 2 of the License, or
11 	(at your option) any later version.
12 
13 	This program is distributed in the hope that it will be useful,
14 	but WITHOUT ANY WARRANTY; without even the implied warranty of
15 	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16 	GNU General Public License for more details.
17 
18 	You should have received a copy of the GNU General Public License
19 	along with this program; if not, write to the Free Software
20 	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
21 */
22 
23 #ifndef __STV6110x_H
24 #define __STV6110x_H
25 
26 struct stv6110x_config {
27 	u8	addr;
28 	u32	refclk;
29 	u8	clk_div; /* divisor value for the output clock */
30 };
31 
32 enum tuner_mode {
33 	TUNER_SLEEP = 1,
34 	TUNER_WAKE,
35 };
36 
37 enum tuner_status {
38 	TUNER_PHASELOCKED = 1,
39 };
40 
41 struct stv6110x_devctl {
42 	int (*tuner_init) (struct dvb_frontend *fe);
43 	int (*tuner_sleep) (struct dvb_frontend *fe);
44 	int (*tuner_set_mode) (struct dvb_frontend *fe, enum tuner_mode mode);
45 	int (*tuner_set_frequency) (struct dvb_frontend *fe, u32 frequency);
46 	int (*tuner_get_frequency) (struct dvb_frontend *fe, u32 *frequency);
47 	int (*tuner_set_bandwidth) (struct dvb_frontend *fe, u32 bandwidth);
48 	int (*tuner_get_bandwidth) (struct dvb_frontend *fe, u32 *bandwidth);
49 	int (*tuner_set_bbgain) (struct dvb_frontend *fe, u32 gain);
50 	int (*tuner_get_bbgain) (struct dvb_frontend *fe, u32 *gain);
51 	int (*tuner_set_refclk)  (struct dvb_frontend *fe, u32 refclk);
52 	int (*tuner_get_status) (struct dvb_frontend *fe, u32 *status);
53 };
54 
55 
56 #if IS_REACHABLE(CONFIG_DVB_STV6110x)
57 
58 extern const struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
59 					       const struct stv6110x_config *config,
60 					       struct i2c_adapter *i2c);
61 
62 #else
63 static inline const struct stv6110x_devctl *stv6110x_attach(struct dvb_frontend *fe,
64 						      const struct stv6110x_config *config,
65 						      struct i2c_adapter *i2c)
66 {
67 	printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
68 	return NULL;
69 }
70 
71 #endif /* CONFIG_DVB_STV6110x */
72 
73 #endif /* __STV6110x_H */
74