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