1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 Driver for ST STV0299 demodulator 4 5 Copyright (C) 2001-2002 Convergence Integrated Media GmbH 6 <ralph@convergence.de>, 7 <holger@convergence.de>, 8 <js@convergence.de> 9 10 11 Philips SU1278/SH 12 13 Copyright (C) 2002 by Peter Schildmann <peter.schildmann@web.de> 14 15 16 LG TDQF-S001F 17 18 Copyright (C) 2002 Felix Domke <tmbinc@elitedvb.net> 19 & Andreas Oberritter <obi@linuxtv.org> 20 21 22 Support for Samsung TBMU24112IMB used on Technisat SkyStar2 rev. 2.6B 23 24 Copyright (C) 2003 Vadim Catana <skystar@moldova.cc>: 25 26 Support for Philips SU1278 on Technotrend hardware 27 28 Copyright (C) 2004 Andrew de Quincey <adq_dvb@lidskialf.net> 29 30 31 */ 32 33 #ifndef STV0299_H 34 #define STV0299_H 35 36 #include <linux/dvb/frontend.h> 37 #include <media/dvb_frontend.h> 38 39 #define STV0299_LOCKOUTPUT_0 0 40 #define STV0299_LOCKOUTPUT_1 1 41 #define STV0299_LOCKOUTPUT_CF 2 42 #define STV0299_LOCKOUTPUT_LK 3 43 44 #define STV0299_VOLT13_OP0 0 45 #define STV0299_VOLT13_OP1 1 46 47 struct stv0299_config 48 { 49 /* the demodulator's i2c address */ 50 u8 demod_address; 51 52 /* inittab - array of pairs of values. 53 * First of each pair is the register, second is the value. 54 * List should be terminated with an 0xff, 0xff pair. 55 */ 56 const u8* inittab; 57 58 /* master clock to use */ 59 u32 mclk; 60 61 /* does the inversion require inversion? */ 62 u8 invert:1; 63 64 /* Skip reinitialisation? */ 65 u8 skip_reinit:1; 66 67 /* LOCK OUTPUT setting */ 68 u8 lock_output:2; 69 70 /* Is 13v controlled by OP0 or OP1? */ 71 u8 volt13_op0_op1:1; 72 73 /* Turn-off OP0? */ 74 u8 op0_off:1; 75 76 /* minimum delay before retuning */ 77 int min_delay_ms; 78 79 /* Set the symbol rate */ 80 int (*set_symbol_rate)(struct dvb_frontend *fe, u32 srate, u32 ratio); 81 82 /* Set device param to start dma */ 83 int (*set_ts_params)(struct dvb_frontend *fe, int is_punctured); 84 }; 85 86 #if IS_REACHABLE(CONFIG_DVB_STV0299) 87 extern struct dvb_frontend *stv0299_attach(const struct stv0299_config *config, 88 struct i2c_adapter *i2c); 89 #else 90 static inline struct dvb_frontend *stv0299_attach(const struct stv0299_config *config, 91 struct i2c_adapter *i2c) 92 { 93 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 94 return NULL; 95 } 96 #endif // CONFIG_DVB_STV0299 97 98 static inline int stv0299_writereg(struct dvb_frontend *fe, u8 reg, u8 val) { 99 int r = 0; 100 u8 buf[] = {reg, val}; 101 if (fe->ops.write) 102 r = fe->ops.write(fe, buf, 2); 103 return r; 104 } 105 106 #endif // STV0299_H 107