dib0090.h (5447B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Linux-DVB Driver for DiBcom's DiB0090 base-band RF Tuner. 4 * 5 * Copyright (C) 2005-7 DiBcom (http://www.dibcom.fr/) 6 */ 7#ifndef DIB0090_H 8#define DIB0090_H 9 10struct dvb_frontend; 11struct i2c_adapter; 12 13#define DEFAULT_DIB0090_I2C_ADDRESS 0x60 14 15struct dib0090_io_config { 16 u32 clock_khz; 17 18 u8 pll_bypass:1; 19 u8 pll_range:1; 20 u8 pll_prediv:6; 21 u8 pll_loopdiv:6; 22 23 u8 adc_clock_ratio; /* valid is 8, 7 ,6 */ 24 u16 pll_int_loop_filt; 25}; 26 27struct dib0090_wbd_slope { 28 u16 max_freq; /* for every frequency less than or equal to that field: this information is correct */ 29 u16 slope_cold; 30 u16 offset_cold; 31 u16 slope_hot; 32 u16 offset_hot; 33 u8 wbd_gain; 34}; 35 36struct dib0090_low_if_offset_table { 37 int std; 38 u32 RF_freq; 39 s32 offset_khz; 40}; 41 42struct dib0090_config { 43 struct dib0090_io_config io; 44 int (*reset) (struct dvb_frontend *, int); 45 int (*sleep) (struct dvb_frontend *, int); 46 47 /* offset in kHz */ 48 int freq_offset_khz_uhf; 49 int freq_offset_khz_vhf; 50 51 int (*get_adc_power) (struct dvb_frontend *); 52 53 u8 clkouttobamse:1; /* activate or deactivate clock output */ 54 u8 analog_output; 55 56 u8 i2c_address; 57 /* add drives and other things if necessary */ 58 u16 wbd_vhf_offset; 59 u16 wbd_cband_offset; 60 u8 use_pwm_agc; 61 u8 clkoutdrive; 62 63 u8 ls_cfg_pad_drv; 64 u8 data_tx_drv; 65 66 u8 in_soc; 67 const struct dib0090_low_if_offset_table *low_if; 68 u8 fref_clock_ratio; 69 u16 force_cband_input; 70 struct dib0090_wbd_slope *wbd; 71 u8 is_dib7090e; 72 u8 force_crystal_mode; 73}; 74 75#if IS_REACHABLE(CONFIG_DVB_TUNER_DIB0090) 76extern struct dvb_frontend *dib0090_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config); 77extern struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config); 78extern void dib0090_dcc_freq(struct dvb_frontend *fe, u8 fast); 79extern void dib0090_pwm_gain_reset(struct dvb_frontend *fe); 80extern u16 dib0090_get_wbd_target(struct dvb_frontend *tuner); 81extern u16 dib0090_get_wbd_offset(struct dvb_frontend *fe); 82extern int dib0090_gain_control(struct dvb_frontend *fe); 83extern enum frontend_tune_state dib0090_get_tune_state(struct dvb_frontend *fe); 84extern int dib0090_set_tune_state(struct dvb_frontend *fe, enum frontend_tune_state tune_state); 85extern void dib0090_get_current_gain(struct dvb_frontend *fe, u16 * rf, u16 * bb, u16 * rf_gain_limit, u16 * rflt); 86extern void dib0090_set_dc_servo(struct dvb_frontend *fe, u8 DC_servo_cutoff); 87extern int dib0090_set_switch(struct dvb_frontend *fe, u8 sw1, u8 sw2, u8 sw3); 88extern int dib0090_set_vga(struct dvb_frontend *fe, u8 onoff); 89extern int dib0090_update_rframp_7090(struct dvb_frontend *fe, 90 u8 cfg_sensitivity); 91extern int dib0090_update_tuning_table_7090(struct dvb_frontend *fe, 92 u8 cfg_sensitivity); 93#else 94static inline struct dvb_frontend *dib0090_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config) 95{ 96 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 97 return NULL; 98} 99 100static inline struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, struct dib0090_config *config) 101{ 102 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 103 return NULL; 104} 105 106static inline void dib0090_dcc_freq(struct dvb_frontend *fe, u8 fast) 107{ 108 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 109} 110 111static inline void dib0090_pwm_gain_reset(struct dvb_frontend *fe) 112{ 113 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 114} 115 116static inline u16 dib0090_get_wbd_target(struct dvb_frontend *tuner) 117{ 118 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 119 return 0; 120} 121 122static inline u16 dib0090_get_wbd_offset(struct dvb_frontend *fe) 123{ 124 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 125 return 0; 126} 127 128static inline int dib0090_gain_control(struct dvb_frontend *fe) 129{ 130 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 131 return -ENODEV; 132} 133 134static inline enum frontend_tune_state dib0090_get_tune_state(struct dvb_frontend *fe) 135{ 136 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 137 return CT_DONE; 138} 139 140static inline int dib0090_set_tune_state(struct dvb_frontend *fe, enum frontend_tune_state tune_state) 141{ 142 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 143 return -ENODEV; 144} 145 146static inline void dib0090_get_current_gain(struct dvb_frontend *fe, u16 * rf, u16 * bb, u16 * rf_gain_limit, u16 * rflt) 147{ 148 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 149} 150 151static inline void dib0090_set_dc_servo(struct dvb_frontend *fe, u8 DC_servo_cutoff) 152{ 153 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 154} 155 156static inline int dib0090_set_switch(struct dvb_frontend *fe, 157 u8 sw1, u8 sw2, u8 sw3) 158{ 159 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 160 return -ENODEV; 161} 162 163static inline int dib0090_set_vga(struct dvb_frontend *fe, u8 onoff) 164{ 165 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 166 return -ENODEV; 167} 168 169static inline int dib0090_update_rframp_7090(struct dvb_frontend *fe, 170 u8 cfg_sensitivity) 171{ 172 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 173 return -ENODEV; 174} 175 176static inline int dib0090_update_tuning_table_7090(struct dvb_frontend *fe, 177 u8 cfg_sensitivity) 178{ 179 printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__); 180 return -ENODEV; 181} 182#endif 183 184#endif