Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 1 | /* |
| 2 | * For the Realtek RTL chip RTL2831U |
| 3 | * Realtek Release Date: 2008-03-14, ver 080314 |
| 4 | * Realtek version RTL2831 Linux driver version 080314 |
| 5 | * ver 080314 |
| 6 | * |
| 7 | * for linux kernel version 2.6.21.4 - 2.6.22-14 |
| 8 | * support MXL5005s and MT2060 tuners (support tuner auto-detecting) |
| 9 | * support two IR types -- RC5 and NEC |
| 10 | * |
| 11 | * Known boards with Realtek RTL chip RTL2821U |
| 12 | * Freecom USB stick 14aa:0160 (version 4) |
| 13 | * Conceptronic CTVDIGRCU |
| 14 | * |
| 15 | * Copyright (c) 2008 Realtek |
| 16 | * Copyright (c) 2008 Jan Hoogenraad, Barnaby Shearer, Andy Hasper |
| 17 | * This code is placed under the terms of the GNU General Public License |
| 18 | * |
| 19 | * Released by Realtek under GPLv2. |
| 20 | * Thanks to Realtek for a lot of support we received ! |
| 21 | * |
| 22 | * Revision: 080314 - original version |
| 23 | */ |
| 24 | |
| 25 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 26 | #ifndef __MXL5005S_H |
| 27 | #define __MXL5005S_H |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 28 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 29 | /* |
| 30 | * The following context is source code provided by MaxLinear. |
| 31 | * MaxLinear source code - Common.h |
| 32 | */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 33 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 34 | typedef void *HANDLE; /* Pointer to memory location */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 35 | |
| 36 | #define TUNER_REGS_NUM 104 |
| 37 | #define INITCTRL_NUM 40 |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 38 | |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 39 | #ifdef _MXL_PRODUCTION |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 40 | #define CHCTRL_NUM 39 |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 41 | #else |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 42 | #define CHCTRL_NUM 36 |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 43 | #endif |
| 44 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 45 | #define MXLCTRL_NUM 189 |
| 46 | #define MASTER_CONTROL_ADDR 9 |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 47 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 48 | /* Enumeration of AGC Mode */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 49 | typedef enum |
| 50 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 51 | MXL_DUAL_AGC = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 52 | MXL_SINGLE_AGC |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 53 | } AGC_Mode; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 54 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 55 | /* Enumeration of Master Control Register State */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 56 | typedef enum |
| 57 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 58 | MC_LOAD_START = 1, |
| 59 | MC_POWER_DOWN, |
| 60 | MC_SYNTH_RESET, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 61 | MC_SEQ_OFF |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 62 | } Master_Control_State; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 63 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 64 | /* Enumeration of MXL5005 Tuner Mode */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 65 | typedef enum |
| 66 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 67 | MXL_ANALOG_MODE = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 68 | MXL_DIGITAL_MODE |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 69 | } Tuner_Mode; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 70 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 71 | /* Enumeration of MXL5005 Tuner IF Mode */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 72 | typedef enum |
| 73 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 74 | MXL_ZERO_IF = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 75 | MXL_LOW_IF |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 76 | } Tuner_IF_Mode; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 77 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 78 | /* Enumeration of MXL5005 Tuner Clock Out Mode */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 79 | typedef enum |
| 80 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 81 | MXL_CLOCK_OUT_DISABLE = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 82 | MXL_CLOCK_OUT_ENABLE |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 83 | } Tuner_Clock_Out; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 84 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 85 | /* Enumeration of MXL5005 Tuner Div Out Mode */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 86 | typedef enum |
| 87 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 88 | MXL_DIV_OUT_1 = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 89 | MXL_DIV_OUT_4 |
| 90 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 91 | } Tuner_Div_Out; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 92 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 93 | /* Enumeration of MXL5005 Tuner Pull-up Cap Select Mode */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 94 | typedef enum |
| 95 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 96 | MXL_CAP_SEL_DISABLE = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 97 | MXL_CAP_SEL_ENABLE |
| 98 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 99 | } Tuner_Cap_Select; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 100 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 101 | /* Enumeration of MXL5005 Tuner RSSI Mode */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 102 | typedef enum |
| 103 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 104 | MXL_RSSI_DISABLE = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 105 | MXL_RSSI_ENABLE |
| 106 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 107 | } Tuner_RSSI; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 108 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 109 | /* Enumeration of MXL5005 Tuner Modulation Type */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 110 | typedef enum |
| 111 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 112 | MXL_DEFAULT_MODULATION = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 113 | MXL_DVBT, |
| 114 | MXL_ATSC, |
| 115 | MXL_QAM, |
| 116 | MXL_ANALOG_CABLE, |
| 117 | MXL_ANALOG_OTA |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 118 | } Tuner_Modu_Type; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 119 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 120 | /* Enumeration of MXL5005 Tuner Tracking Filter Type */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 121 | typedef enum |
| 122 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 123 | MXL_TF_DEFAULT = 0, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 124 | MXL_TF_OFF, |
| 125 | MXL_TF_C, |
| 126 | MXL_TF_C_H, |
| 127 | MXL_TF_D, |
| 128 | MXL_TF_D_L, |
| 129 | MXL_TF_E, |
| 130 | MXL_TF_F, |
| 131 | MXL_TF_E_2, |
| 132 | MXL_TF_E_NA, |
| 133 | MXL_TF_G |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 134 | } Tuner_TF_Type; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 135 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 136 | /* MXL5005 Tuner Register Struct */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 137 | typedef struct _TunerReg_struct |
| 138 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 139 | u16 Reg_Num; /* Tuner Register Address */ |
| 140 | u16 Reg_Val; /* Current sofware programmed value waiting to be writen */ |
| 141 | } TunerReg_struct; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 142 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 143 | /* MXL5005 Tuner Control Struct */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 144 | typedef struct _TunerControl_struct { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 145 | u16 Ctrl_Num; /* Control Number */ |
| 146 | u16 size; /* Number of bits to represent Value */ |
| 147 | u16 addr[25]; /* Array of Tuner Register Address for each bit position */ |
| 148 | u16 bit[25]; /* Array of bit position in Register Address for each bit position */ |
| 149 | u16 val[25]; /* Binary representation of Value */ |
| 150 | } TunerControl_struct; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 151 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 152 | /* MXL5005 Tuner Struct */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 153 | typedef struct _Tuner_struct |
| 154 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 155 | u8 Mode; /* 0: Analog Mode ; 1: Digital Mode */ |
| 156 | u8 IF_Mode; /* for Analog Mode, 0: zero IF; 1: low IF */ |
| 157 | u32 Chan_Bandwidth; /* filter channel bandwidth (6, 7, 8) */ |
| 158 | u32 IF_OUT; /* Desired IF Out Frequency */ |
| 159 | u16 IF_OUT_LOAD; /* IF Out Load Resistor (200/300 Ohms) */ |
| 160 | u32 RF_IN; /* RF Input Frequency */ |
| 161 | u32 Fxtal; /* XTAL Frequency */ |
| 162 | u8 AGC_Mode; /* AGC Mode 0: Dual AGC; 1: Single AGC */ |
| 163 | u16 TOP; /* Value: take over point */ |
| 164 | u8 CLOCK_OUT; /* 0: turn off clock out; 1: turn on clock out */ |
| 165 | u8 DIV_OUT; /* 4MHz or 16MHz */ |
| 166 | u8 CAPSELECT; /* 0: disable On-Chip pulling cap; 1: enable */ |
| 167 | u8 EN_RSSI; /* 0: disable RSSI; 1: enable RSSI */ |
| 168 | u8 Mod_Type; /* Modulation Type; */ |
| 169 | /* 0 - Default; 1 - DVB-T; 2 - ATSC; 3 - QAM; 4 - Analog Cable */ |
| 170 | u8 TF_Type; /* Tracking Filter Type */ |
| 171 | /* 0 - Default; 1 - Off; 2 - Type C; 3 - Type C-H */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 172 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 173 | /* Calculated Settings */ |
| 174 | u32 RF_LO; /* Synth RF LO Frequency */ |
| 175 | u32 IF_LO; /* Synth IF LO Frequency */ |
| 176 | u32 TG_LO; /* Synth TG_LO Frequency */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 177 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 178 | /* Pointers to ControlName Arrays */ |
| 179 | u16 Init_Ctrl_Num; /* Number of INIT Control Names */ |
| 180 | TunerControl_struct |
| 181 | Init_Ctrl[INITCTRL_NUM]; /* INIT Control Names Array Pointer */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 182 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 183 | u16 CH_Ctrl_Num; /* Number of CH Control Names */ |
| 184 | TunerControl_struct |
| 185 | CH_Ctrl[CHCTRL_NUM]; /* CH Control Name Array Pointer */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 186 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 187 | u16 MXL_Ctrl_Num; /* Number of MXL Control Names */ |
| 188 | TunerControl_struct |
| 189 | MXL_Ctrl[MXLCTRL_NUM]; /* MXL Control Name Array Pointer */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 190 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 191 | /* Pointer to Tuner Register Array */ |
| 192 | u16 TunerRegs_Num; /* Number of Tuner Registers */ |
| 193 | TunerReg_struct |
| 194 | TunerRegs[TUNER_REGS_NUM]; /* Tuner Register Array Pointer */ |
| 195 | |
| 196 | } Tuner_struct; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 197 | |
| 198 | typedef enum |
| 199 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 200 | /* Initialization Control Names */ |
| 201 | DN_IQTN_AMP_CUT = 1, /* 1 */ |
| 202 | BB_MODE, /* 2 */ |
| 203 | BB_BUF, /* 3 */ |
| 204 | BB_BUF_OA, /* 4 */ |
| 205 | BB_ALPF_BANDSELECT, /* 5 */ |
| 206 | BB_IQSWAP, /* 6 */ |
| 207 | BB_DLPF_BANDSEL, /* 7 */ |
| 208 | RFSYN_CHP_GAIN, /* 8 */ |
| 209 | RFSYN_EN_CHP_HIGAIN, /* 9 */ |
| 210 | AGC_IF, /* 10 */ |
| 211 | AGC_RF, /* 11 */ |
| 212 | IF_DIVVAL, /* 12 */ |
| 213 | IF_VCO_BIAS, /* 13 */ |
| 214 | CHCAL_INT_MOD_IF, /* 14 */ |
| 215 | CHCAL_FRAC_MOD_IF, /* 15 */ |
| 216 | DRV_RES_SEL, /* 16 */ |
| 217 | I_DRIVER, /* 17 */ |
| 218 | EN_AAF, /* 18 */ |
| 219 | EN_3P, /* 19 */ |
| 220 | EN_AUX_3P, /* 20 */ |
| 221 | SEL_AAF_BAND, /* 21 */ |
| 222 | SEQ_ENCLK16_CLK_OUT, /* 22 */ |
| 223 | SEQ_SEL4_16B, /* 23 */ |
| 224 | XTAL_CAPSELECT, /* 24 */ |
| 225 | IF_SEL_DBL, /* 25 */ |
| 226 | RFSYN_R_DIV, /* 26 */ |
| 227 | SEQ_EXTSYNTHCALIF, /* 27 */ |
| 228 | SEQ_EXTDCCAL, /* 28 */ |
| 229 | AGC_EN_RSSI, /* 29 */ |
| 230 | RFA_ENCLKRFAGC, /* 30 */ |
| 231 | RFA_RSSI_REFH, /* 31 */ |
| 232 | RFA_RSSI_REF, /* 32 */ |
| 233 | RFA_RSSI_REFL, /* 33 */ |
| 234 | RFA_FLR, /* 34 */ |
| 235 | RFA_CEIL, /* 35 */ |
| 236 | SEQ_EXTIQFSMPULSE, /* 36 */ |
| 237 | OVERRIDE_1, /* 37 */ |
| 238 | BB_INITSTATE_DLPF_TUNE, /* 38 */ |
| 239 | TG_R_DIV, /* 39 */ |
| 240 | EN_CHP_LIN_B, /* 40 */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 241 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 242 | /* Channel Change Control Names */ |
| 243 | DN_POLY = 51, /* 51 */ |
| 244 | DN_RFGAIN, /* 52 */ |
| 245 | DN_CAP_RFLPF, /* 53 */ |
| 246 | DN_EN_VHFUHFBAR, /* 54 */ |
| 247 | DN_GAIN_ADJUST, /* 55 */ |
| 248 | DN_IQTNBUF_AMP, /* 56 */ |
| 249 | DN_IQTNGNBFBIAS_BST, /* 57 */ |
| 250 | RFSYN_EN_OUTMUX, /* 58 */ |
| 251 | RFSYN_SEL_VCO_OUT, /* 59 */ |
| 252 | RFSYN_SEL_VCO_HI, /* 60 */ |
| 253 | RFSYN_SEL_DIVM, /* 61 */ |
| 254 | RFSYN_RF_DIV_BIAS, /* 62 */ |
| 255 | DN_SEL_FREQ, /* 63 */ |
| 256 | RFSYN_VCO_BIAS, /* 64 */ |
| 257 | CHCAL_INT_MOD_RF, /* 65 */ |
| 258 | CHCAL_FRAC_MOD_RF, /* 66 */ |
| 259 | RFSYN_LPF_R, /* 67 */ |
| 260 | CHCAL_EN_INT_RF, /* 68 */ |
| 261 | TG_LO_DIVVAL, /* 69 */ |
| 262 | TG_LO_SELVAL, /* 70 */ |
| 263 | TG_DIV_VAL, /* 71 */ |
| 264 | TG_VCO_BIAS, /* 72 */ |
| 265 | SEQ_EXTPOWERUP, /* 73 */ |
| 266 | OVERRIDE_2, /* 74 */ |
| 267 | OVERRIDE_3, /* 75 */ |
| 268 | OVERRIDE_4, /* 76 */ |
| 269 | SEQ_FSM_PULSE, /* 77 */ |
| 270 | GPIO_4B, /* 78 */ |
| 271 | GPIO_3B, /* 79 */ |
| 272 | GPIO_4, /* 80 */ |
| 273 | GPIO_3, /* 81 */ |
| 274 | GPIO_1B, /* 82 */ |
| 275 | DAC_A_ENABLE, /* 83 */ |
| 276 | DAC_B_ENABLE, /* 84 */ |
| 277 | DAC_DIN_A, /* 85 */ |
| 278 | DAC_DIN_B, /* 86 */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 279 | #ifdef _MXL_PRODUCTION |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 280 | RFSYN_EN_DIV, /* 87 */ |
| 281 | RFSYN_DIVM, /* 88 */ |
| 282 | DN_BYPASS_AGC_I2C /* 89 */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 283 | #endif |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 284 | } MXL5005_ControlName; |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 285 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 286 | /* End of common.h */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 287 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 288 | /* |
| 289 | * The following context is source code provided by MaxLinear. |
| 290 | * MaxLinear source code - Common_MXL.h (?) |
| 291 | */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 292 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 293 | void InitTunerControls(Tuner_struct *Tuner); |
| 294 | u16 MXL_BlockInit(Tuner_struct *Tuner); |
| 295 | u16 MXL5005_RegisterInit(Tuner_struct *Tuner); |
| 296 | u16 MXL5005_ControlInit(Tuner_struct *Tuner); |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 297 | #ifdef _MXL_INTERNAL |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 298 | u16 MXL5005_MXLControlInit(Tuner_struct *Tuner); |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 299 | #endif |
| 300 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 301 | u16 MXL5005_TunerConfig(Tuner_struct *Tuner, |
| 302 | u8 Mode, /* 0: Analog Mode ; 1: Digital Mode */ |
| 303 | u8 IF_mode, /* for Analog Mode, 0: zero IF; 1: low IF */ |
| 304 | u32 Bandwidth, /* filter channel bandwidth (6, 7, 8) */ |
| 305 | u32 IF_out, /* Desired IF Out Frequency */ |
| 306 | u32 Fxtal, /* XTAL Frequency */ |
| 307 | u8 AGC_Mode, /* AGC Mode - Dual AGC: 0, Single AGC: 1 */ |
| 308 | u16 TOP, /* 0: Dual AGC; Value: take over point */ |
| 309 | u16 IF_OUT_LOAD, /* IF Out Load Resistor (200 / 300 Ohms) */ |
| 310 | u8 CLOCK_OUT, /* 0: turn off clock out; 1: turn on clock out */ |
| 311 | u8 DIV_OUT, /* 4MHz or 16MHz */ |
| 312 | u8 CAPSELECT, /* 0: disable On-Chip pulling cap; 1: enable */ |
| 313 | u8 EN_RSSI, /* 0: disable RSSI; 1: enable RSSI */ |
| 314 | u8 Mod_Type, /* Modulation Type; */ |
| 315 | /* 0 - Default; 1 - DVB-T; 2 - ATSC; 3 - QAM; 4 - Analog Cable */ |
| 316 | u8 TF_Type /* Tracking Filter Type */ |
| 317 | /* 0 - Default; 1 - Off; 2 - Type C; 3 - Type C-H */ |
| 318 | ); |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 319 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 320 | void MXL_SynthIFLO_Calc(Tuner_struct *Tuner); |
| 321 | void MXL_SynthRFTGLO_Calc(Tuner_struct *Tuner); |
| 322 | u16 MXL_RegWrite(Tuner_struct *Tuner, u8 RegNum, u8 RegVal); |
| 323 | u16 MXL_RegRead(Tuner_struct *Tuner, u8 RegNum, u8 *RegVal); |
| 324 | u16 MXL_ControlWrite(Tuner_struct *Tuner, u16 ControlNum, u32 value); |
| 325 | u16 MXL_ControlWrite_Group(Tuner_struct *Tuner, u16 ControlNum, u32 value, u16 controlGroup); |
| 326 | u16 MXL_ControlRead(Tuner_struct *Tuner, u16 ControlNum, u32 * value); |
| 327 | u16 MXL_ControlRegRead(Tuner_struct *Tuner, u16 ControlNum, u8 *RegNum, int *count); |
| 328 | void MXL_RegWriteBit(Tuner_struct *Tuner, u8 address, u8 bit, u8 bitVal); |
| 329 | u16 MXL_IFSynthInit(Tuner_struct * Tuner ); |
| 330 | u16 MXL_TuneRF(Tuner_struct *Tuner, u32 RF_Freq); |
| 331 | u16 MXL_OverwriteICDefault(Tuner_struct *Tuner); |
| 332 | u16 MXL_SetGPIO(Tuner_struct *Tuner, u8 GPIO_Num, u8 GPIO_Val); |
| 333 | u32 MXL_Ceiling(u32 value, u32 resolution); |
| 334 | u32 MXL_GetXtalInt(u32 Xtal_Freq); |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 335 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 336 | u16 MXL_GetInitRegister(Tuner_struct *Tuner, u8 * RegNum, u8 *RegVal, int *count); |
| 337 | u16 MXL_GetCHRegister(Tuner_struct *Tuner, u8 * RegNum, u8 *RegVal, int *count); |
| 338 | u16 MXL_GetCHRegister_ZeroIF(Tuner_struct *Tuner, u8 * RegNum, u8 *RegVal, int *count); |
| 339 | u16 MXL_GetCHRegister_LowIF(Tuner_struct *Tuner, u8 * RegNum, u8 *RegVal, int *count); |
| 340 | u16 MXL_GetMasterControl(u8 *MasterReg, int state); |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 341 | |
| 342 | #ifdef _MXL_PRODUCTION |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 343 | u16 MXL_VCORange_Test(Tuner_struct *Tuner, int VCO_Range); |
| 344 | u16 MXL_Hystersis_Test(Tuner_struct *Tuner, int Hystersis); |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 345 | #endif |
| 346 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 347 | /* Constants */ |
| 348 | #define MXL5005S_REG_WRITING_TABLE_LEN_MAX 104 |
| 349 | #define MXL5005S_LATCH_BYTE 0xfe |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 350 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 351 | /* Register address, MSB, and LSB */ |
| 352 | #define MXL5005S_BB_IQSWAP_ADDR 59 |
| 353 | #define MXL5005S_BB_IQSWAP_MSB 0 |
| 354 | #define MXL5005S_BB_IQSWAP_LSB 0 |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 355 | |
| 356 | #define MXL5005S_BB_DLPF_BANDSEL_ADDR 53 |
| 357 | #define MXL5005S_BB_DLPF_BANDSEL_MSB 4 |
| 358 | #define MXL5005S_BB_DLPF_BANDSEL_LSB 3 |
| 359 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 360 | /* Standard modes */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 361 | enum |
| 362 | { |
| 363 | MXL5005S_STANDARD_DVBT, |
| 364 | MXL5005S_STANDARD_ATSC, |
| 365 | }; |
| 366 | #define MXL5005S_STANDARD_MODE_NUM 2 |
| 367 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 368 | /* Bandwidth modes */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 369 | enum |
| 370 | { |
| 371 | MXL5005S_BANDWIDTH_6MHZ = 6000000, |
| 372 | MXL5005S_BANDWIDTH_7MHZ = 7000000, |
| 373 | MXL5005S_BANDWIDTH_8MHZ = 8000000, |
| 374 | }; |
| 375 | #define MXL5005S_BANDWIDTH_MODE_NUM 3 |
| 376 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 377 | /* Top modes */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 378 | enum |
| 379 | { |
| 380 | MXL5005S_TOP_5P5 = 55, |
| 381 | MXL5005S_TOP_7P2 = 72, |
| 382 | MXL5005S_TOP_9P2 = 92, |
| 383 | MXL5005S_TOP_11P0 = 110, |
| 384 | MXL5005S_TOP_12P9 = 129, |
| 385 | MXL5005S_TOP_14P7 = 147, |
| 386 | MXL5005S_TOP_16P8 = 168, |
| 387 | MXL5005S_TOP_19P4 = 194, |
| 388 | MXL5005S_TOP_21P2 = 212, |
| 389 | MXL5005S_TOP_23P2 = 232, |
| 390 | MXL5005S_TOP_25P2 = 252, |
| 391 | MXL5005S_TOP_27P1 = 271, |
| 392 | MXL5005S_TOP_29P2 = 292, |
| 393 | MXL5005S_TOP_31P7 = 317, |
| 394 | MXL5005S_TOP_34P9 = 349, |
| 395 | }; |
| 396 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 397 | /* IF output load */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 398 | enum |
| 399 | { |
| 400 | MXL5005S_IF_OUTPUT_LOAD_200_OHM = 200, |
| 401 | MXL5005S_IF_OUTPUT_LOAD_300_OHM = 300, |
| 402 | }; |
| 403 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 404 | /* MxL5005S extra module alias */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 405 | typedef struct MXL5005S_EXTRA_MODULE_TAG MXL5005S_EXTRA_MODULE; |
| 406 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 407 | /* MxL5005S register setting function pointer */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 408 | typedef int |
| 409 | (*MXL5005S_FP_SET_REGS_WITH_TABLE)( |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 410 | struct dvb_usb_device* dib, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 411 | TUNER_MODULE *pTuner, |
| 412 | unsigned char *pAddrTable, |
| 413 | unsigned char *pByteTable, |
| 414 | int TableLen |
| 415 | ); |
| 416 | |
| 417 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 418 | /* MxL5005S register mask bits setting function pointer */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 419 | typedef int |
| 420 | (*MXL5005S_FP_SET_REG_MASK_BITS)( |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 421 | struct dvb_usb_device* dib, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 422 | TUNER_MODULE *pTuner, |
| 423 | unsigned char RegAddr, |
| 424 | unsigned char Msb, |
| 425 | unsigned char Lsb, |
| 426 | const unsigned char WritingValue |
| 427 | ); |
| 428 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 429 | /* MxL5005S spectrum mode setting function pointer */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 430 | typedef int |
| 431 | (*MXL5005S_FP_SET_SPECTRUM_MODE)( |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 432 | struct dvb_usb_device* dib, |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 433 | TUNER_MODULE *pTuner, |
| 434 | int SpectrumMode |
| 435 | ); |
| 436 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 437 | /* MxL5005S bandwidth setting function pointer */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 438 | typedef int |
| 439 | (*MXL5005S_FP_SET_BANDWIDTH_HZ)( |
| 440 | struct dvb_usb_device* dib, |
| 441 | TUNER_MODULE *pTuner, |
| 442 | unsigned long BandwidthHz |
| 443 | ); |
| 444 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 445 | /* MxL5005S extra module */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 446 | struct MXL5005S_EXTRA_MODULE_TAG |
| 447 | { |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 448 | /* MxL5005S function pointers */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 449 | MXL5005S_FP_SET_REGS_WITH_TABLE SetRegsWithTable; |
| 450 | MXL5005S_FP_SET_REG_MASK_BITS SetRegMaskBits; |
| 451 | MXL5005S_FP_SET_SPECTRUM_MODE SetSpectrumMode; |
| 452 | MXL5005S_FP_SET_BANDWIDTH_HZ SetBandwidthHz; |
| 453 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 454 | /* MxL5005S extra data */ |
| 455 | unsigned char AgcMasterByte; /* Variable name in MaxLinear source code: AGC_MASTER_BYTE */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 456 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 457 | /* MaxLinear defined struct */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 458 | Tuner_struct MxlDefinedTunerStructure; |
| 459 | }; |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 460 | /* End of common_mxl.h (?) */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 461 | |
Steven Toth | 2637d5b | 2008-05-01 05:01:31 -0300 | [diff] [blame^] | 462 | #endif /* __MXL5005S_H */ |
Steven Toth | 52c99bd | 2008-05-01 04:57:01 -0300 | [diff] [blame] | 463 | |