0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __STV090x_H
0011 #define __STV090x_H
0012
0013 enum stv090x_demodulator {
0014 STV090x_DEMODULATOR_0 = 1,
0015 STV090x_DEMODULATOR_1
0016 };
0017
0018 enum stv090x_device {
0019 STV0903 = 0,
0020 STV0900,
0021 };
0022
0023 enum stv090x_mode {
0024 STV090x_DUAL = 0,
0025 STV090x_SINGLE
0026 };
0027
0028 enum stv090x_tsmode {
0029 STV090x_TSMODE_SERIAL_PUNCTURED = 1,
0030 STV090x_TSMODE_SERIAL_CONTINUOUS,
0031 STV090x_TSMODE_PARALLEL_PUNCTURED,
0032 STV090x_TSMODE_DVBCI
0033 };
0034
0035 enum stv090x_clkmode {
0036 STV090x_CLK_INT = 0,
0037 STV090x_CLK_EXT = 2
0038 };
0039
0040 enum stv090x_i2crpt {
0041 STV090x_RPTLEVEL_256 = 0,
0042 STV090x_RPTLEVEL_128 = 1,
0043 STV090x_RPTLEVEL_64 = 2,
0044 STV090x_RPTLEVEL_32 = 3,
0045 STV090x_RPTLEVEL_16 = 4,
0046 STV090x_RPTLEVEL_8 = 5,
0047 STV090x_RPTLEVEL_4 = 6,
0048 STV090x_RPTLEVEL_2 = 7,
0049 };
0050
0051 enum stv090x_adc_range {
0052 STV090x_ADC_2Vpp = 0,
0053 STV090x_ADC_1Vpp = 1
0054 };
0055
0056 struct stv090x_config {
0057 enum stv090x_device device;
0058 enum stv090x_mode demod_mode;
0059 enum stv090x_clkmode clk_mode;
0060 enum stv090x_demodulator demod;
0061
0062 u32 xtal;
0063 u8 address;
0064
0065 u8 ts1_mode;
0066 u8 ts2_mode;
0067 u32 ts1_clk;
0068 u32 ts2_clk;
0069
0070 u8 ts1_tei : 1;
0071 u8 ts2_tei : 1;
0072
0073 enum stv090x_i2crpt repeater_level;
0074
0075 u8 tuner_bbgain;
0076 enum stv090x_adc_range adc1_range;
0077 enum stv090x_adc_range adc2_range;
0078
0079 bool diseqc_envelope_mode;
0080
0081 int (*tuner_init)(struct dvb_frontend *fe);
0082 int (*tuner_sleep)(struct dvb_frontend *fe);
0083 int (*tuner_set_mode)(struct dvb_frontend *fe, enum tuner_mode mode);
0084 int (*tuner_set_frequency)(struct dvb_frontend *fe, u32 frequency);
0085 int (*tuner_get_frequency)(struct dvb_frontend *fe, u32 *frequency);
0086 int (*tuner_set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth);
0087 int (*tuner_get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth);
0088 int (*tuner_set_bbgain)(struct dvb_frontend *fe, u32 gain);
0089 int (*tuner_get_bbgain)(struct dvb_frontend *fe, u32 *gain);
0090 int (*tuner_set_refclk)(struct dvb_frontend *fe, u32 refclk);
0091 int (*tuner_get_status)(struct dvb_frontend *fe, u32 *status);
0092 void (*tuner_i2c_lock)(struct dvb_frontend *fe, int lock);
0093
0094
0095 int (*set_gpio)(struct dvb_frontend *fe, u8 gpio, u8 dir, u8 value,
0096 u8 xor_value);
0097
0098 struct dvb_frontend* (*get_dvb_frontend)(struct i2c_client *i2c);
0099 };
0100
0101 #if IS_REACHABLE(CONFIG_DVB_STV090x)
0102
0103 struct dvb_frontend *stv090x_attach(struct stv090x_config *config,
0104 struct i2c_adapter *i2c,
0105 enum stv090x_demodulator demod);
0106
0107 #else
0108
0109 static inline struct dvb_frontend *stv090x_attach(const struct stv090x_config *config,
0110 struct i2c_adapter *i2c,
0111 enum stv090x_demodulator demod)
0112 {
0113 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
0114 return NULL;
0115 }
0116
0117 #endif
0118
0119 #endif