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
52MODULE_DESCRIPTION("Conexant CX25840 audio/video decoder driver");
53MODULE_AUTHOR("Ulf Eklund, Chris Kennedy, Hans Verkuil, Tyler Trafford");
54MODULE_LICENSE("GPL");
55
56#define CX25840_VID_INT_STAT_REG 0x410
57#define CX25840_VID_INT_STAT_BITS 0x0000ffff
58#define CX25840_VID_INT_MASK_BITS 0xffff0000
59#define CX25840_VID_INT_MASK_SHFT 16
60#define CX25840_VID_INT_MASK_REG 0x412
61
62#define CX23885_AUD_MC_INT_MASK_REG 0x80c
63#define CX23885_AUD_MC_INT_STAT_BITS 0xffff0000
64#define CX23885_AUD_MC_INT_CTRL_BITS 0x0000ffff
65#define CX23885_AUD_MC_INT_STAT_SHFT 16
66
67#define CX25840_AUD_INT_CTRL_REG 0x812
68#define CX25840_AUD_INT_STAT_REG 0x813
69
70#define CX23885_PIN_CTRL_IRQ_REG 0x123
71#define CX23885_PIN_CTRL_IRQ_IR_STAT  0x40
72#define CX23885_PIN_CTRL_IRQ_AUD_STAT 0x20
73#define CX23885_PIN_CTRL_IRQ_VID_STAT 0x10
74
75#define CX25840_IR_STATS_REG	0x210
76#define CX25840_IR_IRQEN_REG	0x214
77
78static int cx25840_debug;
79
80module_param_named(debug,cx25840_debug, int, 0644);
81
82MODULE_PARM_DESC(debug, "Debugging messages [0=Off (default) 1=On]");
83
84
85/* ----------------------------------------------------------------------- */
86static void cx23888_std_setup(struct i2c_client *client);
87
88int cx25840_write(struct i2c_client *client, u16 addr, u8 value)
89{
90	u8 buffer[3];
91	buffer[0] = addr >> 8;
92	buffer[1] = addr & 0xff;
93	buffer[2] = value;
94	return i2c_master_send(client, buffer, 3);
95}
96
97int cx25840_write4(struct i2c_client *client, u16 addr, u32 value)
98{
99	u8 buffer[6];
100	buffer[0] = addr >> 8;
101	buffer[1] = addr & 0xff;
102	buffer[2] = value & 0xff;
103	buffer[3] = (value >> 8) & 0xff;
104	buffer[4] = (value >> 16) & 0xff;
105	buffer[5] = value >> 24;
106	return i2c_master_send(client, buffer, 6);
107}
108
109u8 cx25840_read(struct i2c_client * client, u16 addr)
110{
111	struct i2c_msg msgs[2];
112	u8 tx_buf[2], rx_buf[1];
113
114	/* 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
134u32 cx25840_read4(struct i2c_client * client, u16 addr)
135{
136	struct i2c_msg msgs[2];
137	u8 tx_buf[2], rx_buf[4];
138
139	/* 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
160int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask,
161		   u8 or_value)
162{
163	return cx25840_write(client, addr,
164			     (cx25840_read(client, addr) & and_mask) |
165			     or_value);
166}
167
168int cx25840_and_or4(struct i2c_client *client, u16 addr, u32 and_mask,
169		    u32 or_value)
170{
171	return cx25840_write4(client, addr,
172			      (cx25840_read4(client, addr) & and_mask) |
173			      or_value);
174}
175
176/* ----------------------------------------------------------------------- */
177
178static int set_input(struct i2c_client *client, enum cx25840_video_input vid_input,
179						enum cx25840_audio_input aud_input);
180
181/* ----------------------------------------------------------------------- */
182
183static int cx23885_s_io_pin_config(struct v4l2_subdev *sd, size_t n,
184				      struct v4l2_subdev_io_pin_config *p)
185{
186	struct i2c_client *client = v4l2_get_subdevdata(sd);
187	int i;
188	u32 pin_ctrl;
189	u8 gpio_oe, gpio_data, strength;
190
191	pin_ctrl = cx25840_read4(client, 0x120);
192	gpio_oe = cx25840_read(client, 0x160);
193	gpio_data = cx25840_read(client, 0x164);
194
195	for (i = 0; i < n; i++) {
196		strength = p[i].strength;
197		if (strength > CX25840_PIN_DRIVE_FAST)
198			strength = CX25840_PIN_DRIVE_FAST;
199
200		switch (p[i].pin) {
201		case CX23885_PIN_IRQ_N_GPIO16:
202			if (p[i].function != CX23885_PAD_IRQ_N) {
203				/* GPIO16 */
204				pin_ctrl &= ~(0x1 << 25);
205			} else {
206				/* IRQ_N */
207				if (p[i].flags &
208					(V4L2_SUBDEV_IO_PIN_DISABLE |
209					 V4L2_SUBDEV_IO_PIN_INPUT)) {
210					pin_ctrl &= ~(0x1 << 25);
211				} else {
212					pin_ctrl |= (0x1 << 25);
213				}
214				if (p[i].flags &
215					V4L2_SUBDEV_IO_PIN_ACTIVE_LOW) {
216					pin_ctrl &= ~(0x1 << 24);
217				} else {
218					pin_ctrl |= (0x1 << 24);
219				}
220			}
221			break;
222		case CX23885_PIN_IR_RX_GPIO19:
223			if (p[i].function != CX23885_PAD_GPIO19) {
224				/* IR_RX */
225				gpio_oe |= (0x1 << 0);
226				pin_ctrl &= ~(0x3 << 18);
227				pin_ctrl |= (strength << 18);
228			} else {
229				/* GPIO19 */
230				gpio_oe &= ~(0x1 << 0);
231				if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
232					gpio_data &= ~(0x1 << 0);
233					gpio_data |= ((p[i].value & 0x1) << 0);
234				}
235				pin_ctrl &= ~(0x3 << 12);
236				pin_ctrl |= (strength << 12);
237			}
238			break;
239		case CX23885_PIN_IR_TX_GPIO20:
240			if (p[i].function != CX23885_PAD_GPIO20) {
241				/* IR_TX */
242				gpio_oe |= (0x1 << 1);
243				if (p[i].flags & V4L2_SUBDEV_IO_PIN_DISABLE)
244					pin_ctrl &= ~(0x1 << 10);
245				else
246					pin_ctrl |= (0x1 << 10);
247				pin_ctrl &= ~(0x3 << 18);
248				pin_ctrl |= (strength << 18);
249			} else {
250				/* GPIO20 */
251				gpio_oe &= ~(0x1 << 1);
252				if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
253					gpio_data &= ~(0x1 << 1);
254					gpio_data |= ((p[i].value & 0x1) << 1);
255				}
256				pin_ctrl &= ~(0x3 << 12);
257				pin_ctrl |= (strength << 12);
258			}
259			break;
260		case CX23885_PIN_I2S_SDAT_GPIO21:
261			if (p[i].function != CX23885_PAD_GPIO21) {
262				/* I2S_SDAT */
263				/* TODO: Input or Output config */
264				gpio_oe |= (0x1 << 2);
265				pin_ctrl &= ~(0x3 << 22);
266				pin_ctrl |= (strength << 22);
267			} else {
268				/* GPIO21 */
269				gpio_oe &= ~(0x1 << 2);
270				if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
271					gpio_data &= ~(0x1 << 2);
272					gpio_data |= ((p[i].value & 0x1) << 2);
273				}
274				pin_ctrl &= ~(0x3 << 12);
275				pin_ctrl |= (strength << 12);
276			}
277			break;
278		case CX23885_PIN_I2S_WCLK_GPIO22:
279			if (p[i].function != CX23885_PAD_GPIO22) {
280				/* I2S_WCLK */
281				/* TODO: Input or Output config */
282				gpio_oe |= (0x1 << 3);
283				pin_ctrl &= ~(0x3 << 22);
284				pin_ctrl |= (strength << 22);
285			} else {
286				/* GPIO22 */
287				gpio_oe &= ~(0x1 << 3);
288				if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
289					gpio_data &= ~(0x1 << 3);
290					gpio_data |= ((p[i].value & 0x1) << 3);
291				}
292				pin_ctrl &= ~(0x3 << 12);
293				pin_ctrl |= (strength << 12);
294			}
295			break;
296		case CX23885_PIN_I2S_BCLK_GPIO23:
297			if (p[i].function != CX23885_PAD_GPIO23) {
298				/* I2S_BCLK */
299				/* TODO: Input or Output config */
300				gpio_oe |= (0x1 << 4);
301				pin_ctrl &= ~(0x3 << 22);
302				pin_ctrl |= (strength << 22);
303			} else {
304				/* GPIO23 */
305				gpio_oe &= ~(0x1 << 4);
306				if (p[i].flags & V4L2_SUBDEV_IO_PIN_SET_VALUE) {
307					gpio_data &= ~(0x1 << 4);
308					gpio_data |= ((p[i].value & 0x1) << 4);
309				}
310				pin_ctrl &= ~(0x3 << 12);
311				pin_ctrl |= (strength << 12);
312			}
313			break;
314		}
315	}
316
317	cx25840_write(client, 0x164, gpio_data);
318	cx25840_write(client, 0x160, gpio_oe);
319	cx25840_write4(client, 0x120, pin_ctrl);
320	return 0;
321}
322
323static int common_s_io_pin_config(struct v4l2_subdev *sd, size_t n,
324				      struct v4l2_subdev_io_pin_config *pincfg)
325{
326	struct cx25840_state *state = to_state(sd);
327
328	if (is_cx2388x(state))
329		return cx23885_s_io_pin_config(sd, n, pincfg);
330	return 0;
331}
332
333/* ----------------------------------------------------------------------- */
334
335static 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
351static 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
364static void cx25836_initialize(struct i2c_client *client)
365{
366	/* reset configuration is described on page 3-77 of the CX25836 datasheet */
367	/* 2. */
368	cx25840_and_or(client, 0x000, ~0x01, 0x01);
369	cx25840_and_or(client, 0x000, ~0x01, 0x00);
370	/* 3a. */
371	cx25840_and_or(client, 0x15a, ~0x70, 0x00);
372	/* 3b. */
373	cx25840_and_or(client, 0x15b, ~0x1e, 0x06);
374	/* 3c. */
375	cx25840_and_or(client, 0x159, ~0x02, 0x02);
376	/* 3d. */
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
389static void cx25840_work_handler(struct work_struct *work)
390{
391	struct cx25840_state *state = container_of(work, struct cx25840_state, fw_work);
392	cx25840_loadfw(state->c);
393	wake_up(&state->fw_wait);
394}
395
396static void cx25840_initialize(struct i2c_client *client)
397{
398	DEFINE_WAIT(wait);
399	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
400	struct workqueue_struct *q;
401
402	/* 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
464static void cx23885_initialize(struct i2c_client *client)
465{
466	DEFINE_WAIT(wait);
467	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
468	struct workqueue_struct *q;
469
470	/*
471	 * 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
695static void cx231xx_initialize(struct i2c_client *client)
696{
697	DEFINE_WAIT(wait);
698	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
699	struct workqueue_struct *q;
700
701	/* Internal Reset */
702	cx25840_and_or(client, 0x102, ~0x01, 0x01);
703	cx25840_and_or(client, 0x102, ~0x01, 0x00);
704
705	/* Stop microcontroller */
706	cx25840_and_or(client, 0x803, ~0x10, 0x00);
707
708	/* DIF in reset? */
709	cx25840_write(client, 0x398, 0);
710
711	/* Trust the default xtal, no division */
712	/* This changes for the cx23888 products */
713	cx25840_write(client, 0x2, 0x76);
714
715	/* Bring down the regulator for AUX clk */
716	cx25840_write(client, 0x1, 0x40);
717
718	/* Disable DIF bypass */
719	cx25840_write4(client, 0x33c, 0x00000001);
720
721	/* DIF Src phase inc */
722	cx25840_write4(client, 0x340, 0x0df7df83);
723
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
773void cx25840_std_setup(struct i2c_client *client)
774{
775	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
776	v4l2_std_id std = state->std;
777	int hblank, hactive, burst, vblank, vactive, sc;
778	int vblank656, src_decimation;
779	int luma_lpf, uv_lpf, comb;
780	u32 pll_int, pll_frac, pll_post;
781
782	/* 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		      (((hblank >> 8) & 0x3) | (hactive << 4)) & 0xff);
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		      (((vblank >> 8) & 0x3) | (vactive << 4)) & 0xff);
892	cx25840_write(client, 0x476, vactive >> 4);
893	cx25840_write(client, 0x477, vblank656);
894
895	/* Sets src decimation rate */
896	cx25840_write(client, 0x478, src_decimation & 0xff);
897	cx25840_write(client, 0x479, (src_decimation >> 8) & 0xff);
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, (sc >> 8) & 0xff);
908	cx25840_write(client, 0x47e, (sc >> 16) & 0xff);
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
922static void input_change(struct i2c_client *client)
923{
924	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
925	v4l2_std_id std = state->std;
926
927	/* 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
997static int set_input(struct i2c_client *client, enum cx25840_video_input vid_input,
998						enum cx25840_audio_input aud_input)
999{
1000	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
1001	u8 is_composite = (vid_input >= CX25840_COMPOSITE1 &&
1002			   vid_input <= CX25840_COMPOSITE8);
1003	u8 is_component = (vid_input & CX25840_COMPONENT_ON) ==
1004			CX25840_COMPONENT_ON;
1005	u8 is_dif = (vid_input & CX25840_DIF_ON) ==
1006			CX25840_DIF_ON;
1007	u8 is_svideo = (vid_input & CX25840_SVIDEO_ON) ==
1008			CX25840_SVIDEO_ON;
1009	int luma = vid_input & 0xf0;
1010	int chroma = vid_input & 0xf00;
1011	u8 reg;
1012	u32 val;
1013
1014	v4l_dbg(1, cx25840_debug, client,
1015		"decoder set video input %d, audio input %d\n",
1016		vid_input, aud_input);
1017
1018	if (vid_input >= CX25840_VIN1_CH1) {
1019		v4l_dbg(1, cx25840_debug, client, "vid_input 0x%x\n",
1020			vid_input);
1021		reg = vid_input & 0xff;
1022		is_composite = !is_component &&
1023			((vid_input & CX25840_SVIDEO_ON) != CX25840_SVIDEO_ON);
1024
1025		v4l_dbg(1, cx25840_debug, client, "mux cfg 0x%x comp=%d\n",
1026			reg, is_composite);
1027	} else if (is_composite) {
1028		reg = 0xf0 + (vid_input - CX25840_COMPOSITE1);
1029	} else {
1030		if ((vid_input & ~0xff0) ||
1031		    luma < CX25840_SVIDEO_LUMA1 || luma > CX25840_SVIDEO_LUMA8 ||
1032		    chroma < CX25840_SVIDEO_CHROMA4 || chroma > CX25840_SVIDEO_CHROMA8) {
1033			v4l_err(client, "0x%04x is not a valid video input!\n",
1034				vid_input);
1035			return -EINVAL;
1036		}
1037		reg = 0xf0 + ((luma - CX25840_SVIDEO_LUMA1) >> 4);
1038		if (chroma >= CX25840_SVIDEO_CHROMA7) {
1039			reg &= 0x3f;
1040			reg |= (chroma - CX25840_SVIDEO_CHROMA7) >> 2;
1041		} else {
1042			reg &= 0xcf;
1043			reg |= (chroma - CX25840_SVIDEO_CHROMA4) >> 4;
1044		}
1045	}
1046
1047	/* 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
1274static 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
1328static int cx25840_s_ctrl(struct v4l2_ctrl *ctrl)
1329{
1330	struct v4l2_subdev *sd = to_sd(ctrl);
1331	struct cx25840_state *state = to_state(sd);
1332	struct i2c_client *client = v4l2_get_subdevdata(sd);
1333
1334	switch (ctrl->id) {
1335	case V4L2_CID_BRIGHTNESS:
1336		cx25840_write(client, 0x414, ctrl->val - 128);
1337		break;
1338
1339	case V4L2_CID_CONTRAST:
1340		cx25840_write(client, 0x415, ctrl->val << 1);
1341		break;
1342
1343	case V4L2_CID_SATURATION:
1344		if (is_cx23888(state)) {
1345			cx25840_write(client, 0x418, ctrl->val << 1);
1346			cx25840_write(client, 0x419, ctrl->val << 1);
1347		} else {
1348			cx25840_write(client, 0x420, ctrl->val << 1);
1349			cx25840_write(client, 0x421, ctrl->val << 1);
1350		}
1351		break;
1352
1353	case V4L2_CID_HUE:
1354		if (is_cx23888(state))
1355			cx25840_write(client, 0x41a, ctrl->val);
1356		else
1357			cx25840_write(client, 0x422, ctrl->val);
1358		break;
1359
1360	default:
1361		return -EINVAL;
1362	}
1363
1364	return 0;
1365}
1366
1367/* ----------------------------------------------------------------------- */
1368
1369static int cx25840_s_mbus_fmt(struct v4l2_subdev *sd, struct v4l2_mbus_framefmt *fmt)
1370{
1371	struct cx25840_state *state = to_state(sd);
1372	struct i2c_client *client = v4l2_get_subdevdata(sd);
1373	int HSC, VSC, Vsrc, Hsrc, filter, Vlines;
1374	int is_50Hz = !(state->std & V4L2_STD_525_60);
1375
1376	if (fmt->code != MEDIA_BUS_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
1437static void log_video_status(struct i2c_client *client)
1438{
1439	static const char *const fmt_strs[] = {
1440		"0x0",
1441		"NTSC-M", "NTSC-J", "NTSC-4.43",
1442		"PAL-BDGHI", "PAL-M", "PAL-N", "PAL-Nc", "PAL-60",
1443		"0x9", "0xA", "0xB",
1444		"SECAM",
1445		"0xD", "0xE", "0xF"
1446	};
1447
1448	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
1449	u8 vidfmt_sel = cx25840_read(client, 0x400) & 0xf;
1450	u8 gen_stat1 = cx25840_read(client, 0x40d);
1451	u8 gen_stat2 = cx25840_read(client, 0x40e);
1452	int vid_input = state->vid_input;
1453
1454	v4l_info(client, "Video signal:              %spresent\n",
1455		    (gen_stat2 & 0x20) ? "" : "not ");
1456	v4l_info(client, "Detected format:           %s\n",
1457		    fmt_strs[gen_stat1 & 0xf]);
1458
1459	v4l_info(client, "Specified standard:        %s\n",
1460		    vidfmt_sel ? fmt_strs[vidfmt_sel] : "automatic detection");
1461
1462	if (vid_input >= CX25840_COMPOSITE1 &&
1463	    vid_input <= CX25840_COMPOSITE8) {
1464		v4l_info(client, "Specified video input:     Composite %d\n",
1465			vid_input - CX25840_COMPOSITE1 + 1);
1466	} else {
1467		v4l_info(client, "Specified video input:     S-Video (Luma In%d, Chroma In%d)\n",
1468			(vid_input & 0xf0) >> 4, (vid_input & 0xf00) >> 8);
1469	}
1470
1471	v4l_info(client, "Specified audioclock freq: %d Hz\n", state->audclk_freq);
1472}
1473
1474/* ----------------------------------------------------------------------- */
1475
1476static void log_audio_status(struct i2c_client *client)
1477{
1478	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
1479	u8 download_ctl = cx25840_read(client, 0x803);
1480	u8 mod_det_stat0 = cx25840_read(client, 0x804);
1481	u8 mod_det_stat1 = cx25840_read(client, 0x805);
1482	u8 audio_config = cx25840_read(client, 0x808);
1483	u8 pref_mode = cx25840_read(client, 0x809);
1484	u8 afc0 = cx25840_read(client, 0x80b);
1485	u8 mute_ctl = cx25840_read(client, 0x8d3);
1486	int aud_input = state->aud_input;
1487	char *p;
1488
1489	switch (mod_det_stat0) {
1490	case 0x00: p = "mono"; break;
1491	case 0x01: p = "stereo"; break;
1492	case 0x02: p = "dual"; break;
1493	case 0x04: p = "tri"; break;
1494	case 0x10: p = "mono with SAP"; break;
1495	case 0x11: p = "stereo with SAP"; break;
1496	case 0x12: p = "dual with SAP"; break;
1497	case 0x14: p = "tri with SAP"; break;
1498	case 0xfe: p = "forced mode"; break;
1499	default: p = "not defined";
1500	}
1501	v4l_info(client, "Detected audio mode:       %s\n", p);
1502
1503	switch (mod_det_stat1) {
1504	case 0x00: p = "not defined"; break;
1505	case 0x01: p = "EIAJ"; break;
1506	case 0x02: p = "A2-M"; break;
1507	case 0x03: p = "A2-BG"; break;
1508	case 0x04: p = "A2-DK1"; break;
1509	case 0x05: p = "A2-DK2"; break;
1510	case 0x06: p = "A2-DK3"; break;
1511	case 0x07: p = "A1 (6.0 MHz FM Mono)"; break;
1512	case 0x08: p = "AM-L"; break;
1513	case 0x09: p = "NICAM-BG"; break;
1514	case 0x0a: p = "NICAM-DK"; break;
1515	case 0x0b: p = "NICAM-I"; break;
1516	case 0x0c: p = "NICAM-L"; break;
1517	case 0x0d: p = "BTSC/EIAJ/A2-M Mono (4.5 MHz FMMono)"; break;
1518	case 0x0e: p = "IF FM Radio"; break;
1519	case 0x0f: p = "BTSC"; break;
1520	case 0x10: p = "high-deviation FM"; break;
1521	case 0x11: p = "very high-deviation FM"; break;
1522	case 0xfd: p = "unknown audio standard"; break;
1523	case 0xfe: p = "forced audio standard"; break;
1524	case 0xff: p = "no detected audio standard"; break;
1525	default: p = "not defined";
1526	}
1527	v4l_info(client, "Detected audio standard:   %s\n", p);
1528	v4l_info(client, "Audio microcontroller:     %s\n",
1529		    (download_ctl & 0x10) ?
1530				((mute_ctl & 0x2) ? "detecting" : "running") : "stopped");
1531
1532	switch (audio_config >> 4) {
1533	case 0x00: p = "undefined"; break;
1534	case 0x01: p = "BTSC"; break;
1535	case 0x02: p = "EIAJ"; break;
1536	case 0x03: p = "A2-M"; break;
1537	case 0x04: p = "A2-BG"; break;
1538	case 0x05: p = "A2-DK1"; break;
1539	case 0x06: p = "A2-DK2"; break;
1540	case 0x07: p = "A2-DK3"; break;
1541	case 0x08: p = "A1 (6.0 MHz FM Mono)"; break;
1542	case 0x09: p = "AM-L"; break;
1543	case 0x0a: p = "NICAM-BG"; break;
1544	case 0x0b: p = "NICAM-DK"; break;
1545	case 0x0c: p = "NICAM-I"; break;
1546	case 0x0d: p = "NICAM-L"; break;
1547	case 0x0e: p = "FM radio"; break;
1548	case 0x0f: p = "automatic detection"; break;
1549	default: p = "undefined";
1550	}
1551	v4l_info(client, "Configured audio standard: %s\n", p);
1552
1553	if ((audio_config >> 4) < 0xF) {
1554		switch (audio_config & 0xF) {
1555		case 0x00: p = "MONO1 (LANGUAGE A/Mono L+R channel for BTSC, EIAJ, A2)"; break;
1556		case 0x01: p = "MONO2 (LANGUAGE B)"; break;
1557		case 0x02: p = "MONO3 (STEREO forced MONO)"; break;
1558		case 0x03: p = "MONO4 (NICAM ANALOG-Language C/Analog Fallback)"; break;
1559		case 0x04: p = "STEREO"; break;
1560		case 0x05: p = "DUAL1 (AB)"; break;
1561		case 0x06: p = "DUAL2 (AC) (FM)"; break;
1562		case 0x07: p = "DUAL3 (BC) (FM)"; break;
1563		case 0x08: p = "DUAL4 (AC) (AM)"; break;
1564		case 0x09: p = "DUAL5 (BC) (AM)"; break;
1565		case 0x0a: p = "SAP"; break;
1566		default: p = "undefined";
1567		}
1568		v4l_info(client, "Configured audio mode:     %s\n", p);
1569	} else {
1570		switch (audio_config & 0xF) {
1571		case 0x00: p = "BG"; break;
1572		case 0x01: p = "DK1"; break;
1573		case 0x02: p = "DK2"; break;
1574		case 0x03: p = "DK3"; break;
1575		case 0x04: p = "I"; break;
1576		case 0x05: p = "L"; break;
1577		case 0x06: p = "BTSC"; break;
1578		case 0x07: p = "EIAJ"; break;
1579		case 0x08: p = "A2-M"; break;
1580		case 0x09: p = "FM Radio"; break;
1581		case 0x0f: p = "automatic standard and mode detection"; break;
1582		default: p = "undefined";
1583		}
1584		v4l_info(client, "Configured audio system:   %s\n", p);
1585	}
1586
1587	if (aud_input) {
1588		v4l_info(client, "Specified audio input:     Tuner (In%d)\n", aud_input);
1589	} else {
1590		v4l_info(client, "Specified audio input:     External\n");
1591	}
1592
1593	switch (pref_mode & 0xf) {
1594	case 0: p = "mono/language A"; break;
1595	case 1: p = "language B"; break;
1596	case 2: p = "language C"; break;
1597	case 3: p = "analog fallback"; break;
1598	case 4: p = "stereo"; break;
1599	case 5: p = "language AC"; break;
1600	case 6: p = "language BC"; break;
1601	case 7: p = "language AB"; break;
1602	default: p = "undefined";
1603	}
1604	v4l_info(client, "Preferred audio mode:      %s\n", p);
1605
1606	if ((audio_config & 0xf) == 0xf) {
1607		switch ((afc0 >> 3) & 0x3) {
1608		case 0: p = "system DK"; break;
1609		case 1: p = "system L"; break;
1610		case 2: p = "autodetect"; break;
1611		default: p = "undefined";
1612		}
1613		v4l_info(client, "Selected 65 MHz format:    %s\n", p);
1614
1615		switch (afc0 & 0x7) {
1616		case 0: p = "chroma"; break;
1617		case 1: p = "BTSC"; break;
1618		case 2: p = "EIAJ"; break;
1619		case 3: p = "A2-M"; break;
1620		case 4: p = "autodetect"; break;
1621		default: p = "undefined";
1622		}
1623		v4l_info(client, "Selected 45 MHz format:    %s\n", p);
1624	}
1625}
1626
1627/* ----------------------------------------------------------------------- */
1628
1629/* 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.  */
1639static int cx25840_load_fw(struct v4l2_subdev *sd)
1640{
1641	struct cx25840_state *state = to_state(sd);
1642	struct i2c_client *client = v4l2_get_subdevdata(sd);
1643
1644	if (!state->is_initialized) {
1645		/* 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
1660static int cx25840_g_register(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg)
1661{
1662	struct i2c_client *client = v4l2_get_subdevdata(sd);
1663
1664	reg->size = 1;
1665	reg->val = cx25840_read(client, reg->reg & 0x0fff);
1666	return 0;
1667}
1668
1669static int cx25840_s_register(struct v4l2_subdev *sd, const struct v4l2_dbg_register *reg)
1670{
1671	struct i2c_client *client = v4l2_get_subdevdata(sd);
1672
1673	cx25840_write(client, reg->reg & 0x0fff, reg->val & 0xff);
1674	return 0;
1675}
1676#endif
1677
1678static int cx25840_s_audio_stream(struct v4l2_subdev *sd, int enable)
1679{
1680	struct cx25840_state *state = to_state(sd);
1681	struct i2c_client *client = v4l2_get_subdevdata(sd);
1682	u8 v;
1683
1684	if (is_cx2583x(state) || is_cx2388x(state) || is_cx231xx(state))
1685		return 0;
1686
1687	v4l_dbg(1, cx25840_debug, client, "%s audio output\n",
1688			enable ? "enable" : "disable");
1689
1690	if (enable) {
1691		v = cx25840_read(client, 0x115) | 0x80;
1692		cx25840_write(client, 0x115, v);
1693		v = cx25840_read(client, 0x116) | 0x03;
1694		cx25840_write(client, 0x116, v);
1695	} else {
1696		v = cx25840_read(client, 0x115) & ~(0x80);
1697		cx25840_write(client, 0x115, v);
1698		v = cx25840_read(client, 0x116) & ~(0x03);
1699		cx25840_write(client, 0x116, v);
1700	}
1701	return 0;
1702}
1703
1704static int cx25840_s_stream(struct v4l2_subdev *sd, int enable)
1705{
1706	struct cx25840_state *state = to_state(sd);
1707	struct i2c_client *client = v4l2_get_subdevdata(sd);
1708	u8 v;
1709
1710	v4l_dbg(1, cx25840_debug, client, "%s video output\n",
1711			enable ? "enable" : "disable");
1712	if (enable) {
1713		if (is_cx2388x(state) || is_cx231xx(state)) {
1714			v = cx25840_read(client, 0x421) | 0x0b;
1715			cx25840_write(client, 0x421, v);
1716		} else {
1717			v = cx25840_read(client, 0x115) | 0x0c;
1718			cx25840_write(client, 0x115, v);
1719			v = cx25840_read(client, 0x116) | 0x04;
1720			cx25840_write(client, 0x116, v);
1721		}
1722	} else {
1723		if (is_cx2388x(state) || is_cx231xx(state)) {
1724			v = cx25840_read(client, 0x421) & ~(0x0b);
1725			cx25840_write(client, 0x421, v);
1726		} else {
1727			v = cx25840_read(client, 0x115) & ~(0x0c);
1728			cx25840_write(client, 0x115, v);
1729			v = cx25840_read(client, 0x116) & ~(0x04);
1730			cx25840_write(client, 0x116, v);
1731		}
1732	}
1733	return 0;
1734}
1735
1736/* Query the current detected video format */
1737static int cx25840_g_std(struct v4l2_subdev *sd, v4l2_std_id *std)
1738{
1739	struct i2c_client *client = v4l2_get_subdevdata(sd);
1740
1741	v4l2_std_id stds[] = {
1742		/* 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
1771static 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
1786static int cx25840_s_std(struct v4l2_subdev *sd, v4l2_std_id std)
1787{
1788	struct cx25840_state *state = to_state(sd);
1789	struct i2c_client *client = v4l2_get_subdevdata(sd);
1790
1791	if (state->radio == 0 && state->std == std)
1792		return 0;
1793	state->radio = 0;
1794	state->std = std;
1795	return set_v4lstd(client);
1796}
1797
1798static int cx25840_s_radio(struct v4l2_subdev *sd)
1799{
1800	struct cx25840_state *state = to_state(sd);
1801
1802	state->radio = 1;
1803	return 0;
1804}
1805
1806static int cx25840_s_video_routing(struct v4l2_subdev *sd,
1807				   u32 input, u32 output, u32 config)
1808{
1809	struct cx25840_state *state = to_state(sd);
1810	struct i2c_client *client = v4l2_get_subdevdata(sd);
1811
1812	if (is_cx23888(state))
1813		cx23888_std_setup(client);
1814
1815	return set_input(client, input, state->aud_input);
1816}
1817
1818static int cx25840_s_audio_routing(struct v4l2_subdev *sd,
1819				   u32 input, u32 output, u32 config)
1820{
1821	struct cx25840_state *state = to_state(sd);
1822	struct i2c_client *client = v4l2_get_subdevdata(sd);
1823
1824	if (is_cx23888(state))
1825		cx23888_std_setup(client);
1826	return set_input(client, state->vid_input, input);
1827}
1828
1829static int cx25840_s_frequency(struct v4l2_subdev *sd, const struct v4l2_frequency *freq)
1830{
1831	struct i2c_client *client = v4l2_get_subdevdata(sd);
1832
1833	input_change(client);
1834	return 0;
1835}
1836
1837static int cx25840_g_tuner(struct v4l2_subdev *sd, struct v4l2_tuner *vt)
1838{
1839	struct cx25840_state *state = to_state(sd);
1840	struct i2c_client *client = v4l2_get_subdevdata(sd);
1841	u8 vpres = cx25840_read(client, 0x40e) & 0x20;
1842	u8 mode;
1843	int val = 0;
1844
1845	if (state->radio)
1846		return 0;
1847
1848	vt->signal = vpres ? 0xffff : 0x0;
1849	if (is_cx2583x(state))
1850		return 0;
1851
1852	vt->capability |=
1853		V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LANG1 |
1854		V4L2_TUNER_CAP_LANG2 | V4L2_TUNER_CAP_SAP;
1855
1856	mode = cx25840_read(client, 0x804);
1857
1858	/* 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
1875static int cx25840_s_tuner(struct v4l2_subdev *sd, const struct v4l2_tuner *vt)
1876{
1877	struct cx25840_state *state = to_state(sd);
1878	struct i2c_client *client = v4l2_get_subdevdata(sd);
1879
1880	if (state->radio || is_cx2583x(state))
1881		return 0;
1882
1883	switch (vt->audmode) {
1884		case V4L2_TUNER_MODE_MONO:
1885			/* 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
1916static int cx25840_reset(struct v4l2_subdev *sd, u32 val)
1917{
1918	struct cx25840_state *state = to_state(sd);
1919	struct i2c_client *client = v4l2_get_subdevdata(sd);
1920
1921	if (is_cx2583x(state))
1922		cx25836_initialize(client);
1923	else if (is_cx2388x(state))
1924		cx23885_initialize(client);
1925	else if (is_cx231xx(state))
1926		cx231xx_initialize(client);
1927	else
1928		cx25840_initialize(client);
1929	return 0;
1930}
1931
1932static int cx25840_log_status(struct v4l2_subdev *sd)
1933{
1934	struct cx25840_state *state = to_state(sd);
1935	struct i2c_client *client = v4l2_get_subdevdata(sd);
1936
1937	log_video_status(client);
1938	if (!is_cx2583x(state))
1939		log_audio_status(client);
1940	cx25840_ir_log_status(sd);
1941	v4l2_ctrl_handler_log_status(&state->hdl, sd->name);
1942	return 0;
1943}
1944
1945static int cx23885_irq_handler(struct v4l2_subdev *sd, u32 status,
1946			       bool *handled)
1947{
1948	struct cx25840_state *state = to_state(sd);
1949	struct i2c_client *c = v4l2_get_subdevdata(sd);
1950	u8 irq_stat, aud_stat, aud_en, ir_stat, ir_en;
1951	u32 vid_stat, aud_mc_stat;
1952	bool block_handled;
1953	int ret = 0;
1954
1955	irq_stat = cx25840_read(c, CX23885_PIN_CTRL_IRQ_REG);
1956	v4l_dbg(2, cx25840_debug, c, "AV Core IRQ status (entry): %s %s %s\n",
1957		irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT ? "ir" : "  ",
1958		irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT ? "aud" : "   ",
1959		irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT ? "vid" : "   ");
1960
1961	if ((is_cx23885(state) || is_cx23887(state))) {
1962		ir_stat = cx25840_read(c, CX25840_IR_STATS_REG);
1963		ir_en = cx25840_read(c, CX25840_IR_IRQEN_REG);
1964		v4l_dbg(2, cx25840_debug, c,
1965			"AV Core ir IRQ status: %#04x disables: %#04x\n",
1966			ir_stat, ir_en);
1967		if (irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT) {
1968			block_handled = false;
1969			ret = cx25840_ir_irq_handler(sd,
1970						     status, &block_handled);
1971			if (block_handled)
1972				*handled = true;
1973		}
1974	}
1975
1976	aud_stat = cx25840_read(c, CX25840_AUD_INT_STAT_REG);
1977	aud_en = cx25840_read(c, CX25840_AUD_INT_CTRL_REG);
1978	v4l_dbg(2, cx25840_debug, c,
1979		"AV Core audio IRQ status: %#04x disables: %#04x\n",
1980		aud_stat, aud_en);
1981	aud_mc_stat = cx25840_read4(c, CX23885_AUD_MC_INT_MASK_REG);
1982	v4l_dbg(2, cx25840_debug, c,
1983		"AV Core audio MC IRQ status: %#06x enables: %#06x\n",
1984		aud_mc_stat >> CX23885_AUD_MC_INT_STAT_SHFT,
1985		aud_mc_stat & CX23885_AUD_MC_INT_CTRL_BITS);
1986	if (irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT) {
1987		if (aud_stat) {
1988			cx25840_write(c, CX25840_AUD_INT_STAT_REG, aud_stat);
1989			*handled = true;
1990		}
1991	}
1992
1993	vid_stat = cx25840_read4(c, CX25840_VID_INT_STAT_REG);
1994	v4l_dbg(2, cx25840_debug, c,
1995		"AV Core video IRQ status: %#06x disables: %#06x\n",
1996		vid_stat & CX25840_VID_INT_STAT_BITS,
1997		vid_stat >> CX25840_VID_INT_MASK_SHFT);
1998	if (irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT) {
1999		if (vid_stat & CX25840_VID_INT_STAT_BITS) {
2000			cx25840_write4(c, CX25840_VID_INT_STAT_REG, vid_stat);
2001			*handled = true;
2002		}
2003	}
2004
2005	irq_stat = cx25840_read(c, CX23885_PIN_CTRL_IRQ_REG);
2006	v4l_dbg(2, cx25840_debug, c, "AV Core IRQ status (exit): %s %s %s\n",
2007		irq_stat & CX23885_PIN_CTRL_IRQ_IR_STAT ? "ir" : "  ",
2008		irq_stat & CX23885_PIN_CTRL_IRQ_AUD_STAT ? "aud" : "   ",
2009		irq_stat & CX23885_PIN_CTRL_IRQ_VID_STAT ? "vid" : "   ");
2010
2011	return ret;
2012}
2013
2014static int cx25840_irq_handler(struct v4l2_subdev *sd, u32 status,
2015			       bool *handled)
2016{
2017	struct cx25840_state *state = to_state(sd);
2018
2019	*handled = false;
2020
2021	/* 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
2051static void cx23885_dif_setup(struct i2c_client *client, u32 ifHz)
2052{
2053	u64 pll_freq;
2054	u32 pll_freq_word;
2055
2056	v4l_dbg(1, cx25840_debug, client, "%s(%d)\n", __func__, ifHz);
2057
2058	/* 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
4961static void cx23888_std_setup(struct i2c_client *client)
4962{
4963	struct cx25840_state *state = to_state(i2c_get_clientdata(client));
4964	v4l2_std_id std = state->std;
4965	u32 ifHz;
4966
4967	cx25840_write4(client, 0x478, 0x6628021F);
4968	cx25840_write4(client, 0x400, 0x0);
4969	cx25840_write4(client, 0x4b4, 0x20524030);
4970	cx25840_write4(client, 0x47c, 0x010a8263);
4971
4972	if (std & V4L2_STD_NTSC) {
4973		v4l_dbg(1, cx25840_debug, client, "%s() Selecting NTSC",
4974			__func__);
4975
4976		/* 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
5031static const struct v4l2_ctrl_ops cx25840_ctrl_ops = {
5032	.s_ctrl = cx25840_s_ctrl,
5033};
5034
5035static const struct v4l2_subdev_core_ops cx25840_core_ops = {
5036	.log_status = cx25840_log_status,
5037	.g_ctrl = v4l2_subdev_g_ctrl,
5038	.s_ctrl = v4l2_subdev_s_ctrl,
5039	.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
5040	.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
5041	.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
5042	.queryctrl = v4l2_subdev_queryctrl,
5043	.querymenu = v4l2_subdev_querymenu,
5044	.reset = cx25840_reset,
5045	.load_fw = cx25840_load_fw,
5046	.s_io_pin_config = common_s_io_pin_config,
5047#ifdef CONFIG_VIDEO_ADV_DEBUG
5048	.g_register = cx25840_g_register,
5049	.s_register = cx25840_s_register,
5050#endif
5051	.interrupt_service_routine = cx25840_irq_handler,
5052};
5053
5054static const struct v4l2_subdev_tuner_ops cx25840_tuner_ops = {
5055	.s_frequency = cx25840_s_frequency,
5056	.s_radio = cx25840_s_radio,
5057	.g_tuner = cx25840_g_tuner,
5058	.s_tuner = cx25840_s_tuner,
5059};
5060
5061static const struct v4l2_subdev_audio_ops cx25840_audio_ops = {
5062	.s_clock_freq = cx25840_s_clock_freq,
5063	.s_routing = cx25840_s_audio_routing,
5064	.s_stream = cx25840_s_audio_stream,
5065};
5066
5067static const struct v4l2_subdev_video_ops cx25840_video_ops = {
5068	.s_std = cx25840_s_std,
5069	.g_std = cx25840_g_std,
5070	.s_routing = cx25840_s_video_routing,
5071	.s_mbus_fmt = cx25840_s_mbus_fmt,
5072	.s_stream = cx25840_s_stream,
5073	.g_input_status = cx25840_g_input_status,
5074};
5075
5076static const struct v4l2_subdev_vbi_ops cx25840_vbi_ops = {
5077	.decode_vbi_line = cx25840_decode_vbi_line,
5078	.s_raw_fmt = cx25840_s_raw_fmt,
5079	.s_sliced_fmt = cx25840_s_sliced_fmt,
5080	.g_sliced_fmt = cx25840_g_sliced_fmt,
5081};
5082
5083static const struct v4l2_subdev_ops cx25840_ops = {
5084	.core = &cx25840_core_ops,
5085	.tuner = &cx25840_tuner_ops,
5086	.audio = &cx25840_audio_ops,
5087	.video = &cx25840_video_ops,
5088	.vbi = &cx25840_vbi_ops,
5089	.ir = &cx25840_ir_ops,
5090};
5091
5092/* ----------------------------------------------------------------------- */
5093
5094static u32 get_cx2388x_ident(struct i2c_client *client)
5095{
5096	u32 ret;
5097
5098	/* 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
5132static int cx25840_probe(struct i2c_client *client,
5133			 const struct i2c_device_id *did)
5134{
5135	struct cx25840_state *state;
5136	struct v4l2_subdev *sd;
5137	int default_volume;
5138	u32 id;
5139	u16 device_id;
5140#if defined(CONFIG_MEDIA_CONTROLLER)
5141	int ret;
5142#endif
5143
5144	/* Check if the adapter supports the needed features */
5145	if (!i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE_DATA))
5146		return -EIO;
5147
5148	v4l_dbg(1, cx25840_debug, client, "detecting cx25840 client on address 0x%x\n", client->addr << 1);
5149
5150	device_id = cx25840_read(client, 0x101) << 8;
5151	device_id |= cx25840_read(client, 0x100);
5152	v4l_dbg(1, cx25840_debug, client, "device_id = 0x%04x\n", device_id);
5153
5154	/* The high byte of the device ID should be
5155	 * 0x83 for the cx2583x and 0x84 for the cx2584x */
5156	if ((device_id & 0xff00) == 0x8300) {
5157		id = CX25836 + ((device_id >> 4) & 0xf) - 6;
5158	} else if ((device_id & 0xff00) == 0x8400) {
5159		id = CX25840 + ((device_id >> 4) & 0xf);
5160	} else if (device_id == 0x0000) {
5161		id = get_cx2388x_ident(client);
5162	} else if ((device_id & 0xfff0) == 0x5A30) {
5163		/* The CX23100 (0x5A3C = 23100) doesn't have an A/V decoder */
5164		id = CX2310X_AV;
5165	} else if ((device_id & 0xff) == (device_id >> 8)) {
5166		v4l_err(client,
5167			"likely a confused/unresponsive cx2388[578] A/V decoder"
5168			" found @ 0x%x (%s)\n",
5169			client->addr << 1, client->adapter->name);
5170		v4l_err(client, "A method to reset it from the cx25840 driver"
5171			" software is not known at this time\n");
5172		return -ENODEV;
5173	} else {
5174		v4l_dbg(1, cx25840_debug, client, "cx25840 not found\n");
5175		return -ENODEV;
5176	}
5177
5178	state = devm_kzalloc(&client->dev, sizeof(*state), GFP_KERNEL);
5179	if (state == NULL)
5180		return -ENOMEM;
5181
5182	sd = &state->sd;
5183	v4l2_i2c_subdev_init(sd, client, &cx25840_ops);
5184#if defined(CONFIG_MEDIA_CONTROLLER)
5185	/*
5186	 * TODO: add media controller support for analog video inputs like
5187	 * composite, svideo, etc.
5188	 * A real input pad for this analog demod would be like:
5189	 *                 ___________
5190	 * TUNER --------> |         |
5191	 *		   |         |
5192	 * SVIDEO .......> | cx25840 |
5193	 *		   |         |
5194	 * COMPOSITE1 ...> |_________|
5195	 *
5196	 * However, at least for now, there's no much gain on modelling
5197	 * those extra inputs. So, let's add it only when needed.
5198	 */
5199	state->pads[CX25840_PAD_INPUT].flags = MEDIA_PAD_FL_SINK;
5200	state->pads[CX25840_PAD_VID_OUT].flags = MEDIA_PAD_FL_SOURCE;
5201	state->pads[CX25840_PAD_VBI_OUT].flags = MEDIA_PAD_FL_SOURCE;
5202	sd->entity.type = MEDIA_ENT_T_V4L2_SUBDEV_DECODER;
5203
5204	ret = media_entity_init(&sd->entity, ARRAY_SIZE(state->pads),
5205				state->pads, 0);
5206	if (ret < 0) {
5207		v4l_info(client, "failed to initialize media entity!\n");
5208		return ret;
5209	}
5210#endif
5211
5212	switch (id) {
5213	case CX23885_AV:
5214		v4l_info(client, "cx23885 A/V decoder found @ 0x%x (%s)\n",
5215			 client->addr << 1, client->adapter->name);
5216		break;
5217	case CX23887_AV:
5218		v4l_info(client, "cx23887 A/V decoder found @ 0x%x (%s)\n",
5219			 client->addr << 1, client->adapter->name);
5220		break;
5221	case CX23888_AV:
5222		v4l_info(client, "cx23888 A/V decoder found @ 0x%x (%s)\n",
5223			 client->addr << 1, client->adapter->name);
5224		break;
5225	case CX2310X_AV:
5226		v4l_info(client, "cx%d A/V decoder found @ 0x%x (%s)\n",
5227			 device_id, client->addr << 1, client->adapter->name);
5228		break;
5229	case CX25840:
5230	case CX25841:
5231	case CX25842:
5232	case CX25843:
5233		/* Note: revision '(device_id & 0x0f) == 2' was never built. The
5234		   marking skips from 0x1 == 22 to 0x3 == 23. */
5235		v4l_info(client, "cx25%3x-2%x found @ 0x%x (%s)\n",
5236			 (device_id & 0xfff0) >> 4,
5237			 (device_id & 0x0f) < 3 ? (device_id & 0x0f) + 1
5238						: (device_id & 0x0f),
5239			 client->addr << 1, client->adapter->name);
5240		break;
5241	case CX25836:
5242	case CX25837:
5243	default:
5244		v4l_info(client, "cx25%3x-%x found @ 0x%x (%s)\n",
5245			 (device_id & 0xfff0) >> 4, device_id & 0x0f,
5246			 client->addr << 1, client->adapter->name);
5247		break;
5248	}
5249
5250	state->c = client;
5251	state->vid_input = CX25840_COMPOSITE7;
5252	state->aud_input = CX25840_AUDIO8;
5253	state->audclk_freq = 48000;
5254	state->audmode = V4L2_TUNER_MODE_LANG1;
5255	state->vbi_line_offset = 8;
5256	state->id = id;
5257	state->rev = device_id;
5258	v4l2_ctrl_handler_init(&state->hdl, 9);
5259	v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
5260			V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
5261	v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
5262			V4L2_CID_CONTRAST, 0, 127, 1, 64);
5263	v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
5264			V4L2_CID_SATURATION, 0, 127, 1, 64);
5265	v4l2_ctrl_new_std(&state->hdl, &cx25840_ctrl_ops,
5266			V4L2_CID_HUE, -128, 127, 1, 0);
5267	if (!is_cx2583x(state)) {
5268		default_volume = cx25840_read(client, 0x8d4);
5269		/*
5270		 * Enforce the legacy PVR-350/MSP3400 to PVR-150/CX25843 volume
5271		 * scale mapping limits to avoid -ERANGE errors when
5272		 * initializing the volume control
5273		 */
5274		if (default_volume > 228) {
5275			/* Bottom out at -96 dB, v4l2 vol range 0x2e00-0x2fff */
5276			default_volume = 228;
5277			cx25840_write(client, 0x8d4, 228);
5278		}
5279		else if (default_volume < 20) {
5280			/* Top out at + 8 dB, v4l2 vol range 0xfe00-0xffff */
5281			default_volume = 20;
5282			cx25840_write(client, 0x8d4, 20);
5283		}
5284		default_volume = (((228 - default_volume) >> 1) + 23) << 9;
5285
5286		state->volume = v4l2_ctrl_new_std(&state->hdl,
5287			&cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_VOLUME,
5288			0, 65535, 65535 / 100, default_volume);
5289		state->mute = v4l2_ctrl_new_std(&state->hdl,
5290			&cx25840_audio_ctrl_ops, V4L2_CID_AUDIO_MUTE,
5291			0, 1, 1, 0);
5292		v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
5293			V4L2_CID_AUDIO_BALANCE,
5294			0, 65535, 65535 / 100, 32768);
5295		v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
5296			V4L2_CID_AUDIO_BASS,
5297			0, 65535, 65535 / 100, 32768);
5298		v4l2_ctrl_new_std(&state->hdl, &cx25840_audio_ctrl_ops,
5299			V4L2_CID_AUDIO_TREBLE,
5300			0, 65535, 65535 / 100, 32768);
5301	}
5302	sd->ctrl_handler = &state->hdl;
5303	if (state->hdl.error) {
5304		int err = state->hdl.error;
5305
5306		v4l2_ctrl_handler_free(&state->hdl);
5307		return err;
5308	}
5309	if (!is_cx2583x(state))
5310		v4l2_ctrl_cluster(2, &state->volume);
5311	v4l2_ctrl_handler_setup(&state->hdl);
5312
5313	if (client->dev.platform_data) {
5314		struct cx25840_platform_data *pdata = client->dev.platform_data;
5315
5316		state->pvr150_workaround = pdata->pvr150_workaround;
5317	}
5318
5319	cx25840_ir_probe(sd);
5320	return 0;
5321}
5322
5323static int cx25840_remove(struct i2c_client *client)
5324{
5325	struct v4l2_subdev *sd = i2c_get_clientdata(client);
5326	struct cx25840_state *state = to_state(sd);
5327
5328	cx25840_ir_remove(sd);
5329	v4l2_device_unregister_subdev(sd);
5330	v4l2_ctrl_handler_free(&state->hdl);
5331	return 0;
5332}
5333
5334static const struct i2c_device_id cx25840_id[] = {
5335	{ "cx25840", 0 },
5336	{ }
5337};
5338MODULE_DEVICE_TABLE(i2c, cx25840_id);
5339
5340static struct i2c_driver cx25840_driver = {
5341	.driver = {
5342		.owner	= THIS_MODULE,
5343		.name	= "cx25840",
5344	},
5345	.probe		= cx25840_probe,
5346	.remove		= cx25840_remove,
5347	.id_table	= cx25840_id,
5348};
5349
5350module_i2c_driver(cx25840_driver);
5351