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