dibx000_common.h 6.1 KB
Newer Older
1 2 3 4
#ifndef DIBX000_COMMON_H
#define DIBX000_COMMON_H

enum dibx000_i2c_interface {
5
	DIBX000_I2C_INTERFACE_TUNER = 0,
6
	DIBX000_I2C_INTERFACE_GPIO_1_2 = 1,
7 8
	DIBX000_I2C_INTERFACE_GPIO_3_4 = 2,
	DIBX000_I2C_INTERFACE_GPIO_6_7 = 3
9 10 11 12 13 14 15
};

struct dibx000_i2c_master {
#define DIB3000MC 1
#define DIB7000   2
#define DIB7000P  11
#define DIB7000MC 12
16
#define DIB8000   13
17 18 19 20
	u16 device_rev;

	enum dibx000_i2c_interface selected_interface;

21
/*	struct i2c_adapter  tuner_i2c_adap; */
22
	struct i2c_adapter gated_tuner_i2c_adap;
23 24 25
	struct i2c_adapter master_i2c_adap_gpio12;
	struct i2c_adapter master_i2c_adap_gpio34;
	struct i2c_adapter master_i2c_adap_gpio67;
26 27

	struct i2c_adapter *i2c_adap;
28
	u8 i2c_addr;
29 30

	u16 base_reg;
31 32 33 34 35

	/* for the I2C transfer */
	struct i2c_msg msg[34];
	u8 i2c_write_buffer[8];
	u8 i2c_read_buffer[2];
36 37
};

38
extern int dibx000_init_i2c_master(struct dibx000_i2c_master *mst,
39 40
					u16 device_rev, struct i2c_adapter *i2c_adap,
					u8 i2c_addr);
41
extern struct i2c_adapter *dibx000_get_i2c_adapter(struct dibx000_i2c_master
42 43 44
							*mst,
							enum dibx000_i2c_interface
							intf, int gating);
45
extern void dibx000_exit_i2c_master(struct dibx000_i2c_master *mst);
46
extern void dibx000_reset_i2c_master(struct dibx000_i2c_master *mst);
47
extern int dibx000_i2c_set_speed(struct i2c_adapter *i2c_adap, u16 speed);
48

49 50
extern u32 systime(void);

51 52 53
#define BAND_LBAND 0x01
#define BAND_UHF   0x02
#define BAND_VHF   0x04
54
#define BAND_SBAND 0x08
55
#define BAND_FM	   0x10
56
#define BAND_CBAND 0x20
57

58
#define BAND_OF_FREQUENCY(freq_kHz) ((freq_kHz) <= 170000 ? BAND_CBAND : \
59
									(freq_kHz) <= 115000 ? BAND_FM : \
60 61 62
									(freq_kHz) <= 250000 ? BAND_VHF : \
									(freq_kHz) <= 863000 ? BAND_UHF : \
									(freq_kHz) <= 2000000 ? BAND_LBAND : BAND_SBAND )
63 64

struct dibx000_agc_config {
65 66
	/* defines the capabilities of this AGC-setting - using the BAND_-defines */
	u8 band_caps;
67 68 69 70 71 72

	u16 setup;

	u16 inv_gain;
	u16 time_stabiliz;

73
	u8 alpha_level;
74 75
	u16 thlock;

76
	u8 wbd_inv;
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
	u16 wbd_ref;
	u8 wbd_sel;
	u8 wbd_alpha;

	u16 agc1_max;
	u16 agc1_min;
	u16 agc2_max;
	u16 agc2_min;

	u8 agc1_pt1;
	u8 agc1_pt2;
	u8 agc1_pt3;

	u8 agc1_slope1;
	u8 agc1_slope2;

	u8 agc2_pt1;
	u8 agc2_pt2;

	u8 agc2_slope1;
	u8 agc2_slope2;

	u8 alpha_mant;
	u8 alpha_exp;

	u8 beta_mant;
	u8 beta_exp;

	u8 perform_agc_softsplit;

	struct {
		u16 min;
		u16 max;
		u16 min_thres;
		u16 max_thres;
	} split;
};

struct dibx000_bandwidth_config {
116 117
	u32 internal;
	u32 sampling;
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134

	u8 pll_prediv;
	u8 pll_ratio;
	u8 pll_range;
	u8 pll_reset;
	u8 pll_bypass;

	u8 enable_refdiv;
	u8 bypclk_div;
	u8 IO_CLK_en_core;
	u8 ADClkSrc;
	u8 modulo;

	u16 sad_cfg;

	u32 ifreq;
	u32 timf;
135 136

	u32 xtal_hz;
137 138 139 140 141 142 143 144 145 146 147
};

enum dibx000_adc_states {
	DIBX000_SLOW_ADC_ON = 0,
	DIBX000_SLOW_ADC_OFF,
	DIBX000_ADC_ON,
	DIBX000_ADC_OFF,
	DIBX000_VBG_ENABLE,
	DIBX000_VBG_DISABLE,
};

148
#define BANDWIDTH_TO_KHZ(v) ((v) == BANDWIDTH_8_MHZ  ? 8000 : \
149
				(v) == BANDWIDTH_7_MHZ  ? 7000 : \
150
				(v) == BANDWIDTH_6_MHZ  ? 6000 : 8000)
151

152 153 154 155 156
#define BANDWIDTH_TO_INDEX(v) ( \
	(v) == 8000 ? BANDWIDTH_8_MHZ : \
		(v) == 7000 ? BANDWIDTH_7_MHZ : \
		(v) == 6000 ? BANDWIDTH_6_MHZ : BANDWIDTH_8_MHZ )

157
/* Chip output mode. */
158 159 160 161 162 163 164
#define OUTMODE_HIGH_Z              0
#define OUTMODE_MPEG2_PAR_GATED_CLK 1
#define OUTMODE_MPEG2_PAR_CONT_CLK  2
#define OUTMODE_MPEG2_SERIAL        7
#define OUTMODE_DIVERSITY           4
#define OUTMODE_MPEG2_FIFO          5
#define OUTMODE_ANALOG_ADC          6
165

166 167 168 169
#define INPUT_MODE_OFF                0x11
#define INPUT_MODE_DIVERSITY          0x12
#define INPUT_MODE_MPEG               0x13

170
enum frontend_tune_state {
171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188
	CT_TUNER_START = 10,
	CT_TUNER_STEP_0,
	CT_TUNER_STEP_1,
	CT_TUNER_STEP_2,
	CT_TUNER_STEP_3,
	CT_TUNER_STEP_4,
	CT_TUNER_STEP_5,
	CT_TUNER_STEP_6,
	CT_TUNER_STEP_7,
	CT_TUNER_STOP,

	CT_AGC_START = 20,
	CT_AGC_STEP_0,
	CT_AGC_STEP_1,
	CT_AGC_STEP_2,
	CT_AGC_STEP_3,
	CT_AGC_STEP_4,
	CT_AGC_STOP,
189 190

	CT_DEMOD_START = 30,
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206
	CT_DEMOD_STEP_1,
	CT_DEMOD_STEP_2,
	CT_DEMOD_STEP_3,
	CT_DEMOD_STEP_4,
	CT_DEMOD_STEP_5,
	CT_DEMOD_STEP_6,
	CT_DEMOD_STEP_7,
	CT_DEMOD_STEP_8,
	CT_DEMOD_STEP_9,
	CT_DEMOD_STEP_10,
	CT_DEMOD_SEARCH_NEXT = 41,
	CT_DEMOD_STEP_LOCKED,
	CT_DEMOD_STOP,

	CT_DONE = 100,
	CT_SHUTDOWN,
207 208 209 210 211 212

};

struct dvb_frontend_parametersContext {
#define CHANNEL_STATUS_PARAMETERS_UNKNOWN   0x01
#define CHANNEL_STATUS_PARAMETERS_SET       0x02
213 214 215 216
	u8 status;
	u32 tune_time_estimation[2];
	s32 tps_available;
	u16 tps[9];
217 218 219 220 221 222 223 224 225 226 227 228 229 230
};

#define FE_STATUS_TUNE_FAILED          0
#define FE_STATUS_TUNE_TIMED_OUT      -1
#define FE_STATUS_TUNE_TIME_TOO_SHORT -2
#define FE_STATUS_TUNE_PENDING        -3
#define FE_STATUS_STD_SUCCESS         -4
#define FE_STATUS_FFT_SUCCESS         -5
#define FE_STATUS_DEMOD_SUCCESS       -6
#define FE_STATUS_LOCKED              -7
#define FE_STATUS_DATA_LOCKED         -8

#define FE_CALLBACK_TIME_NEVER 0xffffffff

231
#define ABS(x) ((x < 0) ? (-x) : (x))
232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276

#define DATA_BUS_ACCESS_MODE_8BIT                 0x01
#define DATA_BUS_ACCESS_MODE_16BIT                0x02
#define DATA_BUS_ACCESS_MODE_NO_ADDRESS_INCREMENT 0x10

struct dibGPIOFunction {
#define BOARD_GPIO_COMPONENT_BUS_ADAPTER 1
#define BOARD_GPIO_COMPONENT_DEMOD       2
	u8 component;

#define BOARD_GPIO_FUNCTION_BOARD_ON      1
#define BOARD_GPIO_FUNCTION_BOARD_OFF     2
#define BOARD_GPIO_FUNCTION_COMPONENT_ON  3
#define BOARD_GPIO_FUNCTION_COMPONENT_OFF 4
#define BOARD_GPIO_FUNCTION_SUBBAND_PWM   5
#define BOARD_GPIO_FUNCTION_SUBBAND_GPIO   6
	u8 function;

/* mask, direction and value are used specify which GPIO to change GPIO0
 * is LSB and possible GPIO31 is MSB.  The same bit-position as in the
 * mask is used for the direction and the value. Direction == 1 is OUT,
 * 0 == IN. For direction "OUT" value is either 1 or 0, for direction IN
 * value has no meaning.
 *
 * In case of BOARD_GPIO_FUNCTION_PWM mask is giving the GPIO to be
 * used to do the PWM. Direction gives the PWModulator to be used.
 * Value gives the PWM value in device-dependent scale.
 */
	u32 mask;
	u32 direction;
	u32 value;
};

#define MAX_NB_SUBBANDS   8
struct dibSubbandSelection {
	u8  size; /* Actual number of subbands. */
	struct {
		u16 f_mhz;
		struct dibGPIOFunction gpio;
	} subband[MAX_NB_SUBBANDS];
};

#define DEMOD_TIMF_SET    0x00
#define DEMOD_TIMF_GET    0x01
#define DEMOD_TIMF_UPDATE 0x02
277

278
#endif