1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40#include <linux/kernel.h>
41#include <linux/module.h>
42#include <linux/slab.h>
43#include <linux/videodev2.h>
44#include <linux/i2c.h>
45#include <linux/delay.h>
46#include <linux/math64.h>
47#include <media/v4l2-common.h>
48#include <media/cx25840.h>
49
50#include "cx25840-core.h"
51
52MODULE_DESCRIPTION("Conexant CX25840 audio/video decoder driver");
53MODULE_AUTHOR("Ulf Eklund, Chris Kennedy, Hans Verkuil, Tyler Trafford");
54MODULE_LICENSE("GPL");
55
56#define CX25840_VID_INT_STAT_REG 0x410
57#define CX25840_VID_INT_STAT_BITS 0x0000ffff
58#define CX25840_VID_INT_MASK_BITS 0xffff0000
59#define CX25840_VID_INT_MASK_SHFT 16
60#define CX25840_VID_INT_MASK_REG 0x412
61
62#define CX23885_AUD_MC_INT_MASK_REG 0x80c
63#define CX23885_AUD_MC_INT_STAT_BITS 0xffff0000
64#define CX23885_AUD_MC_INT_CTRL_BITS 0x0000ffff
65#define CX23885_AUD_MC_INT_STAT_SHFT 16
66
67#define CX25840_AUD_INT_CTRL_REG 0x812
68#define CX25840_AUD_INT_STAT_REG 0x813
69
70#define CX23885_PIN_CTRL_IRQ_REG 0x123
71#define CX23885_PIN_CTRL_IRQ_IR_STAT 0x40
72#define CX23885_PIN_CTRL_IRQ_AUD_STAT 0x20
73#define CX23885_PIN_CTRL_IRQ_VID_STAT 0x10
74
75#define CX25840_IR_STATS_REG 0x210
76#define CX25840_IR_IRQEN_REG 0x214
77
78static int cx25840_debug;
79
80module_param_named(debug,cx25840_debug, int, 0644);
81
82MODULE_PARM_DESC(debug, "Debugging messages [0=Off (default) 1=On]");
83
84
85
86static void cx23888_std_setup(struct i2c_client *client);
87
88int cx25840_write(struct i2c_client *client, u16 addr, u8 value)
89{
90 u8 buffer[3];
91 buffer[0] = addr >> 8;
92 buffer[1] = addr & 0xff;
93 buffer[2] = value;
94 return i2c_master_send(client, buffer, 3);
95}
96
97int cx25840_write4(struct i2c_client *client, u16 addr, u32 value)
98{
99 u8 buffer[6];
100 buffer[0] = addr >> 8;
101 buffer[1] = addr & 0xff;
102 buffer[2] = value & 0xff;
103 buffer[3] = (value >> 8) & 0xff;
104 buffer[4] = (value >> 16) & 0xff;
105 buffer[5] = value >> 24;
106 return i2c_master_send(client, buffer, 6);
107}
108
109u8 cx25840_read(struct i2c_client * client, u16 addr)
110{
111 struct i2c_msg msgs[2];
112 u8 tx_buf[2], rx_buf[1];
113
114
115 tx_buf[0] = addr >> 8;
116 tx_buf[1] = addr & 0xff;
117 msgs[0].addr = client->addr;
118 msgs[0].flags = 0;
119 msgs[0].len = 2;
120 msgs[0].buf = (char *) tx_buf;
121
122
123 msgs[1].addr = client->addr;
124 msgs[1].flags = I2C_M_RD;
125 msgs[1].len = 1;
126 msgs[1].buf = (char *) rx_buf;
127
128 if (i2c_transfer(client->adapter, msgs, 2) < 2)
129 return 0;
130
131 return rx_buf[0];
132}
133
134u32 cx25840_read4(struct i2c_client * client, u16 addr)
135{
136 struct i2c_msg msgs[2];
137 u8 tx_buf[2], rx_buf[4];
138
139
140 tx_buf[0] = addr >> 8;
141 tx_buf[1] = addr & 0xff;
142 msgs[0].addr = client->addr;
143 msgs[0].flags = 0;
144 msgs[0].len = 2;
145 msgs[0].buf = (char *) tx_buf;
146
147
148 msgs[1].addr = client->addr;
149 msgs[1].flags = I2C_M_RD;
150 msgs[1].len = 4;
151 msgs[1].buf = (char *) rx_buf;
152
153 if (i2c_transfer(client->adapter, msgs, 2) < 2)
154 return 0;
155
156 return (rx_buf[3] << 24) | (rx_buf[2] << 16) | (rx_buf[1] << 8) |
157 rx_buf[0];
158}
159
160int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask,
161 u8 or_value)
162{
163 return cx25840_write(client, addr,
164 (cx25840_read(client, addr) & and_mask) |
165 or_value);
166}
167
168int cx25840_and_or4(struct i2c_client *client, u16 addr, u32 and_mask,
169 u32 or_value)
170{
171 return cx25840_write4(client, addr,
172 (cx25840_read4(client, addr) & and_mask) |
173 or_value);
174}
175
176
177
178static int set_input(struct i2c_client *client, enum cx25840_video_input vid_input,
179 enum cx25840_audio_input aud_input);
180
181
182
183static int cx23885_s_io_pin_config(struct v4l2_subdev *sd, size_t n,
184 struct v4l2_subdev_io_pin_config *p)
185{
186 struct i2c_client *client = v4l2_get_subdevdata(sd);
187 int i;
188 u32 pin_ctrl;
189 u8 gpio_oe, gpio_data, strength;
190
191 pin_ctrl = cx25840_read4(client, 0x120);
192 gpio_oe = cx25840_read(client, 0x160);
193 gpio_data = cx25840_read(client, 0x164);
194
195 for (i = 0; i < n; i++) {
196 strength = p[i].strength;
197 if (strength > CX25840_PIN_DRIVE_FAST)
198 strength = CX25840_PIN_DRIVE_FAST;
199
200 switch (p[i].pin) {
201 case CX23885_PIN_IRQ_N_GPIO16:
202 if (p[i].function != CX23885_PAD_IRQ_N) {
203
204 pin_ctrl &= ~(0x1 << 25);
205 } else {
206
207 if (p[i].flags &
208 (V4L2_SUBDEV_IO_PIN_DISABLE |
209 V4L2_SUBDEV_IO_PIN_INPUT)) {
210 pin_ctrl &= ~(0x1 << 25);
211 } else {
212 pin_ctrl |= (0x1 << 25);
213 }
214 if (p[i].flags &
215 V4L2_SUBDEV_IO_PIN_ACTIVE_LOW) {
216 pin_ctrl &= ~(0x1 << 24);
217 } else {
218 pin_ctrl |= (0x1 << 24);
219 }
220 }
221 break;
222 case CX23885_PIN_IR_RX_GPIO19:
223 if (p[i].function != CX23885_PAD_GPIO19) {
224
225 gpio_oe |= (0x1 << 0);
226 pin_ctrl &= ~(0x3 << 18);
227 pin_ctrl |= (strength << 18);
228 } else {
229
230 gpio_oe &= ~(0x1 << 0);
231 if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
232 gpio_data &= ~(0x1 << 0);
233 gpio_data |= ((p[i].value & 0x1) << 0);
234 }
235 pin_ctrl &= ~(0x3 << 12);
236 pin_ctrl |= (strength << 12);
237 }
238 break;
239 case CX23885_PIN_IR_TX_GPIO20:
240 if (p[i].function != CX23885_PAD_GPIO20) {
241
242 gpio_oe |= (0x1 << 1);
243 if (p[i].flags & V4L2_SUBDEV_IO_PIN_DISABLE)
244 pin_ctrl &= ~(0x1 << 10);
245 else
246 pin_ctrl |= (0x1 << 10);
247 pin_ctrl &= ~(0x3 << 18);
248 pin_ctrl |= (strength << 18);
249 } else {
250
251 gpio_oe &= ~(0x1 << 1);
252 if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
253 gpio_data &= ~(0x1 << 1);
254 gpio_data |= ((p[i].value & 0x1) << 1);
255 }
256 pin_ctrl &= ~(0x3 << 12);
257 pin_ctrl |= (strength << 12);
258 }
259 break;
260 case CX23885_PIN_I2S_SDAT_GPIO21:
261 if (p[i].function != CX23885_PAD_GPIO21) {
262
263
264 gpio_oe |= (0x1 << 2);
265 pin_ctrl &= ~(0x3 << 22);
266 pin_ctrl |= (strength << 22);
267 } else {
268
269 gpio_oe &= ~(0x1 << 2);
270 if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
271 gpio_data &= ~(0x1 << 2);
272 gpio_data |= ((p[i].value & 0x1) << 2);
273 }
274 pin_ctrl &= ~(0x3 << 12);
275 pin_ctrl |= (strength << 12);
276 }
277 break;
278 case CX23885_PIN_I2S_WCLK_GPIO22:
279 if (p[i].function != CX23885_PAD_GPIO22) {
280
281
282 gpio_oe |= (0x1 << 3);
283 pin_ctrl &= ~(0x3 << 22);
284 pin_ctrl |= (strength << 22);
285 } else {
286
287 gpio_oe &= ~(0x1 << 3);
288 if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
289 gpio_data &= ~(0x1 << 3);
290 gpio_data |= ((p[i].value & 0x1) << 3);
291 }
292 pin_ctrl &= ~(0x3 << 12);
293 pin_ctrl |= (strength << 12);
294 }
295 break;
296 case CX23885_PIN_I2S_BCLK_GPIO23:
297 if (p[i].function != CX23885_PAD_GPIO23) {
298
299
300 gpio_oe |= (0x1 << 4);
301 pin_ctrl &= ~(0x3 << 22);
302 pin_ctrl |= (strength << 22);
303 } else {
304
305 gpio_oe &= ~(0x1 << 4);
306 if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
307 gpio_data &= ~(0x1 << 4);
308 gpio_data |= ((p[i].value & 0x1) << 4);
309 }
310 pin_ctrl &= ~(0x3 << 12);
311 pin_ctrl |= (strength << 12);
312 }
313 break;
314 }
315 }
316
317 cx25840_write(client, 0x164, gpio_data);
318 cx25840_write(client, 0x160, gpio_oe);
319 cx25840_write4(client, 0x120, pin_ctrl);
320 return 0;
321}
322
323static int common_s_io_pin_config(struct v4l2_subdev *sd, size_t n,
324 struct v4l2_subdev_io_pin_config *pincfg)
325{
326 struct cx25840_state *state = to_state(sd);
327
328 if (is_cx2388x(state))
329 return cx23885_s_io_pin_config(sd, n, pincfg);
330 return 0;
331}
332
333
334
335static void init_dll1(struct i2c_client *client)
336{
337
338
339 cx25840_write(client, 0x159, 0x23);
340 cx25840_write(client, 0x15a, 0x87);
341 cx25840_write(client, 0x15b, 0x06);
342 udelay(10);
343 cx25840_write(client, 0x159, 0xe1);
344 udelay(10);
345 cx25840_write(client, 0x15a, 0x86);
346 cx25840_write(client, 0x159, 0xe0);
347 cx25840_write(client, 0x159, 0xe1);
348 cx25840_write(client, 0x15b, 0x10);
349}
350
351static void init_dll2(struct i2c_client *client)
352{
353
354
355 cx25840_write(client, 0x15d, 0xe3);
356 cx25840_write(client, 0x15e, 0x86);
357 cx25840_write(client, 0x15f, 0x06);
358 udelay(10);
359 cx25840_write(client, 0x15d, 0xe1);
360 cx25840_write(client, 0x15d, 0xe0);
361 cx25840_write(client, 0x15d, 0xe1);
362}
363
364static void cx25836_initialize(struct i2c_client *client)
365{
366
367
368 cx25840_and_or(client, 0x000, ~0x01, 0x01);
369 cx25840_and_or(client, 0x000, ~0x01, 0x00);
370
371 cx25840_and_or(client, 0x15a, ~0x70, 0x00);
372
373 cx25840_and_or(client, 0x15b, ~0x1e, 0x06);
374
375 cx25840_and_or(client, 0x159, ~0x02, 0x02);
376
377 udelay(10);
378
379 cx25840_and_or(client, 0x159, ~0x02, 0x00);
380
381 cx25840_and_or(client, 0x159, ~0xc0, 0xc0);
382
383 cx25840_and_or(client, 0x159, ~0x01, 0x00);
384 cx25840_and_or(client, 0x159, ~0x01, 0x01);
385
386 cx25840_and_or(client, 0x15b, ~0x1e, 0x10);
387}
388
389static void cx25840_work_handler(struct work_struct *work)
390{
391 struct cx25840_state *state = container_of(work, struct cx25840_state, fw_work);
392 cx25840_loadfw(state->c);
393 wake_up(&state->fw_wait);
394}
395
396static void cx25840_initialize(struct i2c_client *client)
397{
398 DEFINE_WAIT(wait);
399 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
400 struct workqueue_struct *q;
401
402
403
404 cx25840_and_or(client, 0x803, ~0x10, 0x00);
405
406
407 cx25840_write(client, 0x000, 0x04);
408
409 init_dll1(client);
410 init_dll2(client);
411 cx25840_write(client, 0x136, 0x0a);
412
413 cx25840_write(client, 0x13c, 0x01);
414 cx25840_write(client, 0x13c, 0x00);
415
416
417
418
419
420 INIT_WORK(&state->fw_work, cx25840_work_handler);
421 init_waitqueue_head(&state->fw_wait);
422 q = create_singlethread_workqueue("cx25840_fw");
423 prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
424 queue_work(q, &state->fw_work);
425 schedule();
426 finish_wait(&state->fw_wait, &wait);
427 destroy_workqueue(q);
428
429
430 cx25840_write(client, 0x115, 0x8c);
431 cx25840_write(client, 0x116, 0x07);
432 cx25840_write(client, 0x118, 0x02);
433
434 cx25840_write(client, 0x4a5, 0x80);
435 cx25840_write(client, 0x4a5, 0x00);
436 cx25840_write(client, 0x402, 0x00);
437
438 cx25840_and_or(client, 0x401, ~0x18, 0);
439 cx25840_and_or(client, 0x4a2, ~0x10, 0x10);
440
441
442 cx25840_write(client, 0x8d3, 0x1f);
443 cx25840_write(client, 0x8e3, 0x03);
444
445 cx25840_std_setup(client);
446
447
448 cx25840_write(client, 0x914, 0xa0);
449 cx25840_write(client, 0x918, 0xa0);
450 cx25840_write(client, 0x919, 0x01);
451
452
453 cx25840_write(client, 0x809, 0x04);
454
455 cx25840_write(client, 0x8cf, 0x0f);
456
457
458 set_input(client, state->vid_input, state->aud_input);
459
460
461 cx25840_and_or(client, 0x803, ~0x10, 0x10);
462}
463
464static void cx23885_initialize(struct i2c_client *client)
465{
466 DEFINE_WAIT(wait);
467 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
468 struct workqueue_struct *q;
469
470
471
472
473
474
475 cx25840_write(client, 0x000, 0);
476
477
478 cx25840_and_or(client, 0x102, ~0x01, 0x01);
479 cx25840_and_or(client, 0x102, ~0x01, 0x00);
480
481
482 cx25840_and_or(client, 0x803, ~0x10, 0x00);
483
484
485 cx25840_write(client, 0x398, 0);
486
487
488
489
490
491
492
493 cx25840_write(client, 0x2, 0x76);
494
495
496 cx25840_write(client, 0x1, 0x40);
497
498
499 switch (state->id) {
500 case CX23888_AV:
501
502
503
504
505
506 cx25840_write(client, 0x2, 0x71);
507 cx25840_write4(client, 0x11c, 0x01d1744c);
508 cx25840_write4(client, 0x118, 0x00000416);
509 cx25840_write4(client, 0x404, 0x0010253e);
510 cx25840_write4(client, 0x42c, 0x42600000);
511 cx25840_write4(client, 0x44c, 0x161f1000);
512 break;
513 case CX23887_AV:
514
515
516
517
518 cx25840_write4(client, 0x11c, 0x01d1744c);
519 cx25840_write4(client, 0x118, 0x00000416);
520 break;
521 case CX23885_AV:
522 default:
523
524
525
526
527 cx25840_write4(client, 0x11c, 0x00000000);
528 cx25840_write4(client, 0x118, 0x00000414);
529 break;
530 }
531
532
533 cx25840_write4(client, 0x33c, 0x00000001);
534
535
536 cx25840_write4(client, 0x340, 0x0df7df83);
537
538
539
540
541
542
543
544
545
546
547 switch (state->id) {
548 case CX23888_AV:
549
550 cx25840_write4(client, 0x10c, 0x13333333);
551 cx25840_write4(client, 0x108, 0x00000515);
552 break;
553 default:
554 cx25840_write4(client, 0x10c, 0x002be2c9);
555 cx25840_write4(client, 0x108, 0x0000040f);
556 }
557
558
559 cx25840_write4(client, 0x414, 0x00107d12);
560
561
562 cx25840_write4(client, 0x420, 0x3d008282);
563
564
565
566
567
568
569
570
571 switch (state->id) {
572 case CX23888_AV:
573
574
575
576
577
578
579 cx25840_write4(client, 0x114, 0x017dbf48);
580 cx25840_write4(client, 0x110, 0x000a030e);
581 break;
582 case CX23887_AV:
583
584
585
586
587
588 cx25840_write4(client, 0x114, 0x017dbf48);
589 cx25840_write4(client, 0x110, 0x000a030e);
590 break;
591 case CX23885_AV:
592 default:
593
594
595
596
597
598 cx25840_write4(client, 0x114, 0x01bf0c9e);
599 cx25840_write4(client, 0x110, 0x000a030c);
600 break;
601 }
602
603
604 cx25840_write(client, 0x102, 0x10);
605
606
607 cx25840_write(client, 0x103, 0x11);
608
609
610 cx25840_write(client, 0x400, 0);
611
612
613 cx25840_write(client, 0x401, 0xe8);
614
615
616 cx25840_write(client, 0x144, 0x05);
617
618
619
620
621
622
623
624 cx25840_write(client, 0x160, 0x1d);
625 cx25840_write(client, 0x164, 0x00);
626
627
628
629
630
631 INIT_WORK(&state->fw_work, cx25840_work_handler);
632 init_waitqueue_head(&state->fw_wait);
633 q = create_singlethread_workqueue("cx25840_fw");
634 prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
635 queue_work(q, &state->fw_work);
636 schedule();
637 finish_wait(&state->fw_wait, &wait);
638 destroy_workqueue(q);
639
640
641
642
643 if (is_cx23888(state))
644 cx23888_std_setup(client);
645 else
646 cx25840_std_setup(client);
647
648
649 set_input(client, state->vid_input, state->aud_input);
650
651
652 cx25840_and_or(client, 0x803, ~0x10, 0x10);
653
654
655 cx25840_write4(client, CX25840_VID_INT_STAT_REG, 0xffffffff);
656
657
658 cx25840_write(client, CX25840_AUD_INT_CTRL_REG, 0xff);
659 cx25840_write(client, CX25840_AUD_INT_STAT_REG, 0xff);
660
661
662
663
664
665
666 cx25840_write4(client, 0x404, 0x0010253e);
667
668
669 cx25840_write(client, 0x42f, 0x66);
670
671
672
673 cx25840_write4(client, 0x130, 0x0);
674
675
676 cx25840_write4(client, 0x478, 0x6628021F);
677
678
679 cx25840_write4(client, 0x144, 0x5);
680
681
682
683
684 cx25840_write4(client, 0x918, 0x1a0);
685
686
687 cx25840_write4(client, 0x134, 0x000a1800);
688
689
690 cx25840_write4(client, 0x13c, 0x00310000);
691}
692
693
694
695static void cx231xx_initialize(struct i2c_client *client)
696{
697 DEFINE_WAIT(wait);
698 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
699 struct workqueue_struct *q;
700
701
702 cx25840_and_or(client, 0x102, ~0x01, 0x01);
703 cx25840_and_or(client, 0x102, ~0x01, 0x00);
704
705
706 cx25840_and_or(client, 0x803, ~0x10, 0x00);
707
708
709 cx25840_write(client, 0x398, 0);
710
711
712
713 cx25840_write(client, 0x2, 0x76);
714
715
716 cx25840_write(client, 0x1, 0x40);
717
718
719 cx25840_write4(client, 0x33c, 0x00000001);
720
721
722 cx25840_write4(client, 0x340, 0x0df7df83);
723
724
725 cx25840_write4(client, 0x414, 0x00107d12);
726
727
728 cx25840_write4(client, 0x420, 0x3d008282);
729
730
731 cx25840_write(client, 0x102, 0x10);
732
733
734 cx25840_write(client, 0x103, 0x11);
735
736
737 cx25840_write(client, 0x400, 0);
738
739
740 cx25840_write(client, 0x401, 0xe8);
741
742
743
744
745
746 INIT_WORK(&state->fw_work, cx25840_work_handler);
747 init_waitqueue_head(&state->fw_wait);
748 q = create_singlethread_workqueue("cx25840_fw");
749 prepare_to_wait(&state->fw_wait, &wait, TASK_UNINTERRUPTIBLE);
750 queue_work(q, &state->fw_work);
751 schedule();
752 finish_wait(&state->fw_wait, &wait);
753 destroy_workqueue(q);
754
755 cx25840_std_setup(client);
756
757
758 set_input(client, state->vid_input, state->aud_input);
759
760
761 cx25840_and_or(client, 0x803, ~0x10, 0x10);
762
763
764 cx25840_write(client, 0x404, 0x0b);
765
766
767 cx25840_write(client, 0x42f, 0x66);
768 cx25840_write4(client, 0x474, 0x1e1e601a);
769}
770
771
772
773void cx25840_std_setup(struct i2c_client *client)
774{
775 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
776 v4l2_std_id std = state->std;
777 int hblank, hactive, burst, vblank, vactive, sc;
778 int vblank656, src_decimation;
779 int luma_lpf, uv_lpf, comb;
780 u32 pll_int, pll_frac, pll_post;
781
782
783 if (std & ~V4L2_STD_NTSC)
784 cx25840_write(client, 0x49f, 0x11);
785 else
786 cx25840_write(client, 0x49f, 0x14);
787
788 if (std & V4L2_STD_625_50) {
789 hblank = 132;
790 hactive = 720;
791 burst = 93;
792 vblank = 36;
793 vactive = 580;
794 vblank656 = 40;
795 src_decimation = 0x21f;
796 luma_lpf = 2;
797
798 if (std & V4L2_STD_SECAM) {
799 uv_lpf = 0;
800 comb = 0;
801 sc = 0x0a425f;
802 } else if (std == V4L2_STD_PAL_Nc) {
803 uv_lpf = 1;
804 comb = 0x20;
805 sc = 556453;
806 } else {
807 uv_lpf = 1;
808 comb = 0x20;
809 sc = 688739;
810 }
811 } else {
812 hactive = 720;
813 hblank = 122;
814 vactive = 487;
815 luma_lpf = 1;
816 uv_lpf = 1;
817
818 src_decimation = 0x21f;
819 if (std == V4L2_STD_PAL_60) {
820 vblank = 26;
821 vblank656 = 26;
822 burst = 0x5b;
823 luma_lpf = 2;
824 comb = 0x20;
825 sc = 688739;
826 } else if (std == V4L2_STD_PAL_M) {
827 vblank = 20;
828 vblank656 = 24;
829 burst = 0x61;
830 comb = 0x20;
831 sc = 555452;
832 } else {
833 vblank = 26;
834 vblank656 = 26;
835 burst = 0x5b;
836 comb = 0x66;
837 sc = 556063;
838 }
839 }
840
841
842 if (!is_cx231xx(state)) {
843 pll_int = cx25840_read(client, 0x108);
844 pll_frac = cx25840_read4(client, 0x10c) & 0x1ffffff;
845 pll_post = cx25840_read(client, 0x109);
846 v4l_dbg(1, cx25840_debug, client,
847 "PLL regs = int: %u, frac: %u, post: %u\n",
848 pll_int, pll_frac, pll_post);
849
850 if (pll_post) {
851 int fin, fsc;
852 int pll = (28636363L * ((((u64)pll_int) << 25L) + pll_frac)) >> 25L;
853
854 pll /= pll_post;
855 v4l_dbg(1, cx25840_debug, client, "PLL = %d.%06d MHz\n",
856 pll / 1000000, pll % 1000000);
857 v4l_dbg(1, cx25840_debug, client, "PLL/8 = %d.%06d MHz\n",
858 pll / 8000000, (pll / 8) % 1000000);
859
860 fin = ((u64)src_decimation * pll) >> 12;
861 v4l_dbg(1, cx25840_debug, client,
862 "ADC Sampling freq = %d.%06d MHz\n",
863 fin / 1000000, fin % 1000000);
864
865 fsc = (((u64)sc) * pll) >> 24L;
866 v4l_dbg(1, cx25840_debug, client,
867 "Chroma sub-carrier freq = %d.%06d MHz\n",
868 fsc / 1000000, fsc % 1000000);
869
870 v4l_dbg(1, cx25840_debug, client, "hblank %i, hactive %i, "
871 "vblank %i, vactive %i, vblank656 %i, src_dec %i, "
872 "burst 0x%02x, luma_lpf %i, uv_lpf %i, comb 0x%02x, "
873 "sc 0x%06x\n",
874 hblank, hactive, vblank, vactive, vblank656,
875 src_decimation, burst, luma_lpf, uv_lpf, comb, sc);
876 }
877 }
878
879
880 cx25840_write(client, 0x470, hblank);
881 cx25840_write(client, 0x471,
882 0xff & (((hblank >> 8) & 0x3) | (hactive << 4)));
883 cx25840_write(client, 0x472, hactive >> 4);
884
885
886 cx25840_write(client, 0x473, burst);
887
888
889 cx25840_write(client, 0x474, vblank);
890 cx25840_write(client, 0x475,
891 0xff & (((vblank >> 8) & 0x3) | (vactive << 4)));
892 cx25840_write(client, 0x476, vactive >> 4);
893 cx25840_write(client, 0x477, vblank656);
894
895
896 cx25840_write(client, 0x478, 0xff & src_decimation);
897 cx25840_write(client, 0x479, 0xff & (src_decimation >> 8));
898
899
900 cx25840_write(client, 0x47a, luma_lpf << 6 | ((uv_lpf << 4) & 0x30));
901
902
903 cx25840_write(client, 0x47b, comb);
904
905
906 cx25840_write(client, 0x47c, sc);
907 cx25840_write(client, 0x47d, 0xff & sc >> 8);
908 cx25840_write(client, 0x47e, 0xff & sc >> 16);
909
910
911 if (std & V4L2_STD_625_50) {
912 cx25840_write(client, 0x47f, 0x01);
913 state->vbi_line_offset = 5;
914 } else {
915 cx25840_write(client, 0x47f, 0x00);
916 state->vbi_line_offset = 8;
917 }
918}
919
920
921
922static void input_change(struct i2c_client *client)
923{
924 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
925 v4l2_std_id std = state->std;
926
927
928 if (std & V4L2_STD_SECAM) {
929 cx25840_write(client, 0x402, 0);
930 }
931 else {
932 cx25840_write(client, 0x402, 0x04);
933 cx25840_write(client, 0x49f, (std & V4L2_STD_NTSC) ? 0x14 : 0x11);
934 }
935 cx25840_and_or(client, 0x401, ~0x60, 0);
936 cx25840_and_or(client, 0x401, ~0x60, 0x60);
937
938
939 if (is_cx2583x(state))
940 return;
941
942 cx25840_and_or(client, 0x810, ~0x01, 1);
943
944 if (state->radio) {
945 cx25840_write(client, 0x808, 0xf9);
946 cx25840_write(client, 0x80b, 0x00);
947 }
948 else if (std & V4L2_STD_525_60) {
949
950
951
952
953
954 int hw_fix = state->pvr150_workaround;
955
956 if (std == V4L2_STD_NTSC_M_JP) {
957
958 cx25840_write(client, 0x808, hw_fix ? 0x2f : 0xf7);
959 } else if (std == V4L2_STD_NTSC_M_KR) {
960
961 cx25840_write(client, 0x808, hw_fix ? 0x3f : 0xf8);
962 } else {
963
964 cx25840_write(client, 0x808, hw_fix ? 0x1f : 0xf6);
965 }
966 cx25840_write(client, 0x80b, 0x00);
967 } else if (std & V4L2_STD_PAL) {
968
969 cx25840_write(client, 0x808, 0xff);
970
971
972
973
974 cx25840_write(client, 0x80b, 0x00);
975 } else if (std & V4L2_STD_SECAM) {
976
977 cx25840_write(client, 0x808, 0xff);
978
979
980 if ((std & V4L2_STD_SECAM_DK) &&
981 !(std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) {
982
983 cx25840_write(client, 0x80b, 0x00);
984 } else if (!(std & V4L2_STD_SECAM_DK) &&
985 (std & (V4L2_STD_SECAM_L | V4L2_STD_SECAM_LC))) {
986
987 cx25840_write(client, 0x80b, 0x08);
988 } else {
989
990 cx25840_write(client, 0x80b, 0x10);
991 }
992 }
993
994 cx25840_and_or(client, 0x810, ~0x01, 0);
995}
996
997static int set_input(struct i2c_client *client, enum cx25840_video_input vid_input,
998 enum cx25840_audio_input aud_input)
999{
1000 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
1001 u8 is_composite = (vid_input >= CX25840_COMPOSITE1 &&
1002 vid_input <= CX25840_COMPOSITE8);
1003 u8 is_component = (vid_input & CX25840_COMPONENT_ON) ==
1004 CX25840_COMPONENT_ON;
1005 u8 is_dif = (vid_input & CX25840_DIF_ON) ==
1006 CX25840_DIF_ON;
1007 u8 is_svideo = (vid_input & CX25840_SVIDEO_ON) ==
1008 CX25840_SVIDEO_ON;
1009 int luma = vid_input & 0xf0;
1010 int chroma = vid_input & 0xf00;
1011 u8 reg;
1012 u32 val;
1013
1014 v4l_dbg(1, cx25840_debug, client,
1015 "decoder set video input %d, audio input %d\n",
1016 vid_input, aud_input);
1017
1018 if (vid_input >= CX25840_VIN1_CH1) {
1019 v4l_dbg(1, cx25840_debug, client, "vid_input 0x%x\n",
1020 vid_input);
1021 reg = vid_input & 0xff;
1022 is_composite = !is_component &&
1023 ((vid_input & CX25840_SVIDEO_ON) != CX25840_SVIDEO_ON);
1024
1025 v4l_dbg(1, cx25840_debug, client, "mux cfg 0x%x comp=%d\n",
1026 reg, is_composite);
1027 } else if (is_composite) {
1028 reg = 0xf0 + (vid_input - CX25840_COMPOSITE1);
1029 } else {
1030 if ((vid_input & ~0xff0) ||
1031 luma < CX25840_SVIDEO_LUMA1 || luma > CX25840_SVIDEO_LUMA8 ||
1032 chroma < CX25840_SVIDEO_CHROMA4 || chroma > CX25840_SVIDEO_CHROMA8) {
1033 v4l_err(client, "0x%04x is not a valid video input!\n",
1034 vid_input);
1035 return -EINVAL;
1036 }
1037 reg = 0xf0 + ((luma - CX25840_SVIDEO_LUMA1) >> 4);
1038 if (chroma >= CX25840_SVIDEO_CHROMA7) {
1039 reg &= 0x3f;
1040 reg |= (chroma - CX25840_SVIDEO_CHROMA7) >> 2;
1041 } else {
1042 reg &= 0xcf;
1043 reg |= (chroma - CX25840_SVIDEO_CHROMA4) >> 4;
1044 }
1045 }
1046
1047
1048
1049
1050
1051 if (!is_cx2388x(state) && !is_cx231xx(state)) {
1052 switch (aud_input) {
1053 case CX25840_AUDIO_SERIAL:
1054
1055 break;
1056 case CX25840_AUDIO4: reg &= ~0x30; break;
1057 case CX25840_AUDIO5: reg &= ~0x30; reg |= 0x10; break;
1058 case CX25840_AUDIO6: reg &= ~0x30; reg |= 0x20; break;
1059 case CX25840_AUDIO7: reg &= ~0xc0; break;
1060 case CX25840_AUDIO8: reg &= ~0xc0; reg |= 0x40; break;
1061
1062 default:
1063 v4l_err(client, "0x%04x is not a valid audio input!\n",
1064 aud_input);
1065 return -EINVAL;
1066 }
1067 }
1068
1069 cx25840_write(client, 0x103, reg);
1070
1071
1072 if (is_component)
1073 cx25840_and_or(client, 0x401, ~0x6, 0x6);
1074 else
1075 cx25840_and_or(client, 0x401, ~0x6, is_composite ? 0 : 0x02);
1076
1077 if (is_cx2388x(state)) {
1078
1079
1080 if (is_dif) {
1081 cx25840_and_or(client, 0x102, ~0x80, 0x80);
1082
1083
1084 cx25840_write4(client, 0x31c, 0xc2262600);
1085 cx25840_write4(client, 0x320, 0xc2262600);
1086
1087
1088
1089
1090
1091 cx25840_write4(client, 0x318, 0xda262600);
1092 cx25840_write4(client, 0x33c, 0x2a24c800);
1093 cx25840_write4(client, 0x104, 0x0704dd00);
1094 } else {
1095 cx25840_write4(client, 0x300, 0x015c28f5);
1096
1097 cx25840_and_or(client, 0x102, ~0x80, 0);
1098 cx25840_write4(client, 0x340, 0xdf7df83);
1099 cx25840_write4(client, 0x104, 0x0704dd80);
1100 cx25840_write4(client, 0x314, 0x22400600);
1101 cx25840_write4(client, 0x318, 0x40002600);
1102 cx25840_write4(client, 0x324, 0x40002600);
1103 cx25840_write4(client, 0x32c, 0x0250e620);
1104 cx25840_write4(client, 0x39c, 0x01FF0B00);
1105
1106 cx25840_write4(client, 0x410, 0xffff0dbf);
1107 cx25840_write4(client, 0x414, 0x00137d03);
1108
1109
1110
1111 if (is_cx23888(state))
1112 cx25840_write4(client, 0x418, 0x01008080);
1113 else
1114 cx25840_write4(client, 0x418, 0x01000000);
1115
1116 cx25840_write4(client, 0x41c, 0x00000000);
1117
1118
1119
1120 if (is_cx23888(state))
1121 cx25840_write4(client, 0x420, 0x001c3e0f);
1122 else
1123 cx25840_write4(client, 0x420, 0x001c8282);
1124
1125 cx25840_write4(client, 0x42c, 0x42600000);
1126 cx25840_write4(client, 0x430, 0x0000039b);
1127 cx25840_write4(client, 0x438, 0x00000000);
1128
1129 cx25840_write4(client, 0x440, 0xF8E3E824);
1130 cx25840_write4(client, 0x444, 0x401040dc);
1131 cx25840_write4(client, 0x448, 0xcd3f02a0);
1132 cx25840_write4(client, 0x44c, 0x161f1000);
1133 cx25840_write4(client, 0x450, 0x00000802);
1134
1135 cx25840_write4(client, 0x91c, 0x01000000);
1136 cx25840_write4(client, 0x8e0, 0x03063870);
1137 cx25840_write4(client, 0x8d4, 0x7FFF0024);
1138 cx25840_write4(client, 0x8d0, 0x00063073);
1139
1140 cx25840_write4(client, 0x8c8, 0x00010000);
1141 cx25840_write4(client, 0x8cc, 0x00080023);
1142
1143
1144 cx25840_write4(client, 0x33c, 0x2a04c800);
1145 }
1146
1147
1148 cx25840_write4(client, 0x398, 0);
1149 }
1150
1151 if (!is_cx2388x(state) && !is_cx231xx(state)) {
1152
1153 cx25840_and_or(client, 0x102, ~0x2, (reg & 0x80) == 0 ? 2 : 0);
1154
1155 if ((reg & 0xc0) != 0xc0 && (reg & 0x30) != 0x30)
1156 cx25840_and_or(client, 0x102, ~0x4, 4);
1157 else
1158 cx25840_and_or(client, 0x102, ~0x4, 0);
1159 } else {
1160
1161 cx25840_and_or(client, 0x102, ~0x4, is_component ? 0x4 : 0x0);
1162 if (is_composite) {
1163
1164 cx25840_and_or(client, 0x102, ~0x2, 0);
1165 } else if (!is_component) {
1166
1167 if (chroma >= CX25840_SVIDEO_CHROMA7) {
1168
1169 cx25840_and_or(client, 0x102, ~0x2, 2);
1170 } else {
1171
1172 cx25840_and_or(client, 0x102, ~0x2, 0);
1173 }
1174 }
1175
1176
1177 if (is_cx2388x(state) && is_svideo) {
1178#define AFE_CTRL (0x104)
1179#define MODE_CTRL (0x400)
1180 cx25840_and_or(client, 0x102, ~0x2, 0x2);
1181
1182 val = cx25840_read4(client, MODE_CTRL);
1183 val &= 0xFFFFF9FF;
1184
1185
1186 val |= 0x00000200;
1187 val &= ~0x2000;
1188 cx25840_write4(client, MODE_CTRL, val);
1189
1190 val = cx25840_read4(client, AFE_CTRL);
1191
1192
1193 val |= 0x00001000;
1194 val &= 0xfffffe7f;
1195
1196
1197
1198
1199 cx25840_write4(client, AFE_CTRL, val);
1200 } else
1201 cx25840_and_or(client, 0x102, ~0x2, 0);
1202 }
1203
1204 state->vid_input = vid_input;
1205 state->aud_input = aud_input;
1206 cx25840_audio_set_path(client);
1207 input_change(client);
1208
1209 if (is_cx2388x(state)) {
1210
1211 cx25840_write(client, 0x124, 0x03);
1212
1213
1214 cx25840_write(client, 0x144, 0x05);
1215
1216
1217 cx25840_write(client, 0x914, 0xa0);
1218
1219
1220
1221
1222
1223 cx25840_write(client, 0x918, 0xa0);
1224 cx25840_write(client, 0x919, 0x01);
1225 } else if (is_cx231xx(state)) {
1226
1227 cx25840_write(client, 0x124, 0x03);
1228
1229
1230 cx25840_write(client, 0x914, 0xa0);
1231
1232
1233
1234
1235
1236 cx25840_write(client, 0x918, 0xa0);
1237 cx25840_write(client, 0x919, 0x01);
1238 }
1239
1240 if (is_cx2388x(state) && ((aud_input == CX25840_AUDIO7) ||
1241 (aud_input == CX25840_AUDIO6))) {
1242
1243 cx25840_write4(client, 0x910, 0);
1244 cx25840_write4(client, 0x8d0, 0x63073);
1245 } else
1246 if (is_cx2388x(state) && (aud_input == CX25840_AUDIO8)) {
1247
1248 cx25840_write4(client, 0x910, 0x12b000c9);
1249 cx25840_write4(client, 0x8d0, 0x1f063870);
1250 }
1251
1252 if (is_cx23888(state)) {
1253
1254
1255
1256
1257
1258
1259 cx25840_write4(client, 0x124, 0x100);
1260
1261 if (!is_dif) {
1262
1263
1264
1265 cx25840_and_or(client, 0x803, ~0x10, 0x00);
1266 }
1267 }
1268
1269 return 0;
1270}
1271
1272
1273
1274static int set_v4lstd(struct i2c_client *client)
1275{
1276 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
1277 u8 fmt = 0;
1278 u8 pal_m = 0;
1279
1280
1281 if (state->std == V4L2_STD_NTSC_M_JP) {
1282 fmt = 0x2;
1283 } else if (state->std == V4L2_STD_NTSC_443) {
1284 fmt = 0x3;
1285 } else if (state->std == V4L2_STD_PAL_M) {
1286 pal_m = 1;
1287 fmt = 0x5;
1288 } else if (state->std == V4L2_STD_PAL_N) {
1289 fmt = 0x6;
1290 } else if (state->std == V4L2_STD_PAL_Nc) {
1291 fmt = 0x7;
1292 } else if (state->std == V4L2_STD_PAL_60) {
1293 fmt = 0x8;
1294 } else {
1295
1296 if (state->std & V4L2_STD_NTSC)
1297 fmt = 0x1;
1298 else if (state->std & V4L2_STD_PAL)
1299 fmt = 0x4;
1300 else if (state->std & V4L2_STD_SECAM)
1301 fmt = 0xc;
1302 }
1303
1304 v4l_dbg(1, cx25840_debug, client, "changing video std to fmt %i\n",fmt);
1305
1306
1307
1308
1309 if (fmt >= 4 && fmt < 8) {
1310
1311 cx25840_and_or(client, 0x400, ~0xf, 1);
1312
1313 cx25840_and_or(client, 0x47b, ~6, 0);
1314 }
1315 cx25840_and_or(client, 0x400, ~0xf, fmt);
1316 cx25840_and_or(client, 0x403, ~0x3, pal_m);
1317 if (is_cx23888(state))
1318 cx23888_std_setup(client);
1319 else
1320 cx25840_std_setup(client);
1321 if (!is_cx2583x(state))
1322 input_change(client);
1323 return 0;
1324}
1325
1326
1327
1328static int cx25840_s_ctrl(struct v4l2_ctrl *ctrl)
1329{
1330 struct v4l2_subdev *sd = to_sd(ctrl);
1331 struct cx25840_state *state = to_state(sd);
1332 struct i2c_client *client = v4l2_get_subdevdata(sd);
1333
1334 switch (ctrl->id) {
1335 case V4L2_CID_BRIGHTNESS:
1336 cx25840_write(client, 0x414, ctrl->val - 128);
1337 break;
1338
1339 case V4L2_CID_CONTRAST:
1340 cx25840_write(client, 0x415, ctrl->val << 1);
1341 break;
1342
1343 case V4L2_CID_SATURATION:
1344 if (is_cx23888(state)) {
1345 cx25840_write(client, 0x418, ctrl->val << 1);
1346 cx25840_write(client, 0x419, ctrl->val << 1);
1347 } else {
1348 cx25840_write(client, 0x420, ctrl->val << 1);
1349 cx25840_write(client, 0x421, ctrl->val << 1);
1350 }
1351 break;
1352
1353 case V4L2_CID_HUE:
1354 if (is_cx23888(state))
1355 cx25840_write(client, 0x41a, ctrl->val);
1356 else
1357 cx25840_write(client, 0x422, ctrl->val);
1358 break;
1359
1360 default:
1361 return -EINVAL;
1362 }
1363
1364 return 0;
1365}
1366
1367
1368
1369static int cx25840_s_mbus_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *fmt)
1370{
1371 struct cx25840_state *state = to_state(sd);
1372 struct i2c_client *client = v4l2_get_subdevdata(sd);
1373 int HSC, VSC, Vsrc, Hsrc, filter, Vlines;
1374 int is_50Hz = !(state->std & V4L2_STD_525_60);
1375
1376 if (fmt->code != V4L2_MBUS_FMT_FIXED)
1377 return -EINVAL;
1378
1379 fmt->field = V4L2_FIELD_INTERLACED;
1380 fmt->colorspace = V4L2_COLORSPACE_SMPTE170M;
1381
1382 if (is_cx23888(state)) {
1383 Vsrc = (cx25840_read(client, 0x42a) & 0x3f) << 4;
1384 Vsrc |= (cx25840_read(client, 0x429) & 0xf0) >> 4;
1385 } else {
1386 Vsrc = (cx25840_read(client, 0x476) & 0x3f) << 4;
1387 Vsrc |= (cx25840_read(client, 0x475) & 0xf0) >> 4;
1388 }
1389
1390 if (is_cx23888(state)) {
1391 Hsrc = (cx25840_read(client, 0x426) & 0x3f) << 4;
1392 Hsrc |= (cx25840_read(client, 0x425) & 0xf0) >> 4;
1393 } else {
1394 Hsrc = (cx25840_read(client, 0x472) & 0x3f) << 4;
1395 Hsrc |= (cx25840_read(client, 0x471) & 0xf0) >> 4;
1396 }
1397
1398 Vlines = fmt->height + (is_50Hz ? 4 : 7);
1399
1400 if ((fmt->width * 16 < Hsrc) || (Hsrc < fmt->width) ||
1401 (Vlines * 8 < Vsrc) || (Vsrc < Vlines)) {
1402 v4l_err(client, "%dx%d is not a valid size!\n",
1403 fmt->width, fmt->height);
1404 return -ERANGE;
1405 }
1406
1407 HSC = (Hsrc * (1 << 20)) / fmt->width - (1 << 20);
1408 VSC = (1 << 16) - (Vsrc * (1 << 9) / Vlines - (1 << 9));
1409 VSC &= 0x1fff;
1410
1411 if (fmt->width >= 385)
1412 filter = 0;
1413 else if (fmt->width > 192)
1414 filter = 1;
1415 else if (fmt->width > 96)
1416 filter = 2;
1417 else
1418 filter = 3;
1419
1420 v4l_dbg(1, cx25840_debug, client, "decoder set size %dx%d -> scale %ux%u\n",
1421 fmt->width, fmt->height, HSC, VSC);
1422
1423
1424 cx25840_write(client, 0x418, HSC & 0xff);
1425 cx25840_write(client, 0x419, (HSC >> 8) & 0xff);
1426 cx25840_write(client, 0x41a, HSC >> 16);
1427
1428 cx25840_write(client, 0x41c, VSC & 0xff);
1429 cx25840_write(client, 0x41d, VSC >> 8);
1430
1431 cx25840_write(client, 0x41e, 0x8 | filter);
1432 return 0;
1433}
1434
1435
1436
1437static void log_video_status(struct i2c_client *client)
1438{
1439 static const char *const fmt_strs[] = {
1440 "0x0",
1441 "NTSC-M", "NTSC-J", "NTSC-4.43",
1442 "PAL-BDGHI", "PAL-M", "PAL-N", "PAL-Nc", "PAL-60",
1443 "0x9", "0xA", "0xB",
1444 "SECAM",
1445 "0xD", "0xE", "0xF"
1446 };
1447
1448 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
1449 u8 vidfmt_sel = cx25840_read(client, 0x400) & 0xf;
1450 u8 gen_stat1 = cx25840_read(client, 0x40d);
1451 u8 gen_stat2 = cx25840_read(client, 0x40e);
1452 int vid_input = state->vid_input;
1453
1454 v4l_info(client, "Video signal: %spresent\n",
1455 (gen_stat2 & 0x20) ? "" : "not ");
1456 v4l_info(client, "Detected format: %s\n",
1457 fmt_strs[gen_stat1 & 0xf]);
1458
1459 v4l_info(client, "Specified standard: %s\n",
1460 vidfmt_sel ? fmt_strs[vidfmt_sel] : "automatic detection");
1461
1462 if (vid_input >= CX25840_COMPOSITE1 &&
1463 vid_input <= CX25840_COMPOSITE8) {
1464 v4l_info(client, "Specified video input: Composite %d\n",
1465 vid_input - CX25840_COMPOSITE1 + 1);
1466 } else {
1467 v4l_info(client, "Specified video input: S-Video (Luma In%d, Chroma In%d)\n",
1468 (vid_input & 0xf0) >> 4, (vid_input & 0xf00) >> 8);
1469 }
1470
1471 v4l_info(client, "Specified audioclock freq: %d Hz\n", state->audclk_freq);
1472}
1473
1474
1475
1476static void log_audio_status(struct i2c_client *client)
1477{
1478 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
1479 u8 download_ctl = cx25840_read(client, 0x803);
1480 u8 mod_det_stat0 = cx25840_read(client, 0x804);
1481 u8 mod_det_stat1 = cx25840_read(client, 0x805);
1482 u8 audio_config = cx25840_read(client, 0x808);
1483 u8 pref_mode = cx25840_read(client, 0x809);
1484 u8 afc0 = cx25840_read(client, 0x80b);
1485 u8 mute_ctl = cx25840_read(client, 0x8d3);
1486 int aud_input = state->aud_input;
1487 char *p;
1488
1489 switch (mod_det_stat0) {
1490 case 0x00: p = "mono"; break;
1491 case 0x01: p = "stereo"; break;
1492 case 0x02: p = "dual"; break;
1493 case 0x04: p = "tri"; break;
1494 case 0x10: p = "mono with SAP"; break;
1495 case 0x11: p = "stereo with SAP"; break;
1496 case 0x12: p = "dual with SAP"; break;
1497 case 0x14: p = "tri with SAP"; break;
1498 case 0xfe: p = "forced mode"; break;
1499 default: p = "not defined";
1500 }
1501 v4l_info(client, "Detected audio mode: %s\n", p);
1502
1503 switch (mod_det_stat1) {
1504 case 0x00: p = "not defined"; break;
1505 case 0x01: p = "EIAJ"; break;
1506 case 0x02: p = "A2-M"; break;
1507 case 0x03: p = "A2-BG"; break;
1508 case 0x04: p = "A2-DK1"; break;
1509 case 0x05: p = "A2-DK2"; break;
1510 case 0x06: p = "A2-DK3"; break;
1511 case 0x07: p = "A1 (6.0 MHz FM Mono)"; break;
1512 case 0x08: p = "AM-L"; break;
1513 case 0x09: p = "NICAM-BG"; break;
1514 case 0x0a: p = "NICAM-DK"; break;
1515 case 0x0b: p = "NICAM-I"; break;
1516 case 0x0c: p = "NICAM-L"; break;
1517 case 0x0d: p = "BTSC/EIAJ/A2-M Mono (4.5 MHz FMMono)"; break;
1518 case 0x0e: p = "IF FM Radio"; break;
1519 case 0x0f: p = "BTSC"; break;
1520 case 0x10: p = "high-deviation FM"; break;
1521 case 0x11: p = "very high-deviation FM"; break;
1522 case 0xfd: p = "unknown audio standard"; break;
1523 case 0xfe: p = "forced audio standard"; break;
1524 case 0xff: p = "no detected audio standard"; break;
1525 default: p = "not defined";
1526 }
1527 v4l_info(client, "Detected audio standard: %s\n", p);
1528 v4l_info(client, "Audio microcontroller: %s\n",
1529 (download_ctl & 0x10) ?
1530 ((mute_ctl & 0x2) ? "detecting" : "running") : "stopped");
1531
1532 switch (audio_config >> 4) {
1533 case 0x00: p = "undefined"; break;
1534 case 0x01: p = "BTSC"; break;
1535 case 0x02: p = "EIAJ"; break;
1536 case 0x03: p = "A2-M"; break;
1537 case 0x04: p = "A2-BG"; break;
1538 case 0x05: p = "A2-DK1"; break;
1539 case 0x06: p = "A2-DK2"; break;
1540 case 0x07: p = "A2-DK3"; break;
1541 case 0x08: p = "A1 (6.0 MHz FM Mono)"; break;
1542 case 0x09: p = "AM-L"; break;
1543 case 0x0a: p = "NICAM-BG"; break;
1544 case 0x0b: p = "NICAM-DK"; break;
1545 case 0x0c: p = "NICAM-I"; break;
1546 case 0x0d: p = "NICAM-L"; break;
1547 case 0x0e: p = "FM radio"; break;
1548 case 0x0f: p = "automatic detection"; break;
1549 default: p = "undefined";
1550 }
1551 v4l_info(client, "Configured audio standard: %s\n", p);
1552
1553 if ((audio_config >> 4) < 0xF) {
1554 switch (audio_config & 0xF) {
1555 case 0x00: p = "MONO1 (LANGUAGE A/Mono L+R channel for BTSC, EIAJ, A2)"; break;
1556 case 0x01: p = "MONO2 (LANGUAGE B)"; break;
1557 case 0x02: p = "MONO3 (STEREO forced MONO)"; break;
1558 case 0x03: p = "MONO4 (NICAM ANALOG-Language C/Analog Fallback)"; break;
1559 case 0x04: p = "STEREO"; break;
1560 case 0x05: p = "DUAL1 (AB)"; break;
1561 case 0x06: p = "DUAL2 (AC) (FM)"; break;
1562 case 0x07: p = "DUAL3 (BC) (FM)"; break;
1563 case 0x08: p = "DUAL4 (AC) (AM)"; break;
1564 case 0x09: p = "DUAL5 (BC) (AM)"; break;
1565 case 0x0a: p = "SAP"; break;
1566 default: p = "undefined";
1567 }
1568 v4l_info(client, "Configured audio mode: %s\n", p);
1569 } else {
1570 switch (audio_config & 0xF) {
1571 case 0x00: p = "BG"; break;
1572 case 0x01: p = "DK1"; break;
1573 case 0x02: p = "DK2"; break;
1574 case 0x03: p = "DK3"; break;
1575 case 0x04: p = "I"; break;
1576 case 0x05: p = "L"; break;
1577 case 0x06: p = "BTSC"; break;
1578 case 0x07: p = "EIAJ"; break;
1579 case 0x08: p = "A2-M"; break;
1580 case 0x09: p = "FM Radio"; break;
1581 case 0x0f: p = "automatic standard and mode detection"; break;
1582 default: p = "undefined";
1583 }
1584 v4l_info(client, "Configured audio system: %s\n", p);
1585 }
1586
1587 if (aud_input) {
1588 v4l_info(client, "Specified audio input: Tuner (In%d)\n", aud_input);
1589 } else {
1590 v4l_info(client, "Specified audio input: External\n");
1591 }
1592
1593 switch (pref_mode & 0xf) {
1594 case 0: p = "mono/language A"; break;
1595 case 1: p = "language B"; break;
1596 case 2: p = "language C"; break;
1597 case 3: p = "analog fallback"; break;
1598 case 4: p = "stereo"; break;
1599 case 5: p = "language AC"; break;
1600 case 6: p = "language BC"; break;
1601 case 7: p = "language AB"; break;
1602 default: p = "undefined";
1603 }
1604 v4l_info(client, "Preferred audio mode: %s\n", p);
1605
1606 if ((audio_config & 0xf) == 0xf) {
1607 switch ((afc0 >> 3) & 0x3) {
1608 case 0: p = "system DK"; break;
1609 case 1: p = "system L"; break;
1610 case 2: p = "autodetect"; break;
1611 default: p = "undefined";
1612 }
1613 v4l_info(client, "Selected 65 MHz format: %s\n", p);
1614
1615 switch (afc0 & 0x7) {
1616 case 0: p = "chroma"; break;
1617 case 1: p = "BTSC"; break;
1618 case 2: p = "EIAJ"; break;
1619 case 3: p = "A2-M"; break;
1620 case 4: p = "autodetect"; break;
1621 default: p = "undefined";
1622 }
1623 v4l_info(client, "Selected 45 MHz format: %s\n", p);
1624 }
1625}
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639static int cx25840_load_fw(struct v4l2_subdev *sd)
1640{
1641 struct cx25840_state *state = to_state(sd);
1642 struct i2c_client *client = v4l2_get_subdevdata(sd);
1643
1644 if (!state->is_initialized) {
1645
1646 state->is_initialized = 1;
1647 if (is_cx2583x(state))
1648 cx25836_initialize(client);
1649 else if (is_cx2388x(state))
1650 cx23885_initialize(client);
1651 else if (is_cx231xx(state))
1652 cx231xx_initialize(client);
1653 else
1654 cx25840_initialize(client);
1655 }
1656 return 0;
1657}
1658
1659#ifdef CONFIG_VIDEO_ADV_DEBUG
1660static int cx25840_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
1661{
1662 struct i2c_client *client = v4l2_get_subdevdata(sd);
1663
1664 reg->size = 1;
1665 reg->val = cx25840_read(client, reg->reg & 0x0fff);
1666 return 0;
1667}
1668
1669static int cx25840_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
1670{
1671 struct i2c_client *client = v4l2_get_subdevdata(sd);
1672
1673 cx25840_write(client, reg->reg & 0x0fff, reg->val & 0xff);
1674 return 0;
1675}
1676#endif
1677
1678static int cx25840_s_audio_stream(struct v4l2_subdev *sd, int enable)
1679{
1680 struct cx25840_state *state = to_state(sd);
1681 struct i2c_client *client = v4l2_get_subdevdata(sd);
1682 u8 v;
1683
1684 if (is_cx2583x(state) || is_cx2388x(state) || is_cx231xx(state))
1685 return 0;
1686
1687 v4l_dbg(1, cx25840_debug, client, "%s audio output\n",
1688 enable ? "enable" : "disable");
1689
1690 if (enable) {
1691 v = cx25840_read(client, 0x115) | 0x80;
1692 cx25840_write(client, 0x115, v);
1693 v = cx25840_read(client, 0x116) | 0x03;
1694 cx25840_write(client, 0x116, v);
1695 } else {
1696 v = cx25840_read(client, 0x115) & ~(0x80);
1697 cx25840_write(client, 0x115, v);
1698 v = cx25840_read(client, 0x116) & ~(0x03);
1699 cx25840_write(client, 0x116, v);
1700 }
1701 return 0;
1702}
1703
1704static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
1705{
1706 struct cx25840_state *state = to_state(sd);
1707 struct i2c_client *client = v4l2_get_subdevdata(sd);
1708 u8 v;
1709
1710 v4l_dbg(1, cx25840_debug, client, "%s video output\n",
1711 enable ? "enable" : "disable");
1712 if (enable) {
1713 if (is_cx2388x(state) || is_cx231xx(state)) {
1714 v = cx25840_read(client, 0x421) | 0x0b;
1715 cx25840_write(client, 0x421, v);
1716 } else {
1717 v = cx25840_read(client, 0x115) | 0x0c;
1718 cx25840_write(client, 0x115, v);
1719 v = cx25840_read(client, 0x116) | 0x04;
1720 cx25840_write(client, 0x116, v);
1721 }
1722 } else {
1723 if (is_cx2388x(state) || is_cx231xx(state)) {
1724 v = cx25840_read(client, 0x421) & ~(0x0b);
1725 cx25840_write(client, 0x421, v);
1726 } else {
1727 v = cx25840_read(client, 0x115) & ~(0x0c);
1728 cx25840_write(client, 0x115, v);
1729 v = cx25840_read(client, 0x116) & ~(0x04);
1730 cx25840_write(client, 0x116, v);
1731 }
1732 }
1733 return 0;
1734}
1735
1736
1737static int cx25840_g_std(struct v4l2_subdev *sd, v4l2_std_id *std)
1738{
1739 struct i2c_client *client = v4l2_get_subdevdata(sd);
1740
1741 v4l2_std_id stds[] = {
1742 V4L2_STD_UNKNOWN,
1743
1744 V4L2_STD_NTSC_M,
1745 V4L2_STD_NTSC_M_JP,
1746 V4L2_STD_NTSC_443,
1747 V4L2_STD_PAL,
1748 V4L2_STD_PAL_M,
1749 V4L2_STD_PAL_N,
1750 V4L2_STD_PAL_Nc,
1751 V4L2_STD_PAL_60,
1752
1753 V4L2_STD_UNKNOWN,
1754 V4L2_STD_UNKNOWN,
1755 V4L2_STD_UNKNOWN,
1756 V4L2_STD_UNKNOWN,
1757 V4L2_STD_UNKNOWN,
1758 V4L2_STD_UNKNOWN,
1759 V4L2_STD_UNKNOWN
1760 };
1761
1762 u32 fmt = (cx25840_read4(client, 0x40c) >> 8) & 0xf;
1763 *std = stds[ fmt ];
1764
1765 v4l_dbg(1, cx25840_debug, client, "g_std fmt = %x, v4l2_std_id = 0x%x\n",
1766 fmt, (unsigned int)stds[ fmt ]);
1767
1768 return 0;
1769}
1770
1771static int cx25840_g_input_status(struct v4l2_subdev *sd, u32 *status)
1772{
1773 struct i2c_client *client = v4l2_get_subdevdata(sd);
1774
1775
1776
1777
1778
1779
1780 if ((cx25840_read4(client, 0x40c) & 0x00010000) == 0)
1781 *status |= V4L2_IN_ST_NO_SIGNAL;
1782
1783 return 0;
1784}
1785
1786static int cx25840_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
1787{
1788 struct cx25840_state *state = to_state(sd);
1789 struct i2c_client *client = v4l2_get_subdevdata(sd);
1790
1791 if (state->radio == 0 && state->std == std)
1792 return 0;
1793 state->radio = 0;
1794 state->std = std;
1795 return set_v4lstd(client);
1796}
1797
1798static int cx25840_s_radio(struct v4l2_subdev *sd)
1799{
1800 struct cx25840_state *state = to_state(sd);
1801
1802 state->radio = 1;
1803 return 0;
1804}
1805
1806static int cx25840_s_video_routing(struct v4l2_subdev *sd,
1807 u32 input, u32 output, u32 config)
1808{
1809 struct cx25840_state *state = to_state(sd);
1810 struct i2c_client *client = v4l2_get_subdevdata(sd);
1811
1812 if (is_cx23888(state))
1813 cx23888_std_setup(client);
1814
1815 return set_input(client, input, state->aud_input);
1816}
1817
1818static int cx25840_s_audio_routing(struct v4l2_subdev *sd,
1819 u32 input, u32 output, u32 config)
1820{
1821 struct cx25840_state *state = to_state(sd);
1822 struct i2c_client *client = v4l2_get_subdevdata(sd);
1823
1824 if (is_cx23888(state))
1825 cx23888_std_setup(client);
1826 return set_input(client, state->vid_input, input);
1827}
1828
1829static int cx25840_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequency *freq)
1830{
1831 struct i2c_client *client = v4l2_get_subdevdata(sd);
1832
1833 input_change(client);
1834 return 0;
1835}
1836
1837static int cx25840_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
1838{
1839 struct cx25840_state *state = to_state(sd);
1840 struct i2c_client *client = v4l2_get_subdevdata(sd);
1841 u8 vpres = cx25840_read(client, 0x40e) & 0x20;
1842 u8 mode;
1843 int val = 0;
1844
1845 if (state->radio)
1846 return 0;
1847
1848 vt->signal = vpres ? 0xffff : 0x0;
1849 if (is_cx2583x(state))
1850 return 0;
1851
1852 vt->capability |=
1853 V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LANG1 |
1854 V4L2_TUNER_CAP_LANG2 | V4L2_TUNER_CAP_SAP;
1855
1856 mode = cx25840_read(client, 0x804);
1857
1858
1859 if ((mode & 0xf) == 1)
1860 val |= V4L2_TUNER_SUB_STEREO;
1861 else
1862 val |= V4L2_TUNER_SUB_MONO;
1863
1864 if (mode == 2 || mode == 4)
1865 val = V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2;
1866
1867 if (mode & 0x10)
1868 val |= V4L2_TUNER_SUB_SAP;
1869
1870 vt->rxsubchans = val;
1871 vt->audmode = state->audmode;
1872 return 0;
1873}
1874
1875static int cx25840_s_tuner(struct v4l2_subdev *sd, const struct v4l2_tuner *vt)
1876{
1877 struct cx25840_state *state = to_state(sd);
1878 struct i2c_client *client = v4l2_get_subdevdata(sd);
1879
1880 if (state->radio || is_cx2583x(state))
1881 return 0;
1882
1883 switch (vt->audmode) {
1884 case V4L2_TUNER_MODE_MONO:
1885
1886
1887
1888 cx25840_and_or(client, 0x809, ~0xf, 0x00);
1889 break;
1890 case V4L2_TUNER_MODE_STEREO:
1891 case V4L2_TUNER_MODE_LANG1:
1892
1893
1894
1895 cx25840_and_or(client, 0x809, ~0xf, 0x04);
1896 break;
1897 case V4L2_TUNER_MODE_LANG1_LANG2:
1898
1899
1900
1901 cx25840_and_or(client, 0x809, ~0xf, 0x07);
1902 break;
1903 case V4L2_TUNER_MODE_LANG2:
1904
1905
1906
1907 cx25840_and_or(client, 0x809, ~0xf, 0x01);
1908 break;
1909 default:
1910 return -EINVAL;
1911 }
1912 state->audmode = vt->audmode;
1913 return 0;
1914}
1915
1916static int cx25840_reset(struct v4l2_subdev *sd, u32 val)
1917{
1918 struct cx25840_state *state = to_state(sd);
1919 struct i2c_client *client = v4l2_get_subdevdata(sd);
1920
1921 if (is_cx2583x(state))
1922 cx25836_initialize(client);
1923 else if (is_cx2388x(state))
1924 cx23885_initialize(client);
1925 else if (is_cx231xx(state))
1926 cx231xx_initialize(client);
1927 else
1928 cx25840_initialize(client);
1929 return 0;
1930}
1931
1932static int cx25840_log_status(struct v4l2_subdev *sd)
1933{
1934 struct cx25840_state *state = to_state(sd);
1935 struct i2c_client *client = v4l2_get_subdevdata(sd);
1936
1937 log_video_status(client);
1938 if (!is_cx2583x(state))
1939 log_audio_status(client);
1940 cx25840_ir_log_status(sd);
1941 v4l2_ctrl_handler_log_status(&state->hdl, sd->name);
1942 return 0;
1943}
1944
1945static int cx23885_irq_handler(struct v4l2_subdev *sd, u32 status,
1946 bool *handled)
1947{
1948 struct cx25840_state *state = to_state(sd);
1949 struct i2c_client *c = v4l2_get_subdevdata(sd);
1950 u8 irq_stat, aud_stat, aud_en, ir_stat, ir_en;
1951 u32 vid_stat, aud_mc_stat;
1952 bool block_handled;
1953 int ret = 0;
1954
1955 irq_stat = cx25840_read(c, CX23885_PIN_CTRL_IRQ_REG);
1956 v4l_dbg(2, cx25840_debug, c, "AV Core IRQ status (entry): %s %s %s\n",
1957 irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT ? "ir" : " ",
1958 irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT ? "aud" : " ",
1959 irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT ? "vid" : " ");
1960
1961 if ((is_cx23885(state) || is_cx23887(state))) {
1962 ir_stat = cx25840_read(c, CX25840_IR_STATS_REG);
1963 ir_en = cx25840_read(c, CX25840_IR_IRQEN_REG);
1964 v4l_dbg(2, cx25840_debug, c,
1965 "AV Core ir IRQ status: %#04x disables: %#04x\n",
1966 ir_stat, ir_en);
1967 if (irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT) {
1968 block_handled = false;
1969 ret = cx25840_ir_irq_handler(sd,
1970 status, &block_handled);
1971 if (block_handled)
1972 *handled = true;
1973 }
1974 }
1975
1976 aud_stat = cx25840_read(c, CX25840_AUD_INT_STAT_REG);
1977 aud_en = cx25840_read(c, CX25840_AUD_INT_CTRL_REG);
1978 v4l_dbg(2, cx25840_debug, c,
1979 "AV Core audio IRQ status: %#04x disables: %#04x\n",
1980 aud_stat, aud_en);
1981 aud_mc_stat = cx25840_read4(c, CX23885_AUD_MC_INT_MASK_REG);
1982 v4l_dbg(2, cx25840_debug, c,
1983 "AV Core audio MC IRQ status: %#06x enables: %#06x\n",
1984 aud_mc_stat >> CX23885_AUD_MC_INT_STAT_SHFT,
1985 aud_mc_stat & CX23885_AUD_MC_INT_CTRL_BITS);
1986 if (irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT) {
1987 if (aud_stat) {
1988 cx25840_write(c, CX25840_AUD_INT_STAT_REG, aud_stat);
1989 *handled = true;
1990 }
1991 }
1992
1993 vid_stat = cx25840_read4(c, CX25840_VID_INT_STAT_REG);
1994 v4l_dbg(2, cx25840_debug, c,
1995 "AV Core video IRQ status: %#06x disables: %#06x\n",
1996 vid_stat & CX25840_VID_INT_STAT_BITS,
1997 vid_stat >> CX25840_VID_INT_MASK_SHFT);
1998 if (irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT) {
1999 if (vid_stat & CX25840_VID_INT_STAT_BITS) {
2000 cx25840_write4(c, CX25840_VID_INT_STAT_REG, vid_stat);
2001 *handled = true;
2002 }
2003 }
2004
2005 irq_stat = cx25840_read(c, CX23885_PIN_CTRL_IRQ_REG);
2006 v4l_dbg(2, cx25840_debug, c, "AV Core IRQ status (exit): %s %s %s\n",
2007 irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT ? "ir" : " ",
2008 irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT ? "aud" : " ",
2009 irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT ? "vid" : " ");
2010
2011 return ret;
2012}
2013
2014static int cx25840_irq_handler(struct v4l2_subdev *sd, u32 status,
2015 bool *handled)
2016{
2017 struct cx25840_state *state = to_state(sd);
2018
2019 *handled = false;
2020
2021
2022 if (is_cx2388x(state))
2023 return cx23885_irq_handler(sd, status, handled);
2024
2025 return -ENODEV;
2026}
2027
2028
2029
2030#define DIF_PLL_FREQ_WORD (0x300)
2031#define DIF_BPF_COEFF01 (0x348)
2032#define DIF_BPF_COEFF23 (0x34c)
2033#define DIF_BPF_COEFF45 (0x350)
2034#define DIF_BPF_COEFF67 (0x354)
2035#define DIF_BPF_COEFF89 (0x358)
2036#define DIF_BPF_COEFF1011 (0x35c)
2037#define DIF_BPF_COEFF1213 (0x360)
2038#define DIF_BPF_COEFF1415 (0x364)
2039#define DIF_BPF_COEFF1617 (0x368)
2040#define DIF_BPF_COEFF1819 (0x36c)
2041#define DIF_BPF_COEFF2021 (0x370)
2042#define DIF_BPF_COEFF2223 (0x374)
2043#define DIF_BPF_COEFF2425 (0x378)
2044#define DIF_BPF_COEFF2627 (0x37c)
2045#define DIF_BPF_COEFF2829 (0x380)
2046#define DIF_BPF_COEFF3031 (0x384)
2047#define DIF_BPF_COEFF3233 (0x388)
2048#define DIF_BPF_COEFF3435 (0x38c)
2049#define DIF_BPF_COEFF36 (0x390)
2050
2051static void cx23885_dif_setup(struct i2c_client *client, u32 ifHz)
2052{
2053 u64 pll_freq;
2054 u32 pll_freq_word;
2055
2056 v4l_dbg(1, cx25840_debug, client, "%s(%d)\n", __func__, ifHz);
2057
2058
2059
2060 pll_freq = div_u64((u64)ifHz * 268435456, 50000000);
2061 pll_freq_word = (u32)pll_freq;
2062
2063 cx25840_write4(client, DIF_PLL_FREQ_WORD, pll_freq_word);
2064
2065
2066 ifHz = (ifHz / 100000) * 100000;
2067
2068 if (ifHz < 3000000)
2069 ifHz = 3000000;
2070
2071 if (ifHz > 16000000)
2072 ifHz = 16000000;
2073
2074 v4l_dbg(1, cx25840_debug, client, "%s(%d) again\n", __func__, ifHz);
2075
2076 switch (ifHz) {
2077 case 3000000:
2078 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
2079 cx25840_write4(client, DIF_BPF_COEFF23, 0x00080012);
2080 cx25840_write4(client, DIF_BPF_COEFF45, 0x001e0024);
2081 cx25840_write4(client, DIF_BPF_COEFF67, 0x001bfff8);
2082 cx25840_write4(client, DIF_BPF_COEFF89, 0xffb4ff50);
2083 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed8fe68);
2084 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe24fe34);
2085 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfebaffc7);
2086 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d031f);
2087 cx25840_write4(client, DIF_BPF_COEFF1819, 0x04f0065d);
2088 cx25840_write4(client, DIF_BPF_COEFF2021, 0x07010688);
2089 cx25840_write4(client, DIF_BPF_COEFF2223, 0x04c901d6);
2090 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe00f9d3);
2091 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600f342);
2092 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf235f337);
2093 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf64efb22);
2094 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0105070f);
2095 cx25840_write4(client, DIF_BPF_COEFF3435, 0x0c460fce);
2096 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2097 break;
2098
2099 case 3100000:
2100 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
2101 cx25840_write4(client, DIF_BPF_COEFF23, 0x00070012);
2102 cx25840_write4(client, DIF_BPF_COEFF45, 0x00220032);
2103 cx25840_write4(client, DIF_BPF_COEFF67, 0x00370026);
2104 cx25840_write4(client, DIF_BPF_COEFF89, 0xfff0ff91);
2105 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff0efe7c);
2106 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe01fdcc);
2107 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe0afedb);
2108 cx25840_write4(client, DIF_BPF_COEFF1617, 0x00440224);
2109 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0434060c);
2110 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0738074e);
2111 cx25840_write4(client, DIF_BPF_COEFF2223, 0x06090361);
2112 cx25840_write4(client, DIF_BPF_COEFF2425, 0xff99fb39);
2113 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fef3b6);
2114 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf21af2a5);
2115 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf573fa33);
2116 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0034067d);
2117 cx25840_write4(client, DIF_BPF_COEFF3435, 0x0bfb0fb9);
2118 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2119 break;
2120
2121 case 3200000:
2122 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000000);
2123 cx25840_write4(client, DIF_BPF_COEFF23, 0x0004000e);
2124 cx25840_write4(client, DIF_BPF_COEFF45, 0x00200038);
2125 cx25840_write4(client, DIF_BPF_COEFF67, 0x004c004f);
2126 cx25840_write4(client, DIF_BPF_COEFF89, 0x002fffdf);
2127 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff5cfeb6);
2128 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe0dfd92);
2129 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd7ffe03);
2130 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36010a);
2131 cx25840_write4(client, DIF_BPF_COEFF1819, 0x03410575);
2132 cx25840_write4(client, DIF_BPF_COEFF2021, 0x072607d2);
2133 cx25840_write4(client, DIF_BPF_COEFF2223, 0x071804d5);
2134 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0134fcb7);
2135 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81ff451);
2136 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf223f22e);
2137 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf4a7f94b);
2138 cx25840_write4(client, DIF_BPF_COEFF3233, 0xff6405e8);
2139 cx25840_write4(client, DIF_BPF_COEFF3435, 0x0bae0fa4);
2140 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2141 break;
2142
2143 case 3300000:
2144 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
2145 cx25840_write4(client, DIF_BPF_COEFF23, 0x00000008);
2146 cx25840_write4(client, DIF_BPF_COEFF45, 0x001a0036);
2147 cx25840_write4(client, DIF_BPF_COEFF67, 0x0056006d);
2148 cx25840_write4(client, DIF_BPF_COEFF89, 0x00670030);
2149 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffbdff10);
2150 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe46fd8d);
2151 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd25fd4f);
2152 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35ffe0);
2153 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0224049f);
2154 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06c9080e);
2155 cx25840_write4(client, DIF_BPF_COEFF2223, 0x07ef0627);
2156 cx25840_write4(client, DIF_BPF_COEFF2425, 0x02c9fe45);
2157 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf961f513);
2158 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf250f1d2);
2159 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf3ecf869);
2160 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfe930552);
2161 cx25840_write4(client, DIF_BPF_COEFF3435, 0x0b5f0f8f);
2162 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2163 break;
2164
2165 case 3400000:
2166 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
2167 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffd0001);
2168 cx25840_write4(client, DIF_BPF_COEFF45, 0x000f002c);
2169 cx25840_write4(client, DIF_BPF_COEFF67, 0x0054007d);
2170 cx25840_write4(client, DIF_BPF_COEFF89, 0x0093007c);
2171 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0024ff82);
2172 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfea6fdbb);
2173 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd03fcca);
2174 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51feb9);
2175 cx25840_write4(client, DIF_BPF_COEFF1819, 0x00eb0392);
2176 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06270802);
2177 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08880750);
2178 cx25840_write4(client, DIF_BPF_COEFF2425, 0x044dffdb);
2179 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabdf5f8);
2180 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2a0f193);
2181 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf342f78f);
2182 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfdc404b9);
2183 cx25840_write4(client, DIF_BPF_COEFF3435, 0x0b0e0f78);
2184 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2185 break;
2186
2187 case 3500000:
2188 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
2189 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffafff9);
2190 cx25840_write4(client, DIF_BPF_COEFF45, 0x0002001b);
2191 cx25840_write4(client, DIF_BPF_COEFF67, 0x0046007d);
2192 cx25840_write4(client, DIF_BPF_COEFF89, 0x00ad00ba);
2193 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00870000);
2194 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff26fe1a);
2195 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd1bfc7e);
2196 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fda4);
2197 cx25840_write4(client, DIF_BPF_COEFF1819, 0xffa5025c);
2198 cx25840_write4(client, DIF_BPF_COEFF2021, 0x054507ad);
2199 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08dd0847);
2200 cx25840_write4(client, DIF_BPF_COEFF2425, 0x05b80172);
2201 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2ef6ff);
2202 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf313f170);
2203 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf2abf6bd);
2204 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfcf6041f);
2205 cx25840_write4(client, DIF_BPF_COEFF3435, 0x0abc0f61);
2206 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2207 break;
2208
2209 case 3600000:
2210 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
2211 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff3);
2212 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff50006);
2213 cx25840_write4(client, DIF_BPF_COEFF67, 0x002f006c);
2214 cx25840_write4(client, DIF_BPF_COEFF89, 0x00b200e3);
2215 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00dc007e);
2216 cx25840_write4(client, DIF_BPF_COEFF1213, 0xffb9fea0);
2217 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd6bfc71);
2218 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fcb1);
2219 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe65010b);
2220 cx25840_write4(client, DIF_BPF_COEFF2021, 0x042d0713);
2221 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08ec0906);
2222 cx25840_write4(client, DIF_BPF_COEFF2425, 0x07020302);
2223 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaff823);
2224 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3a7f16a);
2225 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf228f5f5);
2226 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfc2a0384);
2227 cx25840_write4(client, DIF_BPF_COEFF3435, 0x0a670f4a);
2228 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2229 break;
2230
2231 case 3700000:
2232 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
2233 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff7ffef);
2234 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe9fff1);
2235 cx25840_write4(client, DIF_BPF_COEFF67, 0x0010004d);
2236 cx25840_write4(client, DIF_BPF_COEFF89, 0x00a100f2);
2237 cx25840_write4(client, DIF_BPF_COEFF1011, 0x011a00f0);
2238 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0053ff44);
2239 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdedfca2);
2240 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fbef);
2241 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd39ffae);
2242 cx25840_write4(client, DIF_BPF_COEFF2021, 0x02ea0638);
2243 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08b50987);
2244 cx25840_write4(client, DIF_BPF_COEFF2425, 0x08230483);
2245 cx25840_write4(client, DIF_BPF_COEFF2627, 0xff39f960);
2246 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf45bf180);
2247 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf1b8f537);
2248 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfb6102e7);
2249 cx25840_write4(client, DIF_BPF_COEFF3435, 0x0a110f32);
2250 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2251 break;
2252
2253 case 3800000:
2254 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
2255 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9ffee);
2256 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe1ffdd);
2257 cx25840_write4(client, DIF_BPF_COEFF67, 0xfff00024);
2258 cx25840_write4(client, DIF_BPF_COEFF89, 0x007c00e5);
2259 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013a014a);
2260 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00e6fff8);
2261 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe98fd0f);
2262 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fb67);
2263 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc32fe54);
2264 cx25840_write4(client, DIF_BPF_COEFF2021, 0x01880525);
2265 cx25840_write4(client, DIF_BPF_COEFF2223, 0x083909c7);
2266 cx25840_write4(client, DIF_BPF_COEFF2425, 0x091505ee);
2267 cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c7fab3);
2268 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf52df1b4);
2269 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf15df484);
2270 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfa9b0249);
2271 cx25840_write4(client, DIF_BPF_COEFF3435, 0x09ba0f19);
2272 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2273 break;
2274
2275 case 3900000:
2276 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000000);
2277 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffbfff0);
2278 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffcf);
2279 cx25840_write4(client, DIF_BPF_COEFF67, 0xffd1fff6);
2280 cx25840_write4(client, DIF_BPF_COEFF89, 0x004800be);
2281 cx25840_write4(client, DIF_BPF_COEFF1011, 0x01390184);
2282 cx25840_write4(client, DIF_BPF_COEFF1213, 0x016300ac);
2283 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff5efdb1);
2284 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fb23);
2285 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb5cfd0d);
2286 cx25840_write4(client, DIF_BPF_COEFF2021, 0x001703e4);
2287 cx25840_write4(client, DIF_BPF_COEFF2223, 0x077b09c4);
2288 cx25840_write4(client, DIF_BPF_COEFF2425, 0x09d2073c);
2289 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0251fc18);
2290 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf61cf203);
2291 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf118f3dc);
2292 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf9d801aa);
2293 cx25840_write4(client, DIF_BPF_COEFF3435, 0x09600eff);
2294 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2295 break;
2296
2297 case 4000000:
2298 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
2299 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffefff4);
2300 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe1ffc8);
2301 cx25840_write4(client, DIF_BPF_COEFF67, 0xffbaffca);
2302 cx25840_write4(client, DIF_BPF_COEFF89, 0x000b0082);
2303 cx25840_write4(client, DIF_BPF_COEFF1011, 0x01170198);
2304 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01c10152);
2305 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0030fe7b);
2306 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fb24);
2307 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfac3fbe9);
2308 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfea5027f);
2309 cx25840_write4(client, DIF_BPF_COEFF2223, 0x0683097f);
2310 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a560867);
2311 cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d2fd89);
2312 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf723f26f);
2313 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0e8f341);
2314 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf919010a);
2315 cx25840_write4(client, DIF_BPF_COEFF3435, 0x09060ee5);
2316 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2317 break;
2318
2319 case 4100000:
2320 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
2321 cx25840_write4(client, DIF_BPF_COEFF23, 0x0002fffb);
2322 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe8ffca);
2323 cx25840_write4(client, DIF_BPF_COEFF67, 0xffacffa4);
2324 cx25840_write4(client, DIF_BPF_COEFF89, 0xffcd0036);
2325 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00d70184);
2326 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01f601dc);
2327 cx25840_write4(client, DIF_BPF_COEFF1415, 0x00ffff60);
2328 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fb6d);
2329 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa6efaf5);
2330 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfd410103);
2331 cx25840_write4(client, DIF_BPF_COEFF2223, 0x055708f9);
2332 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a9e0969);
2333 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0543ff02);
2334 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf842f2f5);
2335 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0cef2b2);
2336 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf85e006b);
2337 cx25840_write4(client, DIF_BPF_COEFF3435, 0x08aa0ecb);
2338 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2339 break;
2340
2341 case 4200000:
2342 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010003);
2343 cx25840_write4(client, DIF_BPF_COEFF23, 0x00050003);
2344 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff3ffd3);
2345 cx25840_write4(client, DIF_BPF_COEFF67, 0xffaaff8b);
2346 cx25840_write4(client, DIF_BPF_COEFF89, 0xff95ffe5);
2347 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0080014a);
2348 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01fe023f);
2349 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01ba0050);
2350 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fbf8);
2351 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa62fa3b);
2352 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfbf9ff7e);
2353 cx25840_write4(client, DIF_BPF_COEFF2223, 0x04010836);
2354 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0aa90a3d);
2355 cx25840_write4(client, DIF_BPF_COEFF2627, 0x069f007f);
2356 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf975f395);
2357 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0cbf231);
2358 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf7a9ffcb);
2359 cx25840_write4(client, DIF_BPF_COEFF3435, 0x084c0eaf);
2360 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2361 break;
2362
2363 case 4300000:
2364 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010003);
2365 cx25840_write4(client, DIF_BPF_COEFF23, 0x0008000a);
2366 cx25840_write4(client, DIF_BPF_COEFF45, 0x0000ffe4);
2367 cx25840_write4(client, DIF_BPF_COEFF67, 0xffb4ff81);
2368 cx25840_write4(client, DIF_BPF_COEFF89, 0xff6aff96);
2369 cx25840_write4(client, DIF_BPF_COEFF1011, 0x001c00f0);
2370 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01d70271);
2371 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0254013b);
2372 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fcbd);
2373 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa9ff9c5);
2374 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfadbfdfe);
2375 cx25840_write4(client, DIF_BPF_COEFF2223, 0x028c073b);
2376 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a750adf);
2377 cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e101fa);
2378 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfab8f44e);
2379 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0ddf1be);
2380 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf6f9ff2b);
2381 cx25840_write4(client, DIF_BPF_COEFF3435, 0x07ed0e94);
2382 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2383 break;
2384
2385 case 4400000:
2386 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
2387 cx25840_write4(client, DIF_BPF_COEFF23, 0x0009000f);
2388 cx25840_write4(client, DIF_BPF_COEFF45, 0x000efff8);
2389 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9ff87);
2390 cx25840_write4(client, DIF_BPF_COEFF89, 0xff52ff54);
2391 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffb5007e);
2392 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01860270);
2393 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02c00210);
2394 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fdb2);
2395 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb22f997);
2396 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9f2fc90);
2397 cx25840_write4(client, DIF_BPF_COEFF2223, 0x0102060f);
2398 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a050b4c);
2399 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0902036e);
2400 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfc0af51e);
2401 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf106f15a);
2402 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf64efe8b);
2403 cx25840_write4(client, DIF_BPF_COEFF3435, 0x078d0e77);
2404 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2405 break;
2406
2407 case 4500000:
2408 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
2409 cx25840_write4(client, DIF_BPF_COEFF23, 0x00080012);
2410 cx25840_write4(client, DIF_BPF_COEFF45, 0x0019000e);
2411 cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5ff9e);
2412 cx25840_write4(client, DIF_BPF_COEFF89, 0xff4fff25);
2413 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff560000);
2414 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0112023b);
2415 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f702c0);
2416 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfec8);
2417 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfbe5f9b3);
2418 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf947fb41);
2419 cx25840_write4(client, DIF_BPF_COEFF2223, 0xff7004b9);
2420 cx25840_write4(client, DIF_BPF_COEFF2425, 0x095a0b81);
2421 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a0004d8);
2422 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfd65f603);
2423 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf144f104);
2424 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf5aafdec);
2425 cx25840_write4(client, DIF_BPF_COEFF3435, 0x072b0e5a);
2426 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2427 break;
2428
2429 case 4600000:
2430 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
2431 cx25840_write4(client, DIF_BPF_COEFF23, 0x00060012);
2432 cx25840_write4(client, DIF_BPF_COEFF45, 0x00200022);
2433 cx25840_write4(client, DIF_BPF_COEFF67, 0x0005ffc1);
2434 cx25840_write4(client, DIF_BPF_COEFF89, 0xff61ff10);
2435 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff09ff82);
2436 cx25840_write4(client, DIF_BPF_COEFF1213, 0x008601d7);
2437 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f50340);
2438 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fff0);
2439 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfcddfa19);
2440 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8e2fa1e);
2441 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfde30343);
2442 cx25840_write4(client, DIF_BPF_COEFF2425, 0x08790b7f);
2443 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad50631);
2444 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfec7f6fc);
2445 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf198f0bd);
2446 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf50dfd4e);
2447 cx25840_write4(client, DIF_BPF_COEFF3435, 0x06c90e3d);
2448 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2449 break;
2450
2451 case 4700000:
2452 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
2453 cx25840_write4(client, DIF_BPF_COEFF23, 0x0003000f);
2454 cx25840_write4(client, DIF_BPF_COEFF45, 0x00220030);
2455 cx25840_write4(client, DIF_BPF_COEFF67, 0x0025ffed);
2456 cx25840_write4(client, DIF_BPF_COEFF89, 0xff87ff15);
2457 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed6ff10);
2458 cx25840_write4(client, DIF_BPF_COEFF1213, 0xffed014c);
2459 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02b90386);
2460 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03110119);
2461 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfdfefac4);
2462 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8c6f92f);
2463 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfc6701b7);
2464 cx25840_write4(client, DIF_BPF_COEFF2425, 0x07670b44);
2465 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7e0776);
2466 cx25840_write4(client, DIF_BPF_COEFF2829, 0x002df807);
2467 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf200f086);
2468 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf477fcb1);
2469 cx25840_write4(client, DIF_BPF_COEFF3435, 0x06650e1e);
2470 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2471 break;
2472
2473 case 4800000:
2474 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
2475 cx25840_write4(client, DIF_BPF_COEFF23, 0xffff0009);
2476 cx25840_write4(client, DIF_BPF_COEFF45, 0x001e0038);
2477 cx25840_write4(client, DIF_BPF_COEFF67, 0x003f001b);
2478 cx25840_write4(client, DIF_BPF_COEFF89, 0xffbcff36);
2479 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec2feb6);
2480 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff5600a5);
2481 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0248038d);
2482 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b00232);
2483 cx25840_write4(client, DIF_BPF_COEFF1819, 0xff39fbab);
2484 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8f4f87f);
2485 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb060020);
2486 cx25840_write4(client, DIF_BPF_COEFF2425, 0x062a0ad2);
2487 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf908a3);
2488 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0192f922);
2489 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf27df05e);
2490 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf3e8fc14);
2491 cx25840_write4(client, DIF_BPF_COEFF3435, 0x06000e00);
2492 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2493 break;
2494
2495 case 4900000:
2496 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
2497 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffc0002);
2498 cx25840_write4(client, DIF_BPF_COEFF45, 0x00160037);
2499 cx25840_write4(client, DIF_BPF_COEFF67, 0x00510046);
2500 cx25840_write4(client, DIF_BPF_COEFF89, 0xfff9ff6d);
2501 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed0fe7c);
2502 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfecefff0);
2503 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01aa0356);
2504 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413032b);
2505 cx25840_write4(client, DIF_BPF_COEFF1819, 0x007ffcc5);
2506 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf96cf812);
2507 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf9cefe87);
2508 cx25840_write4(client, DIF_BPF_COEFF2425, 0x04c90a2c);
2509 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c4309b4);
2510 cx25840_write4(client, DIF_BPF_COEFF2829, 0x02f3fa4a);
2511 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf30ef046);
2512 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf361fb7a);
2513 cx25840_write4(client, DIF_BPF_COEFF3435, 0x059b0de0);
2514 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2515 break;
2516
2517 case 5000000:
2518 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
2519 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fffa);
2520 cx25840_write4(client, DIF_BPF_COEFF45, 0x000a002d);
2521 cx25840_write4(client, DIF_BPF_COEFF67, 0x00570067);
2522 cx25840_write4(client, DIF_BPF_COEFF89, 0x0037ffb5);
2523 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfefffe68);
2524 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe62ff3d);
2525 cx25840_write4(client, DIF_BPF_COEFF1415, 0x00ec02e3);
2526 cx25840_write4(client, DIF_BPF_COEFF1617, 0x043503f6);
2527 cx25840_write4(client, DIF_BPF_COEFF1819, 0x01befe05);
2528 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa27f7ee);
2529 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf8c6fcf8);
2530 cx25840_write4(client, DIF_BPF_COEFF2425, 0x034c0954);
2531 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c5c0aa4);
2532 cx25840_write4(client, DIF_BPF_COEFF2829, 0x044cfb7e);
2533 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf3b1f03f);
2534 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf2e2fae1);
2535 cx25840_write4(client, DIF_BPF_COEFF3435, 0x05340dc0);
2536 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2537 break;
2538
2539 case 5100000:
2540 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
2541 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff4);
2542 cx25840_write4(client, DIF_BPF_COEFF45, 0xfffd001e);
2543 cx25840_write4(client, DIF_BPF_COEFF67, 0x0051007b);
2544 cx25840_write4(client, DIF_BPF_COEFF89, 0x006e0006);
2545 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff48fe7c);
2546 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe1bfe9a);
2547 cx25840_write4(client, DIF_BPF_COEFF1415, 0x001d023e);
2548 cx25840_write4(client, DIF_BPF_COEFF1617, 0x04130488);
2549 cx25840_write4(client, DIF_BPF_COEFF1819, 0x02e6ff5b);
2550 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfb1ef812);
2551 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7f7fb7f);
2552 cx25840_write4(client, DIF_BPF_COEFF2425, 0x01bc084e);
2553 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c430b72);
2554 cx25840_write4(client, DIF_BPF_COEFF2829, 0x059afcba);
2555 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf467f046);
2556 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf26cfa4a);
2557 cx25840_write4(client, DIF_BPF_COEFF3435, 0x04cd0da0);
2558 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2559 break;
2560
2561 case 5200000:
2562 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
2563 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8ffef);
2564 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff00009);
2565 cx25840_write4(client, DIF_BPF_COEFF67, 0x003f007f);
2566 cx25840_write4(client, DIF_BPF_COEFF89, 0x00980056);
2567 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffa5feb6);
2568 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe00fe15);
2569 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff4b0170);
2570 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b004d7);
2571 cx25840_write4(client, DIF_BPF_COEFF1819, 0x03e800b9);
2572 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfc48f87f);
2573 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf768fa23);
2574 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0022071f);
2575 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf90c1b);
2576 cx25840_write4(client, DIF_BPF_COEFF2829, 0x06dafdfd);
2577 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf52df05e);
2578 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf1fef9b5);
2579 cx25840_write4(client, DIF_BPF_COEFF3435, 0x04640d7f);
2580 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2581 break;
2582
2583 case 5300000:
2584 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
2585 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9ffee);
2586 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe6fff3);
2587 cx25840_write4(client, DIF_BPF_COEFF67, 0x00250072);
2588 cx25840_write4(client, DIF_BPF_COEFF89, 0x00af009c);
2589 cx25840_write4(client, DIF_BPF_COEFF1011, 0x000cff10);
2590 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe13fdb8);
2591 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe870089);
2592 cx25840_write4(client, DIF_BPF_COEFF1617, 0x031104e1);
2593 cx25840_write4(client, DIF_BPF_COEFF1819, 0x04b8020f);
2594 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfd98f92f);
2595 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf71df8f0);
2596 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe8805ce);
2597 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7e0c9c);
2598 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0808ff44);
2599 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf603f086);
2600 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf19af922);
2601 cx25840_write4(client, DIF_BPF_COEFF3435, 0x03fb0d5e);
2602 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2603 break;
2604
2605 case 5400000:
2606 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
2607 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffcffef);
2608 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe0ffe0);
2609 cx25840_write4(client, DIF_BPF_COEFF67, 0x00050056);
2610 cx25840_write4(client, DIF_BPF_COEFF89, 0x00b000d1);
2611 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0071ff82);
2612 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe53fd8c);
2613 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfddfff99);
2614 cx25840_write4(client, DIF_BPF_COEFF1617, 0x024104a3);
2615 cx25840_write4(client, DIF_BPF_COEFF1819, 0x054a034d);
2616 cx25840_write4(client, DIF_BPF_COEFF2021, 0xff01fa1e);
2617 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf717f7ed);
2618 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfcf50461);
2619 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad50cf4);
2620 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0921008d);
2621 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf6e7f0bd);
2622 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf13ff891);
2623 cx25840_write4(client, DIF_BPF_COEFF3435, 0x03920d3b);
2624 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2625 break;
2626
2627 case 5500000:
2628 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
2629 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffffff3);
2630 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffd1);
2631 cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5002f);
2632 cx25840_write4(client, DIF_BPF_COEFF89, 0x009c00ed);
2633 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00cb0000);
2634 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfebafd94);
2635 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd61feb0);
2636 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d0422);
2637 cx25840_write4(client, DIF_BPF_COEFF1819, 0x05970464);
2638 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0074fb41);
2639 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf759f721);
2640 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfb7502de);
2641 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a000d21);
2642 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0a2201d4);
2643 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf7d9f104);
2644 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf0edf804);
2645 cx25840_write4(client, DIF_BPF_COEFF3435, 0x03280d19);
2646 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2647 break;
2648
2649 case 5600000:
2650 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010003);
2651 cx25840_write4(client, DIF_BPF_COEFF23, 0x0003fffa);
2652 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe3ffc9);
2653 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc90002);
2654 cx25840_write4(client, DIF_BPF_COEFF89, 0x007500ef);
2655 cx25840_write4(client, DIF_BPF_COEFF1011, 0x010e007e);
2656 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff3dfdcf);
2657 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd16fddd);
2658 cx25840_write4(client, DIF_BPF_COEFF1617, 0x00440365);
2659 cx25840_write4(client, DIF_BPF_COEFF1819, 0x059b0548);
2660 cx25840_write4(client, DIF_BPF_COEFF2021, 0x01e3fc90);
2661 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7dff691);
2662 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfa0f014d);
2663 cx25840_write4(client, DIF_BPF_COEFF2627, 0x09020d23);
2664 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0b0a0318);
2665 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf8d7f15a);
2666 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf0a5f779);
2667 cx25840_write4(client, DIF_BPF_COEFF3435, 0x02bd0cf6);
2668 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2669 break;
2670
2671 case 5700000:
2672 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010003);
2673 cx25840_write4(client, DIF_BPF_COEFF23, 0x00060001);
2674 cx25840_write4(client, DIF_BPF_COEFF45, 0xffecffc9);
2675 cx25840_write4(client, DIF_BPF_COEFF67, 0xffb4ffd4);
2676 cx25840_write4(client, DIF_BPF_COEFF89, 0x004000d5);
2677 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013600f0);
2678 cx25840_write4(client, DIF_BPF_COEFF1213, 0xffd3fe39);
2679 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd04fd31);
2680 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff360277);
2681 cx25840_write4(client, DIF_BPF_COEFF1819, 0x055605ef);
2682 cx25840_write4(client, DIF_BPF_COEFF2021, 0x033efdfe);
2683 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf8a5f642);
2684 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf8cbffb6);
2685 cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e10cfb);
2686 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0bd50456);
2687 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf9dff1be);
2688 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf067f6f2);
2689 cx25840_write4(client, DIF_BPF_COEFF3435, 0x02520cd2);
2690 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2691 break;
2692
2693 case 5800000:
2694 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
2695 cx25840_write4(client, DIF_BPF_COEFF23, 0x00080009);
2696 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff8ffd2);
2697 cx25840_write4(client, DIF_BPF_COEFF67, 0xffaaffac);
2698 cx25840_write4(client, DIF_BPF_COEFF89, 0x000200a3);
2699 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013c014a);
2700 cx25840_write4(client, DIF_BPF_COEFF1213, 0x006dfec9);
2701 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd2bfcb7);
2702 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe350165);
2703 cx25840_write4(client, DIF_BPF_COEFF1819, 0x04cb0651);
2704 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0477ff7e);
2705 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf9a5f635);
2706 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf7b1fe20);
2707 cx25840_write4(client, DIF_BPF_COEFF2627, 0x069f0ca8);
2708 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0c81058b);
2709 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfaf0f231);
2710 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf033f66d);
2711 cx25840_write4(client, DIF_BPF_COEFF3435, 0x01e60cae);
2712 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2713 break;
2714
2715 case 5900000:
2716 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
2717 cx25840_write4(client, DIF_BPF_COEFF23, 0x0009000e);
2718 cx25840_write4(client, DIF_BPF_COEFF45, 0x0005ffe1);
2719 cx25840_write4(client, DIF_BPF_COEFF67, 0xffacff90);
2720 cx25840_write4(client, DIF_BPF_COEFF89, 0xffc5005f);
2721 cx25840_write4(client, DIF_BPF_COEFF1011, 0x01210184);
2722 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00fcff72);
2723 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd8afc77);
2724 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51003f);
2725 cx25840_write4(client, DIF_BPF_COEFF1819, 0x04020669);
2726 cx25840_write4(client, DIF_BPF_COEFF2021, 0x05830103);
2727 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfad7f66b);
2728 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf6c8fc93);
2729 cx25840_write4(client, DIF_BPF_COEFF2627, 0x05430c2b);
2730 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d0d06b5);
2731 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfc08f2b2);
2732 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf00af5ec);
2733 cx25840_write4(client, DIF_BPF_COEFF3435, 0x017b0c89);
2734 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2735 break;
2736
2737 case 6000000:
2738 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
2739 cx25840_write4(client, DIF_BPF_COEFF23, 0x00070012);
2740 cx25840_write4(client, DIF_BPF_COEFF45, 0x0012fff5);
2741 cx25840_write4(client, DIF_BPF_COEFF67, 0xffbaff82);
2742 cx25840_write4(client, DIF_BPF_COEFF89, 0xff8e000f);
2743 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00e80198);
2744 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01750028);
2745 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe18fc75);
2746 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99ff15);
2747 cx25840_write4(client, DIF_BPF_COEFF1819, 0x03050636);
2748 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0656027f);
2749 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfc32f6e2);
2750 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf614fb17);
2751 cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d20b87);
2752 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d7707d2);
2753 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfd26f341);
2754 cx25840_write4(client, DIF_BPF_COEFF3233, 0xefeaf56f);
2755 cx25840_write4(client, DIF_BPF_COEFF3435, 0x010f0c64);
2756 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2757 break;
2758
2759 case 6100000:
2760 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
2761 cx25840_write4(client, DIF_BPF_COEFF23, 0x00050012);
2762 cx25840_write4(client, DIF_BPF_COEFF45, 0x001c000b);
2763 cx25840_write4(client, DIF_BPF_COEFF67, 0xffd1ff84);
2764 cx25840_write4(client, DIF_BPF_COEFF89, 0xff66ffbe);
2765 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00960184);
2766 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01cd00da);
2767 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfeccfcb2);
2768 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fdf9);
2769 cx25840_write4(client, DIF_BPF_COEFF1819, 0x01e005bc);
2770 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06e703e4);
2771 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfdabf798);
2772 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf599f9b3);
2773 cx25840_write4(client, DIF_BPF_COEFF2627, 0x02510abd);
2774 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0dbf08df);
2775 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfe48f3dc);
2776 cx25840_write4(client, DIF_BPF_COEFF3233, 0xefd5f4f6);
2777 cx25840_write4(client, DIF_BPF_COEFF3435, 0x00a20c3e);
2778 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2779 break;
2780
2781 case 6200000:
2782 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
2783 cx25840_write4(client, DIF_BPF_COEFF23, 0x0002000f);
2784 cx25840_write4(client, DIF_BPF_COEFF45, 0x0021001f);
2785 cx25840_write4(client, DIF_BPF_COEFF67, 0xfff0ff97);
2786 cx25840_write4(client, DIF_BPF_COEFF89, 0xff50ff74);
2787 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0034014a);
2788 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01fa0179);
2789 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff97fd2a);
2790 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fcfa);
2791 cx25840_write4(client, DIF_BPF_COEFF1819, 0x00a304fe);
2792 cx25840_write4(client, DIF_BPF_COEFF2021, 0x07310525);
2793 cx25840_write4(client, DIF_BPF_COEFF2223, 0xff37f886);
2794 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf55cf86e);
2795 cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c709d0);
2796 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0de209db);
2797 cx25840_write4(client, DIF_BPF_COEFF3031, 0xff6df484);
2798 cx25840_write4(client, DIF_BPF_COEFF3233, 0xefcbf481);
2799 cx25840_write4(client, DIF_BPF_COEFF3435, 0x00360c18);
2800 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2801 break;
2802
2803 case 6300000:
2804 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
2805 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffe000a);
2806 cx25840_write4(client, DIF_BPF_COEFF45, 0x0021002f);
2807 cx25840_write4(client, DIF_BPF_COEFF67, 0x0010ffb8);
2808 cx25840_write4(client, DIF_BPF_COEFF89, 0xff50ff3b);
2809 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffcc00f0);
2810 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01fa01fa);
2811 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0069fdd4);
2812 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fc26);
2813 cx25840_write4(client, DIF_BPF_COEFF1819, 0xff5d0407);
2814 cx25840_write4(client, DIF_BPF_COEFF2021, 0x07310638);
2815 cx25840_write4(client, DIF_BPF_COEFF2223, 0x00c9f9a8);
2816 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf55cf74e);
2817 cx25840_write4(client, DIF_BPF_COEFF2627, 0xff3908c3);
2818 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0de20ac3);
2819 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0093f537);
2820 cx25840_write4(client, DIF_BPF_COEFF3233, 0xefcbf410);
2821 cx25840_write4(client, DIF_BPF_COEFF3435, 0xffca0bf2);
2822 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2823 break;
2824
2825 case 6400000:
2826 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffd);
2827 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffb0003);
2828 cx25840_write4(client, DIF_BPF_COEFF45, 0x001c0037);
2829 cx25840_write4(client, DIF_BPF_COEFF67, 0x002fffe2);
2830 cx25840_write4(client, DIF_BPF_COEFF89, 0xff66ff17);
2831 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff6a007e);
2832 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01cd0251);
2833 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0134fea5);
2834 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fb8b);
2835 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe2002e0);
2836 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06e70713);
2837 cx25840_write4(client, DIF_BPF_COEFF2223, 0x0255faf5);
2838 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf599f658);
2839 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaf0799);
2840 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0dbf0b96);
2841 cx25840_write4(client, DIF_BPF_COEFF3031, 0x01b8f5f5);
2842 cx25840_write4(client, DIF_BPF_COEFF3233, 0xefd5f3a3);
2843 cx25840_write4(client, DIF_BPF_COEFF3435, 0xff5e0bca);
2844 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2845 break;
2846
2847 case 6500000:
2848 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
2849 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fffb);
2850 cx25840_write4(client, DIF_BPF_COEFF45, 0x00120037);
2851 cx25840_write4(client, DIF_BPF_COEFF67, 0x00460010);
2852 cx25840_write4(client, DIF_BPF_COEFF89, 0xff8eff0f);
2853 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff180000);
2854 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01750276);
2855 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01e8ff8d);
2856 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fb31);
2857 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfcfb0198);
2858 cx25840_write4(client, DIF_BPF_COEFF2021, 0x065607ad);
2859 cx25840_write4(client, DIF_BPF_COEFF2223, 0x03cefc64);
2860 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf614f592);
2861 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2e0656);
2862 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d770c52);
2863 cx25840_write4(client, DIF_BPF_COEFF3031, 0x02daf6bd);
2864 cx25840_write4(client, DIF_BPF_COEFF3233, 0xefeaf33b);
2865 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfef10ba3);
2866 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2867 break;
2868
2869 case 6600000:
2870 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
2871 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff7fff5);
2872 cx25840_write4(client, DIF_BPF_COEFF45, 0x0005002f);
2873 cx25840_write4(client, DIF_BPF_COEFF67, 0x0054003c);
2874 cx25840_write4(client, DIF_BPF_COEFF89, 0xffc5ff22);
2875 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfedfff82);
2876 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00fc0267);
2877 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0276007e);
2878 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fb1c);
2879 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfbfe003e);
2880 cx25840_write4(client, DIF_BPF_COEFF2021, 0x05830802);
2881 cx25840_write4(client, DIF_BPF_COEFF2223, 0x0529fdec);
2882 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf6c8f4fe);
2883 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabd04ff);
2884 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d0d0cf6);
2885 cx25840_write4(client, DIF_BPF_COEFF3031, 0x03f8f78f);
2886 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf00af2d7);
2887 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfe850b7b);
2888 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2889 break;
2890
2891 case 6700000:
2892 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
2893 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff0);
2894 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff80020);
2895 cx25840_write4(client, DIF_BPF_COEFF67, 0x00560060);
2896 cx25840_write4(client, DIF_BPF_COEFF89, 0x0002ff4e);
2897 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec4ff10);
2898 cx25840_write4(client, DIF_BPF_COEFF1213, 0x006d0225);
2899 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02d50166);
2900 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fb4e);
2901 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb35fee1);
2902 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0477080e);
2903 cx25840_write4(client, DIF_BPF_COEFF2223, 0x065bff82);
2904 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf7b1f4a0);
2905 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf9610397);
2906 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0c810d80);
2907 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0510f869);
2908 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf033f278);
2909 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfe1a0b52);
2910 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2911 break;
2912
2913 case 6800000:
2914 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
2915 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffaffee);
2916 cx25840_write4(client, DIF_BPF_COEFF45, 0xffec000c);
2917 cx25840_write4(client, DIF_BPF_COEFF67, 0x004c0078);
2918 cx25840_write4(client, DIF_BPF_COEFF89, 0x0040ff8e);
2919 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfecafeb6);
2920 cx25840_write4(client, DIF_BPF_COEFF1213, 0xffd301b6);
2921 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02fc0235);
2922 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fbc5);
2923 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfaaafd90);
2924 cx25840_write4(client, DIF_BPF_COEFF2021, 0x033e07d2);
2925 cx25840_write4(client, DIF_BPF_COEFF2223, 0x075b011b);
2926 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf8cbf47a);
2927 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81f0224);
2928 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0bd50def);
2929 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0621f94b);
2930 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf067f21e);
2931 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfdae0b29);
2932 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2933 break;
2934
2935 case 6900000:
2936 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
2937 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffdffef);
2938 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe3fff6);
2939 cx25840_write4(client, DIF_BPF_COEFF67, 0x0037007f);
2940 cx25840_write4(client, DIF_BPF_COEFF89, 0x0075ffdc);
2941 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfef2fe7c);
2942 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff3d0122);
2943 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02ea02dd);
2944 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fc79);
2945 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa65fc5d);
2946 cx25840_write4(client, DIF_BPF_COEFF2021, 0x01e3074e);
2947 cx25840_write4(client, DIF_BPF_COEFF2223, 0x082102ad);
2948 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfa0ff48c);
2949 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fe00a9);
2950 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0b0a0e43);
2951 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0729fa33);
2952 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf0a5f1c9);
2953 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfd430b00);
2954 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2955 break;
2956
2957 case 7000000:
2958 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
2959 cx25840_write4(client, DIF_BPF_COEFF23, 0x0001fff3);
2960 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffe2);
2961 cx25840_write4(client, DIF_BPF_COEFF67, 0x001b0076);
2962 cx25840_write4(client, DIF_BPF_COEFF89, 0x009c002d);
2963 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff35fe68);
2964 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfeba0076);
2965 cx25840_write4(client, DIF_BPF_COEFF1415, 0x029f0352);
2966 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfd60);
2967 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa69fb53);
2968 cx25840_write4(client, DIF_BPF_COEFF2021, 0x00740688);
2969 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08a7042d);
2970 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfb75f4d6);
2971 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600ff2d);
2972 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0a220e7a);
2973 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0827fb22);
2974 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf0edf17a);
2975 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfcd80ad6);
2976 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2977 break;
2978
2979 case 7100000:
2980 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
2981 cx25840_write4(client, DIF_BPF_COEFF23, 0x0004fff9);
2982 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe0ffd2);
2983 cx25840_write4(client, DIF_BPF_COEFF67, 0xfffb005e);
2984 cx25840_write4(client, DIF_BPF_COEFF89, 0x00b0007a);
2985 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff8ffe7c);
2986 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe53ffc1);
2987 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0221038c);
2988 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fe6e);
2989 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfab6fa80);
2990 cx25840_write4(client, DIF_BPF_COEFF2021, 0xff010587);
2991 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08e90590);
2992 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfcf5f556);
2993 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf52bfdb3);
2994 cx25840_write4(client, DIF_BPF_COEFF2829, 0x09210e95);
2995 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0919fc15);
2996 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf13ff12f);
2997 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfc6e0aab);
2998 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
2999 break;
3000
3001 case 7200000:
3002 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3003 cx25840_write4(client, DIF_BPF_COEFF23, 0x00070000);
3004 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe6ffc9);
3005 cx25840_write4(client, DIF_BPF_COEFF67, 0xffdb0039);
3006 cx25840_write4(client, DIF_BPF_COEFF89, 0x00af00b8);
3007 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfff4feb6);
3008 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe13ff10);
3009 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01790388);
3010 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0311ff92);
3011 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb48f9ed);
3012 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfd980453);
3013 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08e306cd);
3014 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe88f60a);
3015 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf482fc40);
3016 cx25840_write4(client, DIF_BPF_COEFF2829, 0x08080e93);
3017 cx25840_write4(client, DIF_BPF_COEFF3031, 0x09fdfd0c);
3018 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf19af0ea);
3019 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfc050a81);
3020 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3021 break;
3022
3023 case 7300000:
3024 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
3025 cx25840_write4(client, DIF_BPF_COEFF23, 0x00080008);
3026 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff0ffc9);
3027 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc1000d);
3028 cx25840_write4(client, DIF_BPF_COEFF89, 0x009800e2);
3029 cx25840_write4(client, DIF_BPF_COEFF1011, 0x005bff10);
3030 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe00fe74);
3031 cx25840_write4(client, DIF_BPF_COEFF1415, 0x00b50345);
3032 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b000bc);
3033 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc18f9a1);
3034 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfc4802f9);
3035 cx25840_write4(client, DIF_BPF_COEFF2223, 0x089807dc);
3036 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0022f6f0);
3037 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf407fada);
3038 cx25840_write4(client, DIF_BPF_COEFF2829, 0x06da0e74);
3039 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0ad3fe06);
3040 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf1fef0ab);
3041 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfb9c0a55);
3042 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3043 break;
3044
3045 case 7400000:
3046 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000001);
3047 cx25840_write4(client, DIF_BPF_COEFF23, 0x0008000e);
3048 cx25840_write4(client, DIF_BPF_COEFF45, 0xfffdffd0);
3049 cx25840_write4(client, DIF_BPF_COEFF67, 0xffafffdf);
3050 cx25840_write4(client, DIF_BPF_COEFF89, 0x006e00f2);
3051 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00b8ff82);
3052 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe1bfdf8);
3053 cx25840_write4(client, DIF_BPF_COEFF1415, 0xffe302c8);
3054 cx25840_write4(client, DIF_BPF_COEFF1617, 0x041301dc);
3055 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd1af99e);
3056 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfb1e0183);
3057 cx25840_write4(client, DIF_BPF_COEFF2223, 0x080908b5);
3058 cx25840_write4(client, DIF_BPF_COEFF2425, 0x01bcf801);
3059 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3bdf985);
3060 cx25840_write4(client, DIF_BPF_COEFF2829, 0x059a0e38);
3061 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0b99ff03);
3062 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf26cf071);
3063 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfb330a2a);
3064 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3065 break;
3066
3067 case 7500000:
3068 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
3069 cx25840_write4(client, DIF_BPF_COEFF23, 0x00070011);
3070 cx25840_write4(client, DIF_BPF_COEFF45, 0x000affdf);
3071 cx25840_write4(client, DIF_BPF_COEFF67, 0xffa9ffb5);
3072 cx25840_write4(client, DIF_BPF_COEFF89, 0x003700e6);
3073 cx25840_write4(client, DIF_BPF_COEFF1011, 0x01010000);
3074 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe62fda8);
3075 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff140219);
3076 cx25840_write4(client, DIF_BPF_COEFF1617, 0x043502e1);
3077 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe42f9e6);
3078 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa270000);
3079 cx25840_write4(client, DIF_BPF_COEFF2223, 0x073a0953);
3080 cx25840_write4(client, DIF_BPF_COEFF2425, 0x034cf939);
3081 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3a4f845);
3082 cx25840_write4(client, DIF_BPF_COEFF2829, 0x044c0de1);
3083 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0c4f0000);
3084 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf2e2f03c);
3085 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfacc09fe);
3086 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3087 break;
3088
3089 case 7600000:
3090 cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
3091 cx25840_write4(client, DIF_BPF_COEFF23, 0x00040012);
3092 cx25840_write4(client, DIF_BPF_COEFF45, 0x0016fff3);
3093 cx25840_write4(client, DIF_BPF_COEFF67, 0xffafff95);
3094 cx25840_write4(client, DIF_BPF_COEFF89, 0xfff900c0);
3095 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0130007e);
3096 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfecefd89);
3097 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe560146);
3098 cx25840_write4(client, DIF_BPF_COEFF1617, 0x041303bc);
3099 cx25840_write4(client, DIF_BPF_COEFF1819, 0xff81fa76);
3100 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf96cfe7d);
3101 cx25840_write4(client, DIF_BPF_COEFF2223, 0x063209b1);
3102 cx25840_write4(client, DIF_BPF_COEFF2425, 0x04c9fa93);
3103 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3bdf71e);
3104 cx25840_write4(client, DIF_BPF_COEFF2829, 0x02f30d6e);
3105 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0cf200fd);
3106 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf361f00e);
3107 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfa6509d1);
3108 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3109 break;
3110
3111 case 7700000:
3112 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
3113 cx25840_write4(client, DIF_BPF_COEFF23, 0x00010010);
3114 cx25840_write4(client, DIF_BPF_COEFF45, 0x001e0008);
3115 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc1ff84);
3116 cx25840_write4(client, DIF_BPF_COEFF89, 0xffbc0084);
3117 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013e00f0);
3118 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff56fd9f);
3119 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdb8005c);
3120 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b00460);
3121 cx25840_write4(client, DIF_BPF_COEFF1819, 0x00c7fb45);
3122 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8f4fd07);
3123 cx25840_write4(client, DIF_BPF_COEFF2223, 0x04fa09ce);
3124 cx25840_write4(client, DIF_BPF_COEFF2425, 0x062afc07);
3125 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf407f614);
3126 cx25840_write4(client, DIF_BPF_COEFF2829, 0x01920ce0);
3127 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0d8301fa);
3128 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf3e8efe5);
3129 cx25840_write4(client, DIF_BPF_COEFF3435, 0xfa0009a4);
3130 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3131 break;
3132
3133 case 7800000:
3134 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
3135 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffd000b);
3136 cx25840_write4(client, DIF_BPF_COEFF45, 0x0022001d);
3137 cx25840_write4(client, DIF_BPF_COEFF67, 0xffdbff82);
3138 cx25840_write4(client, DIF_BPF_COEFF89, 0xff870039);
3139 cx25840_write4(client, DIF_BPF_COEFF1011, 0x012a014a);
3140 cx25840_write4(client, DIF_BPF_COEFF1213, 0xffedfde7);
3141 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd47ff6b);
3142 cx25840_write4(client, DIF_BPF_COEFF1617, 0x031104c6);
3143 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0202fc4c);
3144 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8c6fbad);
3145 cx25840_write4(client, DIF_BPF_COEFF2223, 0x039909a7);
3146 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0767fd8e);
3147 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf482f52b);
3148 cx25840_write4(client, DIF_BPF_COEFF2829, 0x002d0c39);
3149 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0e0002f4);
3150 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf477efc2);
3151 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf99b0977);
3152 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3153 break;
3154
3155 case 7900000:
3156 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
3157 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffa0004);
3158 cx25840_write4(client, DIF_BPF_COEFF45, 0x0020002d);
3159 cx25840_write4(client, DIF_BPF_COEFF67, 0xfffbff91);
3160 cx25840_write4(client, DIF_BPF_COEFF89, 0xff61ffe8);
3161 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00f70184);
3162 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0086fe5c);
3163 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd0bfe85);
3164 cx25840_write4(client, DIF_BPF_COEFF1617, 0x024104e5);
3165 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0323fd7d);
3166 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8e2fa79);
3167 cx25840_write4(client, DIF_BPF_COEFF2223, 0x021d093f);
3168 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0879ff22);
3169 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf52bf465);
3170 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfec70b79);
3171 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0e6803eb);
3172 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf50defa5);
3173 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf937094a);
3174 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3175 break;
3176
3177 case 8000000:
3178 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
3179 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fffd);
3180 cx25840_write4(client, DIF_BPF_COEFF45, 0x00190036);
3181 cx25840_write4(client, DIF_BPF_COEFF67, 0x001bffaf);
3182 cx25840_write4(client, DIF_BPF_COEFF89, 0xff4fff99);
3183 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00aa0198);
3184 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0112fef3);
3185 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd09fdb9);
3186 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d04be);
3187 cx25840_write4(client, DIF_BPF_COEFF1819, 0x041bfecc);
3188 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf947f978);
3189 cx25840_write4(client, DIF_BPF_COEFF2223, 0x00900897);
3190 cx25840_write4(client, DIF_BPF_COEFF2425, 0x095a00b9);
3191 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600f3c5);
3192 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfd650aa3);
3193 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0ebc04de);
3194 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf5aaef8e);
3195 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf8d5091c);
3196 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3197 break;
3198
3199 case 8100000:
3200 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000ffff);
3201 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff7fff6);
3202 cx25840_write4(client, DIF_BPF_COEFF45, 0x000e0038);
3203 cx25840_write4(client, DIF_BPF_COEFF67, 0x0037ffd7);
3204 cx25840_write4(client, DIF_BPF_COEFF89, 0xff52ff56);
3205 cx25840_write4(client, DIF_BPF_COEFF1011, 0x004b0184);
3206 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0186ffa1);
3207 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd40fd16);
3208 cx25840_write4(client, DIF_BPF_COEFF1617, 0x00440452);
3209 cx25840_write4(client, DIF_BPF_COEFF1819, 0x04de0029);
3210 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9f2f8b2);
3211 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfefe07b5);
3212 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a05024d);
3213 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fef34d);
3214 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfc0a09b8);
3215 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0efa05cd);
3216 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf64eef7d);
3217 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf87308ed);
3218 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3219 break;
3220
3221 case 8200000:
3222 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
3223 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff0);
3224 cx25840_write4(client, DIF_BPF_COEFF45, 0x00000031);
3225 cx25840_write4(client, DIF_BPF_COEFF67, 0x004c0005);
3226 cx25840_write4(client, DIF_BPF_COEFF89, 0xff6aff27);
3227 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffe4014a);
3228 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01d70057);
3229 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdacfca6);
3230 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff3603a7);
3231 cx25840_write4(client, DIF_BPF_COEFF1819, 0x05610184);
3232 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfadbf82e);
3233 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfd74069f);
3234 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a7503d6);
3235 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81ff2ff);
3236 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfab808b9);
3237 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0f2306b5);
3238 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf6f9ef72);
3239 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf81308bf);
3240 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3241 break;
3242
3243 case 8300000:
3244 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
3245 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffbffee);
3246 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff30022);
3247 cx25840_write4(client, DIF_BPF_COEFF67, 0x00560032);
3248 cx25840_write4(client, DIF_BPF_COEFF89, 0xff95ff10);
3249 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff8000f0);
3250 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01fe0106);
3251 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe46fc71);
3252 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe3502c7);
3253 cx25840_write4(client, DIF_BPF_COEFF1819, 0x059e02ce);
3254 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfbf9f7f2);
3255 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfbff055b);
3256 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0aa9054c);
3257 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf961f2db);
3258 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf97507aa);
3259 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0f350797);
3260 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf7a9ef6d);
3261 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf7b40890);
3262 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3263 break;
3264
3265 case 8400000:
3266 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
3267 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffeffee);
3268 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe8000f);
3269 cx25840_write4(client, DIF_BPF_COEFF67, 0x00540058);
3270 cx25840_write4(client, DIF_BPF_COEFF89, 0xffcdff14);
3271 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff29007e);
3272 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01f6019e);
3273 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff01fc7c);
3274 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd5101bf);
3275 cx25840_write4(client, DIF_BPF_COEFF1819, 0x059203f6);
3276 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfd41f7fe);
3277 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfaa903f3);
3278 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a9e06a9);
3279 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabdf2e2);
3280 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf842068b);
3281 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0f320871);
3282 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf85eef6e);
3283 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf7560860);
3284 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3285 break;
3286
3287 case 8500000:
3288 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3289 cx25840_write4(client, DIF_BPF_COEFF23, 0x0002fff2);
3290 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe1fff9);
3291 cx25840_write4(client, DIF_BPF_COEFF67, 0x00460073);
3292 cx25840_write4(client, DIF_BPF_COEFF89, 0x000bff34);
3293 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfee90000);
3294 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01c10215);
3295 cx25840_write4(client, DIF_BPF_COEFF1415, 0xffd0fcc5);
3296 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99009d);
3297 cx25840_write4(client, DIF_BPF_COEFF1819, 0x053d04f1);
3298 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfea5f853);
3299 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf97d0270);
3300 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a5607e4);
3301 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2ef314);
3302 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf723055f);
3303 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0f180943);
3304 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf919ef75);
3305 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf6fa0830);
3306 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3307 break;
3308
3309 case 8600000:
3310 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3311 cx25840_write4(client, DIF_BPF_COEFF23, 0x0005fff8);
3312 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffe4);
3313 cx25840_write4(client, DIF_BPF_COEFF67, 0x002f007f);
3314 cx25840_write4(client, DIF_BPF_COEFF89, 0x0048ff6b);
3315 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec7ff82);
3316 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0163025f);
3317 cx25840_write4(client, DIF_BPF_COEFF1415, 0x00a2fd47);
3318 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17ff73);
3319 cx25840_write4(client, DIF_BPF_COEFF1819, 0x04a405b2);
3320 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0017f8ed);
3321 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf88500dc);
3322 cx25840_write4(client, DIF_BPF_COEFF2425, 0x09d208f9);
3323 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaff370);
3324 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf61c0429);
3325 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0ee80a0b);
3326 cx25840_write4(client, DIF_BPF_COEFF3233, 0xf9d8ef82);
3327 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf6a00800);
3328 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3329 break;
3330
3331 case 8700000:
3332 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3333 cx25840_write4(client, DIF_BPF_COEFF23, 0x0007ffff);
3334 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe1ffd4);
3335 cx25840_write4(client, DIF_BPF_COEFF67, 0x0010007a);
3336 cx25840_write4(client, DIF_BPF_COEFF89, 0x007cffb2);
3337 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec6ff10);
3338 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00e60277);
3339 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0168fdf9);
3340 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fe50);
3341 cx25840_write4(client, DIF_BPF_COEFF1819, 0x03ce0631);
3342 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0188f9c8);
3343 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7c7ff43);
3344 cx25840_write4(client, DIF_BPF_COEFF2425, 0x091509e3);
3345 cx25840_write4(client, DIF_BPF_COEFF2627, 0xff39f3f6);
3346 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf52d02ea);
3347 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0ea30ac9);
3348 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfa9bef95);
3349 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf64607d0);
3350 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3351 break;
3352
3353 case 8800000:
3354 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
3355 cx25840_write4(client, DIF_BPF_COEFF23, 0x00090007);
3356 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe9ffca);
3357 cx25840_write4(client, DIF_BPF_COEFF67, 0xfff00065);
3358 cx25840_write4(client, DIF_BPF_COEFF89, 0x00a10003);
3359 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfee6feb6);
3360 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0053025b);
3361 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0213fed0);
3362 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3fd46);
3363 cx25840_write4(client, DIF_BPF_COEFF1819, 0x02c70668);
3364 cx25840_write4(client, DIF_BPF_COEFF2021, 0x02eafadb);
3365 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf74bfdae);
3366 cx25840_write4(client, DIF_BPF_COEFF2425, 0x08230a9c);
3367 cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c7f4a3);
3368 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf45b01a6);
3369 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0e480b7c);
3370 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfb61efae);
3371 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf5ef079f);
3372 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3373 break;
3374
3375 case 8900000:
3376 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
3377 cx25840_write4(client, DIF_BPF_COEFF23, 0x0008000d);
3378 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff5ffc8);
3379 cx25840_write4(client, DIF_BPF_COEFF67, 0xffd10043);
3380 cx25840_write4(client, DIF_BPF_COEFF89, 0x00b20053);
3381 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff24fe7c);
3382 cx25840_write4(client, DIF_BPF_COEFF1213, 0xffb9020c);
3383 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0295ffbb);
3384 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fc64);
3385 cx25840_write4(client, DIF_BPF_COEFF1819, 0x019b0654);
3386 cx25840_write4(client, DIF_BPF_COEFF2021, 0x042dfc1c);
3387 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf714fc2a);
3388 cx25840_write4(client, DIF_BPF_COEFF2425, 0x07020b21);
3389 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0251f575);
3390 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3a7005e);
3391 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0dd80c24);
3392 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfc2aefcd);
3393 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf599076e);
3394 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3395 break;
3396
3397 case 9000000:
3398 cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
3399 cx25840_write4(client, DIF_BPF_COEFF23, 0x00060011);
3400 cx25840_write4(client, DIF_BPF_COEFF45, 0x0002ffcf);
3401 cx25840_write4(client, DIF_BPF_COEFF67, 0xffba0018);
3402 cx25840_write4(client, DIF_BPF_COEFF89, 0x00ad009a);
3403 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff79fe68);
3404 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff260192);
3405 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02e500ab);
3406 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fbb6);
3407 cx25840_write4(client, DIF_BPF_COEFF1819, 0x005b05f7);
3408 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0545fd81);
3409 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf723fabf);
3410 cx25840_write4(client, DIF_BPF_COEFF2425, 0x05b80b70);
3411 cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d2f669);
3412 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf313ff15);
3413 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0d550cbf);
3414 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfcf6eff2);
3415 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf544073d);
3416 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3417 break;
3418
3419 case 9100000:
3420 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
3421 cx25840_write4(client, DIF_BPF_COEFF23, 0x00030012);
3422 cx25840_write4(client, DIF_BPF_COEFF45, 0x000fffdd);
3423 cx25840_write4(client, DIF_BPF_COEFF67, 0xffacffea);
3424 cx25840_write4(client, DIF_BPF_COEFF89, 0x009300cf);
3425 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffdcfe7c);
3426 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfea600f7);
3427 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02fd0190);
3428 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fb46);
3429 cx25840_write4(client, DIF_BPF_COEFF1819, 0xff150554);
3430 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0627fefd);
3431 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf778f978);
3432 cx25840_write4(client, DIF_BPF_COEFF2425, 0x044d0b87);
3433 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0543f77d);
3434 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2a0fdcf);
3435 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0cbe0d4e);
3436 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfdc4f01d);
3437 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4f2070b);
3438 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3439 break;
3440
3441 case 9200000:
3442 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
3443 cx25840_write4(client, DIF_BPF_COEFF23, 0x00000010);
3444 cx25840_write4(client, DIF_BPF_COEFF45, 0x001afff0);
3445 cx25840_write4(client, DIF_BPF_COEFF67, 0xffaaffbf);
3446 cx25840_write4(client, DIF_BPF_COEFF89, 0x006700ed);
3447 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0043feb6);
3448 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe460047);
3449 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02db0258);
3450 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fb1b);
3451 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfddc0473);
3452 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06c90082);
3453 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf811f85e);
3454 cx25840_write4(client, DIF_BPF_COEFF2425, 0x02c90b66);
3455 cx25840_write4(client, DIF_BPF_COEFF2627, 0x069ff8ad);
3456 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf250fc8d);
3457 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0c140dcf);
3458 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfe93f04d);
3459 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4a106d9);
3460 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3461 break;
3462
3463 case 9300000:
3464 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
3465 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffc000c);
3466 cx25840_write4(client, DIF_BPF_COEFF45, 0x00200006);
3467 cx25840_write4(client, DIF_BPF_COEFF67, 0xffb4ff9c);
3468 cx25840_write4(client, DIF_BPF_COEFF89, 0x002f00ef);
3469 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00a4ff10);
3470 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe0dff92);
3471 cx25840_write4(client, DIF_BPF_COEFF1415, 0x028102f7);
3472 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fb37);
3473 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfcbf035e);
3474 cx25840_write4(client, DIF_BPF_COEFF2021, 0x07260202);
3475 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf8e8f778);
3476 cx25840_write4(client, DIF_BPF_COEFF2425, 0x01340b0d);
3477 cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e1f9f4);
3478 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf223fb51);
3479 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0b590e42);
3480 cx25840_write4(client, DIF_BPF_COEFF3233, 0xff64f083);
3481 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf45206a7);
3482 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3483 break;
3484
3485 case 9400000:
3486 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
3487 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff90005);
3488 cx25840_write4(client, DIF_BPF_COEFF45, 0x0022001a);
3489 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9ff86);
3490 cx25840_write4(client, DIF_BPF_COEFF89, 0xfff000d7);
3491 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00f2ff82);
3492 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe01fee5);
3493 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01f60362);
3494 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fb99);
3495 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfbcc0222);
3496 cx25840_write4(client, DIF_BPF_COEFF2021, 0x07380370);
3497 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf9f7f6cc);
3498 cx25840_write4(client, DIF_BPF_COEFF2425, 0xff990a7e);
3499 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0902fb50);
3500 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf21afa1f);
3501 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0a8d0ea6);
3502 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0034f0bf);
3503 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4050675);
3504 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3505 break;
3506
3507 case 9500000:
3508 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
3509 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fffe);
3510 cx25840_write4(client, DIF_BPF_COEFF45, 0x001e002b);
3511 cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5ff81);
3512 cx25840_write4(client, DIF_BPF_COEFF89, 0xffb400a5);
3513 cx25840_write4(client, DIF_BPF_COEFF1011, 0x01280000);
3514 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe24fe50);
3515 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01460390);
3516 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfc3a);
3517 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb1000ce);
3518 cx25840_write4(client, DIF_BPF_COEFF2021, 0x070104bf);
3519 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb37f65f);
3520 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe0009bc);
3521 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a00fcbb);
3522 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf235f8f8);
3523 cx25840_write4(client, DIF_BPF_COEFF3031, 0x09b20efc);
3524 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0105f101);
3525 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf3ba0642);
3526 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3527 break;
3528
3529 case 9600000:
3530 cx25840_write4(client, DIF_BPF_COEFF01, 0x0001ffff);
3531 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff7);
3532 cx25840_write4(client, DIF_BPF_COEFF45, 0x00150036);
3533 cx25840_write4(client, DIF_BPF_COEFF67, 0x0005ff8c);
3534 cx25840_write4(client, DIF_BPF_COEFF89, 0xff810061);
3535 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013d007e);
3536 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe71fddf);
3537 cx25840_write4(client, DIF_BPF_COEFF1415, 0x007c0380);
3538 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fd13);
3539 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa94ff70);
3540 cx25840_write4(client, DIF_BPF_COEFF2021, 0x068005e2);
3541 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfc9bf633);
3542 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfc7308ca);
3543 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad5fe30);
3544 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf274f7e0);
3545 cx25840_write4(client, DIF_BPF_COEFF3031, 0x08c90f43);
3546 cx25840_write4(client, DIF_BPF_COEFF3233, 0x01d4f147);
3547 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf371060f);
3548 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3549 break;
3550
3551 case 9700000:
3552 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
3553 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fff1);
3554 cx25840_write4(client, DIF_BPF_COEFF45, 0x00090038);
3555 cx25840_write4(client, DIF_BPF_COEFF67, 0x0025ffa7);
3556 cx25840_write4(client, DIF_BPF_COEFF89, 0xff5e0012);
3557 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013200f0);
3558 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfee3fd9b);
3559 cx25840_write4(client, DIF_BPF_COEFF1415, 0xffaa0331);
3560 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0311fe15);
3561 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa60fe18);
3562 cx25840_write4(client, DIF_BPF_COEFF2021, 0x05bd06d1);
3563 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfe1bf64a);
3564 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfafa07ae);
3565 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7effab);
3566 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2d5f6d7);
3567 cx25840_write4(client, DIF_BPF_COEFF3031, 0x07d30f7a);
3568 cx25840_write4(client, DIF_BPF_COEFF3233, 0x02a3f194);
3569 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf32905dc);
3570 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3571 break;
3572
3573 case 9800000:
3574 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
3575 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffcffee);
3576 cx25840_write4(client, DIF_BPF_COEFF45, 0xfffb0032);
3577 cx25840_write4(client, DIF_BPF_COEFF67, 0x003fffcd);
3578 cx25840_write4(client, DIF_BPF_COEFF89, 0xff4effc1);
3579 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0106014a);
3580 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff6efd8a);
3581 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfedd02aa);
3582 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b0ff34);
3583 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa74fcd7);
3584 cx25840_write4(client, DIF_BPF_COEFF2021, 0x04bf0781);
3585 cx25840_write4(client, DIF_BPF_COEFF2223, 0xffaaf6a3);
3586 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf99e066b);
3587 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf90128);
3588 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf359f5e1);
3589 cx25840_write4(client, DIF_BPF_COEFF3031, 0x06d20fa2);
3590 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0370f1e5);
3591 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2e405a8);
3592 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3593 break;
3594
3595 case 9900000:
3596 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3597 cx25840_write4(client, DIF_BPF_COEFF23, 0xffffffee);
3598 cx25840_write4(client, DIF_BPF_COEFF45, 0xffef0024);
3599 cx25840_write4(client, DIF_BPF_COEFF67, 0x0051fffa);
3600 cx25840_write4(client, DIF_BPF_COEFF89, 0xff54ff77);
3601 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00be0184);
3602 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0006fdad);
3603 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe2701f3);
3604 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413005e);
3605 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfad1fbba);
3606 cx25840_write4(client, DIF_BPF_COEFF2021, 0x039007ee);
3607 cx25840_write4(client, DIF_BPF_COEFF2223, 0x013bf73d);
3608 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf868050a);
3609 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c4302a1);
3610 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3fdf4fe);
3611 cx25840_write4(client, DIF_BPF_COEFF3031, 0x05c70fba);
3612 cx25840_write4(client, DIF_BPF_COEFF3233, 0x043bf23c);
3613 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2a10575);
3614 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3615 break;
3616
3617 case 10000000:
3618 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3619 cx25840_write4(client, DIF_BPF_COEFF23, 0x0003fff1);
3620 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe50011);
3621 cx25840_write4(client, DIF_BPF_COEFF67, 0x00570027);
3622 cx25840_write4(client, DIF_BPF_COEFF89, 0xff70ff3c);
3623 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00620198);
3624 cx25840_write4(client, DIF_BPF_COEFF1213, 0x009efe01);
3625 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd95011a);
3626 cx25840_write4(client, DIF_BPF_COEFF1617, 0x04350183);
3627 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb71fad0);
3628 cx25840_write4(client, DIF_BPF_COEFF2021, 0x023c0812);
3629 cx25840_write4(client, DIF_BPF_COEFF2223, 0x02c3f811);
3630 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf75e0390);
3631 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c5c0411);
3632 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf4c1f432);
3633 cx25840_write4(client, DIF_BPF_COEFF3031, 0x04b30fc1);
3634 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0503f297);
3635 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2610541);
3636 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3637 break;
3638
3639 case 10100000:
3640 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3641 cx25840_write4(client, DIF_BPF_COEFF23, 0x0006fff7);
3642 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdffffc);
3643 cx25840_write4(client, DIF_BPF_COEFF67, 0x00510050);
3644 cx25840_write4(client, DIF_BPF_COEFF89, 0xff9dff18);
3645 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfffc0184);
3646 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0128fe80);
3647 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd32002e);
3648 cx25840_write4(client, DIF_BPF_COEFF1617, 0x04130292);
3649 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc4dfa21);
3650 cx25840_write4(client, DIF_BPF_COEFF2021, 0x00d107ee);
3651 cx25840_write4(client, DIF_BPF_COEFF2223, 0x0435f91c);
3652 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf6850205);
3653 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c430573);
3654 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf5a1f37d);
3655 cx25840_write4(client, DIF_BPF_COEFF3031, 0x03990fba);
3656 cx25840_write4(client, DIF_BPF_COEFF3233, 0x05c7f2f8);
3657 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf222050d);
3658 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3659 break;
3660
3661 case 10200000:
3662 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
3663 cx25840_write4(client, DIF_BPF_COEFF23, 0x0008fffe);
3664 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdfffe7);
3665 cx25840_write4(client, DIF_BPF_COEFF67, 0x003f006e);
3666 cx25840_write4(client, DIF_BPF_COEFF89, 0xffd6ff0f);
3667 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff96014a);
3668 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0197ff1f);
3669 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd05ff3e);
3670 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b0037c);
3671 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd59f9b7);
3672 cx25840_write4(client, DIF_BPF_COEFF2021, 0xff5d0781);
3673 cx25840_write4(client, DIF_BPF_COEFF2223, 0x0585fa56);
3674 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf5e4006f);
3675 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf906c4);
3676 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf69df2e0);
3677 cx25840_write4(client, DIF_BPF_COEFF3031, 0x02790fa2);
3678 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0688f35d);
3679 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf1e604d8);
3680 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3681 break;
3682
3683 case 10300000:
3684 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
3685 cx25840_write4(client, DIF_BPF_COEFF23, 0x00090005);
3686 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe4ffd6);
3687 cx25840_write4(client, DIF_BPF_COEFF67, 0x0025007e);
3688 cx25840_write4(client, DIF_BPF_COEFF89, 0x0014ff20);
3689 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff3c00f0);
3690 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01e1ffd0);
3691 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd12fe5c);
3692 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03110433);
3693 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe88f996);
3694 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfdf106d1);
3695 cx25840_write4(client, DIF_BPF_COEFF2223, 0x06aafbb7);
3696 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf57efed8);
3697 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7e07ff);
3698 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf7b0f25e);
3699 cx25840_write4(client, DIF_BPF_COEFF3031, 0x01560f7a);
3700 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0745f3c7);
3701 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf1ac04a4);
3702 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3703 break;
3704
3705 case 10400000:
3706 cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
3707 cx25840_write4(client, DIF_BPF_COEFF23, 0x0008000c);
3708 cx25840_write4(client, DIF_BPF_COEFF45, 0xffedffcb);
3709 cx25840_write4(client, DIF_BPF_COEFF67, 0x0005007d);
3710 cx25840_write4(client, DIF_BPF_COEFF89, 0x0050ff4c);
3711 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfef6007e);
3712 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01ff0086);
3713 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd58fd97);
3714 cx25840_write4(client, DIF_BPF_COEFF1617, 0x024104ad);
3715 cx25840_write4(client, DIF_BPF_COEFF1819, 0xffcaf9c0);
3716 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfc9905e2);
3717 cx25840_write4(client, DIF_BPF_COEFF2223, 0x079afd35);
3718 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf555fd46);
3719 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad50920);
3720 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf8d9f1f6);
3721 cx25840_write4(client, DIF_BPF_COEFF3031, 0x00310f43);
3722 cx25840_write4(client, DIF_BPF_COEFF3233, 0x07fdf435);
3723 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf174046f);
3724 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3725 break;
3726
3727 case 10500000:
3728 cx25840_write4(client, DIF_BPF_COEFF01, 0xfffffffe);
3729 cx25840_write4(client, DIF_BPF_COEFF23, 0x00050011);
3730 cx25840_write4(client, DIF_BPF_COEFF45, 0xfffaffc8);
3731 cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5006b);
3732 cx25840_write4(client, DIF_BPF_COEFF89, 0x0082ff8c);
3733 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfecc0000);
3734 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01f00130);
3735 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdd2fcfc);
3736 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d04e3);
3737 cx25840_write4(client, DIF_BPF_COEFF1819, 0x010efa32);
3738 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfb6404bf);
3739 cx25840_write4(client, DIF_BPF_COEFF2223, 0x084efec5);
3740 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf569fbc2);
3741 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a000a23);
3742 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfa15f1ab);
3743 cx25840_write4(client, DIF_BPF_COEFF3031, 0xff0b0efc);
3744 cx25840_write4(client, DIF_BPF_COEFF3233, 0x08b0f4a7);
3745 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf13f043a);
3746 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3747 break;
3748
3749 case 10600000:
3750 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
3751 cx25840_write4(client, DIF_BPF_COEFF23, 0x00020012);
3752 cx25840_write4(client, DIF_BPF_COEFF45, 0x0007ffcd);
3753 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9004c);
3754 cx25840_write4(client, DIF_BPF_COEFF89, 0x00a4ffd9);
3755 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec3ff82);
3756 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01b401c1);
3757 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe76fc97);
3758 cx25840_write4(client, DIF_BPF_COEFF1617, 0x004404d2);
3759 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0245fae8);
3760 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa5f0370);
3761 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08c1005f);
3762 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf5bcfa52);
3763 cx25840_write4(client, DIF_BPF_COEFF2627, 0x09020b04);
3764 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfb60f17b);
3765 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfde70ea6);
3766 cx25840_write4(client, DIF_BPF_COEFF3233, 0x095df51e);
3767 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf10c0405);
3768 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3769 break;
3770
3771 case 10700000:
3772 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
3773 cx25840_write4(client, DIF_BPF_COEFF23, 0xffff0011);
3774 cx25840_write4(client, DIF_BPF_COEFF45, 0x0014ffdb);
3775 cx25840_write4(client, DIF_BPF_COEFF67, 0xffb40023);
3776 cx25840_write4(client, DIF_BPF_COEFF89, 0x00b2002a);
3777 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfedbff10);
3778 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0150022d);
3779 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff38fc6f);
3780 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36047b);
3781 cx25840_write4(client, DIF_BPF_COEFF1819, 0x035efbda);
3782 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9940202);
3783 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08ee01f5);
3784 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf649f8fe);
3785 cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e10bc2);
3786 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfcb6f169);
3787 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfcc60e42);
3788 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0a04f599);
3789 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0db03d0);
3790 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3791 break;
3792
3793 case 10800000:
3794 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
3795 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffb000d);
3796 cx25840_write4(client, DIF_BPF_COEFF45, 0x001dffed);
3797 cx25840_write4(client, DIF_BPF_COEFF67, 0xffaafff5);
3798 cx25840_write4(client, DIF_BPF_COEFF89, 0x00aa0077);
3799 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff13feb6);
3800 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00ce026b);
3801 cx25840_write4(client, DIF_BPF_COEFF1415, 0x000afc85);
3802 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe3503e3);
3803 cx25840_write4(client, DIF_BPF_COEFF1819, 0x044cfcfb);
3804 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf90c0082);
3805 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08d5037f);
3806 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf710f7cc);
3807 cx25840_write4(client, DIF_BPF_COEFF2627, 0x069f0c59);
3808 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfe16f173);
3809 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfbaa0dcf);
3810 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0aa5f617);
3811 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0ad039b);
3812 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3813 break;
3814
3815 case 10900000:
3816 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
3817 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff90006);
3818 cx25840_write4(client, DIF_BPF_COEFF45, 0x00210003);
3819 cx25840_write4(client, DIF_BPF_COEFF67, 0xffacffc8);
3820 cx25840_write4(client, DIF_BPF_COEFF89, 0x008e00b6);
3821 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff63fe7c);
3822 cx25840_write4(client, DIF_BPF_COEFF1213, 0x003a0275);
3823 cx25840_write4(client, DIF_BPF_COEFF1415, 0x00dafcda);
3824 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd510313);
3825 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0501fe40);
3826 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8cbfefd);
3827 cx25840_write4(client, DIF_BPF_COEFF2223, 0x087604f0);
3828 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf80af6c2);
3829 cx25840_write4(client, DIF_BPF_COEFF2627, 0x05430cc8);
3830 cx25840_write4(client, DIF_BPF_COEFF2829, 0xff7af19a);
3831 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfa940d4e);
3832 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0b3ff699);
3833 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0810365);
3834 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3835 break;
3836
3837 case 11000000:
3838 cx25840_write4(client, DIF_BPF_COEFF01, 0x0001ffff);
3839 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8ffff);
3840 cx25840_write4(client, DIF_BPF_COEFF45, 0x00210018);
3841 cx25840_write4(client, DIF_BPF_COEFF67, 0xffbaffa3);
3842 cx25840_write4(client, DIF_BPF_COEFF89, 0x006000e1);
3843 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffc4fe68);
3844 cx25840_write4(client, DIF_BPF_COEFF1213, 0xffa0024b);
3845 cx25840_write4(client, DIF_BPF_COEFF1415, 0x019afd66);
3846 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc990216);
3847 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0575ff99);
3848 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8d4fd81);
3849 cx25840_write4(client, DIF_BPF_COEFF2223, 0x07d40640);
3850 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf932f5e6);
3851 cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d20d0d);
3852 cx25840_write4(client, DIF_BPF_COEFF2829, 0x00dff1de);
3853 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf9860cbf);
3854 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0bd1f71e);
3855 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf058032f);
3856 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3857 break;
3858
3859 case 11100000:
3860 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
3861 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff8);
3862 cx25840_write4(client, DIF_BPF_COEFF45, 0x001b0029);
3863 cx25840_write4(client, DIF_BPF_COEFF67, 0xffd1ff8a);
3864 cx25840_write4(client, DIF_BPF_COEFF89, 0x002600f2);
3865 cx25840_write4(client, DIF_BPF_COEFF1011, 0x002cfe7c);
3866 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff0f01f0);
3867 cx25840_write4(client, DIF_BPF_COEFF1415, 0x023bfe20);
3868 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc1700fa);
3869 cx25840_write4(client, DIF_BPF_COEFF1819, 0x05a200f7);
3870 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf927fc1c);
3871 cx25840_write4(client, DIF_BPF_COEFF2223, 0x06f40765);
3872 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfa82f53b);
3873 cx25840_write4(client, DIF_BPF_COEFF2627, 0x02510d27);
3874 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0243f23d);
3875 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf8810c24);
3876 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0c5cf7a7);
3877 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf03102fa);
3878 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3879 break;
3880
3881 case 11200000:
3882 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010002);
3883 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffafff2);
3884 cx25840_write4(client, DIF_BPF_COEFF45, 0x00110035);
3885 cx25840_write4(client, DIF_BPF_COEFF67, 0xfff0ff81);
3886 cx25840_write4(client, DIF_BPF_COEFF89, 0xffe700e7);
3887 cx25840_write4(client, DIF_BPF_COEFF1011, 0x008ffeb6);
3888 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe94016d);
3889 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02b0fefb);
3890 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3ffd1);
3891 cx25840_write4(client, DIF_BPF_COEFF1819, 0x05850249);
3892 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9c1fadb);
3893 cx25840_write4(client, DIF_BPF_COEFF2223, 0x05de0858);
3894 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfbf2f4c4);
3895 cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c70d17);
3896 cx25840_write4(client, DIF_BPF_COEFF2829, 0x03a0f2b8);
3897 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf7870b7c);
3898 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0cdff833);
3899 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf00d02c4);
3900 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3901 break;
3902
3903 case 11300000:
3904 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3905 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffdffee);
3906 cx25840_write4(client, DIF_BPF_COEFF45, 0x00040038);
3907 cx25840_write4(client, DIF_BPF_COEFF67, 0x0010ff88);
3908 cx25840_write4(client, DIF_BPF_COEFF89, 0xffac00c2);
3909 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00e2ff10);
3910 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe3900cb);
3911 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f1ffe9);
3912 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3feaa);
3913 cx25840_write4(client, DIF_BPF_COEFF1819, 0x05210381);
3914 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa9cf9c8);
3915 cx25840_write4(client, DIF_BPF_COEFF2223, 0x04990912);
3916 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfd7af484);
3917 cx25840_write4(client, DIF_BPF_COEFF2627, 0xff390cdb);
3918 cx25840_write4(client, DIF_BPF_COEFF2829, 0x04f4f34d);
3919 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf69a0ac9);
3920 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0d5af8c1);
3921 cx25840_write4(client, DIF_BPF_COEFF3435, 0xefec028e);
3922 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3923 break;
3924
3925 case 11400000:
3926 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3927 cx25840_write4(client, DIF_BPF_COEFF23, 0x0000ffee);
3928 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff60033);
3929 cx25840_write4(client, DIF_BPF_COEFF67, 0x002fff9f);
3930 cx25840_write4(client, DIF_BPF_COEFF89, 0xff7b0087);
3931 cx25840_write4(client, DIF_BPF_COEFF1011, 0x011eff82);
3932 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe080018);
3933 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f900d8);
3934 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17fd96);
3935 cx25840_write4(client, DIF_BPF_COEFF1819, 0x04790490);
3936 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfbadf8ed);
3937 cx25840_write4(client, DIF_BPF_COEFF2223, 0x032f098e);
3938 cx25840_write4(client, DIF_BPF_COEFF2425, 0xff10f47d);
3939 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaf0c75);
3940 cx25840_write4(client, DIF_BPF_COEFF2829, 0x063cf3fc);
3941 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf5ba0a0b);
3942 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0dccf952);
3943 cx25840_write4(client, DIF_BPF_COEFF3435, 0xefcd0258);
3944 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3945 break;
3946
3947 case 11500000:
3948 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
3949 cx25840_write4(client, DIF_BPF_COEFF23, 0x0004fff1);
3950 cx25840_write4(client, DIF_BPF_COEFF45, 0xffea0026);
3951 cx25840_write4(client, DIF_BPF_COEFF67, 0x0046ffc3);
3952 cx25840_write4(client, DIF_BPF_COEFF89, 0xff5a003c);
3953 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013b0000);
3954 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe04ff63);
3955 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02c801b8);
3956 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fca6);
3957 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0397056a);
3958 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfcecf853);
3959 cx25840_write4(client, DIF_BPF_COEFF2223, 0x01ad09c9);
3960 cx25840_write4(client, DIF_BPF_COEFF2425, 0x00acf4ad);
3961 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2e0be7);
3962 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0773f4c2);
3963 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf4e90943);
3964 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0e35f9e6);
3965 cx25840_write4(client, DIF_BPF_COEFF3435, 0xefb10221);
3966 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3967 break;
3968
3969 case 11600000:
3970 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
3971 cx25840_write4(client, DIF_BPF_COEFF23, 0x0007fff6);
3972 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe20014);
3973 cx25840_write4(client, DIF_BPF_COEFF67, 0x0054ffee);
3974 cx25840_write4(client, DIF_BPF_COEFF89, 0xff4effeb);
3975 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0137007e);
3976 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe2efebb);
3977 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0260027a);
3978 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fbe6);
3979 cx25840_write4(client, DIF_BPF_COEFF1819, 0x02870605);
3980 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfe4af7fe);
3981 cx25840_write4(client, DIF_BPF_COEFF2223, 0x001d09c1);
3982 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0243f515);
3983 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabd0b32);
3984 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0897f59e);
3985 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf4280871);
3986 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0e95fa7c);
3987 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef9701eb);
3988 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
3989 break;
3990
3991 case 11700000:
3992 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
3993 cx25840_write4(client, DIF_BPF_COEFF23, 0x0008fffd);
3994 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdeffff);
3995 cx25840_write4(client, DIF_BPF_COEFF67, 0x0056001d);
3996 cx25840_write4(client, DIF_BPF_COEFF89, 0xff57ff9c);
3997 cx25840_write4(client, DIF_BPF_COEFF1011, 0x011300f0);
3998 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe82fe2e);
3999 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01ca0310);
4000 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fb62);
4001 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0155065a);
4002 cx25840_write4(client, DIF_BPF_COEFF2021, 0xffbaf7f2);
4003 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfe8c0977);
4004 cx25840_write4(client, DIF_BPF_COEFF2425, 0x03cef5b2);
4005 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf9610a58);
4006 cx25840_write4(client, DIF_BPF_COEFF2829, 0x09a5f68f);
4007 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf3790797);
4008 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0eebfb14);
4009 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef8001b5);
4010 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4011 break;
4012
4013 case 11800000:
4014 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
4015 cx25840_write4(client, DIF_BPF_COEFF23, 0x00080004);
4016 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe0ffe9);
4017 cx25840_write4(client, DIF_BPF_COEFF67, 0x004c0047);
4018 cx25840_write4(client, DIF_BPF_COEFF89, 0xff75ff58);
4019 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00d1014a);
4020 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfef9fdc8);
4021 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0111036f);
4022 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fb21);
4023 cx25840_write4(client, DIF_BPF_COEFF1819, 0x00120665);
4024 cx25840_write4(client, DIF_BPF_COEFF2021, 0x012df82e);
4025 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfd0708ec);
4026 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0542f682);
4027 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81f095c);
4028 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0a9af792);
4029 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf2db06b5);
4030 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0f38fbad);
4031 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef6c017e);
4032 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4033 break;
4034
4035 case 11900000:
4036 cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
4037 cx25840_write4(client, DIF_BPF_COEFF23, 0x0007000b);
4038 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe7ffd8);
4039 cx25840_write4(client, DIF_BPF_COEFF67, 0x00370068);
4040 cx25840_write4(client, DIF_BPF_COEFF89, 0xffa4ff28);
4041 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00790184);
4042 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff87fd91);
4043 cx25840_write4(client, DIF_BPF_COEFF1415, 0x00430392);
4044 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fb26);
4045 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfece0626);
4046 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0294f8b2);
4047 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb990825);
4048 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0698f77f);
4049 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fe0842);
4050 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0b73f8a7);
4051 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf25105cd);
4052 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0f7bfc48);
4053 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef5a0148);
4054 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4055 break;
4056
4057 case 12000000:
4058 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
4059 cx25840_write4(client, DIF_BPF_COEFF23, 0x00050010);
4060 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff2ffcc);
4061 cx25840_write4(client, DIF_BPF_COEFF67, 0x001b007b);
4062 cx25840_write4(client, DIF_BPF_COEFF89, 0xffdfff10);
4063 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00140198);
4064 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0020fd8e);
4065 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff710375);
4066 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfb73);
4067 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd9a059f);
4068 cx25840_write4(client, DIF_BPF_COEFF2021, 0x03e0f978);
4069 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfa4e0726);
4070 cx25840_write4(client, DIF_BPF_COEFF2425, 0x07c8f8a7);
4071 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600070c);
4072 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0c2ff9c9);
4073 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf1db04de);
4074 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0fb4fce5);
4075 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef4b0111);
4076 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4077 break;
4078
4079 case 12100000:
4080 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
4081 cx25840_write4(client, DIF_BPF_COEFF23, 0x00010012);
4082 cx25840_write4(client, DIF_BPF_COEFF45, 0xffffffc8);
4083 cx25840_write4(client, DIF_BPF_COEFF67, 0xfffb007e);
4084 cx25840_write4(client, DIF_BPF_COEFF89, 0x001dff14);
4085 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffad0184);
4086 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00b7fdbe);
4087 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfea9031b);
4088 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fc01);
4089 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc8504d6);
4090 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0504fa79);
4091 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf93005f6);
4092 cx25840_write4(client, DIF_BPF_COEFF2425, 0x08caf9f2);
4093 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf52b05c0);
4094 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0ccbfaf9);
4095 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf17903eb);
4096 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0fe3fd83);
4097 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef3f00db);
4098 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4099 break;
4100
4101 case 12200000:
4102 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
4103 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffe0011);
4104 cx25840_write4(client, DIF_BPF_COEFF45, 0x000cffcc);
4105 cx25840_write4(client, DIF_BPF_COEFF67, 0xffdb0071);
4106 cx25840_write4(client, DIF_BPF_COEFF89, 0x0058ff32);
4107 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff4f014a);
4108 cx25840_write4(client, DIF_BPF_COEFF1213, 0x013cfe1f);
4109 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdfb028a);
4110 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0311fcc9);
4111 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb9d03d6);
4112 cx25840_write4(client, DIF_BPF_COEFF2021, 0x05f4fbad);
4113 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf848049d);
4114 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0999fb5b);
4115 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf4820461);
4116 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d46fc32);
4117 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf12d02f4);
4118 cx25840_write4(client, DIF_BPF_COEFF3233, 0x1007fe21);
4119 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef3600a4);
4120 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4121 break;
4122
4123 case 12300000:
4124 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
4125 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffa000e);
4126 cx25840_write4(client, DIF_BPF_COEFF45, 0x0017ffd9);
4127 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc10055);
4128 cx25840_write4(client, DIF_BPF_COEFF89, 0x0088ff68);
4129 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff0400f0);
4130 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01a6fea7);
4131 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd7501cc);
4132 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b0fdc0);
4133 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfaef02a8);
4134 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06a7fd07);
4135 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf79d0326);
4136 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a31fcda);
4137 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf40702f3);
4138 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d9ffd72);
4139 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0f601fa);
4140 cx25840_write4(client, DIF_BPF_COEFF3233, 0x1021fec0);
4141 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef2f006d);
4142 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4143 break;
4144
4145 case 12400000:
4146 cx25840_write4(client, DIF_BPF_COEFF01, 0x0001ffff);
4147 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80007);
4148 cx25840_write4(client, DIF_BPF_COEFF45, 0x001fffeb);
4149 cx25840_write4(client, DIF_BPF_COEFF67, 0xffaf002d);
4150 cx25840_write4(client, DIF_BPF_COEFF89, 0x00a8ffb0);
4151 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed3007e);
4152 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01e9ff4c);
4153 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd2000ee);
4154 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413fed8);
4155 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa82015c);
4156 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0715fe7d);
4157 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7340198);
4158 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a8dfe69);
4159 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3bd017c);
4160 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0dd5feb8);
4161 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0d500fd);
4162 cx25840_write4(client, DIF_BPF_COEFF3233, 0x1031ff60);
4163 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef2b0037);
4164 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4165 break;
4166
4167 case 12500000:
4168 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
4169 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff70000);
4170 cx25840_write4(client, DIF_BPF_COEFF45, 0x00220000);
4171 cx25840_write4(client, DIF_BPF_COEFF67, 0xffa90000);
4172 cx25840_write4(client, DIF_BPF_COEFF89, 0x00b30000);
4173 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec20000);
4174 cx25840_write4(client, DIF_BPF_COEFF1213, 0x02000000);
4175 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd030000);
4176 cx25840_write4(client, DIF_BPF_COEFF1617, 0x04350000);
4177 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa5e0000);
4178 cx25840_write4(client, DIF_BPF_COEFF2021, 0x073b0000);
4179 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7110000);
4180 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0aac0000);
4181 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3a40000);
4182 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0de70000);
4183 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0c90000);
4184 cx25840_write4(client, DIF_BPF_COEFF3233, 0x10360000);
4185 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef290000);
4186 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4187 break;
4188
4189 case 12600000:
4190 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
4191 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff8fff9);
4192 cx25840_write4(client, DIF_BPF_COEFF45, 0x001f0015);
4193 cx25840_write4(client, DIF_BPF_COEFF67, 0xffafffd3);
4194 cx25840_write4(client, DIF_BPF_COEFF89, 0x00a80050);
4195 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfed3ff82);
4196 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01e900b4);
4197 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd20ff12);
4198 cx25840_write4(client, DIF_BPF_COEFF1617, 0x04130128);
4199 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa82fea4);
4200 cx25840_write4(client, DIF_BPF_COEFF2021, 0x07150183);
4201 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf734fe68);
4202 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a8d0197);
4203 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf3bdfe84);
4204 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0dd50148);
4205 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0d5ff03);
4206 cx25840_write4(client, DIF_BPF_COEFF3233, 0x103100a0);
4207 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef2bffc9);
4208 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4209 break;
4210
4211 case 12700000:
4212 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
4213 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffafff2);
4214 cx25840_write4(client, DIF_BPF_COEFF45, 0x00170027);
4215 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc1ffab);
4216 cx25840_write4(client, DIF_BPF_COEFF89, 0x00880098);
4217 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff04ff10);
4218 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01a60159);
4219 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd75fe34);
4220 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b00240);
4221 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfaeffd58);
4222 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06a702f9);
4223 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf79dfcda);
4224 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0a310326);
4225 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf407fd0d);
4226 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d9f028e);
4227 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf0f6fe06);
4228 cx25840_write4(client, DIF_BPF_COEFF3233, 0x10210140);
4229 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef2fff93);
4230 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4231 break;
4232
4233 case 12800000:
4234 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
4235 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffeffef);
4236 cx25840_write4(client, DIF_BPF_COEFF45, 0x000c0034);
4237 cx25840_write4(client, DIF_BPF_COEFF67, 0xffdbff8f);
4238 cx25840_write4(client, DIF_BPF_COEFF89, 0x005800ce);
4239 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff4ffeb6);
4240 cx25840_write4(client, DIF_BPF_COEFF1213, 0x013c01e1);
4241 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdfbfd76);
4242 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03110337);
4243 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb9dfc2a);
4244 cx25840_write4(client, DIF_BPF_COEFF2021, 0x05f40453);
4245 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf848fb63);
4246 cx25840_write4(client, DIF_BPF_COEFF2425, 0x099904a5);
4247 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf482fb9f);
4248 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0d4603ce);
4249 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf12dfd0c);
4250 cx25840_write4(client, DIF_BPF_COEFF3233, 0x100701df);
4251 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef36ff5c);
4252 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4253 break;
4254
4255 case 12900000:
4256 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
4257 cx25840_write4(client, DIF_BPF_COEFF23, 0x0001ffee);
4258 cx25840_write4(client, DIF_BPF_COEFF45, 0xffff0038);
4259 cx25840_write4(client, DIF_BPF_COEFF67, 0xfffbff82);
4260 cx25840_write4(client, DIF_BPF_COEFF89, 0x001d00ec);
4261 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffadfe7c);
4262 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00b70242);
4263 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfea9fce5);
4264 cx25840_write4(client, DIF_BPF_COEFF1617, 0x024103ff);
4265 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc85fb2a);
4266 cx25840_write4(client, DIF_BPF_COEFF2021, 0x05040587);
4267 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf930fa0a);
4268 cx25840_write4(client, DIF_BPF_COEFF2425, 0x08ca060e);
4269 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf52bfa40);
4270 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0ccb0507);
4271 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf179fc15);
4272 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0fe3027d);
4273 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef3fff25);
4274 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4275 break;
4276
4277 case 13000000:
4278 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
4279 cx25840_write4(client, DIF_BPF_COEFF23, 0x0005fff0);
4280 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff20034);
4281 cx25840_write4(client, DIF_BPF_COEFF67, 0x001bff85);
4282 cx25840_write4(client, DIF_BPF_COEFF89, 0xffdf00f0);
4283 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0014fe68);
4284 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00200272);
4285 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff71fc8b);
4286 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d048d);
4287 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd9afa61);
4288 cx25840_write4(client, DIF_BPF_COEFF2021, 0x03e00688);
4289 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfa4ef8da);
4290 cx25840_write4(client, DIF_BPF_COEFF2425, 0x07c80759);
4291 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf600f8f4);
4292 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0c2f0637);
4293 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf1dbfb22);
4294 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0fb4031b);
4295 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef4bfeef);
4296 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4297 break;
4298
4299 case 13100000:
4300 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
4301 cx25840_write4(client, DIF_BPF_COEFF23, 0x0007fff5);
4302 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe70028);
4303 cx25840_write4(client, DIF_BPF_COEFF67, 0x0037ff98);
4304 cx25840_write4(client, DIF_BPF_COEFF89, 0xffa400d8);
4305 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0079fe7c);
4306 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff87026f);
4307 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0043fc6e);
4308 cx25840_write4(client, DIF_BPF_COEFF1617, 0x004404da);
4309 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfecef9da);
4310 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0294074e);
4311 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb99f7db);
4312 cx25840_write4(client, DIF_BPF_COEFF2425, 0x06980881);
4313 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf6fef7be);
4314 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0b730759);
4315 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf251fa33);
4316 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0f7b03b8);
4317 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef5afeb8);
4318 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4319 break;
4320
4321 case 13200000:
4322 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0000);
4323 cx25840_write4(client, DIF_BPF_COEFF23, 0x0008fffc);
4324 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe00017);
4325 cx25840_write4(client, DIF_BPF_COEFF67, 0x004cffb9);
4326 cx25840_write4(client, DIF_BPF_COEFF89, 0xff7500a8);
4327 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00d1feb6);
4328 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfef90238);
4329 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0111fc91);
4330 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff3604df);
4331 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0012f99b);
4332 cx25840_write4(client, DIF_BPF_COEFF2021, 0x012d07d2);
4333 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfd07f714);
4334 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0542097e);
4335 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf81ff6a4);
4336 cx25840_write4(client, DIF_BPF_COEFF2829, 0x0a9a086e);
4337 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf2dbf94b);
4338 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0f380453);
4339 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef6cfe82);
4340 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4341 break;
4342
4343 case 13300000:
4344 cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
4345 cx25840_write4(client, DIF_BPF_COEFF23, 0x00080003);
4346 cx25840_write4(client, DIF_BPF_COEFF45, 0xffde0001);
4347 cx25840_write4(client, DIF_BPF_COEFF67, 0x0056ffe3);
4348 cx25840_write4(client, DIF_BPF_COEFF89, 0xff570064);
4349 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0113ff10);
4350 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe8201d2);
4351 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01cafcf0);
4352 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35049e);
4353 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0155f9a6);
4354 cx25840_write4(client, DIF_BPF_COEFF2021, 0xffba080e);
4355 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfe8cf689);
4356 cx25840_write4(client, DIF_BPF_COEFF2425, 0x03ce0a4e);
4357 cx25840_write4(client, DIF_BPF_COEFF2627, 0xf961f5a8);
4358 cx25840_write4(client, DIF_BPF_COEFF2829, 0x09a50971);
4359 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf379f869);
4360 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0eeb04ec);
4361 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef80fe4b);
4362 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4363 break;
4364
4365 case 13400000:
4366 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
4367 cx25840_write4(client, DIF_BPF_COEFF23, 0x0007000a);
4368 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe2ffec);
4369 cx25840_write4(client, DIF_BPF_COEFF67, 0x00540012);
4370 cx25840_write4(client, DIF_BPF_COEFF89, 0xff4e0015);
4371 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0137ff82);
4372 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe2e0145);
4373 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0260fd86);
4374 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51041a);
4375 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0287f9fb);
4376 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfe4a0802);
4377 cx25840_write4(client, DIF_BPF_COEFF2223, 0x001df63f);
4378 cx25840_write4(client, DIF_BPF_COEFF2425, 0x02430aeb);
4379 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfabdf4ce);
4380 cx25840_write4(client, DIF_BPF_COEFF2829, 0x08970a62);
4381 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf428f78f);
4382 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0e950584);
4383 cx25840_write4(client, DIF_BPF_COEFF3435, 0xef97fe15);
4384 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4385 break;
4386
4387 case 13500000:
4388 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
4389 cx25840_write4(client, DIF_BPF_COEFF23, 0x0004000f);
4390 cx25840_write4(client, DIF_BPF_COEFF45, 0xffeaffda);
4391 cx25840_write4(client, DIF_BPF_COEFF67, 0x0046003d);
4392 cx25840_write4(client, DIF_BPF_COEFF89, 0xff5affc4);
4393 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013b0000);
4394 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe04009d);
4395 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02c8fe48);
4396 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99035a);
4397 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0397fa96);
4398 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfcec07ad);
4399 cx25840_write4(client, DIF_BPF_COEFF2223, 0x01adf637);
4400 cx25840_write4(client, DIF_BPF_COEFF2425, 0x00ac0b53);
4401 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfc2ef419);
4402 cx25840_write4(client, DIF_BPF_COEFF2829, 0x07730b3e);
4403 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf4e9f6bd);
4404 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0e35061a);
4405 cx25840_write4(client, DIF_BPF_COEFF3435, 0xefb1fddf);
4406 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4407 break;
4408
4409 case 13600000:
4410 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
4411 cx25840_write4(client, DIF_BPF_COEFF23, 0x00000012);
4412 cx25840_write4(client, DIF_BPF_COEFF45, 0xfff6ffcd);
4413 cx25840_write4(client, DIF_BPF_COEFF67, 0x002f0061);
4414 cx25840_write4(client, DIF_BPF_COEFF89, 0xff7bff79);
4415 cx25840_write4(client, DIF_BPF_COEFF1011, 0x011e007e);
4416 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe08ffe8);
4417 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f9ff28);
4418 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17026a);
4419 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0479fb70);
4420 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfbad0713);
4421 cx25840_write4(client, DIF_BPF_COEFF2223, 0x032ff672);
4422 cx25840_write4(client, DIF_BPF_COEFF2425, 0xff100b83);
4423 cx25840_write4(client, DIF_BPF_COEFF2627, 0xfdaff38b);
4424 cx25840_write4(client, DIF_BPF_COEFF2829, 0x063c0c04);
4425 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf5baf5f5);
4426 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0dcc06ae);
4427 cx25840_write4(client, DIF_BPF_COEFF3435, 0xefcdfda8);
4428 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4429 break;
4430
4431 case 13700000:
4432 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
4433 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffd0012);
4434 cx25840_write4(client, DIF_BPF_COEFF45, 0x0004ffc8);
4435 cx25840_write4(client, DIF_BPF_COEFF67, 0x00100078);
4436 cx25840_write4(client, DIF_BPF_COEFF89, 0xffacff3e);
4437 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00e200f0);
4438 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe39ff35);
4439 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02f10017);
4440 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd30156);
4441 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0521fc7f);
4442 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa9c0638);
4443 cx25840_write4(client, DIF_BPF_COEFF2223, 0x0499f6ee);
4444 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfd7a0b7c);
4445 cx25840_write4(client, DIF_BPF_COEFF2627, 0xff39f325);
4446 cx25840_write4(client, DIF_BPF_COEFF2829, 0x04f40cb3);
4447 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf69af537);
4448 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0d5a073f);
4449 cx25840_write4(client, DIF_BPF_COEFF3435, 0xefecfd72);
4450 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4451 break;
4452
4453 case 13800000:
4454 cx25840_write4(client, DIF_BPF_COEFF01, 0x0001fffe);
4455 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffa000e);
4456 cx25840_write4(client, DIF_BPF_COEFF45, 0x0011ffcb);
4457 cx25840_write4(client, DIF_BPF_COEFF67, 0xfff0007f);
4458 cx25840_write4(client, DIF_BPF_COEFF89, 0xffe7ff19);
4459 cx25840_write4(client, DIF_BPF_COEFF1011, 0x008f014a);
4460 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe94fe93);
4461 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02b00105);
4462 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfbd3002f);
4463 cx25840_write4(client, DIF_BPF_COEFF1819, 0x0585fdb7);
4464 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf9c10525);
4465 cx25840_write4(client, DIF_BPF_COEFF2223, 0x05def7a8);
4466 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfbf20b3c);
4467 cx25840_write4(client, DIF_BPF_COEFF2627, 0x00c7f2e9);
4468 cx25840_write4(client, DIF_BPF_COEFF2829, 0x03a00d48);
4469 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf787f484);
4470 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0cdf07cd);
4471 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf00dfd3c);
4472 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4473 break;
4474
4475 case 13900000:
4476 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010000);
4477 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80008);
4478 cx25840_write4(client, DIF_BPF_COEFF45, 0x001bffd7);
4479 cx25840_write4(client, DIF_BPF_COEFF67, 0xffd10076);
4480 cx25840_write4(client, DIF_BPF_COEFF89, 0x0026ff0e);
4481 cx25840_write4(client, DIF_BPF_COEFF1011, 0x002c0184);
4482 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff0ffe10);
4483 cx25840_write4(client, DIF_BPF_COEFF1415, 0x023b01e0);
4484 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc17ff06);
4485 cx25840_write4(client, DIF_BPF_COEFF1819, 0x05a2ff09);
4486 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf92703e4);
4487 cx25840_write4(client, DIF_BPF_COEFF2223, 0x06f4f89b);
4488 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfa820ac5);
4489 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0251f2d9);
4490 cx25840_write4(client, DIF_BPF_COEFF2829, 0x02430dc3);
4491 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf881f3dc);
4492 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0c5c0859);
4493 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf031fd06);
4494 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4495 break;
4496
4497 case 14000000:
4498 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
4499 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80001);
4500 cx25840_write4(client, DIF_BPF_COEFF45, 0x0021ffe8);
4501 cx25840_write4(client, DIF_BPF_COEFF67, 0xffba005d);
4502 cx25840_write4(client, DIF_BPF_COEFF89, 0x0060ff1f);
4503 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffc40198);
4504 cx25840_write4(client, DIF_BPF_COEFF1213, 0xffa0fdb5);
4505 cx25840_write4(client, DIF_BPF_COEFF1415, 0x019a029a);
4506 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99fdea);
4507 cx25840_write4(client, DIF_BPF_COEFF1819, 0x05750067);
4508 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8d4027f);
4509 cx25840_write4(client, DIF_BPF_COEFF2223, 0x07d4f9c0);
4510 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf9320a1a);
4511 cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d2f2f3);
4512 cx25840_write4(client, DIF_BPF_COEFF2829, 0x00df0e22);
4513 cx25840_write4(client, DIF_BPF_COEFF3031, 0xf986f341);
4514 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0bd108e2);
4515 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf058fcd1);
4516 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4517 break;
4518
4519 case 14100000:
4520 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
4521 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fffa);
4522 cx25840_write4(client, DIF_BPF_COEFF45, 0x0021fffd);
4523 cx25840_write4(client, DIF_BPF_COEFF67, 0xffac0038);
4524 cx25840_write4(client, DIF_BPF_COEFF89, 0x008eff4a);
4525 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff630184);
4526 cx25840_write4(client, DIF_BPF_COEFF1213, 0x003afd8b);
4527 cx25840_write4(client, DIF_BPF_COEFF1415, 0x00da0326);
4528 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd51fced);
4529 cx25840_write4(client, DIF_BPF_COEFF1819, 0x050101c0);
4530 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf8cb0103);
4531 cx25840_write4(client, DIF_BPF_COEFF2223, 0x0876fb10);
4532 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf80a093e);
4533 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0543f338);
4534 cx25840_write4(client, DIF_BPF_COEFF2829, 0xff7a0e66);
4535 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfa94f2b2);
4536 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0b3f0967);
4537 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf081fc9b);
4538 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4539 break;
4540
4541 case 14200000:
4542 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
4543 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffbfff3);
4544 cx25840_write4(client, DIF_BPF_COEFF45, 0x001d0013);
4545 cx25840_write4(client, DIF_BPF_COEFF67, 0xffaa000b);
4546 cx25840_write4(client, DIF_BPF_COEFF89, 0x00aaff89);
4547 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff13014a);
4548 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00cefd95);
4549 cx25840_write4(client, DIF_BPF_COEFF1415, 0x000a037b);
4550 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe35fc1d);
4551 cx25840_write4(client, DIF_BPF_COEFF1819, 0x044c0305);
4552 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf90cff7e);
4553 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08d5fc81);
4554 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf7100834);
4555 cx25840_write4(client, DIF_BPF_COEFF2627, 0x069ff3a7);
4556 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfe160e8d);
4557 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfbaaf231);
4558 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0aa509e9);
4559 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0adfc65);
4560 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4561 break;
4562
4563 case 14300000:
4564 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
4565 cx25840_write4(client, DIF_BPF_COEFF23, 0xffffffef);
4566 cx25840_write4(client, DIF_BPF_COEFF45, 0x00140025);
4567 cx25840_write4(client, DIF_BPF_COEFF67, 0xffb4ffdd);
4568 cx25840_write4(client, DIF_BPF_COEFF89, 0x00b2ffd6);
4569 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfedb00f0);
4570 cx25840_write4(client, DIF_BPF_COEFF1213, 0x0150fdd3);
4571 cx25840_write4(client, DIF_BPF_COEFF1415, 0xff380391);
4572 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff36fb85);
4573 cx25840_write4(client, DIF_BPF_COEFF1819, 0x035e0426);
4574 cx25840_write4(client, DIF_BPF_COEFF2021, 0xf994fdfe);
4575 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08eefe0b);
4576 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf6490702);
4577 cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e1f43e);
4578 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfcb60e97);
4579 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfcc6f1be);
4580 cx25840_write4(client, DIF_BPF_COEFF3233, 0x0a040a67);
4581 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf0dbfc30);
4582 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4583 break;
4584
4585 case 14400000:
4586 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
4587 cx25840_write4(client, DIF_BPF_COEFF23, 0x0002ffee);
4588 cx25840_write4(client, DIF_BPF_COEFF45, 0x00070033);
4589 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9ffb4);
4590 cx25840_write4(client, DIF_BPF_COEFF89, 0x00a40027);
4591 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfec3007e);
4592 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01b4fe3f);
4593 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe760369);
4594 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0044fb2e);
4595 cx25840_write4(client, DIF_BPF_COEFF1819, 0x02450518);
4596 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfa5ffc90);
4597 cx25840_write4(client, DIF_BPF_COEFF2223, 0x08c1ffa1);
4598 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf5bc05ae);
4599 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0902f4fc);
4600 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfb600e85);
4601 cx25840_write4(client, DIF_BPF_COEFF3031, 0xfde7f15a);
4602 cx25840_write4(client, DIF_BPF_COEFF3233, 0x095d0ae2);
4603 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf10cfbfb);
4604 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4605 break;
4606
4607 case 14500000:
4608 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0002);
4609 cx25840_write4(client, DIF_BPF_COEFF23, 0x0005ffef);
4610 cx25840_write4(client, DIF_BPF_COEFF45, 0xfffa0038);
4611 cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5ff95);
4612 cx25840_write4(client, DIF_BPF_COEFF89, 0x00820074);
4613 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfecc0000);
4614 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01f0fed0);
4615 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfdd20304);
4616 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014dfb1d);
4617 cx25840_write4(client, DIF_BPF_COEFF1819, 0x010e05ce);
4618 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfb64fb41);
4619 cx25840_write4(client, DIF_BPF_COEFF2223, 0x084e013b);
4620 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf569043e);
4621 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a00f5dd);
4622 cx25840_write4(client, DIF_BPF_COEFF2829, 0xfa150e55);
4623 cx25840_write4(client, DIF_BPF_COEFF3031, 0xff0bf104);
4624 cx25840_write4(client, DIF_BPF_COEFF3233, 0x08b00b59);
4625 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf13ffbc6);
4626 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4627 break;
4628
4629 case 14600000:
4630 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
4631 cx25840_write4(client, DIF_BPF_COEFF23, 0x0008fff4);
4632 cx25840_write4(client, DIF_BPF_COEFF45, 0xffed0035);
4633 cx25840_write4(client, DIF_BPF_COEFF67, 0x0005ff83);
4634 cx25840_write4(client, DIF_BPF_COEFF89, 0x005000b4);
4635 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfef6ff82);
4636 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01ffff7a);
4637 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd580269);
4638 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0241fb53);
4639 cx25840_write4(client, DIF_BPF_COEFF1819, 0xffca0640);
4640 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfc99fa1e);
4641 cx25840_write4(client, DIF_BPF_COEFF2223, 0x079a02cb);
4642 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf55502ba);
4643 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad5f6e0);
4644 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf8d90e0a);
4645 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0031f0bd);
4646 cx25840_write4(client, DIF_BPF_COEFF3233, 0x07fd0bcb);
4647 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf174fb91);
4648 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4649 break;
4650
4651 case 14700000:
4652 cx25840_write4(client, DIF_BPF_COEFF01, 0xffffffff);
4653 cx25840_write4(client, DIF_BPF_COEFF23, 0x0009fffb);
4654 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe4002a);
4655 cx25840_write4(client, DIF_BPF_COEFF67, 0x0025ff82);
4656 cx25840_write4(client, DIF_BPF_COEFF89, 0x001400e0);
4657 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff3cff10);
4658 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01e10030);
4659 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd1201a4);
4660 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0311fbcd);
4661 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfe88066a);
4662 cx25840_write4(client, DIF_BPF_COEFF2021, 0xfdf1f92f);
4663 cx25840_write4(client, DIF_BPF_COEFF2223, 0x06aa0449);
4664 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf57e0128);
4665 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7ef801);
4666 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf7b00da2);
4667 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0156f086);
4668 cx25840_write4(client, DIF_BPF_COEFF3233, 0x07450c39);
4669 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf1acfb5c);
4670 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4671 break;
4672
4673 case 14800000:
4674 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffe);
4675 cx25840_write4(client, DIF_BPF_COEFF23, 0x00080002);
4676 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdf0019);
4677 cx25840_write4(client, DIF_BPF_COEFF67, 0x003fff92);
4678 cx25840_write4(client, DIF_BPF_COEFF89, 0xffd600f1);
4679 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff96feb6);
4680 cx25840_write4(client, DIF_BPF_COEFF1213, 0x019700e1);
4681 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd0500c2);
4682 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b0fc84);
4683 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfd590649);
4684 cx25840_write4(client, DIF_BPF_COEFF2021, 0xff5df87f);
4685 cx25840_write4(client, DIF_BPF_COEFF2223, 0x058505aa);
4686 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf5e4ff91);
4687 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf9f93c);
4688 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf69d0d20);
4689 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0279f05e);
4690 cx25840_write4(client, DIF_BPF_COEFF3233, 0x06880ca3);
4691 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf1e6fb28);
4692 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4693 break;
4694
4695 case 14900000:
4696 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
4697 cx25840_write4(client, DIF_BPF_COEFF23, 0x00060009);
4698 cx25840_write4(client, DIF_BPF_COEFF45, 0xffdf0004);
4699 cx25840_write4(client, DIF_BPF_COEFF67, 0x0051ffb0);
4700 cx25840_write4(client, DIF_BPF_COEFF89, 0xff9d00e8);
4701 cx25840_write4(client, DIF_BPF_COEFF1011, 0xfffcfe7c);
4702 cx25840_write4(client, DIF_BPF_COEFF1213, 0x01280180);
4703 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd32ffd2);
4704 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413fd6e);
4705 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfc4d05df);
4706 cx25840_write4(client, DIF_BPF_COEFF2021, 0x00d1f812);
4707 cx25840_write4(client, DIF_BPF_COEFF2223, 0x043506e4);
4708 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf685fdfb);
4709 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c43fa8d);
4710 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf5a10c83);
4711 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0399f046);
4712 cx25840_write4(client, DIF_BPF_COEFF3233, 0x05c70d08);
4713 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf222faf3);
4714 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4715 break;
4716
4717 case 15000000:
4718 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
4719 cx25840_write4(client, DIF_BPF_COEFF23, 0x0003000f);
4720 cx25840_write4(client, DIF_BPF_COEFF45, 0xffe5ffef);
4721 cx25840_write4(client, DIF_BPF_COEFF67, 0x0057ffd9);
4722 cx25840_write4(client, DIF_BPF_COEFF89, 0xff7000c4);
4723 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0062fe68);
4724 cx25840_write4(client, DIF_BPF_COEFF1213, 0x009e01ff);
4725 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfd95fee6);
4726 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0435fe7d);
4727 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb710530);
4728 cx25840_write4(client, DIF_BPF_COEFF2021, 0x023cf7ee);
4729 cx25840_write4(client, DIF_BPF_COEFF2223, 0x02c307ef);
4730 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf75efc70);
4731 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c5cfbef);
4732 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf4c10bce);
4733 cx25840_write4(client, DIF_BPF_COEFF3031, 0x04b3f03f);
4734 cx25840_write4(client, DIF_BPF_COEFF3233, 0x05030d69);
4735 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf261fabf);
4736 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4737 break;
4738
4739 case 15100000:
4740 cx25840_write4(client, DIF_BPF_COEFF01, 0x0000fffd);
4741 cx25840_write4(client, DIF_BPF_COEFF23, 0xffff0012);
4742 cx25840_write4(client, DIF_BPF_COEFF45, 0xffefffdc);
4743 cx25840_write4(client, DIF_BPF_COEFF67, 0x00510006);
4744 cx25840_write4(client, DIF_BPF_COEFF89, 0xff540089);
4745 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00befe7c);
4746 cx25840_write4(client, DIF_BPF_COEFF1213, 0x00060253);
4747 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfe27fe0d);
4748 cx25840_write4(client, DIF_BPF_COEFF1617, 0x0413ffa2);
4749 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfad10446);
4750 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0390f812);
4751 cx25840_write4(client, DIF_BPF_COEFF2223, 0x013b08c3);
4752 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf868faf6);
4753 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0c43fd5f);
4754 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3fd0b02);
4755 cx25840_write4(client, DIF_BPF_COEFF3031, 0x05c7f046);
4756 cx25840_write4(client, DIF_BPF_COEFF3233, 0x043b0dc4);
4757 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2a1fa8b);
4758 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4759 break;
4760
4761 case 15200000:
4762 cx25840_write4(client, DIF_BPF_COEFF01, 0x0001fffe);
4763 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffc0012);
4764 cx25840_write4(client, DIF_BPF_COEFF45, 0xfffbffce);
4765 cx25840_write4(client, DIF_BPF_COEFF67, 0x003f0033);
4766 cx25840_write4(client, DIF_BPF_COEFF89, 0xff4e003f);
4767 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0106feb6);
4768 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff6e0276);
4769 cx25840_write4(client, DIF_BPF_COEFF1415, 0xfeddfd56);
4770 cx25840_write4(client, DIF_BPF_COEFF1617, 0x03b000cc);
4771 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa740329);
4772 cx25840_write4(client, DIF_BPF_COEFF2021, 0x04bff87f);
4773 cx25840_write4(client, DIF_BPF_COEFF2223, 0xffaa095d);
4774 cx25840_write4(client, DIF_BPF_COEFF2425, 0xf99ef995);
4775 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0bf9fed8);
4776 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf3590a1f);
4777 cx25840_write4(client, DIF_BPF_COEFF3031, 0x06d2f05e);
4778 cx25840_write4(client, DIF_BPF_COEFF3233, 0x03700e1b);
4779 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf2e4fa58);
4780 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4781 break;
4782
4783 case 15300000:
4784 cx25840_write4(client, DIF_BPF_COEFF01, 0x0001ffff);
4785 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9000f);
4786 cx25840_write4(client, DIF_BPF_COEFF45, 0x0009ffc8);
4787 cx25840_write4(client, DIF_BPF_COEFF67, 0x00250059);
4788 cx25840_write4(client, DIF_BPF_COEFF89, 0xff5effee);
4789 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0132ff10);
4790 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfee30265);
4791 cx25840_write4(client, DIF_BPF_COEFF1415, 0xffaafccf);
4792 cx25840_write4(client, DIF_BPF_COEFF1617, 0x031101eb);
4793 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa6001e8);
4794 cx25840_write4(client, DIF_BPF_COEFF2021, 0x05bdf92f);
4795 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfe1b09b6);
4796 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfafaf852);
4797 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0b7e0055);
4798 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2d50929);
4799 cx25840_write4(client, DIF_BPF_COEFF3031, 0x07d3f086);
4800 cx25840_write4(client, DIF_BPF_COEFF3233, 0x02a30e6c);
4801 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf329fa24);
4802 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4803 break;
4804
4805 case 15400000:
4806 cx25840_write4(client, DIF_BPF_COEFF01, 0x00010001);
4807 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80009);
4808 cx25840_write4(client, DIF_BPF_COEFF45, 0x0015ffca);
4809 cx25840_write4(client, DIF_BPF_COEFF67, 0x00050074);
4810 cx25840_write4(client, DIF_BPF_COEFF89, 0xff81ff9f);
4811 cx25840_write4(client, DIF_BPF_COEFF1011, 0x013dff82);
4812 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe710221);
4813 cx25840_write4(client, DIF_BPF_COEFF1415, 0x007cfc80);
4814 cx25840_write4(client, DIF_BPF_COEFF1617, 0x024102ed);
4815 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfa940090);
4816 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0680fa1e);
4817 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfc9b09cd);
4818 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfc73f736);
4819 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0ad501d0);
4820 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2740820);
4821 cx25840_write4(client, DIF_BPF_COEFF3031, 0x08c9f0bd);
4822 cx25840_write4(client, DIF_BPF_COEFF3233, 0x01d40eb9);
4823 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf371f9f1);
4824 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4825 break;
4826
4827 case 15500000:
4828 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000002);
4829 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff80002);
4830 cx25840_write4(client, DIF_BPF_COEFF45, 0x001effd5);
4831 cx25840_write4(client, DIF_BPF_COEFF67, 0xffe5007f);
4832 cx25840_write4(client, DIF_BPF_COEFF89, 0xffb4ff5b);
4833 cx25840_write4(client, DIF_BPF_COEFF1011, 0x01280000);
4834 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe2401b0);
4835 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0146fc70);
4836 cx25840_write4(client, DIF_BPF_COEFF1617, 0x014d03c6);
4837 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfb10ff32);
4838 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0701fb41);
4839 cx25840_write4(client, DIF_BPF_COEFF2223, 0xfb3709a1);
4840 cx25840_write4(client, DIF_BPF_COEFF2425, 0xfe00f644);
4841 cx25840_write4(client, DIF_BPF_COEFF2627, 0x0a000345);
4842 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2350708);
4843 cx25840_write4(client, DIF_BPF_COEFF3031, 0x09b2f104);
4844 cx25840_write4(client, DIF_BPF_COEFF3233, 0x01050eff);
4845 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf3baf9be);
4846 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4847 break;
4848
4849 case 15600000:
4850 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
4851 cx25840_write4(client, DIF_BPF_COEFF23, 0xfff9fffb);
4852 cx25840_write4(client, DIF_BPF_COEFF45, 0x0022ffe6);
4853 cx25840_write4(client, DIF_BPF_COEFF67, 0xffc9007a);
4854 cx25840_write4(client, DIF_BPF_COEFF89, 0xfff0ff29);
4855 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00f2007e);
4856 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe01011b);
4857 cx25840_write4(client, DIF_BPF_COEFF1415, 0x01f6fc9e);
4858 cx25840_write4(client, DIF_BPF_COEFF1617, 0x00440467);
4859 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfbccfdde);
4860 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0738fc90);
4861 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf9f70934);
4862 cx25840_write4(client, DIF_BPF_COEFF2425, 0xff99f582);
4863 cx25840_write4(client, DIF_BPF_COEFF2627, 0x090204b0);
4864 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf21a05e1);
4865 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0a8df15a);
4866 cx25840_write4(client, DIF_BPF_COEFF3233, 0x00340f41);
4867 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf405f98b);
4868 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4869 break;
4870
4871 case 15700000:
4872 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
4873 cx25840_write4(client, DIF_BPF_COEFF23, 0xfffcfff4);
4874 cx25840_write4(client, DIF_BPF_COEFF45, 0x0020fffa);
4875 cx25840_write4(client, DIF_BPF_COEFF67, 0xffb40064);
4876 cx25840_write4(client, DIF_BPF_COEFF89, 0x002fff11);
4877 cx25840_write4(client, DIF_BPF_COEFF1011, 0x00a400f0);
4878 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe0d006e);
4879 cx25840_write4(client, DIF_BPF_COEFF1415, 0x0281fd09);
4880 cx25840_write4(client, DIF_BPF_COEFF1617, 0xff3604c9);
4881 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfcbffca2);
4882 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0726fdfe);
4883 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf8e80888);
4884 cx25840_write4(client, DIF_BPF_COEFF2425, 0x0134f4f3);
4885 cx25840_write4(client, DIF_BPF_COEFF2627, 0x07e1060c);
4886 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf22304af);
4887 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0b59f1be);
4888 cx25840_write4(client, DIF_BPF_COEFF3233, 0xff640f7d);
4889 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf452f959);
4890 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4891 break;
4892
4893 case 15800000:
4894 cx25840_write4(client, DIF_BPF_COEFF01, 0x00000003);
4895 cx25840_write4(client, DIF_BPF_COEFF23, 0x0000fff0);
4896 cx25840_write4(client, DIF_BPF_COEFF45, 0x001a0010);
4897 cx25840_write4(client, DIF_BPF_COEFF67, 0xffaa0041);
4898 cx25840_write4(client, DIF_BPF_COEFF89, 0x0067ff13);
4899 cx25840_write4(client, DIF_BPF_COEFF1011, 0x0043014a);
4900 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfe46ffb9);
4901 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02dbfda8);
4902 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfe3504e5);
4903 cx25840_write4(client, DIF_BPF_COEFF1819, 0xfddcfb8d);
4904 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06c9ff7e);
4905 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf81107a2);
4906 cx25840_write4(client, DIF_BPF_COEFF2425, 0x02c9f49a);
4907 cx25840_write4(client, DIF_BPF_COEFF2627, 0x069f0753);
4908 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2500373);
4909 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0c14f231);
4910 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfe930fb3);
4911 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4a1f927);
4912 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4913 break;
4914
4915 case 15900000:
4916 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0002);
4917 cx25840_write4(client, DIF_BPF_COEFF23, 0x0003ffee);
4918 cx25840_write4(client, DIF_BPF_COEFF45, 0x000f0023);
4919 cx25840_write4(client, DIF_BPF_COEFF67, 0xffac0016);
4920 cx25840_write4(client, DIF_BPF_COEFF89, 0x0093ff31);
4921 cx25840_write4(client, DIF_BPF_COEFF1011, 0xffdc0184);
4922 cx25840_write4(client, DIF_BPF_COEFF1213, 0xfea6ff09);
4923 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02fdfe70);
4924 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfd5104ba);
4925 cx25840_write4(client, DIF_BPF_COEFF1819, 0xff15faac);
4926 cx25840_write4(client, DIF_BPF_COEFF2021, 0x06270103);
4927 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7780688);
4928 cx25840_write4(client, DIF_BPF_COEFF2425, 0x044df479);
4929 cx25840_write4(client, DIF_BPF_COEFF2627, 0x05430883);
4930 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf2a00231);
4931 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0cbef2b2);
4932 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfdc40fe3);
4933 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf4f2f8f5);
4934 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4935 break;
4936
4937 case 16000000:
4938 cx25840_write4(client, DIF_BPF_COEFF01, 0xffff0001);
4939 cx25840_write4(client, DIF_BPF_COEFF23, 0x0006ffef);
4940 cx25840_write4(client, DIF_BPF_COEFF45, 0x00020031);
4941 cx25840_write4(client, DIF_BPF_COEFF67, 0xffbaffe8);
4942 cx25840_write4(client, DIF_BPF_COEFF89, 0x00adff66);
4943 cx25840_write4(client, DIF_BPF_COEFF1011, 0xff790198);
4944 cx25840_write4(client, DIF_BPF_COEFF1213, 0xff26fe6e);
4945 cx25840_write4(client, DIF_BPF_COEFF1415, 0x02e5ff55);
4946 cx25840_write4(client, DIF_BPF_COEFF1617, 0xfc99044a);
4947 cx25840_write4(client, DIF_BPF_COEFF1819, 0x005bfa09);
4948 cx25840_write4(client, DIF_BPF_COEFF2021, 0x0545027f);
4949 cx25840_write4(client, DIF_BPF_COEFF2223, 0xf7230541);
4950 cx25840_write4(client, DIF_BPF_COEFF2425, 0x05b8f490);
4951 cx25840_write4(client, DIF_BPF_COEFF2627, 0x03d20997);
4952 cx25840_write4(client, DIF_BPF_COEFF2829, 0xf31300eb);
4953 cx25840_write4(client, DIF_BPF_COEFF3031, 0x0d55f341);
4954 cx25840_write4(client, DIF_BPF_COEFF3233, 0xfcf6100e);
4955 cx25840_write4(client, DIF_BPF_COEFF3435, 0xf544f8c3);
4956 cx25840_write4(client, DIF_BPF_COEFF36, 0x110d0000);
4957 break;
4958 }
4959}
4960
4961static void cx23888_std_setup(struct i2c_client *client)
4962{
4963 struct cx25840_state *state = to_state(i2c_get_clientdata(client));
4964 v4l2_std_id std = state->std;
4965 u32 ifHz;
4966
4967 cx25840_write4(client, 0x478, 0x6628021F);
4968 cx25840_write4(client, 0x400, 0x0);
4969 cx25840_write4(client, 0x4b4, 0x20524030);
4970 cx25840_write4(client, 0x47c, 0x010a8263);
4971
4972 if (std & V4L2_STD_NTSC) {
4973 v4l_dbg(1, cx25840_debug, client, "%s() Selecting NTSC",
4974 __func__);
4975
4976
4977 cx25840_write4(client, 0x428, 0x1e1e601a);
4978 cx25840_write4(client, 0x424, 0x5b2d007a);
4979
4980
4981 cx25840_write4(client, 0x304, 0x6503bc0c);
4982 cx25840_write4(client, 0x308, 0xbd038c85);
4983 cx25840_write4(client, 0x30c, 0x1db4640a);
4984 cx25840_write4(client, 0x310, 0x00008800);
4985 cx25840_write4(client, 0x314, 0x44400400);
4986 cx25840_write4(client, 0x32c, 0x0c800800);
4987 cx25840_write4(client, 0x330, 0x27000100);
4988 cx25840_write4(client, 0x334, 0x1f296e1f);
4989 cx25840_write4(client, 0x338, 0x009f50c1);
4990 cx25840_write4(client, 0x340, 0x1befbf06);
4991 cx25840_write4(client, 0x344, 0x000035e8);
4992
4993
4994 ifHz = 5400000;
4995
4996 } else {
4997 v4l_dbg(1, cx25840_debug, client, "%s() Selecting PAL-BG",
4998 __func__);
4999
5000
5001 cx25840_write4(client, 0x428, 0x28244024);
5002 cx25840_write4(client, 0x424, 0x5d2d0084);
5003
5004
5005 cx25840_write4(client, 0x304, 0x6503bc0c);
5006 cx25840_write4(client, 0x308, 0xbd038c85);
5007 cx25840_write4(client, 0x30c, 0x1db4640a);
5008 cx25840_write4(client, 0x310, 0x00008800);
5009 cx25840_write4(client, 0x314, 0x44400600);
5010 cx25840_write4(client, 0x32c, 0x0c800800);
5011 cx25840_write4(client, 0x330, 0x27000100);
5012 cx25840_write4(client, 0x334, 0x213530ec);
5013 cx25840_write4(client, 0x338, 0x00a65ba8);
5014 cx25840_write4(client, 0x340, 0x1befbf06);
5015 cx25840_write4(client, 0x344, 0x000035e8);
5016
5017
5018 ifHz = 6000000;
5019 }
5020
5021 cx23885_dif_setup(client, ifHz);
5022
5023
5024
5025
5026 set_input(client, state->vid_input, state->aud_input);
5027}
5028
5029
5030
5031static const struct v4l2_ctrl_ops cx25840_ctrl_ops = {
5032 .s_ctrl = cx25840_s_ctrl,
5033};
5034
5035static const struct v4l2_subdev_core_ops cx25840_core_ops = {
5036 .log_status = cx25840_log_status,
5037 .g_ctrl = v4l2_subdev_g_ctrl,
5038 .s_ctrl = v4l2_subdev_s_ctrl,
5039 .s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
5040 .try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
5041 .g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
5042 .queryctrl = v4l2_subdev_queryctrl,
5043 .querymenu = v4l2_subdev_querymenu,
5044 .s_std = cx25840_s_std,
5045 .g_std = cx25840_g_std,
5046 .reset = cx25840_reset,
5047 .load_fw = cx25840_load_fw,
5048 .s_io_pin_config = common_s_io_pin_config,
5049#ifdef CONFIG_VIDEO_ADV_DEBUG
5050 .g_register = cx25840_g_register,
5051 .s_register = cx25840_s_register,
5052#endif
5053 .interrupt_service_routine = cx25840_irq_handler,
5054};
5055
5056static const struct v4l2_subdev_tuner_ops cx25840_tuner_ops = {
5057 .s_frequency = cx25840_s_frequency,
5058 .s_radio = cx25840_s_radio,
5059 .g_tuner = cx25840_g_tuner,
5060 .s_tuner = cx25840_s_tuner,
5061};
5062
5063static const struct v4l2_subdev_audio_ops cx25840_audio_ops = {
5064 .s_clock_freq = cx25840_s_clock_freq,
5065 .s_routing = cx25840_s_audio_routing,
5066 .s_stream = cx25840_s_audio_stream,
5067};
5068
5069static const struct v4l2_subdev_video_ops cx25840_video_ops = {
5070 .s_routing = cx25840_s_video_routing,
5071 .s_mbus_fmt = cx25840_s_mbus_fmt,
5072 .s_stream = cx25840_s_stream,
5073 .g_input_status = cx25840_g_input_status,
5074};
5075
5076static const struct v4l2_subdev_vbi_ops cx25840_vbi_ops = {
5077 .decode_vbi_line = cx25840_decode_vbi_line,
5078 .s_raw_fmt = cx25840_s_raw_fmt,
5079 .s_sliced_fmt = cx25840_s_sliced_fmt,
5080 .g_sliced_fmt = cx25840_g_sliced_fmt,
5081};
5082
5083static const struct v4l2_subdev_ops cx25840_ops = {
5084 .core = &cx25840_core_ops,
5085 .tuner = &cx25840_tuner_ops,
5086 .audio = &cx25840_audio_ops,
5087 .video = &cx25840_video_ops,
5088 .vbi = &cx25840_vbi_ops,
5089 .ir = &cx25840_ir_ops,
5090};
5091
5092
5093
5094static u32 get_cx2388x_ident(struct i2c_client *client)
5095{
5096 u32 ret;
5097
5098
5099 cx25840_write(client, 0x000, 0);
5100
5101
5102
5103
5104
5105
5106
5107 if (cx25840_read4(client, 0x204) & 0xffff) {
5108
5109
5110 ret = cx25840_read4(client, 0x300);
5111 if (((ret & 0xffff0000) >> 16) == (ret & 0xffff)) {
5112
5113 ret = CX23885_AV;
5114 } else {
5115
5116
5117 ret = CX23887_AV;
5118 }
5119 } else if (cx25840_read4(client, 0x300) & 0x0fffffff) {
5120
5121 ret = CX23888_AV;
5122 } else {
5123 v4l_err(client, "Unable to detect h/w, assuming cx23887\n");
5124 ret = CX23887_AV;
5125 }
5126
5127
5128 cx25840_write(client, 0x000, 2);
5129 return ret;
5130}
5131
5132static int cx25840_probe(struct i2c_client *client,
5133 const struct i2c_device_id *did)
5134{
5135 struct cx25840_state *state;
5136 struct v4l2_subdev *sd;
5137 int default_volume;
5138 u32 id;
5139 u16 device_id;
5140
5141
5142 if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
5143 return -EIO;
5144
5145 v4l_dbg(1, cx25840_debug, client, "detecting cx25840 client on address 0x%x\n", client->addr << 1);
5146
5147 device_id = cx25840_read(client, 0x101) << 8;
5148 device_id |= cx25840_read(client, 0x100);
5149 v4l_dbg(1, cx25840_debug, client, "device_id = 0x%04x\n", device_id);
5150
5151
5152
5153 if ((device_id & 0xff00) == 0x8300) {
5154 id = CX25836 + ((device_id >> 4) & 0xf) - 6;
5155 } else if ((device_id & 0xff00) == 0x8400) {
5156 id = CX25840 + ((device_id >> 4) & 0xf);
5157 } else if (device_id == 0x0000) {
5158 id = get_cx2388x_ident(client);
5159 } else if ((device_id & 0xfff0) == 0x5A30) {
5160
5161 id = CX2310X_AV;
5162 } else if ((device_id & 0xff) == (device_id >> 8)) {
5163 v4l_err(client,
5164 "likely a confused/unresponsive cx2388[578] A/V decoder"
5165 " found @ 0x%x (%s)\n",
5166 client->addr << 1, client->adapter->name);
5167 v4l_err(client, "A method to reset it from the cx25840 driver"
5168 " software is not known at this time\n");
5169 return -ENODEV;
5170 } else {
5171 v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
5172 return -ENODEV;
5173 }
5174
5175 state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL);
5176 if (state == NULL)
5177 return -ENOMEM;
5178
5179 sd = &state->sd;
5180 v4l2_i2c_subdev_init(sd, client, &cx25840_ops);
5181
5182 switch (id) {
5183 case CX23885_AV:
5184 v4l_info(client, "cx23885 A/V decoder found @ 0x%x (%s)\n",
5185 client->addr << 1, client->adapter->name);
5186 break;
5187 case CX23887_AV:
5188 v4l_info(client, "cx23887 A/V decoder found @ 0x%x (%s)\n",
5189 client->addr << 1, client->adapter->name);
5190 break;
5191 case CX23888_AV:
5192 v4l_info(client, "cx23888 A/V decoder found @ 0x%x (%s)\n",
5193 client->addr << 1, client->adapter->name);
5194 break;
5195 case CX2310X_AV:
5196 v4l_info(client, "cx%d A/V decoder found @ 0x%x (%s)\n",
5197 device_id, client->addr << 1, client->adapter->name);
5198 break;
5199 case CX25840:
5200 case CX25841:
5201 case CX25842:
5202 case CX25843:
5203
5204
5205 v4l_info(client, "cx25%3x-2%x found @ 0x%x (%s)\n",
5206 (device_id & 0xfff0) >> 4,
5207 (device_id & 0x0f) < 3 ? (device_id & 0x0f) + 1
5208 : (device_id & 0x0f),
5209 client->addr << 1, client->adapter->name);
5210 break;
5211 case CX25836:
5212 case CX25837:
5213 default:
5214 v4l_info(client, "cx25%3x-%x found @ 0x%x (%s)\n",
5215 (device_id & 0xfff0) >> 4, device_id & 0x0f,
5216 client->addr << 1, client->adapter->name);
5217 break;
5218 }
5219
5220 state->c = client;
5221 state->vid_input = CX25840_COMPOSITE7;
5222 state->aud_input = CX25840_AUDIO8;
5223 state->audclk_freq = 48000;
5224 state->audmode = V4L2_TUNER_MODE_LANG1;
5225 state->vbi_line_offset = 8;
5226 state->id = id;
5227 state->rev = device_id;
5228 v4l2_ctrl_handler_init(&state->hdl, 9);
5229 v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
5230 V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
5231 v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
5232 V4L2_CID_CONTRAST, 0, 127, 1, 64);
5233 v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
5234 V4L2_CID_SATURATION, 0, 127, 1, 64);
5235 v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
5236 V4L2_CID_HUE, -128, 127, 1, 0);
5237 if (!is_cx2583x(state)) {
5238 default_volume = cx25840_read(client, 0x8d4);
5239
5240
5241
5242
5243
5244 if (default_volume > 228) {
5245
5246 default_volume = 228;
5247 cx25840_write(client, 0x8d4, 228);
5248 }
5249 else if (default_volume < 20) {
5250
5251 default_volume = 20;
5252 cx25840_write(client, 0x8d4, 20);
5253 }
5254 default_volume = (((228 - default_volume) >> 1) + 23) << 9;
5255
5256 state->volume = v4l2_ctrl_new_std(&state->hdl,
5257 &cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_VOLUME,
5258 0, 65535, 65535 / 100, default_volume);
5259 state->mute = v4l2_ctrl_new_std(&state->hdl,
5260 &cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_MUTE,
5261 0, 1, 1, 0);
5262 v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
5263 V4L2_CID_AUDIO_BALANCE,
5264 0, 65535, 65535 / 100, 32768);
5265 v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
5266 V4L2_CID_AUDIO_BASS,
5267 0, 65535, 65535 / 100, 32768);
5268 v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
5269 V4L2_CID_AUDIO_TREBLE,
5270 0, 65535, 65535 / 100, 32768);
5271 }
5272 sd->ctrl_handler = &state->hdl;
5273 if (state->hdl.error) {
5274 int err = state->hdl.error;
5275
5276 v4l2_ctrl_handler_free(&state->hdl);
5277 return err;
5278 }
5279 if (!is_cx2583x(state))
5280 v4l2_ctrl_cluster(2, &state->volume);
5281 v4l2_ctrl_handler_setup(&state->hdl);
5282
5283 if (client->dev.platform_data) {
5284 struct cx25840_platform_data *pdata = client->dev.platform_data;
5285
5286 state->pvr150_workaround = pdata->pvr150_workaround;
5287 }
5288
5289 cx25840_ir_probe(sd);
5290 return 0;
5291}
5292
5293static int cx25840_remove(struct i2c_client *client)
5294{
5295 struct v4l2_subdev *sd = i2c_get_clientdata(client);
5296 struct cx25840_state *state = to_state(sd);
5297
5298 cx25840_ir_remove(sd);
5299 v4l2_device_unregister_subdev(sd);
5300 v4l2_ctrl_handler_free(&state->hdl);
5301 return 0;
5302}
5303
5304static const struct i2c_device_id cx25840_id[] = {
5305 { "cx25840", 0 },
5306 { }
5307};
5308MODULE_DEVICE_TABLE(i2c, cx25840_id);
5309
5310static struct i2c_driver cx25840_driver = {
5311 .driver = {
5312 .owner = THIS_MODULE,
5313 .name = "cx25840",
5314 },
5315 .probe = cx25840_probe,
5316 .remove = cx25840_remove,
5317 .id_table = cx25840_id,
5318};
5319
5320module_i2c_driver(cx25840_driver);
5321