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