1 /* 2 STV0900/0903 Multistandard Broadcast Frontend driver 3 Copyright (C) Manu Abraham <abraham.manu@gmail.com> 4 5 Copyright (C) ST Microelectronics 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 __STV090x_H 23 #define __STV090x_H 24 25 enum stv090x_demodulator { 26 STV090x_DEMODULATOR_0 = 1, 27 STV090x_DEMODULATOR_1 28 }; 29 30 enum stv090x_device { 31 STV0903 = 0, 32 STV0900, 33 }; 34 35 enum stv090x_mode { 36 STV090x_DUAL = 0, 37 STV090x_SINGLE 38 }; 39 40 enum stv090x_tsmode { 41 STV090x_TSMODE_SERIAL_PUNCTURED = 1, 42 STV090x_TSMODE_SERIAL_CONTINUOUS, 43 STV090x_TSMODE_PARALLEL_PUNCTURED, 44 STV090x_TSMODE_DVBCI 45 }; 46 47 enum stv090x_clkmode { 48 STV090x_CLK_INT = 0, /* Clk i/p = CLKI */ 49 STV090x_CLK_EXT = 2 /* Clk i/p = XTALI */ 50 }; 51 52 enum stv090x_i2crpt { 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, 61 }; 62 63 enum stv090x_adc_range { 64 STV090x_ADC_2Vpp = 0, 65 STV090x_ADC_1Vpp = 1 66 }; 67 68 struct stv090x_config { 69 enum stv090x_device device; 70 enum stv090x_mode demod_mode; 71 enum stv090x_clkmode clk_mode; 72 73 u32 xtal; /* default: 8000000 */ 74 u8 address; /* default: 0x68 */ 75 76 u8 ts1_mode; 77 u8 ts2_mode; 78 u32 ts1_clk; 79 u32 ts2_clk; 80 81 u8 ts1_tei : 1; 82 u8 ts2_tei : 1; 83 84 enum stv090x_i2crpt repeater_level; 85 86 u8 tuner_bbgain; /* default: 10db */ 87 enum stv090x_adc_range adc1_range; /* default: 2Vpp */ 88 enum stv090x_adc_range adc2_range; /* default: 2Vpp */ 89 90 bool diseqc_envelope_mode; 91 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); 104 }; 105 106 #if IS_ENABLED(CONFIG_DVB_STV090x) 107 108 extern struct dvb_frontend *stv090x_attach(const struct stv090x_config *config, 109 struct i2c_adapter *i2c, 110 enum stv090x_demodulator demod); 111 112 /* dir = 0 -> output, dir = 1 -> input/open-drain */ 113 extern int stv090x_set_gpio(struct dvb_frontend *fe, u8 gpio, 114 u8 dir, u8 value, u8 xor_value); 115 116 #else 117 118 static inline struct dvb_frontend *stv090x_attach(const struct stv090x_config *config, 119 struct i2c_adapter *i2c, 120 enum stv090x_demodulator demod) 121 { 122 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 123 return NULL; 124 } 125 126 static inline int stv090x_set_gpio(struct dvb_frontend *fe, u8 gpio, 127 u8 opd, u8 value, u8 xor_value) 128 { 129 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 130 return -ENODEV; 131 } 132 #endif /* CONFIG_DVB_STV090x */ 133 134 #endif /* __STV090x_H */ 135