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