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