Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / media / dvb-frontends / dib0090.h
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
13 struct dvb_frontend;
14 struct i2c_adapter;
15
16 #define DEFAULT_DIB0090_I2C_ADDRESS 0x60
17
18 struct 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
30 struct 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
39 struct dib0090_low_if_offset_table {
40         int std;
41         u32 RF_freq;
42         s32 offset_khz;
43 };
44
45 struct 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_REACHABLE(CONFIG_DVB_TUNER_DIB0090)
79 extern struct dvb_frontend *dib0090_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config);
80 extern struct dvb_frontend *dib0090_fw_register(struct dvb_frontend *fe, struct i2c_adapter *i2c, const struct dib0090_config *config);
81 extern void dib0090_dcc_freq(struct dvb_frontend *fe, u8 fast);
82 extern void dib0090_pwm_gain_reset(struct dvb_frontend *fe);
83 extern u16 dib0090_get_wbd_target(struct dvb_frontend *tuner);
84 extern u16 dib0090_get_wbd_offset(struct dvb_frontend *fe);
85 extern int dib0090_gain_control(struct dvb_frontend *fe);
86 extern enum frontend_tune_state dib0090_get_tune_state(struct dvb_frontend *fe);
87 extern int dib0090_set_tune_state(struct dvb_frontend *fe, enum frontend_tune_state tune_state);
88 extern void dib0090_get_current_gain(struct dvb_frontend *fe, u16 * rf, u16 * bb, u16 * rf_gain_limit, u16 * rflt);
89 extern void dib0090_set_dc_servo(struct dvb_frontend *fe, u8 DC_servo_cutoff);
90 extern int dib0090_set_switch(struct dvb_frontend *fe, u8 sw1, u8 sw2, u8 sw3);
91 extern int dib0090_set_vga(struct dvb_frontend *fe, u8 onoff);
92 extern int dib0090_update_rframp_7090(struct dvb_frontend *fe,
93                 u8 cfg_sensitivity);
94 extern int dib0090_update_tuning_table_7090(struct dvb_frontend *fe,
95                 u8 cfg_sensitivity);
96 #else
97 static 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
103 static 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
109 static 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
114 static inline void dib0090_pwm_gain_reset(struct dvb_frontend *fe)
115 {
116         printk(KERN_WARNING "%s: driver disabled by Kconfig\n", __func__);
117 }
118
119 static 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
125 static 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
131 static 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
137 static 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
143 static 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
149 static 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
154 static 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
159 static 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
166 static 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
172 static 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
179 static 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