root/drivers/media/i2c/cx25840/cx25840-core.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. cx25840_write
  2. cx25840_write4
  3. cx25840_read
  4. cx25840_read4
  5. cx25840_and_or
  6. cx25840_and_or4
  7. cx23885_s_io_pin_config
  8. cx25840_function_to_pad
  9. cx25840_set_invert
  10. cx25840_s_io_pin_config
  11. common_s_io_pin_config
  12. init_dll1
  13. init_dll2
  14. cx25836_initialize
  15. cx25840_work_handler
  16. cx25840_vconfig_apply
  17. cx25840_initialize
  18. cx23885_initialize
  19. cx231xx_initialize
  20. cx25840_std_setup
  21. input_change
  22. set_input
  23. set_v4lstd
  24. cx25840_s_ctrl
  25. cx25840_set_fmt
  26. log_video_status
  27. log_audio_status
  28. cx25840_vconfig_add
  29. cx25840_init
  30. cx25840_reset
  31. cx25840_load_fw
  32. cx25840_g_register
  33. cx25840_s_register
  34. cx25840_s_audio_stream
  35. cx25840_s_stream
  36. cx25840_querystd
  37. cx25840_g_input_status
  38. cx25840_g_std
  39. cx25840_s_std
  40. cx25840_s_radio
  41. cx25840_s_video_routing
  42. cx25840_s_audio_routing
  43. cx25840_s_frequency
  44. cx25840_g_tuner
  45. cx25840_s_tuner
  46. cx25840_log_status
  47. cx23885_irq_handler
  48. cx25840_irq_handler
  49. cx23885_dif_setup
  50. cx23888_std_setup
  51. get_cx2388x_ident
  52. cx25840_probe
  53. cx25840_remove

   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  - Undocumented Register */
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         /* Undocumented */
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                         cx25840_write4(client, state->vbi_regs_offset + 0x42c,
1490                                        0x42600000);
1491                         cx25840_write4(client, state->vbi_regs_offset + 0x430,
1492                                        0x0000039b);
1493                         cx25840_write4(client, state->vbi_regs_offset + 0x438,
1494                                        0x00000000);
1495 
1496                         cx25840_write4(client, state->vbi_regs_offset + 0x440,
1497                                        0xF8E3E824);
1498                         cx25840_write4(client, state->vbi_regs_offset + 0x444,
1499                                        0x401040dc);
1500                         cx25840_write4(client, state->vbi_regs_offset + 0x448,
1501                                        0xcd3f02a0);
1502                         cx25840_write4(client, state->vbi_regs_offset + 0x44c,
1503                                        0x161f1000);
1504                         cx25840_write4(client, state->vbi_regs_offset + 0x450,
1505                                        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_pad_config *cfg,
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);

/* [<][>][^][v][top][bottom][index][help] */