// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (C) 2021-2023 Digiteq Automotive
* author: Martin Tuma <martin.tuma@digiteqautomotive.com>
*
* The CMT module configures the FPGA Clock Management Tile (CMT) registers. For
* different video signal frequencies (FPGA input signal frequencies), the FPGA
* CMT registers need to be adjusted for the FPGA to work properly. The values
* are precomputed based on formulas given by Xilinx in their FPGA documentation
* (which are in turn full of some magic values/tables...).
*/
#include <linux/types.h>
#include <linux/kernel.h>
#include "mgb4_core.h"
#include "mgb4_cmt.h"
static const u16 cmt_vals_out[][15 ] = {
{0 x1208, 0 x0000, 0 x171C, 0 x0000, 0 x1E38, 0 x0000, 0 x11C7, 0 x0000, 0 x1041, 0 x01BC, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x8100, },
{0 x11C7, 0 x0000, 0 x1619, 0 x0080, 0 x1C71, 0 x0000, 0 x130D, 0 x0080, 0 x0041, 0 x0090, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x9000, },
{0 x11C7, 0 x0000, 0 x1619, 0 x0080, 0 x1C71, 0 x0000, 0 x165A, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x11C7, 0 x0000, 0 x1619, 0 x0080, 0 x1C71, 0 x0000, 0 x1187, 0 x0080, 0 x1041, 0 x01EE, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x8100, },
{0 x1186, 0 x0000, 0 x1555, 0 x0000, 0 x1AAA, 0 x0000, 0 x1451, 0 x0000, 0 x0042, 0 x0013, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x11C7, 0 x0000, 0 x1619, 0 x0080, 0 x1C71, 0 x0000, 0 x134E, 0 x0080, 0 x0041, 0 x005E, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x1619, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x179E, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x179F, 0 x0080, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x17DF, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x8800, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x128B, 0 x0080, 0 x0041, 0 x00DB, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9000, 0 x0100, },
{0 x1186, 0 x0000, 0 x1555, 0 x0000, 0 x1AAA, 0 x0000, 0 x1820, 0 x0000, 0 x0083, 0 x00FA, 0 x7DE9, 0 x7DE8, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1186, 0 x0000, 0 x1555, 0 x0000, 0 x1AAA, 0 x0000, 0 x1187, 0 x0080, 0 x1041, 0 x01EE, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x8100, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x169B, 0 x0080, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1800, 0 x0100, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x171C, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x1186, 0 x0000, 0 x1555, 0 x0000, 0 x1AAA, 0 x0000, 0 x1515, 0 x0080, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x1493, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x15D8, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1900, 0 x0100, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x124A, 0 x0080, 0 x0041, 0 x010D, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9000, 0 x0100, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x175D, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x1619, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x17DF, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x8800, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x17E0, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x1820, 0 x0000, 0 x0083, 0 x00FA, 0 x7DE9, 0 x7DE8, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x13D0, 0 x0080, 0 x0042, 0 x002C, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x128B, 0 x0080, 0 x0041, 0 x00DB, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9000, 0 x0100, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x1820, 0 x0000, 0 x00C3, 0 x00FA, 0 x7DE9, 0 x7DE8, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x134E, 0 x0080, 0 x0041, 0 x005E, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x1515, 0 x0080, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x175D, 0 x0000, 0 x00C4, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1145, 0 x0000, 0 x1452, 0 x0080, 0 x18E3, 0 x0000, 0 x11C7, 0 x0000, 0 x1041, 0 x01BC, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x8100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1209, 0 x0080, 0 x0041, 0 x013F, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x1100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1556, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x8000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x179F, 0 x0080, 0 x00C4, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x15D8, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1900, 0 x0100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1105, 0 x0080, 0 x1041, 0 x01E8, 0 x6401, 0 x65E9, 0 xFFFF, 0 x9800, 0 x1100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1820, 0 x0000, 0 x00C4, 0 x00FA, 0 x7DE9, 0 x7DE8, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x1493, 0 x0080, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x138E, 0 x0000, 0 x0042, 0 x005E, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x17E0, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x165A, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x175D, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x1187, 0 x0080, 0 x1041, 0 x01EE, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x8100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x175E, 0 x0080, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x179E, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x134E, 0 x0080, 0 x0041, 0 x005E, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x165A, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x16DC, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x169A, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x11C7, 0 x0000, 0 x1041, 0 x01BC, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x8100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x169B, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1800, 0 x0100, },
{0 x1104, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x171D, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x16DB, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1800, 0 x0100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1146, 0 x0080, 0 x1041, 0 x0184, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x8100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x171C, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1451, 0 x0000, 0 x0042, 0 x0013, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x171D, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x175D, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1452, 0 x0080, 0 x0042, 0 x0013, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x15D8, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1900, 0 x0100, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1104, 0 x0000, 0 x1041, 0 x01E8, 0 x5801, 0 x59E9, 0 xFFFF, 0 x9900, 0 x0900, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x179F, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1515, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x17DF, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x8800, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1659, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1555, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x8000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x14D3, 0 x0000, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1820, 0 x0000, 0 x0083, 0 x00FA, 0 x7DE9, 0 x7DE8, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1556, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x8000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1187, 0 x0080, 0 x1041, 0 x01EE, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9900, 0 x8100, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1452, 0 x0080, 0 x0082, 0 x0013, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x169B, 0 x0080, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1800, 0 x0100, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1514, 0 x0000, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x17E0, 0 x0080, 0 x00C4, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x1515, 0 x0080, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x10C3, 0 x0000, 0 x128B, 0 x0080, 0 x1555, 0 x0000, 0 x16DC, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1493, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x15D8, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1900, 0 x0100, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x171D, 0 x0080, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1618, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1900, 0 x0100, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x175D, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x14D4, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1619, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x179E, 0 x0000, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x179F, 0 x0080, 0 x00C3, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1515, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x13D0, 0 x0080, 0 x0042, 0 x002C, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x169A, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x128B, 0 x0080, 0 x0041, 0 x00DB, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x9000, 0 x0100, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x169B, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1800, 0 x0100, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1820, 0 x0000, 0 x00C3, 0 x00FA, 0 x7DE9, 0 x7DE8, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1556, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x8000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x16DB, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1800, 0 x0100, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1411, 0 x0080, 0 x0042, 0 x002C, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x171C, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1597, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x8000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1451, 0 x0000, 0 x0042, 0 x0013, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x171D, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x1800, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x12CC, 0 x0080, 0 x0041, 0 x00A9, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x175D, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1452, 0 x0080, 0 x0042, 0 x0013, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x15D8, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1900, 0 x0100, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x175E, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1492, 0 x0000, 0 x0042, 0 x0013, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x179F, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0800, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1619, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1493, 0 x0080, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x17DF, 0 x0000, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x8800, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x130D, 0 x0080, 0 x0041, 0 x0090, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1100, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x17E0, 0 x0080, 0 x0083, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x14D3, 0 x0000, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x165A, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1000, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x1820, 0 x0000, 0 x0083, 0 x00FA, 0 x7DE9, 0 x7DE8, 0 xFFFF, 0 x0900, 0 x9000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x14D4, 0 x0080, 0 x0042, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x0900, 0 x1000, },
{0 x1082, 0 x0000, 0 x11C7, 0 x0000, 0 x138E, 0 x0000, 0 x169B, 0 x0080, 0 x0082, 0 x00FA, 0 x7C01, 0 x7DE9, 0 xFFFF, 0 x1800, 0 x0100, },
};
static const u16 cmt_vals_in[][13 ] = {
{0 x1104, 0 x0000, 0 x9208, 0 x0000, 0 x138E, 0 x0000, 0 x1041, 0 x015E, 0 x7C01, 0 xFFE9, 0 x0100, 0 x0908, 0 x1000},
{0 x1082, 0 x0000, 0 x5104, 0 x0000, 0 x11C7, 0 x0000, 0 x1041, 0 x02BC, 0 x7C01, 0 xFFE9, 0 x9900, 0 x9908, 0 x8100},
};
static const u32 cmt_addrs_out[][15 ] = {
{0 x420, 0 x424, 0 x428, 0 x42C, 0 x430, 0 x434, 0 x450, 0 x454, 0 x458, 0 x460, 0 x464, 0 x468, 0 x4A0, 0 x538, 0 x53C},
{0 x620, 0 x624, 0 x628, 0 x62C, 0 x630, 0 x634, 0 x650, 0 x654, 0 x658, 0 x660, 0 x664, 0 x668, 0 x6A0, 0 x738, 0 x73C},
};
static const u32 cmt_addrs_in[][13 ] = {
{0 x020, 0 x024, 0 x028, 0 x02C, 0 x050, 0 x054, 0 x058, 0 x060, 0 x064, 0 x068, 0 x0A0, 0 x138, 0 x13C},
{0 x220, 0 x224, 0 x228, 0 x22C, 0 x250, 0 x254, 0 x258, 0 x260, 0 x264, 0 x268, 0 x2A0, 0 x338, 0 x33C},
};
static const u32 cmt_freq[] = {
25000 , 25510 , 26020 , 26530 , 26983 , 27551 , 28000 , 28570 ,
29046 , 29522 , 30000 , 30476 , 30952 , 31546 , 32000 , 32539 ,
33035 , 33571 , 33928 , 34522 , 35000 , 35428 , 36000 , 36571 ,
36904 , 37500 , 38093 , 38571 , 39047 , 39453 , 40000 , 40476 ,
40952 , 41494 , 41964 , 42857 , 43535 , 44047 , 44444 , 45000 ,
45535 , 46029 , 46428 , 46823 , 47617 , 48214 , 48571 , 49107 ,
49523 , 50000 , 50476 , 50892 , 51428 , 52380 , 53333 , 53967 ,
54285 , 55238 , 55555 , 55952 , 57142 , 58095 , 58571 , 59047 ,
59521 , 60000 , 60316 , 60952 , 61428 , 61904 , 62500 , 63092 ,
63491 , 64282 , 65078 , 65476 , 66071 , 66664 , 67142 , 67854 ,
68571 , 69044 , 69642 , 70000 , 71425 , 72616 , 73214 , 73808 ,
74285 , 75000 , 75714 , 76187 , 76785 , 77142 , 78570 , 80000 ,
80357 , 80951 , 81428 , 82142 , 82857 , 83332 , 83928 , 84285 ,
85713 , 87142 , 87500 , 88094 , 88571 , 89285 , 90000 , 90475 ,
91071 , 91428 , 92856 , 94642 ,
};
static size_t freq_srch(u32 key, const u32 *array, size_t size)
{
int l = 0 ;
int r = size - 1 ;
int m = 0 ;
while (l <= r) {
m = (l + r) / 2 ;
if (array[m] < key)
l = m + 1 ;
else if (array[m] > key)
r = m - 1 ;
else
return m;
}
if (r < 0 || l > size - 1 )
return m;
else
return (abs(key - array[l]) < abs(key - array[r])) ? l : r;
}
u32 mgb4_cmt_set_vout_freq(struct mgb4_vout_dev *voutdev, unsigned int freq)
{
struct mgb4_regs *video = &voutdev->mgbdev->video;
const struct mgb4_vout_regs *regs = &voutdev->config->regs;
const u16 *reg_set;
const u32 *addr;
u32 config;
size_t i, index;
index = freq_srch(freq, cmt_freq, ARRAY_SIZE(cmt_freq));
addr = cmt_addrs_out[voutdev->config->id];
reg_set = cmt_vals_out[index];
config = mgb4_read_reg(video, regs->config);
mgb4_write_reg(video, regs->config, 0 x1 | (config & ~0 x3));
mgb4_mask_reg(video, regs->config, 0 x100, 0 x100);
for (i = 0 ; i < ARRAY_SIZE(cmt_addrs_out[0 ]); i++)
mgb4_write_reg(&voutdev->mgbdev->cmt, addr[i], reg_set[i]);
mgb4_mask_reg(video, regs->config, 0 x100, 0 x0);
mgb4_write_reg(video, regs->config, config & ~0 x1);
return cmt_freq[index];
}
void mgb4_cmt_set_vin_freq_range(struct mgb4_vin_dev *vindev,
unsigned int freq_range)
{
struct mgb4_regs *video = &vindev->mgbdev->video;
const struct mgb4_vin_regs *regs = &vindev->config->regs;
const u16 *reg_set;
const u32 *addr;
u32 config;
size_t i;
freq_range = array_index_nospec(freq_range, ARRAY_SIZE(cmt_vals_in));
addr = cmt_addrs_in[vindev->config->id];
reg_set = cmt_vals_in[freq_range];
config = mgb4_read_reg(video, regs->config);
mgb4_write_reg(video, regs->config, 0 x1 | (config & ~0 x3));
mgb4_mask_reg(video, regs->config, 0 x1000, 0 x1000);
for (i = 0 ; i < ARRAY_SIZE(cmt_addrs_in[0 ]); i++)
mgb4_write_reg(&vindev->mgbdev->cmt, addr[i], reg_set[i]);
mgb4_mask_reg(video, regs->config, 0 x1000, 0 x0);
mgb4_write_reg(video, regs->config, config & ~0 x1);
}
Messung V0.5 in Prozent C=94 H=93 G=93