2 STV0900/0903 Multistandard Broadcast Frontend driver
3 Copyright (C) Manu Abraham <abraham.manu@gmail.com>
5 Copyright (C) ST Microelectronics
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.
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.
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.
25 enum stv090x_demodulator
{
26 STV090x_DEMODULATOR_0
= 1,
41 STV090x_TSMODE_SERIAL_PUNCTURED
= 1,
42 STV090x_TSMODE_SERIAL_CONTINUOUS
,
43 STV090x_TSMODE_PARALLEL_PUNCTURED
,
47 enum stv090x_clkmode
{
48 STV090x_CLK_INT
= 0, /* Clk i/p = CLKI */
49 STV090x_CLK_EXT
= 2 /* Clk i/p = XTALI */
53 STV090x_RPTLEVEL_256
= 0,
54 STV090x_RPTLEVEL_128
= 1,
55 STV090x_RPTLEVEL_64
= 2,
56 STV090x_RPTLEVEL_32
= 3,
57 STV090x_RPTLEVEL_16
= 4,
58 STV090x_RPTLEVEL_8
= 5,
59 STV090x_RPTLEVEL_4
= 6,
60 STV090x_RPTLEVEL_2
= 7,
63 enum stv090x_adc_range
{
68 struct stv090x_config
{
69 enum stv090x_device device
;
70 enum stv090x_mode demod_mode
;
71 enum stv090x_clkmode clk_mode
;
73 u32 xtal
; /* default: 8000000 */
74 u8 address
; /* default: 0x68 */
84 enum stv090x_i2crpt repeater_level
;
86 u8 tuner_bbgain
; /* default: 10db */
87 enum stv090x_adc_range adc1_range
; /* default: 2Vpp */
88 enum stv090x_adc_range adc2_range
; /* default: 2Vpp */
90 bool diseqc_envelope_mode
;
92 int (*tuner_init
)(struct dvb_frontend
*fe
);
93 int (*tuner_sleep
)(struct dvb_frontend
*fe
);
94 int (*tuner_set_mode
)(struct dvb_frontend
*fe
, enum tuner_mode mode
);
95 int (*tuner_set_frequency
)(struct dvb_frontend
*fe
, u32 frequency
);
96 int (*tuner_get_frequency
)(struct dvb_frontend
*fe
, u32
*frequency
);
97 int (*tuner_set_bandwidth
)(struct dvb_frontend
*fe
, u32 bandwidth
);
98 int (*tuner_get_bandwidth
)(struct dvb_frontend
*fe
, u32
*bandwidth
);
99 int (*tuner_set_bbgain
)(struct dvb_frontend
*fe
, u32 gain
);
100 int (*tuner_get_bbgain
)(struct dvb_frontend
*fe
, u32
*gain
);
101 int (*tuner_set_refclk
)(struct dvb_frontend
*fe
, u32 refclk
);
102 int (*tuner_get_status
)(struct dvb_frontend
*fe
, u32
*status
);
103 void (*tuner_i2c_lock
)(struct dvb_frontend
*fe
, int lock
);
105 /* dir = 0 -> output, dir = 1 -> input/open-drain */
106 int (*set_gpio
)(struct dvb_frontend
*fe
, u8 gpio
, u8 dir
, u8 value
,
110 #if IS_REACHABLE(CONFIG_DVB_STV090x)
112 struct dvb_frontend
*stv090x_attach(struct stv090x_config
*config
,
113 struct i2c_adapter
*i2c
,
114 enum stv090x_demodulator demod
);
118 static inline struct dvb_frontend
*stv090x_attach(const struct stv090x_config
*config
,
119 struct i2c_adapter
*i2c
,
120 enum stv090x_demodulator demod
)
122 printk(KERN_WARNING
"%s: driver disabled by Kconfig\n", __func__
);
126 #endif /* CONFIG_DVB_STV090x */
128 #endif /* __STV090x_H */