struct cx23885_board cx23885_boards[] = {
        [CX23885_BOARD_UNKNOWN] = {
                .name           = "UNKNOWN/GENERIC",
+               /* Ensure safe default for unknown boards */
+               .clk_freq       = 0,
                .input          = {{
                        .type   = CX23885_VMUX_COMPOSITE1,
                        .vmux   = 0,
 
        if(dev->pci->device == 0x8880) {
                dev->bridge = CX23885_BRIDGE_887;
                dev->sram_channels = cx23887_sram_channels;
+               /* Apply a sensible clock frequency for the PCIe bridge */
+               dev->clk_freq = 25000000;
        } else
        if(dev->pci->device == 0x8852) {
                dev->bridge = CX23885_BRIDGE_885;
                dev->sram_channels = cx23885_sram_channels;
+               /* Apply a sensible clock frequency for the PCIe bridge */
+               dev->clk_freq = 28000000;
        } else
                BUG();
 
                cx23885_card_list(dev);
        }
 
+       /* If the user specific a clk freq override, apply it */
+       if (cx23885_boards[dev->board].clk_freq > 0)
+               dev->clk_freq = cx23885_boards[dev->board].clk_freq;
+
        dev->pci_bus  = dev->pci->bus->number;
        dev->pci_slot = PCI_SLOT(dev->pci->devfn);
        dev->pci_irqmask = 0x001f00;
 
 struct cx23885_board {
        char                    *name;
        port_t                  portb, portc;
+
+       /* Vendors can and do run the PCIe bridge at different
+        * clock rates, driven physically by crystals on the PCBs.
+        * The core has to accomodate this. This allows the user
+        * to add new boards with new frequencys. The value is
+        * expressed in Hz.
+        *
+        * The core framework will default this value based on
+        * current designs, but it can vary.
+        */
+       u32                     clk_freq;
        struct cx23885_input    input[MAX_CX23885_INPUT];
 };
 
        int                        pci_irqmask;
        int                        hwrevision;
 
+       /* This valud is board specific and is used to configure the
+        * AV core so we see nice clean and stable video and audio. */
+       u32                        clk_freq;
+
        /* I2C adapters: Master 1 & 2 (External) & Master 3 (Internal only) */
        struct cx23885_i2c         i2c_bus[3];