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