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