Linux-libre 4.14.44-gnu
[librecmc/linux-libre.git] / drivers / media / usb / dvb-usb / af9005-fe.c
1 /* Frontend part of the Linux driver for the Afatech 9005
2  * USB1.1 DVB-T receiver.
3  *
4  * Copyright (C) 2007 Luca Olivetti (luca@ventoso.org)
5  *
6  * Thanks to Afatech who kindly provided information.
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  * GNU General Public License for more details.
17  *
18  * see Documentation/dvb/README.dvb-usb for more information
19  */
20 #include "af9005.h"
21 /*(DEBLOBBED)*/
22 #include "mt2060.h"
23 #include "qt1010.h"
24 #include <asm/div64.h>
25
26 struct af9005_fe_state {
27         struct dvb_usb_device *d;
28         enum fe_status stat;
29
30         /* retraining parameters */
31         u32 original_fcw;
32         u16 original_rf_top;
33         u16 original_if_top;
34         u16 original_if_min;
35         u16 original_aci0_if_top;
36         u16 original_aci1_if_top;
37         u16 original_aci0_if_min;
38         u8 original_if_unplug_th;
39         u8 original_rf_unplug_th;
40         u8 original_dtop_if_unplug_th;
41         u8 original_dtop_rf_unplug_th;
42
43         /* statistics */
44         u32 pre_vit_error_count;
45         u32 pre_vit_bit_count;
46         u32 ber;
47         u32 post_vit_error_count;
48         u32 post_vit_bit_count;
49         u32 unc;
50         u16 abort_count;
51
52         int opened;
53         int strong;
54         unsigned long next_status_check;
55         struct dvb_frontend frontend;
56 };
57
58 static int af9005_write_word_agc(struct dvb_usb_device *d, u16 reghi,
59                                  u16 reglo, u8 pos, u8 len, u16 value)
60 {
61         int ret;
62
63         if ((ret = af9005_write_ofdm_register(d, reglo, (u8) (value & 0xff))))
64                 return ret;
65         return af9005_write_register_bits(d, reghi, pos, len,
66                                           (u8) ((value & 0x300) >> 8));
67 }
68
69 static int af9005_read_word_agc(struct dvb_usb_device *d, u16 reghi,
70                                 u16 reglo, u8 pos, u8 len, u16 * value)
71 {
72         int ret;
73         u8 temp0, temp1;
74
75         if ((ret = af9005_read_ofdm_register(d, reglo, &temp0)))
76                 return ret;
77         if ((ret = af9005_read_ofdm_register(d, reghi, &temp1)))
78                 return ret;
79         switch (pos) {
80         case 0:
81                 *value = ((u16) (temp1 & 0x03) << 8) + (u16) temp0;
82                 break;
83         case 2:
84                 *value = ((u16) (temp1 & 0x0C) << 6) + (u16) temp0;
85                 break;
86         case 4:
87                 *value = ((u16) (temp1 & 0x30) << 4) + (u16) temp0;
88                 break;
89         case 6:
90                 *value = ((u16) (temp1 & 0xC0) << 2) + (u16) temp0;
91                 break;
92         default:
93                 err("invalid pos in read word agc");
94                 return -EINVAL;
95         }
96         return 0;
97
98 }
99
100 static int af9005_is_fecmon_available(struct dvb_frontend *fe, int *available)
101 {
102         struct af9005_fe_state *state = fe->demodulator_priv;
103         int ret;
104         u8 temp;
105
106         *available = false;
107
108         ret = af9005_read_register_bits(state->d, xd_p_fec_vtb_rsd_mon_en,
109                                         fec_vtb_rsd_mon_en_pos,
110                                         fec_vtb_rsd_mon_en_len, &temp);
111         if (ret)
112                 return ret;
113         if (temp & 1) {
114                 ret =
115                     af9005_read_register_bits(state->d,
116                                               xd_p_reg_ofsm_read_rbc_en,
117                                               reg_ofsm_read_rbc_en_pos,
118                                               reg_ofsm_read_rbc_en_len, &temp);
119                 if (ret)
120                         return ret;
121                 if ((temp & 1) == 0)
122                         *available = true;
123
124         }
125         return 0;
126 }
127
128 static int af9005_get_post_vit_err_cw_count(struct dvb_frontend *fe,
129                                             u32 * post_err_count,
130                                             u32 * post_cw_count,
131                                             u16 * abort_count)
132 {
133         struct af9005_fe_state *state = fe->demodulator_priv;
134         int ret;
135         u32 err_count;
136         u32 cw_count;
137         u8 temp, temp0, temp1, temp2;
138         u16 loc_abort_count;
139
140         *post_err_count = 0;
141         *post_cw_count = 0;
142
143         /* check if error bit count is ready */
144         ret =
145             af9005_read_register_bits(state->d, xd_r_fec_rsd_ber_rdy,
146                                       fec_rsd_ber_rdy_pos, fec_rsd_ber_rdy_len,
147                                       &temp);
148         if (ret)
149                 return ret;
150         if (!temp) {
151                 deb_info("rsd counter not ready\n");
152                 return 100;
153         }
154         /* get abort count */
155         ret =
156             af9005_read_ofdm_register(state->d,
157                                       xd_r_fec_rsd_abort_packet_cnt_7_0,
158                                       &temp0);
159         if (ret)
160                 return ret;
161         ret =
162             af9005_read_ofdm_register(state->d,
163                                       xd_r_fec_rsd_abort_packet_cnt_15_8,
164                                       &temp1);
165         if (ret)
166                 return ret;
167         loc_abort_count = ((u16) temp1 << 8) + temp0;
168
169         /* get error count */
170         ret =
171             af9005_read_ofdm_register(state->d, xd_r_fec_rsd_bit_err_cnt_7_0,
172                                       &temp0);
173         if (ret)
174                 return ret;
175         ret =
176             af9005_read_ofdm_register(state->d, xd_r_fec_rsd_bit_err_cnt_15_8,
177                                       &temp1);
178         if (ret)
179                 return ret;
180         ret =
181             af9005_read_ofdm_register(state->d, xd_r_fec_rsd_bit_err_cnt_23_16,
182                                       &temp2);
183         if (ret)
184                 return ret;
185         err_count = ((u32) temp2 << 16) + ((u32) temp1 << 8) + temp0;
186         *post_err_count = err_count - (u32) loc_abort_count *8 * 8;
187
188         /* get RSD packet number */
189         ret =
190             af9005_read_ofdm_register(state->d, xd_p_fec_rsd_packet_unit_7_0,
191                                       &temp0);
192         if (ret)
193                 return ret;
194         ret =
195             af9005_read_ofdm_register(state->d, xd_p_fec_rsd_packet_unit_15_8,
196                                       &temp1);
197         if (ret)
198                 return ret;
199         cw_count = ((u32) temp1 << 8) + temp0;
200         if (cw_count == 0) {
201                 err("wrong RSD packet count");
202                 return -EIO;
203         }
204         deb_info("POST abort count %d err count %d rsd packets %d\n",
205                  loc_abort_count, err_count, cw_count);
206         *post_cw_count = cw_count - (u32) loc_abort_count;
207         *abort_count = loc_abort_count;
208         return 0;
209
210 }
211
212 static int af9005_get_post_vit_ber(struct dvb_frontend *fe,
213                                    u32 * post_err_count, u32 * post_cw_count,
214                                    u16 * abort_count)
215 {
216         u32 loc_cw_count = 0, loc_err_count;
217         u16 loc_abort_count = 0;
218         int ret;
219
220         ret =
221             af9005_get_post_vit_err_cw_count(fe, &loc_err_count, &loc_cw_count,
222                                              &loc_abort_count);
223         if (ret)
224                 return ret;
225         *post_err_count = loc_err_count;
226         *post_cw_count = loc_cw_count * 204 * 8;
227         *abort_count = loc_abort_count;
228
229         return 0;
230 }
231
232 static int af9005_get_pre_vit_err_bit_count(struct dvb_frontend *fe,
233                                             u32 * pre_err_count,
234                                             u32 * pre_bit_count)
235 {
236         struct af9005_fe_state *state = fe->demodulator_priv;
237         u8 temp, temp0, temp1, temp2;
238         u32 super_frame_count, x, bits;
239         int ret;
240
241         ret =
242             af9005_read_register_bits(state->d, xd_r_fec_vtb_ber_rdy,
243                                       fec_vtb_ber_rdy_pos, fec_vtb_ber_rdy_len,
244                                       &temp);
245         if (ret)
246                 return ret;
247         if (!temp) {
248                 deb_info("viterbi counter not ready\n");
249                 return 101;     /* ERR_APO_VTB_COUNTER_NOT_READY; */
250         }
251         ret =
252             af9005_read_ofdm_register(state->d, xd_r_fec_vtb_err_bit_cnt_7_0,
253                                       &temp0);
254         if (ret)
255                 return ret;
256         ret =
257             af9005_read_ofdm_register(state->d, xd_r_fec_vtb_err_bit_cnt_15_8,
258                                       &temp1);
259         if (ret)
260                 return ret;
261         ret =
262             af9005_read_ofdm_register(state->d, xd_r_fec_vtb_err_bit_cnt_23_16,
263                                       &temp2);
264         if (ret)
265                 return ret;
266         *pre_err_count = ((u32) temp2 << 16) + ((u32) temp1 << 8) + temp0;
267
268         ret =
269             af9005_read_ofdm_register(state->d, xd_p_fec_super_frm_unit_7_0,
270                                       &temp0);
271         if (ret)
272                 return ret;
273         ret =
274             af9005_read_ofdm_register(state->d, xd_p_fec_super_frm_unit_15_8,
275                                       &temp1);
276         if (ret)
277                 return ret;
278         super_frame_count = ((u32) temp1 << 8) + temp0;
279         if (super_frame_count == 0) {
280                 deb_info("super frame count 0\n");
281                 return 102;
282         }
283
284         /* read fft mode */
285         ret =
286             af9005_read_register_bits(state->d, xd_g_reg_tpsd_txmod,
287                                       reg_tpsd_txmod_pos, reg_tpsd_txmod_len,
288                                       &temp);
289         if (ret)
290                 return ret;
291         if (temp == 0) {
292                 /* 2K */
293                 x = 1512;
294         } else if (temp == 1) {
295                 /* 8k */
296                 x = 6048;
297         } else {
298                 err("Invalid fft mode");
299                 return -EINVAL;
300         }
301
302         /* read modulation mode */
303         ret =
304             af9005_read_register_bits(state->d, xd_g_reg_tpsd_const,
305                                       reg_tpsd_const_pos, reg_tpsd_const_len,
306                                       &temp);
307         if (ret)
308                 return ret;
309         switch (temp) {
310         case 0:         /* QPSK */
311                 bits = 2;
312                 break;
313         case 1:         /* QAM_16 */
314                 bits = 4;
315                 break;
316         case 2:         /* QAM_64 */
317                 bits = 6;
318                 break;
319         default:
320                 err("invalid modulation mode");
321                 return -EINVAL;
322         }
323         *pre_bit_count = super_frame_count * 68 * 4 * x * bits;
324         deb_info("PRE err count %d frame count %d bit count %d\n",
325                  *pre_err_count, super_frame_count, *pre_bit_count);
326         return 0;
327 }
328
329 static int af9005_reset_pre_viterbi(struct dvb_frontend *fe)
330 {
331         struct af9005_fe_state *state = fe->demodulator_priv;
332         int ret;
333
334         /* set super frame count to 1 */
335         ret =
336             af9005_write_ofdm_register(state->d, xd_p_fec_super_frm_unit_7_0,
337                                        1 & 0xff);
338         if (ret)
339                 return ret;
340         ret = af9005_write_ofdm_register(state->d, xd_p_fec_super_frm_unit_15_8,
341                                          1 >> 8);
342         if (ret)
343                 return ret;
344         /* reset pre viterbi error count */
345         ret =
346             af9005_write_register_bits(state->d, xd_p_fec_vtb_ber_rst,
347                                        fec_vtb_ber_rst_pos, fec_vtb_ber_rst_len,
348                                        1);
349
350         return ret;
351 }
352
353 static int af9005_reset_post_viterbi(struct dvb_frontend *fe)
354 {
355         struct af9005_fe_state *state = fe->demodulator_priv;
356         int ret;
357
358         /* set packet unit */
359         ret =
360             af9005_write_ofdm_register(state->d, xd_p_fec_rsd_packet_unit_7_0,
361                                        10000 & 0xff);
362         if (ret)
363                 return ret;
364         ret =
365             af9005_write_ofdm_register(state->d, xd_p_fec_rsd_packet_unit_15_8,
366                                        10000 >> 8);
367         if (ret)
368                 return ret;
369         /* reset post viterbi error count */
370         ret =
371             af9005_write_register_bits(state->d, xd_p_fec_rsd_ber_rst,
372                                        fec_rsd_ber_rst_pos, fec_rsd_ber_rst_len,
373                                        1);
374
375         return ret;
376 }
377
378 static int af9005_get_statistic(struct dvb_frontend *fe)
379 {
380         struct af9005_fe_state *state = fe->demodulator_priv;
381         int ret, fecavailable;
382         u64 numerator, denominator;
383
384         deb_info("GET STATISTIC\n");
385         ret = af9005_is_fecmon_available(fe, &fecavailable);
386         if (ret)
387                 return ret;
388         if (!fecavailable) {
389                 deb_info("fecmon not available\n");
390                 return 0;
391         }
392
393         ret = af9005_get_pre_vit_err_bit_count(fe, &state->pre_vit_error_count,
394                                                &state->pre_vit_bit_count);
395         if (ret == 0) {
396                 af9005_reset_pre_viterbi(fe);
397                 if (state->pre_vit_bit_count > 0) {
398                         /* according to v 0.0.4 of the dvb api ber should be a multiple
399                            of 10E-9 so we have to multiply the error count by
400                            10E9=1000000000 */
401                         numerator =
402                             (u64) state->pre_vit_error_count * (u64) 1000000000;
403                         denominator = (u64) state->pre_vit_bit_count;
404                         state->ber = do_div(numerator, denominator);
405                 } else {
406                         state->ber = 0xffffffff;
407                 }
408         }
409
410         ret = af9005_get_post_vit_ber(fe, &state->post_vit_error_count,
411                                       &state->post_vit_bit_count,
412                                       &state->abort_count);
413         if (ret == 0) {
414                 ret = af9005_reset_post_viterbi(fe);
415                 state->unc += state->abort_count;
416                 if (ret)
417                         return ret;
418         }
419         return 0;
420 }
421
422 static int af9005_fe_refresh_state(struct dvb_frontend *fe)
423 {
424         struct af9005_fe_state *state = fe->demodulator_priv;
425         if (time_after(jiffies, state->next_status_check)) {
426                 deb_info("REFRESH STATE\n");
427
428                 /* statistics */
429                 if (af9005_get_statistic(fe))
430                         err("get_statistic_failed");
431                 state->next_status_check = jiffies + 250 * HZ / 1000;
432         }
433         return 0;
434 }
435
436 static int af9005_fe_read_status(struct dvb_frontend *fe,
437                                  enum fe_status *stat)
438 {
439         struct af9005_fe_state *state = fe->demodulator_priv;
440         u8 temp;
441         int ret;
442
443         if (fe->ops.tuner_ops.release == NULL)
444                 return -ENODEV;
445
446         *stat = 0;
447         ret = af9005_read_register_bits(state->d, xd_p_agc_lock,
448                                         agc_lock_pos, agc_lock_len, &temp);
449         if (ret)
450                 return ret;
451         if (temp)
452                 *stat |= FE_HAS_SIGNAL;
453
454         ret = af9005_read_register_bits(state->d, xd_p_fd_tpsd_lock,
455                                         fd_tpsd_lock_pos, fd_tpsd_lock_len,
456                                         &temp);
457         if (ret)
458                 return ret;
459         if (temp)
460                 *stat |= FE_HAS_CARRIER;
461
462         ret = af9005_read_register_bits(state->d,
463                                         xd_r_mp2if_sync_byte_locked,
464                                         mp2if_sync_byte_locked_pos,
465                                         mp2if_sync_byte_locked_pos, &temp);
466         if (ret)
467                 return ret;
468         if (temp)
469                 *stat |= FE_HAS_SYNC | FE_HAS_VITERBI | FE_HAS_LOCK;
470         if (state->opened)
471                 af9005_led_control(state->d, *stat & FE_HAS_LOCK);
472
473         ret =
474             af9005_read_register_bits(state->d, xd_p_reg_strong_sginal_detected,
475                                       reg_strong_sginal_detected_pos,
476                                       reg_strong_sginal_detected_len, &temp);
477         if (ret)
478                 return ret;
479         if (temp != state->strong) {
480                 deb_info("adjust for strong signal %d\n", temp);
481                 state->strong = temp;
482         }
483         return 0;
484 }
485
486 static int af9005_fe_read_ber(struct dvb_frontend *fe, u32 * ber)
487 {
488         struct af9005_fe_state *state = fe->demodulator_priv;
489         if (fe->ops.tuner_ops.release  == NULL)
490                 return -ENODEV;
491         af9005_fe_refresh_state(fe);
492         *ber = state->ber;
493         return 0;
494 }
495
496 static int af9005_fe_read_unc_blocks(struct dvb_frontend *fe, u32 * unc)
497 {
498         struct af9005_fe_state *state = fe->demodulator_priv;
499         if (fe->ops.tuner_ops.release == NULL)
500                 return -ENODEV;
501         af9005_fe_refresh_state(fe);
502         *unc = state->unc;
503         return 0;
504 }
505
506 static int af9005_fe_read_signal_strength(struct dvb_frontend *fe,
507                                           u16 * strength)
508 {
509         struct af9005_fe_state *state = fe->demodulator_priv;
510         int ret;
511         u8 if_gain, rf_gain;
512
513         if (fe->ops.tuner_ops.release == NULL)
514                 return -ENODEV;
515         ret =
516             af9005_read_ofdm_register(state->d, xd_r_reg_aagc_rf_gain,
517                                       &rf_gain);
518         if (ret)
519                 return ret;
520         ret =
521             af9005_read_ofdm_register(state->d, xd_r_reg_aagc_if_gain,
522                                       &if_gain);
523         if (ret)
524                 return ret;
525         /* this value has no real meaning, but i don't have the tables that relate
526            the rf and if gain with the dbm, so I just scale the value */
527         *strength = (512 - rf_gain - if_gain) << 7;
528         return 0;
529 }
530
531 static int af9005_fe_read_snr(struct dvb_frontend *fe, u16 * snr)
532 {
533         /* the snr can be derived from the ber and the modulation
534            but I don't think this kind of complex calculations belong
535            in the driver. I may be wrong.... */
536         return -ENOSYS;
537 }
538
539 static int af9005_fe_program_cfoe(struct dvb_usb_device *d, u32 bw)
540 {
541         u8 temp0, temp1, temp2, temp3, buf[4];
542         int ret;
543         u32 NS_coeff1_2048Nu;
544         u32 NS_coeff1_8191Nu;
545         u32 NS_coeff1_8192Nu;
546         u32 NS_coeff1_8193Nu;
547         u32 NS_coeff2_2k;
548         u32 NS_coeff2_8k;
549
550         switch (bw) {
551         case 6000000:
552                 NS_coeff1_2048Nu = 0x2ADB6DC;
553                 NS_coeff1_8191Nu = 0xAB7313;
554                 NS_coeff1_8192Nu = 0xAB6DB7;
555                 NS_coeff1_8193Nu = 0xAB685C;
556                 NS_coeff2_2k = 0x156DB6E;
557                 NS_coeff2_8k = 0x55B6DC;
558                 break;
559
560         case 7000000:
561                 NS_coeff1_2048Nu = 0x3200001;
562                 NS_coeff1_8191Nu = 0xC80640;
563                 NS_coeff1_8192Nu = 0xC80000;
564                 NS_coeff1_8193Nu = 0xC7F9C0;
565                 NS_coeff2_2k = 0x1900000;
566                 NS_coeff2_8k = 0x640000;
567                 break;
568
569         case 8000000:
570                 NS_coeff1_2048Nu = 0x3924926;
571                 NS_coeff1_8191Nu = 0xE4996E;
572                 NS_coeff1_8192Nu = 0xE49249;
573                 NS_coeff1_8193Nu = 0xE48B25;
574                 NS_coeff2_2k = 0x1C92493;
575                 NS_coeff2_8k = 0x724925;
576                 break;
577         default:
578                 err("Invalid bandwidth %d.", bw);
579                 return -EINVAL;
580         }
581
582         /*
583          *  write NS_coeff1_2048Nu
584          */
585
586         temp0 = (u8) (NS_coeff1_2048Nu & 0x000000FF);
587         temp1 = (u8) ((NS_coeff1_2048Nu & 0x0000FF00) >> 8);
588         temp2 = (u8) ((NS_coeff1_2048Nu & 0x00FF0000) >> 16);
589         temp3 = (u8) ((NS_coeff1_2048Nu & 0x03000000) >> 24);
590
591         /*  big endian to make 8051 happy */
592         buf[0] = temp3;
593         buf[1] = temp2;
594         buf[2] = temp1;
595         buf[3] = temp0;
596
597         /*  cfoe_NS_2k_coeff1_25_24 */
598         ret = af9005_write_ofdm_register(d, 0xAE00, buf[0]);
599         if (ret)
600                 return ret;
601
602         /*  cfoe_NS_2k_coeff1_23_16 */
603         ret = af9005_write_ofdm_register(d, 0xAE01, buf[1]);
604         if (ret)
605                 return ret;
606
607         /*  cfoe_NS_2k_coeff1_15_8 */
608         ret = af9005_write_ofdm_register(d, 0xAE02, buf[2]);
609         if (ret)
610                 return ret;
611
612         /*  cfoe_NS_2k_coeff1_7_0 */
613         ret = af9005_write_ofdm_register(d, 0xAE03, buf[3]);
614         if (ret)
615                 return ret;
616
617         /*
618          *  write NS_coeff2_2k
619          */
620
621         temp0 = (u8) ((NS_coeff2_2k & 0x0000003F));
622         temp1 = (u8) ((NS_coeff2_2k & 0x00003FC0) >> 6);
623         temp2 = (u8) ((NS_coeff2_2k & 0x003FC000) >> 14);
624         temp3 = (u8) ((NS_coeff2_2k & 0x01C00000) >> 22);
625
626         /*  big endian to make 8051 happy */
627         buf[0] = temp3;
628         buf[1] = temp2;
629         buf[2] = temp1;
630         buf[3] = temp0;
631
632         ret = af9005_write_ofdm_register(d, 0xAE04, buf[0]);
633         if (ret)
634                 return ret;
635
636         ret = af9005_write_ofdm_register(d, 0xAE05, buf[1]);
637         if (ret)
638                 return ret;
639
640         ret = af9005_write_ofdm_register(d, 0xAE06, buf[2]);
641         if (ret)
642                 return ret;
643
644         ret = af9005_write_ofdm_register(d, 0xAE07, buf[3]);
645         if (ret)
646                 return ret;
647
648         /*
649          *  write NS_coeff1_8191Nu
650          */
651
652         temp0 = (u8) ((NS_coeff1_8191Nu & 0x000000FF));
653         temp1 = (u8) ((NS_coeff1_8191Nu & 0x0000FF00) >> 8);
654         temp2 = (u8) ((NS_coeff1_8191Nu & 0x00FFC000) >> 16);
655         temp3 = (u8) ((NS_coeff1_8191Nu & 0x03000000) >> 24);
656
657         /*  big endian to make 8051 happy */
658         buf[0] = temp3;
659         buf[1] = temp2;
660         buf[2] = temp1;
661         buf[3] = temp0;
662
663         ret = af9005_write_ofdm_register(d, 0xAE08, buf[0]);
664         if (ret)
665                 return ret;
666
667         ret = af9005_write_ofdm_register(d, 0xAE09, buf[1]);
668         if (ret)
669                 return ret;
670
671         ret = af9005_write_ofdm_register(d, 0xAE0A, buf[2]);
672         if (ret)
673                 return ret;
674
675         ret = af9005_write_ofdm_register(d, 0xAE0B, buf[3]);
676         if (ret)
677                 return ret;
678
679         /*
680          *  write NS_coeff1_8192Nu
681          */
682
683         temp0 = (u8) (NS_coeff1_8192Nu & 0x000000FF);
684         temp1 = (u8) ((NS_coeff1_8192Nu & 0x0000FF00) >> 8);
685         temp2 = (u8) ((NS_coeff1_8192Nu & 0x00FFC000) >> 16);
686         temp3 = (u8) ((NS_coeff1_8192Nu & 0x03000000) >> 24);
687
688         /*  big endian to make 8051 happy */
689         buf[0] = temp3;
690         buf[1] = temp2;
691         buf[2] = temp1;
692         buf[3] = temp0;
693
694         ret = af9005_write_ofdm_register(d, 0xAE0C, buf[0]);
695         if (ret)
696                 return ret;
697
698         ret = af9005_write_ofdm_register(d, 0xAE0D, buf[1]);
699         if (ret)
700                 return ret;
701
702         ret = af9005_write_ofdm_register(d, 0xAE0E, buf[2]);
703         if (ret)
704                 return ret;
705
706         ret = af9005_write_ofdm_register(d, 0xAE0F, buf[3]);
707         if (ret)
708                 return ret;
709
710         /*
711          *  write NS_coeff1_8193Nu
712          */
713
714         temp0 = (u8) ((NS_coeff1_8193Nu & 0x000000FF));
715         temp1 = (u8) ((NS_coeff1_8193Nu & 0x0000FF00) >> 8);
716         temp2 = (u8) ((NS_coeff1_8193Nu & 0x00FFC000) >> 16);
717         temp3 = (u8) ((NS_coeff1_8193Nu & 0x03000000) >> 24);
718
719         /*  big endian to make 8051 happy */
720         buf[0] = temp3;
721         buf[1] = temp2;
722         buf[2] = temp1;
723         buf[3] = temp0;
724
725         ret = af9005_write_ofdm_register(d, 0xAE10, buf[0]);
726         if (ret)
727                 return ret;
728
729         ret = af9005_write_ofdm_register(d, 0xAE11, buf[1]);
730         if (ret)
731                 return ret;
732
733         ret = af9005_write_ofdm_register(d, 0xAE12, buf[2]);
734         if (ret)
735                 return ret;
736
737         ret = af9005_write_ofdm_register(d, 0xAE13, buf[3]);
738         if (ret)
739                 return ret;
740
741         /*
742          *  write NS_coeff2_8k
743          */
744
745         temp0 = (u8) ((NS_coeff2_8k & 0x0000003F));
746         temp1 = (u8) ((NS_coeff2_8k & 0x00003FC0) >> 6);
747         temp2 = (u8) ((NS_coeff2_8k & 0x003FC000) >> 14);
748         temp3 = (u8) ((NS_coeff2_8k & 0x01C00000) >> 22);
749
750         /*  big endian to make 8051 happy */
751         buf[0] = temp3;
752         buf[1] = temp2;
753         buf[2] = temp1;
754         buf[3] = temp0;
755
756         ret = af9005_write_ofdm_register(d, 0xAE14, buf[0]);
757         if (ret)
758                 return ret;
759
760         ret = af9005_write_ofdm_register(d, 0xAE15, buf[1]);
761         if (ret)
762                 return ret;
763
764         ret = af9005_write_ofdm_register(d, 0xAE16, buf[2]);
765         if (ret)
766                 return ret;
767
768         ret = af9005_write_ofdm_register(d, 0xAE17, buf[3]);
769         return ret;
770
771 }
772
773 static int af9005_fe_select_bw(struct dvb_usb_device *d, u32 bw)
774 {
775         u8 temp;
776         switch (bw) {
777         case 6000000:
778                 temp = 0;
779                 break;
780         case 7000000:
781                 temp = 1;
782                 break;
783         case 8000000:
784                 temp = 2;
785                 break;
786         default:
787                 err("Invalid bandwidth %d.", bw);
788                 return -EINVAL;
789         }
790         return af9005_write_register_bits(d, xd_g_reg_bw, reg_bw_pos,
791                                           reg_bw_len, temp);
792 }
793
794 static int af9005_fe_power(struct dvb_frontend *fe, int on)
795 {
796         struct af9005_fe_state *state = fe->demodulator_priv;
797         u8 temp = on;
798         int ret;
799         deb_info("power %s tuner\n", on ? "on" : "off");
800         ret = af9005_send_command(state->d, 0x03, &temp, 1, NULL, 0);
801         return ret;
802 }
803
804 static struct mt2060_config af9005_mt2060_config = {
805         0xC0
806 };
807
808 static struct qt1010_config af9005_qt1010_config = {
809         0xC4
810 };
811
812 static int af9005_fe_init(struct dvb_frontend *fe)
813 {
814         struct af9005_fe_state *state = fe->demodulator_priv;
815         struct dvb_usb_adapter *adap = fe->dvb->priv;
816         int ret, i, scriptlen;
817         u8 temp, temp0 = 0, temp1 = 0, temp2 = 0;
818         u8 buf[2];
819         u16 if1;
820
821         deb_info("in af9005_fe_init\n");
822
823         /* reset */
824         deb_info("reset\n");
825         if ((ret =
826              af9005_write_register_bits(state->d, xd_I2C_reg_ofdm_rst_en,
827                                         4, 1, 0x01)))
828                 return ret;
829         if ((ret = af9005_write_ofdm_register(state->d, APO_REG_RESET, 0)))
830                 return ret;
831         /* clear ofdm reset */
832         deb_info("clear ofdm reset\n");
833         for (i = 0; i < 150; i++) {
834                 if ((ret =
835                      af9005_read_ofdm_register(state->d,
836                                                xd_I2C_reg_ofdm_rst, &temp)))
837                         return ret;
838                 if (temp & (regmask[reg_ofdm_rst_len - 1] << reg_ofdm_rst_pos))
839                         break;
840                 msleep(10);
841         }
842         if (i == 150)
843                 return -ETIMEDOUT;
844
845         /*FIXME in the dump
846            write B200 A9
847            write xd_g_reg_ofsm_clk 7
848            read eepr c6 (2)
849            read eepr c7 (2)
850            misc ctrl 3 -> 1
851            read eepr ca (6)
852            write xd_g_reg_ofsm_clk 0
853            write B200 a1
854          */
855         ret = af9005_write_ofdm_register(state->d, 0xb200, 0xa9);
856         if (ret)
857                 return ret;
858         ret = af9005_write_ofdm_register(state->d, xd_g_reg_ofsm_clk, 0x07);
859         if (ret)
860                 return ret;
861         temp = 0x01;
862         ret = af9005_send_command(state->d, 0x03, &temp, 1, NULL, 0);
863         if (ret)
864                 return ret;
865         ret = af9005_write_ofdm_register(state->d, xd_g_reg_ofsm_clk, 0x00);
866         if (ret)
867                 return ret;
868         ret = af9005_write_ofdm_register(state->d, 0xb200, 0xa1);
869         if (ret)
870                 return ret;
871
872         temp = regmask[reg_ofdm_rst_len - 1] << reg_ofdm_rst_pos;
873         if ((ret =
874              af9005_write_register_bits(state->d, xd_I2C_reg_ofdm_rst,
875                                         reg_ofdm_rst_pos, reg_ofdm_rst_len, 1)))
876                 return ret;
877         ret = af9005_write_register_bits(state->d, xd_I2C_reg_ofdm_rst,
878                                          reg_ofdm_rst_pos, reg_ofdm_rst_len, 0);
879
880         if (ret)
881                 return ret;
882         /* don't know what register aefc is, but this is what the windows driver does */
883         ret = af9005_write_ofdm_register(state->d, 0xaefc, 0);
884         if (ret)
885                 return ret;
886
887         /* set stand alone chip */
888         deb_info("set stand alone chip\n");
889         if ((ret =
890              af9005_write_register_bits(state->d, xd_p_reg_dca_stand_alone,
891                                         reg_dca_stand_alone_pos,
892                                         reg_dca_stand_alone_len, 1)))
893                 return ret;
894
895         /* set dca upper & lower chip */
896         deb_info("set dca upper & lower chip\n");
897         if ((ret =
898              af9005_write_register_bits(state->d, xd_p_reg_dca_upper_chip,
899                                         reg_dca_upper_chip_pos,
900                                         reg_dca_upper_chip_len, 0)))
901                 return ret;
902         if ((ret =
903              af9005_write_register_bits(state->d, xd_p_reg_dca_lower_chip,
904                                         reg_dca_lower_chip_pos,
905                                         reg_dca_lower_chip_len, 0)))
906                 return ret;
907
908         /* set 2wire master clock to 0x14 (for 60KHz) */
909         deb_info("set 2wire master clock to 0x14 (for 60KHz)\n");
910         if ((ret =
911              af9005_write_ofdm_register(state->d, xd_I2C_i2c_m_period, 0x14)))
912                 return ret;
913
914         /* clear dca enable chip */
915         deb_info("clear dca enable chip\n");
916         if ((ret =
917              af9005_write_register_bits(state->d, xd_p_reg_dca_en,
918                                         reg_dca_en_pos, reg_dca_en_len, 0)))
919                 return ret;
920         /* FIXME these are register bits, but I don't know which ones */
921         ret = af9005_write_ofdm_register(state->d, 0xa16c, 1);
922         if (ret)
923                 return ret;
924         ret = af9005_write_ofdm_register(state->d, 0xa3c1, 0);
925         if (ret)
926                 return ret;
927
928         /* init other parameters: program cfoe and select bandwidth */
929         deb_info("program cfoe\n");
930         ret = af9005_fe_program_cfoe(state->d, 6000000);
931         if (ret)
932                 return ret;
933         /* set read-update bit for modulation */
934         deb_info("set read-update bit for modulation\n");
935         if ((ret =
936              af9005_write_register_bits(state->d, xd_p_reg_feq_read_update,
937                                         reg_feq_read_update_pos,
938                                         reg_feq_read_update_len, 1)))
939                 return ret;
940
941         /* sample code has a set MPEG TS code here
942            but sniffing reveals that it doesn't do it */
943
944         /* set read-update bit to 1 for DCA modulation */
945         deb_info("set read-update bit 1 for DCA modulation\n");
946         if ((ret =
947              af9005_write_register_bits(state->d, xd_p_reg_dca_read_update,
948                                         reg_dca_read_update_pos,
949                                         reg_dca_read_update_len, 1)))
950                 return ret;
951
952         /* enable fec monitor */
953         deb_info("enable fec monitor\n");
954         if ((ret =
955              af9005_write_register_bits(state->d, xd_p_fec_vtb_rsd_mon_en,
956                                         fec_vtb_rsd_mon_en_pos,
957                                         fec_vtb_rsd_mon_en_len, 1)))
958                 return ret;
959
960         /* FIXME should be register bits, I don't know which ones */
961         ret = af9005_write_ofdm_register(state->d, 0xa601, 0);
962
963         /* set api_retrain_never_freeze */
964         deb_info("set api_retrain_never_freeze\n");
965         if ((ret = af9005_write_ofdm_register(state->d, 0xaefb, 0x01)))
966                 return ret;
967
968         /* load init script */
969         {
970                 err("Missing Free init script\n");
971                 return scriptlen = ret = -EINVAL;
972                 /*(DEBLOBBED)*/
973
974         }
975         state->original_fcw =
976             ((u32) temp2 << 16) + ((u32) temp1 << 8) + (u32) temp0;
977
978
979         /* save original TOPs */
980         deb_info("save original TOPs\n");
981
982         /*  RF TOP */
983         ret =
984             af9005_read_word_agc(state->d,
985                                  xd_p_reg_aagc_rf_top_numerator_9_8,
986                                  xd_p_reg_aagc_rf_top_numerator_7_0, 0, 2,
987                                  &state->original_rf_top);
988         if (ret)
989                 return ret;
990
991         /*  IF TOP */
992         ret =
993             af9005_read_word_agc(state->d,
994                                  xd_p_reg_aagc_if_top_numerator_9_8,
995                                  xd_p_reg_aagc_if_top_numerator_7_0, 0, 2,
996                                  &state->original_if_top);
997         if (ret)
998                 return ret;
999
1000         /*  ACI 0 IF TOP */
1001         ret =
1002             af9005_read_word_agc(state->d, 0xA60E, 0xA60A, 4, 2,
1003                                  &state->original_aci0_if_top);
1004         if (ret)
1005                 return ret;
1006
1007         /*  ACI 1 IF TOP */
1008         ret =
1009             af9005_read_word_agc(state->d, 0xA60E, 0xA60B, 6, 2,
1010                                  &state->original_aci1_if_top);
1011         if (ret)
1012                 return ret;
1013
1014         /* attach tuner and init */
1015         if (fe->ops.tuner_ops.release == NULL) {
1016                 /* read tuner and board id from eeprom */
1017                 ret = af9005_read_eeprom(adap->dev, 0xc6, buf, 2);
1018                 if (ret) {
1019                         err("Impossible to read EEPROM\n");
1020                         return ret;
1021                 }
1022                 deb_info("Tuner id %d, board id %d\n", buf[0], buf[1]);
1023                 switch (buf[0]) {
1024                 case 2: /* MT2060 */
1025                         /* read if1 from eeprom */
1026                         ret = af9005_read_eeprom(adap->dev, 0xc8, buf, 2);
1027                         if (ret) {
1028                                 err("Impossible to read EEPROM\n");
1029                                 return ret;
1030                         }
1031                         if1 = (u16) (buf[0] << 8) + buf[1];
1032                         if (dvb_attach(mt2060_attach, fe, &adap->dev->i2c_adap,
1033                                          &af9005_mt2060_config, if1) == NULL) {
1034                                 deb_info("MT2060 attach failed\n");
1035                                 return -ENODEV;
1036                         }
1037                         break;
1038                 case 3: /* QT1010 */
1039                 case 9: /* QT1010B */
1040                         if (dvb_attach(qt1010_attach, fe, &adap->dev->i2c_adap,
1041                                         &af9005_qt1010_config) ==NULL) {
1042                                 deb_info("QT1010 attach failed\n");
1043                                 return -ENODEV;
1044                         }
1045                         break;
1046                 default:
1047                         err("Unsupported tuner type %d", buf[0]);
1048                         return -ENODEV;
1049                 }
1050                 ret = fe->ops.tuner_ops.init(fe);
1051                 if (ret)
1052                         return ret;
1053         }
1054
1055         deb_info("profit!\n");
1056         return 0;
1057 }
1058
1059 static int af9005_fe_sleep(struct dvb_frontend *fe)
1060 {
1061         return af9005_fe_power(fe, 0);
1062 }
1063
1064 static int af9005_ts_bus_ctrl(struct dvb_frontend *fe, int acquire)
1065 {
1066         struct af9005_fe_state *state = fe->demodulator_priv;
1067
1068         if (acquire) {
1069                 state->opened++;
1070         } else {
1071
1072                 state->opened--;
1073                 if (!state->opened)
1074                         af9005_led_control(state->d, 0);
1075         }
1076         return 0;
1077 }
1078
1079 static int af9005_fe_set_frontend(struct dvb_frontend *fe)
1080 {
1081         struct dtv_frontend_properties *fep = &fe->dtv_property_cache;
1082         struct af9005_fe_state *state = fe->demodulator_priv;
1083         int ret;
1084         u8 temp, temp0, temp1, temp2;
1085
1086         deb_info("af9005_fe_set_frontend freq %d bw %d\n", fep->frequency,
1087                  fep->bandwidth_hz);
1088         if (fe->ops.tuner_ops.release == NULL) {
1089                 err("Tuner not attached");
1090                 return -ENODEV;
1091         }
1092
1093         deb_info("turn off led\n");
1094         /* not in the log */
1095         ret = af9005_led_control(state->d, 0);
1096         if (ret)
1097                 return ret;
1098         /* not sure about the bits */
1099         ret = af9005_write_register_bits(state->d, XD_MP2IF_MISC, 2, 1, 0);
1100         if (ret)
1101                 return ret;
1102
1103         /* set FCW to default value */
1104         deb_info("set FCW to default value\n");
1105         temp0 = (u8) (state->original_fcw & 0x000000ff);
1106         temp1 = (u8) ((state->original_fcw & 0x0000ff00) >> 8);
1107         temp2 = (u8) ((state->original_fcw & 0x00ff0000) >> 16);
1108         ret = af9005_write_ofdm_register(state->d, 0xae1a, temp0);
1109         if (ret)
1110                 return ret;
1111         ret = af9005_write_ofdm_register(state->d, 0xae19, temp1);
1112         if (ret)
1113                 return ret;
1114         ret = af9005_write_ofdm_register(state->d, 0xae18, temp2);
1115         if (ret)
1116                 return ret;
1117
1118         /* restore original TOPs */
1119         deb_info("restore original TOPs\n");
1120         ret =
1121             af9005_write_word_agc(state->d,
1122                                   xd_p_reg_aagc_rf_top_numerator_9_8,
1123                                   xd_p_reg_aagc_rf_top_numerator_7_0, 0, 2,
1124                                   state->original_rf_top);
1125         if (ret)
1126                 return ret;
1127         ret =
1128             af9005_write_word_agc(state->d,
1129                                   xd_p_reg_aagc_if_top_numerator_9_8,
1130                                   xd_p_reg_aagc_if_top_numerator_7_0, 0, 2,
1131                                   state->original_if_top);
1132         if (ret)
1133                 return ret;
1134         ret =
1135             af9005_write_word_agc(state->d, 0xA60E, 0xA60A, 4, 2,
1136                                   state->original_aci0_if_top);
1137         if (ret)
1138                 return ret;
1139         ret =
1140             af9005_write_word_agc(state->d, 0xA60E, 0xA60B, 6, 2,
1141                                   state->original_aci1_if_top);
1142         if (ret)
1143                 return ret;
1144
1145         /* select bandwidth */
1146         deb_info("select bandwidth");
1147         ret = af9005_fe_select_bw(state->d, fep->bandwidth_hz);
1148         if (ret)
1149                 return ret;
1150         ret = af9005_fe_program_cfoe(state->d, fep->bandwidth_hz);
1151         if (ret)
1152                 return ret;
1153
1154         /* clear easy mode flag */
1155         deb_info("clear easy mode flag\n");
1156         ret = af9005_write_ofdm_register(state->d, 0xaefd, 0);
1157         if (ret)
1158                 return ret;
1159
1160         /* set unplug threshold to original value */
1161         deb_info("set unplug threshold to original value\n");
1162         ret =
1163             af9005_write_ofdm_register(state->d, xd_p_reg_unplug_th,
1164                                        state->original_if_unplug_th);
1165         if (ret)
1166                 return ret;
1167         /* set tuner */
1168         deb_info("set tuner\n");
1169         ret = fe->ops.tuner_ops.set_params(fe);
1170         if (ret)
1171                 return ret;
1172
1173         /* trigger ofsm */
1174         deb_info("trigger ofsm\n");
1175         temp = 0;
1176         ret = af9005_write_tuner_registers(state->d, 0xffff, &temp, 1);
1177         if (ret)
1178                 return ret;
1179
1180         /* clear retrain and freeze flag */
1181         deb_info("clear retrain and freeze flag\n");
1182         ret =
1183             af9005_write_register_bits(state->d,
1184                                        xd_p_reg_api_retrain_request,
1185                                        reg_api_retrain_request_pos, 2, 0);
1186         if (ret)
1187                 return ret;
1188
1189         /* reset pre viterbi and post viterbi registers and statistics */
1190         af9005_reset_pre_viterbi(fe);
1191         af9005_reset_post_viterbi(fe);
1192         state->pre_vit_error_count = 0;
1193         state->pre_vit_bit_count = 0;
1194         state->ber = 0;
1195         state->post_vit_error_count = 0;
1196         /* state->unc = 0; commented out since it should be ever increasing */
1197         state->abort_count = 0;
1198
1199         state->next_status_check = jiffies;
1200         state->strong = -1;
1201
1202         return 0;
1203 }
1204
1205 static int af9005_fe_get_frontend(struct dvb_frontend *fe,
1206                                   struct dtv_frontend_properties *fep)
1207 {
1208         struct af9005_fe_state *state = fe->demodulator_priv;
1209         int ret;
1210         u8 temp;
1211
1212         /* mode */
1213         ret =
1214             af9005_read_register_bits(state->d, xd_g_reg_tpsd_const,
1215                                       reg_tpsd_const_pos, reg_tpsd_const_len,
1216                                       &temp);
1217         if (ret)
1218                 return ret;
1219         deb_info("===== fe_get_frontend_legacy = =============\n");
1220         deb_info("CONSTELLATION ");
1221         switch (temp) {
1222         case 0:
1223                 fep->modulation = QPSK;
1224                 deb_info("QPSK\n");
1225                 break;
1226         case 1:
1227                 fep->modulation = QAM_16;
1228                 deb_info("QAM_16\n");
1229                 break;
1230         case 2:
1231                 fep->modulation = QAM_64;
1232                 deb_info("QAM_64\n");
1233                 break;
1234         }
1235
1236         /* tps hierarchy and alpha value */
1237         ret =
1238             af9005_read_register_bits(state->d, xd_g_reg_tpsd_hier,
1239                                       reg_tpsd_hier_pos, reg_tpsd_hier_len,
1240                                       &temp);
1241         if (ret)
1242                 return ret;
1243         deb_info("HIERARCHY ");
1244         switch (temp) {
1245         case 0:
1246                 fep->hierarchy = HIERARCHY_NONE;
1247                 deb_info("NONE\n");
1248                 break;
1249         case 1:
1250                 fep->hierarchy = HIERARCHY_1;
1251                 deb_info("1\n");
1252                 break;
1253         case 2:
1254                 fep->hierarchy = HIERARCHY_2;
1255                 deb_info("2\n");
1256                 break;
1257         case 3:
1258                 fep->hierarchy = HIERARCHY_4;
1259                 deb_info("4\n");
1260                 break;
1261         }
1262
1263         /*  high/low priority     */
1264         ret =
1265             af9005_read_register_bits(state->d, xd_g_reg_dec_pri,
1266                                       reg_dec_pri_pos, reg_dec_pri_len, &temp);
1267         if (ret)
1268                 return ret;
1269         /* if temp is set = high priority */
1270         deb_info("PRIORITY %s\n", temp ? "high" : "low");
1271
1272         /* high coderate */
1273         ret =
1274             af9005_read_register_bits(state->d, xd_g_reg_tpsd_hpcr,
1275                                       reg_tpsd_hpcr_pos, reg_tpsd_hpcr_len,
1276                                       &temp);
1277         if (ret)
1278                 return ret;
1279         deb_info("CODERATE HP ");
1280         switch (temp) {
1281         case 0:
1282                 fep->code_rate_HP = FEC_1_2;
1283                 deb_info("FEC_1_2\n");
1284                 break;
1285         case 1:
1286                 fep->code_rate_HP = FEC_2_3;
1287                 deb_info("FEC_2_3\n");
1288                 break;
1289         case 2:
1290                 fep->code_rate_HP = FEC_3_4;
1291                 deb_info("FEC_3_4\n");
1292                 break;
1293         case 3:
1294                 fep->code_rate_HP = FEC_5_6;
1295                 deb_info("FEC_5_6\n");
1296                 break;
1297         case 4:
1298                 fep->code_rate_HP = FEC_7_8;
1299                 deb_info("FEC_7_8\n");
1300                 break;
1301         }
1302
1303         /* low coderate */
1304         ret =
1305             af9005_read_register_bits(state->d, xd_g_reg_tpsd_lpcr,
1306                                       reg_tpsd_lpcr_pos, reg_tpsd_lpcr_len,
1307                                       &temp);
1308         if (ret)
1309                 return ret;
1310         deb_info("CODERATE LP ");
1311         switch (temp) {
1312         case 0:
1313                 fep->code_rate_LP = FEC_1_2;
1314                 deb_info("FEC_1_2\n");
1315                 break;
1316         case 1:
1317                 fep->code_rate_LP = FEC_2_3;
1318                 deb_info("FEC_2_3\n");
1319                 break;
1320         case 2:
1321                 fep->code_rate_LP = FEC_3_4;
1322                 deb_info("FEC_3_4\n");
1323                 break;
1324         case 3:
1325                 fep->code_rate_LP = FEC_5_6;
1326                 deb_info("FEC_5_6\n");
1327                 break;
1328         case 4:
1329                 fep->code_rate_LP = FEC_7_8;
1330                 deb_info("FEC_7_8\n");
1331                 break;
1332         }
1333
1334         /* guard interval */
1335         ret =
1336             af9005_read_register_bits(state->d, xd_g_reg_tpsd_gi,
1337                                       reg_tpsd_gi_pos, reg_tpsd_gi_len, &temp);
1338         if (ret)
1339                 return ret;
1340         deb_info("GUARD INTERVAL ");
1341         switch (temp) {
1342         case 0:
1343                 fep->guard_interval = GUARD_INTERVAL_1_32;
1344                 deb_info("1_32\n");
1345                 break;
1346         case 1:
1347                 fep->guard_interval = GUARD_INTERVAL_1_16;
1348                 deb_info("1_16\n");
1349                 break;
1350         case 2:
1351                 fep->guard_interval = GUARD_INTERVAL_1_8;
1352                 deb_info("1_8\n");
1353                 break;
1354         case 3:
1355                 fep->guard_interval = GUARD_INTERVAL_1_4;
1356                 deb_info("1_4\n");
1357                 break;
1358         }
1359
1360         /* fft */
1361         ret =
1362             af9005_read_register_bits(state->d, xd_g_reg_tpsd_txmod,
1363                                       reg_tpsd_txmod_pos, reg_tpsd_txmod_len,
1364                                       &temp);
1365         if (ret)
1366                 return ret;
1367         deb_info("TRANSMISSION MODE ");
1368         switch (temp) {
1369         case 0:
1370                 fep->transmission_mode = TRANSMISSION_MODE_2K;
1371                 deb_info("2K\n");
1372                 break;
1373         case 1:
1374                 fep->transmission_mode = TRANSMISSION_MODE_8K;
1375                 deb_info("8K\n");
1376                 break;
1377         }
1378
1379         /* bandwidth      */
1380         ret =
1381             af9005_read_register_bits(state->d, xd_g_reg_bw, reg_bw_pos,
1382                                       reg_bw_len, &temp);
1383         deb_info("BANDWIDTH ");
1384         switch (temp) {
1385         case 0:
1386                 fep->bandwidth_hz = 6000000;
1387                 deb_info("6\n");
1388                 break;
1389         case 1:
1390                 fep->bandwidth_hz = 7000000;
1391                 deb_info("7\n");
1392                 break;
1393         case 2:
1394                 fep->bandwidth_hz = 8000000;
1395                 deb_info("8\n");
1396                 break;
1397         }
1398         return 0;
1399 }
1400
1401 static void af9005_fe_release(struct dvb_frontend *fe)
1402 {
1403         struct af9005_fe_state *state =
1404             (struct af9005_fe_state *)fe->demodulator_priv;
1405         kfree(state);
1406 }
1407
1408 static const struct dvb_frontend_ops af9005_fe_ops;
1409
1410 struct dvb_frontend *af9005_fe_attach(struct dvb_usb_device *d)
1411 {
1412         struct af9005_fe_state *state = NULL;
1413
1414         /* allocate memory for the internal state */
1415         state = kzalloc(sizeof(struct af9005_fe_state), GFP_KERNEL);
1416         if (state == NULL)
1417                 goto error;
1418
1419         deb_info("attaching frontend af9005\n");
1420
1421         state->d = d;
1422         state->opened = 0;
1423
1424         memcpy(&state->frontend.ops, &af9005_fe_ops,
1425                sizeof(struct dvb_frontend_ops));
1426         state->frontend.demodulator_priv = state;
1427
1428         return &state->frontend;
1429       error:
1430         return NULL;
1431 }
1432
1433 static const struct dvb_frontend_ops af9005_fe_ops = {
1434         .delsys = { SYS_DVBT },
1435         .info = {
1436                  .name = "AF9005 USB DVB-T",
1437                  .frequency_min = 44250000,
1438                  .frequency_max = 867250000,
1439                  .frequency_stepsize = 250000,
1440                  .caps = FE_CAN_INVERSION_AUTO |
1441                  FE_CAN_FEC_1_2 | FE_CAN_FEC_2_3 | FE_CAN_FEC_3_4 |
1442                  FE_CAN_FEC_5_6 | FE_CAN_FEC_7_8 | FE_CAN_FEC_AUTO |
1443                  FE_CAN_QPSK | FE_CAN_QAM_16 | FE_CAN_QAM_64 |
1444                  FE_CAN_QAM_AUTO | FE_CAN_TRANSMISSION_MODE_AUTO |
1445                  FE_CAN_GUARD_INTERVAL_AUTO | FE_CAN_RECOVER |
1446                  FE_CAN_HIERARCHY_AUTO,
1447                  },
1448
1449         .release = af9005_fe_release,
1450
1451         .init = af9005_fe_init,
1452         .sleep = af9005_fe_sleep,
1453         .ts_bus_ctrl = af9005_ts_bus_ctrl,
1454
1455         .set_frontend = af9005_fe_set_frontend,
1456         .get_frontend = af9005_fe_get_frontend,
1457
1458         .read_status = af9005_fe_read_status,
1459         .read_ber = af9005_fe_read_ber,
1460         .read_signal_strength = af9005_fe_read_signal_strength,
1461         .read_snr = af9005_fe_read_snr,
1462         .read_ucblocks = af9005_fe_read_unc_blocks,
1463 };