[go: nahoru, domu]

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