0001
0002
0003
0004
0005
0006
0007
0008
0009
0010 #ifndef __DIB3000MB_PRIV_H_INCLUDED__
0011 #define __DIB3000MB_PRIV_H_INCLUDED__
0012
0013
0014 #define rd(reg) dib3000_read_reg(state,reg)
0015
0016 #define wr(reg,val) if (dib3000_write_reg(state,reg,val)) \
0017 { pr_err("while sending 0x%04x to 0x%04x.", val, reg); return -EREMOTEIO; }
0018
0019 #define wr_foreach(a,v) { int i; \
0020 if (sizeof(a) != sizeof(v)) \
0021 pr_err("sizeof: %zu %zu is different", sizeof(a), sizeof(v));\
0022 for (i=0; i < sizeof(a)/sizeof(u16); i++) \
0023 wr(a[i],v[i]); \
0024 }
0025
0026 #define set_or(reg,val) wr(reg,rd(reg) | val)
0027
0028 #define set_and(reg,val) wr(reg,rd(reg) & val)
0029
0030
0031
0032 #define dprintk(level, fmt, arg...) do { \
0033 if (debug & level) \
0034 printk(KERN_DEBUG pr_fmt("%s: " fmt), \
0035 __func__, ##arg); \
0036 } while (0)
0037
0038
0039 #define DIB3000_ACTIVATE_PID_FILTERING (0x2000)
0040
0041
0042 #define DIB3000_ALPHA_0 ( 0)
0043 #define DIB3000_ALPHA_1 ( 1)
0044 #define DIB3000_ALPHA_2 ( 2)
0045 #define DIB3000_ALPHA_4 ( 4)
0046
0047 #define DIB3000_CONSTELLATION_QPSK ( 0)
0048 #define DIB3000_CONSTELLATION_16QAM ( 1)
0049 #define DIB3000_CONSTELLATION_64QAM ( 2)
0050
0051 #define DIB3000_GUARD_TIME_1_32 ( 0)
0052 #define DIB3000_GUARD_TIME_1_16 ( 1)
0053 #define DIB3000_GUARD_TIME_1_8 ( 2)
0054 #define DIB3000_GUARD_TIME_1_4 ( 3)
0055
0056 #define DIB3000_TRANSMISSION_MODE_2K ( 0)
0057 #define DIB3000_TRANSMISSION_MODE_8K ( 1)
0058
0059 #define DIB3000_SELECT_LP ( 0)
0060 #define DIB3000_SELECT_HP ( 1)
0061
0062 #define DIB3000_FEC_1_2 ( 1)
0063 #define DIB3000_FEC_2_3 ( 2)
0064 #define DIB3000_FEC_3_4 ( 3)
0065 #define DIB3000_FEC_5_6 ( 5)
0066 #define DIB3000_FEC_7_8 ( 7)
0067
0068 #define DIB3000_HRCH_OFF ( 0)
0069 #define DIB3000_HRCH_ON ( 1)
0070
0071 #define DIB3000_DDS_INVERSION_OFF ( 0)
0072 #define DIB3000_DDS_INVERSION_ON ( 1)
0073
0074 #define DIB3000_TUNER_WRITE_ENABLE(a) (0xffff & (a << 8))
0075 #define DIB3000_TUNER_WRITE_DISABLE(a) (0xffff & ((a << 8) | (1 << 7)))
0076
0077 #define DIB3000_REG_MANUFACTOR_ID ( 1025)
0078 #define DIB3000_I2C_ID_DIBCOM (0x01b3)
0079
0080 #define DIB3000_REG_DEVICE_ID ( 1026)
0081 #define DIB3000MB_DEVICE_ID (0x3000)
0082 #define DIB3000MC_DEVICE_ID (0x3001)
0083 #define DIB3000P_DEVICE_ID (0x3002)
0084
0085
0086 struct dib3000_state {
0087 struct i2c_adapter* i2c;
0088
0089
0090 struct dib3000_config config;
0091
0092 struct dvb_frontend frontend;
0093 int timing_offset;
0094 int timing_offset_comp_done;
0095
0096 u32 last_tuned_bw;
0097 u32 last_tuned_freq;
0098 };
0099
0100
0101
0102
0103 #define DIB3000MB_REG_RESTART ( 0)
0104
0105 #define DIB3000MB_RESTART_OFF ( 0)
0106 #define DIB3000MB_RESTART_AUTO_SEARCH (1 << 1)
0107 #define DIB3000MB_RESTART_CTRL (1 << 2)
0108 #define DIB3000MB_RESTART_AGC (1 << 3)
0109
0110
0111 #define DIB3000MB_REG_FFT ( 1)
0112
0113
0114 #define DIB3000MB_REG_GUARD_TIME ( 2)
0115
0116
0117 #define DIB3000MB_REG_QAM ( 3)
0118
0119
0120 #define DIB3000MB_REG_VIT_ALPHA ( 4)
0121
0122
0123 #define DIB3000MB_REG_DDS_INV ( 5)
0124
0125
0126 #define DIB3000MB_REG_DDS_FREQ_MSB ( 6)
0127 #define DIB3000MB_REG_DDS_FREQ_LSB ( 7)
0128 #define DIB3000MB_DDS_FREQ_MSB ( 178)
0129 #define DIB3000MB_DDS_FREQ_LSB ( 8990)
0130
0131
0132 static u16 dib3000mb_reg_timing_freq[] = { 8,9 };
0133 static u16 dib3000mb_timing_freq[][2] = {
0134 { 126 , 48873 },
0135 { 147 , 57019 },
0136 { 168 , 65164 },
0137 };
0138
0139
0140
0141
0142 static u16 dib3000mb_reg_impulse_noise[] = { 10,11,12,15,36 };
0143
0144 enum dib3000mb_impulse_noise_type {
0145 DIB3000MB_IMPNOISE_OFF,
0146 DIB3000MB_IMPNOISE_MOBILE,
0147 DIB3000MB_IMPNOISE_FIXED,
0148 DIB3000MB_IMPNOISE_DEFAULT
0149 };
0150
0151 static u16 dib3000mb_impulse_noise_values[][5] = {
0152 { 0x0000, 0x0004, 0x0014, 0x01ff, 0x0399 },
0153 { 0x0001, 0x0004, 0x0014, 0x01ff, 0x037b },
0154 { 0x0001, 0x0004, 0x0020, 0x01bd, 0x0399 },
0155 { 0x0000, 0x0002, 0x000a, 0x01ff, 0x0399 },
0156 };
0157
0158
0159
0160
0161
0162
0163
0164
0165 static u16 dib3000mb_reg_agc_gain[] = {
0166 19,20,21,22,23,24,25,26,27,28,29,30,31,32
0167 };
0168
0169 static u16 dib3000mb_default_agc_gain[] =
0170 { 0x0001, 52429, 623, 128, 166, 195, 61,
0171 0x0001, 53766, 38011, 0, 90, 33, 23 };
0172
0173
0174
0175 static u16 dib3000mb_reg_phase_noise[] = { 33,34,35,37,38 };
0176
0177 static u16 dib3000mb_default_noise_phase[] = { 2, 544, 0, 5, 4 };
0178
0179
0180 static u16 dib3000mb_reg_lock_duration[] = { 39,40 };
0181 static u16 dib3000mb_default_lock_duration[] = { 135, 135 };
0182
0183
0184 static u16 dib3000mb_reg_agc_bandwidth[] = { 43,44,45,46,47,48,49,50 };
0185
0186 static u16 dib3000mb_agc_bandwidth_low[] =
0187 { 2088, 10, 2088, 10, 3448, 5, 3448, 5 };
0188 static u16 dib3000mb_agc_bandwidth_high[] =
0189 { 2349, 5, 2349, 5, 2586, 2, 2586, 2 };
0190
0191
0192
0193
0194 #define DIB3000MB_REG_LOCK0_MASK ( 51)
0195 #define DIB3000MB_LOCK0_DEFAULT ( 4)
0196
0197
0198
0199
0200
0201
0202 #define DIB3000MB_REG_LOCK1_MASK ( 52)
0203 #define DIB3000MB_LOCK1_SEARCH_4 (0x0004)
0204 #define DIB3000MB_LOCK1_SEARCH_2048 (0x0800)
0205 #define DIB3000MB_LOCK1_DEFAULT (0x0001)
0206
0207
0208
0209 #define DIB3000MB_REG_LOCK2_MASK ( 53)
0210 #define DIB3000MB_LOCK2_DEFAULT (0x0080)
0211
0212
0213
0214
0215
0216
0217 #define DIB3000MB_REG_SEQ ( 54)
0218
0219
0220 static u16 dib3000mb_reg_bandwidth[] = { 55,56,57,58,59,60,61,62,63,64,65,66,67 };
0221 static u16 dib3000mb_bandwidth_6mhz[] =
0222 { 0, 33, 53312, 112, 46635, 563, 36565, 0, 1000, 0, 1010, 1, 45264 };
0223
0224 static u16 dib3000mb_bandwidth_7mhz[] =
0225 { 0, 28, 64421, 96, 39973, 483, 3255, 0, 1000, 0, 1010, 1, 45264 };
0226
0227 static u16 dib3000mb_bandwidth_8mhz[] =
0228 { 0, 25, 23600, 84, 34976, 422, 43808, 0, 1000, 0, 1010, 1, 45264 };
0229
0230 #define DIB3000MB_REG_UNK_68 ( 68)
0231 #define DIB3000MB_UNK_68 ( 0)
0232
0233 #define DIB3000MB_REG_UNK_69 ( 69)
0234 #define DIB3000MB_UNK_69 ( 0)
0235
0236 #define DIB3000MB_REG_UNK_71 ( 71)
0237 #define DIB3000MB_UNK_71 ( 0)
0238
0239 #define DIB3000MB_REG_UNK_77 ( 77)
0240 #define DIB3000MB_UNK_77 ( 6)
0241
0242 #define DIB3000MB_REG_UNK_78 ( 78)
0243 #define DIB3000MB_UNK_78 (0x0080)
0244
0245
0246 #define DIB3000MB_REG_ISI ( 79)
0247 #define DIB3000MB_ISI_ACTIVATE ( 0)
0248 #define DIB3000MB_ISI_INHIBIT ( 1)
0249
0250
0251 #define DIB3000MB_REG_SYNC_IMPROVEMENT ( 84)
0252 #define DIB3000MB_SYNC_IMPROVE_2K_1_8 ( 3)
0253 #define DIB3000MB_SYNC_IMPROVE_DEFAULT ( 0)
0254
0255
0256 #define DIB3000MB_REG_PHASE_NOISE ( 87)
0257 #define DIB3000MB_PHASE_NOISE_DEFAULT ( 0)
0258
0259 #define DIB3000MB_REG_UNK_92 ( 92)
0260 #define DIB3000MB_UNK_92 (0x0080)
0261
0262 #define DIB3000MB_REG_UNK_96 ( 96)
0263 #define DIB3000MB_UNK_96 (0x0010)
0264
0265 #define DIB3000MB_REG_UNK_97 ( 97)
0266 #define DIB3000MB_UNK_97 (0x0009)
0267
0268
0269 #define DIB3000MB_REG_MOBILE_MODE ( 101)
0270 #define DIB3000MB_MOBILE_MODE_ON ( 1)
0271 #define DIB3000MB_MOBILE_MODE_OFF ( 0)
0272
0273 #define DIB3000MB_REG_UNK_106 ( 106)
0274 #define DIB3000MB_UNK_106 (0x0080)
0275
0276 #define DIB3000MB_REG_UNK_107 ( 107)
0277 #define DIB3000MB_UNK_107 (0x0080)
0278
0279 #define DIB3000MB_REG_UNK_108 ( 108)
0280 #define DIB3000MB_UNK_108 (0x0080)
0281
0282
0283 #define DIB3000MB_REG_UNK_121 ( 121)
0284 #define DIB3000MB_UNK_121_2K ( 7)
0285 #define DIB3000MB_UNK_121_DEFAULT ( 5)
0286
0287 #define DIB3000MB_REG_UNK_122 ( 122)
0288 #define DIB3000MB_UNK_122 ( 2867)
0289
0290
0291 #define DIB3000MB_REG_MOBILE_MODE_QAM ( 126)
0292 #define DIB3000MB_MOBILE_MODE_QAM_64 ( 3)
0293 #define DIB3000MB_MOBILE_MODE_QAM_QPSK_16 ( 1)
0294 #define DIB3000MB_MOBILE_MODE_QAM_OFF ( 0)
0295
0296
0297
0298
0299
0300 #define DIB3000MB_REG_DATA_IN_DIVERSITY ( 127)
0301 #define DIB3000MB_DATA_DIVERSITY_IN_OFF ( 0)
0302 #define DIB3000MB_DATA_DIVERSITY_IN_ON ( 2)
0303
0304
0305 #define DIB3000MB_REG_VIT_HRCH ( 128)
0306
0307
0308 #define DIB3000MB_REG_VIT_CODE_RATE ( 129)
0309
0310
0311 #define DIB3000MB_REG_VIT_HP ( 130)
0312
0313
0314 #define DIB3000MB_REG_BERLEN ( 135)
0315 #define DIB3000MB_BERLEN_LONG ( 0)
0316 #define DIB3000MB_BERLEN_DEFAULT ( 1)
0317 #define DIB3000MB_BERLEN_MEDIUM ( 2)
0318 #define DIB3000MB_BERLEN_SHORT ( 3)
0319
0320
0321
0322
0323
0324 #define DIB3000MB_REG_FIFO_142 ( 142)
0325 #define DIB3000MB_FIFO_142 ( 0)
0326
0327
0328 #define DIB3000MB_REG_MPEG2_OUT_MODE ( 143)
0329 #define DIB3000MB_MPEG2_OUT_MODE_204 ( 0)
0330 #define DIB3000MB_MPEG2_OUT_MODE_188 ( 1)
0331
0332 #define DIB3000MB_REG_PID_PARSE ( 144)
0333 #define DIB3000MB_PID_PARSE_INHIBIT ( 0)
0334 #define DIB3000MB_PID_PARSE_ACTIVATE ( 1)
0335
0336 #define DIB3000MB_REG_FIFO ( 145)
0337 #define DIB3000MB_FIFO_INHIBIT ( 1)
0338 #define DIB3000MB_FIFO_ACTIVATE ( 0)
0339
0340 #define DIB3000MB_REG_FIFO_146 ( 146)
0341 #define DIB3000MB_FIFO_146 ( 3)
0342
0343 #define DIB3000MB_REG_FIFO_147 ( 147)
0344 #define DIB3000MB_FIFO_147 (0x0100)
0345
0346
0347
0348
0349
0350
0351
0352
0353 #define DIB3000MB_REG_FIRST_PID ( 153)
0354 #define DIB3000MB_NUM_PIDS ( 16)
0355
0356
0357
0358
0359
0360
0361 #define DIB3000MB_REG_OUTPUT_MODE ( 169)
0362 #define DIB3000MB_OUTPUT_MODE_GATED_CLK ( 0)
0363 #define DIB3000MB_OUTPUT_MODE_CONT_CLK ( 1)
0364 #define DIB3000MB_OUTPUT_MODE_SERIAL ( 2)
0365 #define DIB3000MB_OUTPUT_MODE_DATA_DIVERSITY ( 5)
0366 #define DIB3000MB_OUTPUT_MODE_SLAVE ( 6)
0367
0368
0369 #define DIB3000MB_REG_IRQ_EVENT_MASK ( 170)
0370 #define DIB3000MB_IRQ_EVENT_MASK ( 0)
0371
0372
0373 static u16 dib3000mb_reg_filter_coeffs[] = {
0374 171, 172, 173, 174, 175, 176, 177, 178,
0375 179, 180, 181, 182, 183, 184, 185, 186,
0376 188, 189, 190, 191, 192, 194
0377 };
0378
0379 static u16 dib3000mb_filter_coeffs[] = {
0380 226, 160, 29,
0381 979, 998, 19,
0382 22, 1019, 1006,
0383 1022, 12, 6,
0384 1017, 1017, 3,
0385 6, 1019,
0386 1021, 2, 3,
0387 1, 0,
0388 };
0389
0390
0391
0392
0393
0394 #define DIB3000MB_REG_MOBILE_ALGO ( 195)
0395 #define DIB3000MB_MOBILE_ALGO_ON ( 0)
0396 #define DIB3000MB_MOBILE_ALGO_OFF ( 1)
0397
0398
0399 #define DIB3000MB_REG_MULTI_DEMOD_MSB ( 206)
0400 #define DIB3000MB_REG_MULTI_DEMOD_LSB ( 207)
0401
0402
0403 #define DIB3000MB_MULTI_DEMOD_MSB ( 32767)
0404 #define DIB3000MB_MULTI_DEMOD_LSB ( 4095)
0405
0406
0407 #define DIB3000MB_REG_RESET_DEVICE ( 1024)
0408 #define DIB3000MB_RESET_DEVICE (0x812c)
0409 #define DIB3000MB_RESET_DEVICE_RST ( 0)
0410
0411
0412 #define DIB3000MB_REG_CLOCK ( 1027)
0413 #define DIB3000MB_CLOCK_DEFAULT (0x9000)
0414 #define DIB3000MB_CLOCK_DIVERSITY (0x92b0)
0415
0416
0417 #define DIB3000MB_REG_POWER_CONTROL ( 1028)
0418 #define DIB3000MB_POWER_DOWN ( 1)
0419 #define DIB3000MB_POWER_UP ( 0)
0420
0421
0422 #define DIB3000MB_REG_ELECT_OUT_MODE ( 1029)
0423 #define DIB3000MB_ELECT_OUT_MODE_OFF ( 0)
0424 #define DIB3000MB_ELECT_OUT_MODE_ON ( 1)
0425
0426
0427 #define DIB3000MB_REG_TUNER ( 1089)
0428
0429
0430
0431
0432 #define DIB3000MB_REG_AGC_LOCK ( 324)
0433
0434
0435 #define DIB3000MB_REG_AGC_POWER ( 325)
0436
0437
0438 #define DIB3000MB_REG_AGC1_VALUE ( 326)
0439
0440
0441 #define DIB3000MB_REG_AGC2_VALUE ( 327)
0442
0443
0444 #define DIB3000MB_REG_RF_POWER ( 328)
0445
0446
0447 #define DIB3000MB_REG_DDS_VALUE_MSB ( 339)
0448 #define DIB3000MB_REG_DDS_VALUE_LSB ( 340)
0449
0450
0451 #define DIB3000MB_REG_TIMING_OFFSET_MSB ( 341)
0452 #define DIB3000MB_REG_TIMING_OFFSET_LSB ( 342)
0453
0454
0455 #define DIB3000MB_REG_FFT_WINDOW_POS ( 353)
0456
0457
0458 #define DIB3000MB_REG_CARRIER_LOCK ( 355)
0459
0460
0461 #define DIB3000MB_REG_NOISE_POWER_MSB ( 372)
0462 #define DIB3000MB_REG_NOISE_POWER_LSB ( 373)
0463
0464 #define DIB3000MB_REG_MOBILE_NOISE_MSB ( 374)
0465 #define DIB3000MB_REG_MOBILE_NOISE_LSB ( 375)
0466
0467
0468
0469
0470
0471 #define DIB3000MB_REG_SIGNAL_POWER ( 380)
0472
0473
0474 #define DIB3000MB_REG_MER_MSB ( 381)
0475 #define DIB3000MB_REG_MER_LSB ( 382)
0476
0477
0478
0479
0480
0481
0482
0483
0484 #define DIB3000MB_REG_TPS_LOCK ( 394)
0485
0486
0487 #define DIB3000MB_REG_TPS_QAM ( 398)
0488
0489
0490 #define DIB3000MB_REG_TPS_HRCH ( 399)
0491
0492
0493 #define DIB3000MB_REG_TPS_VIT_ALPHA ( 400)
0494
0495
0496 #define DIB3000MB_REG_TPS_CODE_RATE_HP ( 401)
0497
0498
0499 #define DIB3000MB_REG_TPS_CODE_RATE_LP ( 402)
0500
0501
0502 #define DIB3000MB_REG_TPS_GUARD_TIME ( 403)
0503
0504
0505 #define DIB3000MB_REG_TPS_FFT ( 404)
0506
0507
0508 #define DIB3000MB_REG_TPS_CELL_ID ( 406)
0509
0510
0511 #define DIB3000MB_REG_TPS_1 ( 408)
0512 #define DIB3000MB_REG_TPS_2 ( 409)
0513 #define DIB3000MB_REG_TPS_3 ( 410)
0514 #define DIB3000MB_REG_TPS_4 ( 411)
0515 #define DIB3000MB_REG_TPS_5 ( 412)
0516
0517
0518 #define DIB3000MB_REG_BER_MSB ( 414)
0519 #define DIB3000MB_REG_BER_LSB ( 415)
0520
0521
0522 #define DIB3000MB_REG_PACKET_ERROR_RATE ( 417)
0523
0524
0525 #define DIB3000MB_REG_UNC ( 420)
0526
0527
0528 #define DIB3000MB_REG_VIT_LCK ( 421)
0529
0530
0531 #define DIB3000MB_REG_VIT_INDICATOR ( 422)
0532
0533
0534 #define DIB3000MB_REG_TS_SYNC_LOCK ( 423)
0535
0536
0537 #define DIB3000MB_REG_TS_RS_LOCK ( 424)
0538
0539
0540 #define DIB3000MB_REG_LOCK0_VALUE ( 425)
0541
0542
0543 #define DIB3000MB_REG_LOCK1_VALUE ( 426)
0544
0545
0546 #define DIB3000MB_REG_LOCK2_VALUE ( 427)
0547
0548
0549 #define DIB3000MB_REG_AS_IRQ_PENDING ( 434)
0550
0551 #endif