1*74ba9207SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2e415c689SManu Abraham /* 3e415c689SManu Abraham STV0900/0903 Multistandard Broadcast Frontend driver 4e415c689SManu Abraham Copyright (C) Manu Abraham <abraham.manu@gmail.com> 5e415c689SManu Abraham 6e415c689SManu Abraham Copyright (C) ST Microelectronics 7e415c689SManu Abraham 8e415c689SManu Abraham */ 9e415c689SManu Abraham 10e415c689SManu Abraham #ifndef __STV090x_H 11e415c689SManu Abraham #define __STV090x_H 12e415c689SManu Abraham 13e415c689SManu Abraham enum stv090x_demodulator { 14e415c689SManu Abraham STV090x_DEMODULATOR_0 = 1, 15e415c689SManu Abraham STV090x_DEMODULATOR_1 16e415c689SManu Abraham }; 17e415c689SManu Abraham 18e415c689SManu Abraham enum stv090x_device { 19e415c689SManu Abraham STV0903 = 0, 20e415c689SManu Abraham STV0900, 21e415c689SManu Abraham }; 22e415c689SManu Abraham 23e415c689SManu Abraham enum stv090x_mode { 24e415c689SManu Abraham STV090x_DUAL = 0, 25e415c689SManu Abraham STV090x_SINGLE 26e415c689SManu Abraham }; 27e415c689SManu Abraham 28e415c689SManu Abraham enum stv090x_tsmode { 29e415c689SManu Abraham STV090x_TSMODE_SERIAL_PUNCTURED = 1, 30e415c689SManu Abraham STV090x_TSMODE_SERIAL_CONTINUOUS, 31e415c689SManu Abraham STV090x_TSMODE_PARALLEL_PUNCTURED, 32e415c689SManu Abraham STV090x_TSMODE_DVBCI 33e415c689SManu Abraham }; 34e415c689SManu Abraham 35e415c689SManu Abraham enum stv090x_clkmode { 36e415c689SManu Abraham STV090x_CLK_INT = 0, /* Clk i/p = CLKI */ 37e415c689SManu Abraham STV090x_CLK_EXT = 2 /* Clk i/p = XTALI */ 38e415c689SManu Abraham }; 39e415c689SManu Abraham 40017eb038SManu Abraham enum stv090x_i2crpt { 41017eb038SManu Abraham STV090x_RPTLEVEL_256 = 0, 42017eb038SManu Abraham STV090x_RPTLEVEL_128 = 1, 43017eb038SManu Abraham STV090x_RPTLEVEL_64 = 2, 44017eb038SManu Abraham STV090x_RPTLEVEL_32 = 3, 45017eb038SManu Abraham STV090x_RPTLEVEL_16 = 4, 46017eb038SManu Abraham STV090x_RPTLEVEL_8 = 5, 47017eb038SManu Abraham STV090x_RPTLEVEL_4 = 6, 48017eb038SManu Abraham STV090x_RPTLEVEL_2 = 7, 49017eb038SManu Abraham }; 50017eb038SManu Abraham 51d8b5a8e4SOliver Endriss enum stv090x_adc_range { 52d8b5a8e4SOliver Endriss STV090x_ADC_2Vpp = 0, 53d8b5a8e4SOliver Endriss STV090x_ADC_1Vpp = 1 54d8b5a8e4SOliver Endriss }; 55d8b5a8e4SOliver Endriss 56e415c689SManu Abraham struct stv090x_config { 57e415c689SManu Abraham enum stv090x_device device; 58e415c689SManu Abraham enum stv090x_mode demod_mode; 59e415c689SManu Abraham enum stv090x_clkmode clk_mode; 60e415c689SManu Abraham 61e415c689SManu Abraham u32 xtal; /* default: 8000000 */ 62e415c689SManu Abraham u8 address; /* default: 0x68 */ 63e415c689SManu Abraham 64e415c689SManu Abraham u8 ts1_mode; 65e415c689SManu Abraham u8 ts2_mode; 66f91e59cbSAndreas Regel u32 ts1_clk; 67f91e59cbSAndreas Regel u32 ts2_clk; 68e415c689SManu Abraham 694f7200a8SPatrick Boettcher u8 ts1_tei : 1; 704f7200a8SPatrick Boettcher u8 ts2_tei : 1; 714f7200a8SPatrick Boettcher 72017eb038SManu Abraham enum stv090x_i2crpt repeater_level; 73017eb038SManu Abraham 74d8b5a8e4SOliver Endriss u8 tuner_bbgain; /* default: 10db */ 75d8b5a8e4SOliver Endriss enum stv090x_adc_range adc1_range; /* default: 2Vpp */ 76d8b5a8e4SOliver Endriss enum stv090x_adc_range adc2_range; /* default: 2Vpp */ 77d8b5a8e4SOliver Endriss 7830e8ca2cSOliver Endriss bool diseqc_envelope_mode; 7930e8ca2cSOliver Endriss 80e415c689SManu Abraham int (*tuner_init)(struct dvb_frontend *fe); 81c5b74b0fSManu Abraham int (*tuner_sleep)(struct dvb_frontend *fe); 82e415c689SManu Abraham int (*tuner_set_mode)(struct dvb_frontend *fe, enum tuner_mode mode); 83e415c689SManu Abraham int (*tuner_set_frequency)(struct dvb_frontend *fe, u32 frequency); 84e415c689SManu Abraham int (*tuner_get_frequency)(struct dvb_frontend *fe, u32 *frequency); 85e415c689SManu Abraham int (*tuner_set_bandwidth)(struct dvb_frontend *fe, u32 bandwidth); 86e415c689SManu Abraham int (*tuner_get_bandwidth)(struct dvb_frontend *fe, u32 *bandwidth); 87e415c689SManu Abraham int (*tuner_set_bbgain)(struct dvb_frontend *fe, u32 gain); 88e415c689SManu Abraham int (*tuner_get_bbgain)(struct dvb_frontend *fe, u32 *gain); 89e415c689SManu Abraham int (*tuner_set_refclk)(struct dvb_frontend *fe, u32 refclk); 90e415c689SManu Abraham int (*tuner_get_status)(struct dvb_frontend *fe, u32 *status); 91f790bdd0SOliver Endriss void (*tuner_i2c_lock)(struct dvb_frontend *fe, int lock); 92a2ea5561SMauro Carvalho Chehab 93a2ea5561SMauro Carvalho Chehab /* dir = 0 -> output, dir = 1 -> input/open-drain */ 94a2ea5561SMauro Carvalho Chehab int (*set_gpio)(struct dvb_frontend *fe, u8 gpio, u8 dir, u8 value, 95a2ea5561SMauro Carvalho Chehab u8 xor_value); 96e415c689SManu Abraham }; 97e415c689SManu Abraham 989b174527SArnd Bergmann #if IS_REACHABLE(CONFIG_DVB_STV090x) 99e415c689SManu Abraham 10009e59098SMauro Carvalho Chehab struct dvb_frontend *stv090x_attach(struct stv090x_config *config, 101e415c689SManu Abraham struct i2c_adapter *i2c, 102e415c689SManu Abraham enum stv090x_demodulator demod); 103b4797048SPatrick Boettcher 104e415c689SManu Abraham #else 105e415c689SManu Abraham 106e415c689SManu Abraham static inline struct dvb_frontend *stv090x_attach(const struct stv090x_config *config, 107e415c689SManu Abraham struct i2c_adapter *i2c, 108e415c689SManu Abraham enum stv090x_demodulator demod) 109e415c689SManu Abraham { 110e415c689SManu Abraham printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 111e415c689SManu Abraham return NULL; 112e415c689SManu Abraham } 113b4797048SPatrick Boettcher 114e415c689SManu Abraham #endif /* CONFIG_DVB_STV090x */ 115e415c689SManu Abraham 116e415c689SManu Abraham #endif /* __STV090x_H */ 117