]> nv-tegra.nvidia Code Review - linux-4.9.git/commitdiff
video: fbdev: add support for storing pixclk in hz
authorNaveen Kumar S <nkumars@nvidia.com>
Mon, 27 Aug 2018 06:42:17 +0000 (12:12 +0530)
committermobile promotions <svcmobile_promotions@nvidia.com>
Thu, 25 Oct 2018 03:05:49 +0000 (20:05 -0700)
fbdev framework stores pixelclock in pico seconds. Since monitors
advertize pixclock in hz, we need to convert it from Hz to pico
seconds when creating mode database. During modeset, it again needs
to be converted back to Hz. These conversions cause precision loss,
because of which the final pixclock value does not match the original
value advertized by the sink.

This issue is prominently seen in case of non-CEA modes.

Most of the monitors handle this slight variation in pixclock without
complaining. But, there are a few monitors that fail when the exact
pixclock is not programmed. Hence, interoperability is affected.

Avoiding the pixclock conversion helps in avoiding the precision loss
issue. But, the idea of updating the core kernel fbdev driver to use
pixel clock in hz intead of pico seconds was rejected because it might
cause ABI compatibility issues.

The finalized solution is to store the original pixclock in hz along
with the pixclock in pico seconds, and use the hz pixclock during
modeset instead of the converted one.

Implementation Details:

fb_var_screeninfo is the  structure used by userspace clients to specify
their chosen mode timings to kernel. To avoid breaking the current fbdev
ABI, we avoided making any changes to this structure.

A new variable, pixclock_hz, has been added to the existing fb_videomode
structure. It is used to store the original pixclock value in hz during
mode database creation. As part of modeset, this value is used instead of
the one that went through conversion between hz and pico seconds. This
in-turn helps in setting accurate pixel clock advertized by sinks.

New defconfig option introduced:

To make it easy to enable/disable this feature, the whole implementation
has been wrapped under a new defconfig option, CONFIG_FB_MODE_PIXCLOCK_HZ.
Any updates to existing data structures has also been isolated under this
defconfig option.

bug 2045478

Change-Id: Id3ef39a0d50beee95b9eaba32afa65a7aa28c53a
Signed-off-by: Naveen Kumar S <nkumars@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1812545
(cherry picked from commit 09877297e4f43aa8844c009a6a30c70033ac664e)
Reviewed-on: https://git-master.nvidia.com/r/1932350
GVS: Gerrit_Virtual_Submit
Reviewed-by: Santosh Galma <galmar@nvidia.com>
Reviewed-by: Bibek Basu <bbasu@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
arch/arm64/configs/tegra_defconfig
drivers/video/fbdev/Kconfig
drivers/video/fbdev/core/fbmon.c
drivers/video/fbdev/core/modedb.c
include/linux/fb.h

index 629986df36bf43e6e9a435763369007399e5b13a..f5f61873104574e0eda80f83f03538ce1ab1342d 100644 (file)
@@ -738,6 +738,7 @@ CONFIG_VIDEO_IMX390=y
 CONFIG_VIDEO_IMX204=y
 # CONFIG_VGA_ARB is not set
 CONFIG_FB=y
+CONFIG_FB_MODE_PIXCLOCK_HZ=y
 CONFIG_BACKLIGHT_GENERIC=m
 CONFIG_BACKLIGHT_PWM=y
 CONFIG_BACKLIGHT_LP855X=y
index 5d3b0db5ce0af34997a3aa748292b6bd8d48c191..cea26f93c10bf00cb1aa7e6ac113d82f2373a887 100644 (file)
@@ -207,6 +207,20 @@ config FB_MODE_HELPERS
          your driver does not take advantage of this feature, choosing Y will
          just increase the kernel size by about 5K.
 
+config FB_MODE_PIXCLOCK_HZ
+       bool "Enable storing fb videomode pixel clock in Hz"
+       depends on FB && TEGRA_DC
+       default n
+       ---help---
+         This config helps in storing the pixclock of each mode in hz.
+         Currently, framebuffer stores pixel clock of videomodes in
+         pico seconds. This necessitates conversion to Hz during modeset.
+         Such conversion reduces the precision of pixel clock, and the
+         final pixel clock value might not match the original pixel clock
+         from the mode advertized by sink. By storing pixclock in hz,
+         conversion to/from picoseconds to hz can be avoided, and the exact
+         pixel clock value is retained.
+
 config FB_TILEBLITTING
        bool "Enable Tile Blitting Support"
        depends on FB
index 824cc5c0f2be3cedb8b659a530b464a8ea6527fc..97bb55b2bfe2afef0f7224eeafacafc75fa89762 100644 (file)
 #define FBMON_FIX_INPUT   2
 #define FBMON_FIX_TIMINGS 3
 
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+static u32 pclk_hz;
+DEFINE_MUTEX(pclk_hz_lock);
+#endif
+
 #ifdef CONFIG_FB_MODE_HELPERS
 struct broken_edid {
        u8  manufacturer[4];
@@ -383,28 +388,42 @@ static void calc_mode_timings(int xres, int yres, int refresh,
                              struct fb_videomode *mode)
 {
        struct fb_var_screeninfo *var;
+       int ret = 0;
 
        var = kzalloc(sizeof(struct fb_var_screeninfo), GFP_KERNEL);
 
        if (var) {
                var->xres = xres;
                var->yres = yres;
-               fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON,
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+               mutex_lock(&pclk_hz_lock);
+#endif
+               ret = fb_get_mode(FB_VSYNCTIMINGS | FB_IGNOREMON,
                            refresh, var, NULL);
-               mode->xres = xres;
-               mode->yres = yres;
-               mode->pixclock = var->pixclock;
-               mode->refresh = refresh;
-               mode->left_margin = var->left_margin;
-               mode->right_margin = var->right_margin;
-               mode->upper_margin = var->upper_margin;
-               mode->lower_margin = var->lower_margin;
-               mode->hsync_len = var->hsync_len;
-               mode->vsync_len = var->vsync_len;
-               mode->vmode = 0;
-               mode->sync = 0;
-               kfree(var);
+               if (ret == 0) {
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+                       mode->pixclock_hz = pclk_hz;
+                       mutex_unlock(&pclk_hz_lock);
+#endif
+                       mode->xres = xres;
+                       mode->yres = yres;
+                       mode->pixclock = var->pixclock;
+                       mode->refresh = refresh;
+                       mode->left_margin = var->left_margin;
+                       mode->right_margin = var->right_margin;
+                       mode->upper_margin = var->upper_margin;
+                       mode->lower_margin = var->lower_margin;
+                       mode->hsync_len = var->hsync_len;
+                       mode->vsync_len = var->vsync_len;
+                       mode->vmode = 0;
+                       mode->sync = 0;
+               } else {
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+                       mutex_unlock(&pclk_hz_lock);
+#endif
+               }
        }
+       kfree(var);
 }
 
 static int get_est_timing(unsigned char *block, struct fb_videomode *mode)
@@ -567,6 +586,9 @@ static void get_detailed_timing(unsigned char *block,
        mode->pixclock = PIXEL_CLOCK;
        mode->pixclock /= 1000;
        mode->pixclock = KHZ2PICOS(mode->pixclock);
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+       mode->pixclock_hz = PIXEL_CLOCK;
+#endif
        mode->right_margin = H_SYNC_OFFSET;
        mode->left_margin = (H_ACTIVE + H_BLANKING) -
                (H_ACTIVE + H_SYNC_OFFSET + H_SYNC_WIDTH);
@@ -1578,6 +1600,9 @@ int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var, struct fb_inf
             timings->dclk < dclkmin || timings->dclk > dclkmax))) {
                err = -EINVAL;
        } else {
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+               pclk_hz = timings->dclk;
+#endif
                var->pixclock = KHZ2PICOS(timings->dclk/1000);
                var->hsync_len = (timings->htotal * 8)/100;
                var->right_margin = (timings->hblank/2) - var->hsync_len;
index 15de49976c1580a24c387abcea2a12921061e035..b9c8cc080d4c02dbad7b651563a2ab870adff401 100644 (file)
@@ -6,6 +6,8 @@
  *     2001 - Documented with DocBook
  *     - Brad Douglas <brad@neruo.com>
  *
+ * Copyright (c) 2018, NVIDIA CORPORATION, All rights reserved.
+ *
  *  This file is subject to the terms and conditions of the GNU General Public
  *  License. See the file COPYING in the main directory of this archive for
  *  more details.
 #define DPRINTK(fmt, args...)
 #endif
 
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+#define PCLK_HZ_PARAM(a) .pixclock_hz = (a)
+#define PCLK_HZ_VALUE(a) (a)
+#else
+#define PCLK_HZ_PARAM(a)
+#define PCLK_HZ_VALUE(a)
+#endif
+
 /*
  *  Standard video mode definitions (taken from XFree86)
  */
@@ -298,7 +308,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 96, .vsync_len = 2,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(25175000)},
        /* 2: 720x480p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 720, .yres = 480, .pixclock = 37037,
         .left_margin = 60, .right_margin = 16,
@@ -306,7 +317,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 62, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 3: 720x480p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 720, .yres = 480, .pixclock = 37037,
         .left_margin = 60, .right_margin = 16,
@@ -314,7 +326,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 62, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 4: 1280x720p @ 59.94Hz/60Hz */
        {.refresh = 60, .xres = 1280, .yres = 720, .pixclock = 13468,
         .left_margin = 220, .right_margin = 110,
@@ -322,7 +335,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 5: 1920x1080i @ 59.94Hz/60Hz */
        {.refresh = 60, .xres = 1920, .yres = 1080, .pixclock = 13468,
         .left_margin = 148, .right_margin = 88,
@@ -330,7 +344,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 6: 720(1440)x480i @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 1440, .yres = 480, .pixclock = 37037,
         .left_margin = 114, .right_margin = 38,
@@ -338,7 +353,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 7: 720(1440)x480i @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 1440, .yres = 480, .pixclock = 37037,
         .left_margin = 114, .right_margin = 38,
@@ -346,7 +362,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 8: 720(1440)x240p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 1440, .yres = 240, .pixclock = 37037,
         .left_margin = 114, .right_margin = 38,
@@ -354,7 +371,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 9: 720(1440)x240p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 1440, .yres = 240, .pixclock = 37037,
         .left_margin = 114, .right_margin = 38,
@@ -362,7 +380,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 10: 2880x480i @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 2880, .yres = 480, .pixclock = 18518,
         .left_margin = 228, .right_margin = 76,
@@ -370,7 +389,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 248, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 11: 2880x480i @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 2880, .yres = 480, .pixclock = 18518,
         .left_margin = 228, .right_margin = 76,
@@ -378,7 +398,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 248, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 12: 2880x240p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 2880, .yres = 240, .pixclock = 18518,
         .left_margin = 228, .right_margin = 76,
@@ -386,7 +407,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 248, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 13: 2880x240p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 2880, .yres = 240, .pixclock = 18518,
         .left_margin = 228, .right_margin = 76,
@@ -394,7 +416,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 248, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 14: 1440x480p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 1440, .yres = 480, .pixclock = 18518,
         .left_margin = 120, .right_margin = 32,
@@ -402,7 +425,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 15: 1440x480p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 1440, .yres = 480, .pixclock = 18518,
         .left_margin = 120, .right_margin = 32,
@@ -410,7 +434,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 16: 1920x1080p @ 59.94Hz/60Hz */
        {.refresh = 60, .xres = 1920, .yres = 1080, .pixclock = 6734,
         .left_margin = 148, .right_margin = 88,
@@ -418,7 +443,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(148500000)},
        /* 17: 720x576p @ 50Hz */
        {.refresh = 50, .xres = 720, .yres = 576, .pixclock = 37037,
         .left_margin = 68, .right_margin = 12,
@@ -426,7 +452,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 64, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 18: 720x576p @ 50Hz */
        {.refresh = 50, .xres = 720, .yres = 576, .pixclock = 37037,
         .left_margin = 68, .right_margin = 12,
@@ -434,7 +461,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 64, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 19: 1280x720p @ 50Hz */
        {.refresh = 50, .xres = 1280, .yres = 720, .pixclock = 13468,
         .left_margin = 220, .right_margin = 440,
@@ -442,7 +470,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 20: 1920x1080i @ 50Hz */
        {.refresh = 50, .xres = 1920, .yres = 1080, .pixclock = 13468,
         .left_margin = 148, .right_margin = 528,
@@ -450,7 +479,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 21: 720(1440)x576i @ 50Hz */
        {.refresh = 50, .xres = 1440, .yres = 576, .pixclock = 37037,
         .left_margin = 138, .right_margin = 24,
@@ -458,7 +488,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 126, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 22: 720(1440)x576i @ 50Hz */
        {.refresh = 50, .xres = 1440, .yres = 576, .pixclock = 37037,
         .left_margin = 138, .right_margin = 24,
@@ -466,7 +497,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 126, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 23: 720(1440)x288p @ 50Hz */
        {.refresh = 49, .xres = 1440, .yres = 288, .pixclock = 37037,
         .left_margin = 138, .right_margin = 24,
@@ -474,7 +506,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 126, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 24: 720(1440)x288p @ 50Hz */
        {.refresh = 49, .xres = 1440, .yres = 288, .pixclock = 37037,
         .left_margin = 138, .right_margin = 24,
@@ -482,7 +515,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 126, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(27000000)},
        /* 25: 2880x576i @ 50Hz */
        {.refresh = 50, .xres = 2880, .yres = 576, .pixclock = 18518,
         .left_margin = 276, .right_margin = 48,
@@ -490,7 +524,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 252, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 26: 2880x576i @ 50Hz */
        {.refresh = 50, .xres = 2880, .yres = 576, .pixclock = 18518,
         .left_margin = 276, .right_margin = 48,
@@ -498,7 +533,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 252, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 27: 2880x288p @ 50Hz */
        {.refresh = 49, .xres = 2880, .yres = 288, .pixclock = 18518,
         .left_margin = 276, .right_margin = 48,
@@ -506,7 +542,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 252, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 28: 2880x288p @ 50Hz */
        {.refresh = 49, .xres = 2880, .yres = 288, .pixclock = 18518,
         .left_margin = 276, .right_margin = 48,
@@ -514,7 +551,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 252, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 29: 1440x576p @ 50Hz */
        {.refresh = 50, .xres = 1440, .yres = 576, .pixclock = 18518,
         .left_margin = 136, .right_margin = 24,
@@ -522,7 +560,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 128, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 30: 1440x576p @ 50Hz */
        {.refresh = 50, .xres = 1440, .yres = 576, .pixclock = 18518,
         .left_margin = 136, .right_margin = 24,
@@ -530,7 +569,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 128, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 31: 1920x1080p @ 50Hz */
        {.refresh = 50, .xres = 1920, .yres = 1080, .pixclock = 6734,
         .left_margin = 148, .right_margin = 528,
@@ -538,7 +578,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(148500000)},
        /* 32: 1920x1080p @ 23.97Hz/24Hz */
        {.refresh = 24, .xres = 1920, .yres = 1080, .pixclock = 13468,
         .left_margin = 148, .right_margin = 638,
@@ -546,7 +587,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 33: 1920x1080p @ 25Hz */
        {.refresh = 25, .xres = 1920, .yres = 1080, .pixclock = 13468,
         .left_margin = 148, .right_margin = 528,
@@ -554,7 +596,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 34: 1920x1080p @ 29.97Hz/30Hz */
        {.refresh = 30, .xres = 1920, .yres = 1080, .pixclock = 13468,
         .left_margin = 148, .right_margin = 88,
@@ -562,7 +605,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 35: 2880x480p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 2880, .yres = 480, .pixclock = 9259,
         .left_margin = 240, .right_margin = 64,
@@ -570,7 +614,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 248, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 36: 2880x480p @ 59.94Hz/60Hz */
        {.refresh = 59, .xres = 2880, .yres = 480, .pixclock = 9259,
         .left_margin = 240, .right_margin = 64,
@@ -578,7 +623,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 248, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 37: 2880x576p @ 50Hz */
        {.refresh = 50, .xres = 2880, .yres = 576, .pixclock = 9259,
         .left_margin = 272, .right_margin = 48,
@@ -586,7 +632,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 256, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 38: 2880x576p @ 50Hz */
        {.refresh = 50, .xres = 2880, .yres = 576, .pixclock = 9259,
         .left_margin = 272, .right_margin = 48,
@@ -594,7 +641,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 256, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 39: 1920x1080i @ 50Hz */
        {.refresh = 50, .xres = 1920, .yres = 1080, .pixclock = 13888,
         .left_margin = 184, .right_margin = 32,
@@ -602,7 +650,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 168, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(72000000)},
        /* 40: 1920x1080i @ 100Hz */
        {.refresh = 100, .xres = 1920, .yres = 1080, .pixclock = 6734,
         .left_margin = 148, .right_margin = 528,
@@ -610,7 +659,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(148500000)},
        /* 41: 1280x720p @ 100Hz */
        {.refresh = 100, .xres = 1280, .yres = 720, .pixclock = 6734,
         .left_margin = 220, .right_margin = 440,
@@ -618,7 +668,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(148500000)},
        /* 42: 720x576p @ 100Hz */
        {.refresh = 100, .xres = 720, .yres = 576, .pixclock = 18518,
         .left_margin = 68, .right_margin = 12,
@@ -626,7 +677,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 64, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 43: 720x576p @ 100Hz */
        {.refresh = 100, .xres = 720, .yres = 576, .pixclock = 18518,
         .left_margin = 68, .right_margin = 12,
@@ -634,7 +686,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 64, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 44: 720(1440)x576i @ 100Hz */
        {.refresh = 100, .xres = 1440, .yres = 576, .pixclock = 18518,
         .left_margin = 138, .right_margin = 24,
@@ -642,7 +695,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 126, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 45: 720(1440)x576i @ 100Hz */
        {.refresh = 100, .xres = 1440, .yres = 576, .pixclock = 18518,
         .left_margin = 138, .right_margin = 24,
@@ -650,7 +704,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 126, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 46: 1920x1080i @ 119.88/120Hz */
        {.refresh = 120, .xres = 1920, .yres = 1080, .pixclock = 6734,
         .left_margin = 148, .right_margin = 88,
@@ -658,7 +713,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(148500000)},
        /* 47: 1280x720p @ 119.88/120Hz */
        {.refresh = 120, .xres = 1280, .yres = 720, .pixclock = 6734,
         .left_margin = 220, .right_margin = 110,
@@ -666,7 +722,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(148500000)},
        /* 48: 720x480p @ 119.88/120Hz */
        {.refresh = 119, .xres = 720, .yres = 480, .pixclock = 18518,
         .left_margin = 60, .right_margin = 16,
@@ -674,7 +731,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 62, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 49: 720x480p @ 119.88/120Hz */
        {.refresh = 119, .xres = 720, .yres = 480, .pixclock = 18518,
         .left_margin = 60, .right_margin = 16,
@@ -682,7 +740,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 62, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 50: 720(1440)x480i @ 119.88/120Hz */
        {.refresh = 119, .xres = 1440, .yres = 480, .pixclock = 18518,
         .left_margin = 114, .right_margin = 38,
@@ -690,7 +749,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 51: 720(1440)x480i @ 119.88/120Hz */
        {.refresh = 119, .xres = 1440, .yres = 480, .pixclock = 18518,
         .left_margin = 114, .right_margin = 38,
@@ -698,7 +758,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(54000000)},
        /* 52: 720x576p @ 200Hz */
        {.refresh = 200, .xres = 720, .yres = 576, .pixclock = 9259,
         .left_margin = 68, .right_margin = 12,
@@ -706,7 +767,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 64, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 53: 720x576p @ 200Hz */
        {.refresh = 200, .xres = 720, .yres = 576, .pixclock = 9259,
         .left_margin = 68, .right_margin = 12,
@@ -714,7 +776,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 64, .vsync_len = 5,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 54: 720(1440)x576i @ 200Hz */
        {.refresh = 200, .xres = 1440, .yres = 576, .pixclock = 9259,
         .left_margin = 138, .right_margin = 24,
@@ -722,7 +785,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 126, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 55: 720(1440)x576i @ 200Hz */
        {.refresh = 200, .xres = 1440, .yres = 576, .pixclock = 9259,
         .left_margin = 138, .right_margin = 24,
@@ -730,7 +794,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 126, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 56: 720x480p @ 239.76/240Hz */
        {.refresh = 239, .xres = 720, .yres = 480, .pixclock = 9259,
         .left_margin = 60, .right_margin = 16,
@@ -738,7 +803,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 62, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 57: 720x480p @ 239.76/240Hz */
        {.refresh = 239, .xres = 720, .yres = 480, .pixclock = 9259,
         .left_margin = 60, .right_margin = 16,
@@ -746,7 +812,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 62, .vsync_len = 6,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 58: 720(1440)x480i @ 239.76/240Hz */
        {.refresh = 239, .xres = 1440, .yres = 480, .pixclock = 9259,
         .left_margin = 114, .right_margin = 38,
@@ -754,7 +821,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_4_3 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 59: 720(1440)x480i @ 239.76/240Hz */
        {.refresh = 239, .xres = 1440, .yres = 480, .pixclock = 9259,
         .left_margin = 114, .right_margin = 38,
@@ -762,7 +830,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 124, .vsync_len = 3,
         .sync = 0,
         .flag = FB_FLAG_RATIO_16_9 | FB_FLAG_PIXEL_REPEAT,
-        .vmode = FB_VMODE_INTERLACED},
+        .vmode = FB_VMODE_INTERLACED,
+        PCLK_HZ_PARAM(108000000)},
        /* 60: 1280x720p @ 23.97Hz/24Hz */
        {.refresh = 24, .xres = 1280, .yres = 720, .pixclock = 16835,
         .left_margin = 220, .right_margin = 1760,
@@ -770,7 +839,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 61: 1280x720p @ 25Hz */
        {.refresh = 25, .xres = 1280, .yres = 720, .pixclock = 13468,
         .left_margin = 220, .right_margin = 2420,
@@ -778,7 +848,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 62: 1280x720p @ 29.97Hz/30Hz */
        {.refresh = 30, .xres = 1280, .yres = 720, .pixclock = 13468,
         .left_margin = 220, .right_margin = 1760,
@@ -786,7 +857,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 63: 1920x1080p @ 119.88/120Hz */
        {.refresh = 120, .xres = 1920, .yres = 1080, .pixclock = 3367,
         .left_margin = 148, .right_margin = 88,
@@ -794,7 +866,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 64: 1920x1080p @ 100Hz */
        {.refresh = 100, .xres = 1920, .yres = 1080, .pixclock = 3367,
         .left_margin = 148, .right_margin = 528,
@@ -802,7 +875,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
         /* 65: 1280x720p @ 24Hz */
        {.refresh = 24, .xres = 1280, .yres = 720, .pixclock = 16835,
         .left_margin = 220, .right_margin = 1760,
@@ -810,7 +884,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 66: 1280x720p @ 25Hz */
        {.refresh = 25, .xres = 1280, .yres = 720, .pixclock = 13468,
         .left_margin = 220, .right_margin = 2420,
@@ -818,7 +893,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 67: 1280x720p @ 30Hz */
        {.refresh = 30, .xres = 1280, .yres = 720, .pixclock = 13468,
         .left_margin = 220, .right_margin = 1760,
@@ -826,7 +902,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 68: 1280x720p @ 50Hz */
        {.refresh = 50, .xres = 1280, .yres = 720, .pixclock = 13468,
         .left_margin = 220, .right_margin = 440,
@@ -834,7 +911,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 69: 1280x720p @ 60Hz */
        {.refresh = 60, .xres = 1280, .yres = 720, .pixclock = 13468,
         .left_margin = 220, .right_margin = 110,
@@ -842,7 +920,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(74250000)},
        /* 70: 1280x720p @ 100Hz */
        {.refresh = 100, .xres = 1280, .yres = 720, .pixclock = 6734,
         .left_margin = 220, .right_margin = 440,
@@ -850,7 +929,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(148500000)},
        /* 71: 1280x720p @ 120Hz */
        {.refresh = 120, .xres = 1280, .yres = 720, .pixclock = 6734,
         .left_margin = 220, .right_margin = 110,
@@ -858,7 +938,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 72: 1920x1080p @ 24Hz */
        {.refresh = 24, .xres = 1920, .yres = 1080, .pixclock = 13468,
         .left_margin = 148, .right_margin = 638,
@@ -866,7 +947,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 73: 1920x1080p @ 25Hz */
        {.refresh = 25, .xres = 1920, .yres = 1080, .pixclock = 13468,
         .left_margin = 148, .right_margin = 528,
@@ -874,7 +956,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 74: 1920x1080p @ 30Hz */
        {.refresh = 30, .xres = 1920, .yres = 1080, .pixclock = 13468,
         .left_margin = 148, .right_margin = 88,
@@ -882,15 +965,17 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 75: 1920x1080p @ 50Hz */
        {.refresh = 50, .xres = 1920, .yres = 1080, .pixclock = 6734,
-        .left_margin = 148, .right_margin = 528,
+         .left_margin = 148, .right_margin = 528,
         .upper_margin = 36, .lower_margin = 4,
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 76: 1920x1080p @ 60Hz */
        {.refresh = 60, .xres = 1920, .yres = 1080, .pixclock = 6734,
         .left_margin = 148, .right_margin = 88,
@@ -898,7 +983,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 77: 1920x1080p @ 100Hz */
        {.refresh = 100, .xres = 1920, .yres = 1080, .pixclock = 3367,
         .left_margin = 148, .right_margin = 528,
@@ -906,7 +992,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 78: 1920x1080p @ 120Hz */
        {.refresh = 120, .xres = 1920, .yres = 1080, .pixclock = 3367,
         .left_margin = 148, .right_margin = 88,
@@ -914,7 +1001,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 79: 1680x720p @ 24Hz */
        {.refresh = 24, .xres = 1680, .yres = 720, .pixclock = 16835,
         .left_margin = 220, .right_margin = 1360,
@@ -922,7 +1010,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 80: 1680x720p @ 25Hz */
        {.refresh = 25, .xres = 1680, .yres = 720, .pixclock = 16835,
         .left_margin = 220, .right_margin = 1228,
@@ -930,7 +1019,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 81: 1680x720p @ 30Hz */
        {.refresh = 30, .xres = 1680, .yres = 720, .pixclock = 16835,
         .left_margin = 220, .right_margin = 700,
@@ -938,7 +1028,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(59400000)},
        /* 82: 1680x720p @ 50Hz */
        {.refresh = 50, .xres = 1680, .yres = 720, .pixclock = 12121,
         .left_margin = 220, .right_margin = 260,
@@ -946,7 +1037,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(82500000)},
        /* 83: 1680x720p @ 60Hz */
        {.refresh = 60, .xres = 1680, .yres = 720, .pixclock = 10101,
         .left_margin = 220, .right_margin = 260,
@@ -954,7 +1046,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(99000000)},
        /* 84: 1680x720p @ 100Hz */
        {.refresh = 100, .xres = 1680, .yres = 720, .pixclock = 6060,
         .left_margin = 220, .right_margin = 60,
@@ -962,7 +1055,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(165000000)},
        /* 85: 1680x720p @ 120Hz */
        {.refresh = 120, .xres = 1680, .yres = 720, .pixclock = 5050,
         .left_margin = 220, .right_margin = 60,
@@ -970,7 +1064,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 40, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(198000000)},
        /* 86: 2560x1080p @ 24Hz */
        {.refresh = 24, .xres = 2560, .yres = 1080, .pixclock = 10101,
         .left_margin = 148, .right_margin = 998,
@@ -978,7 +1073,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(99000000)},
        /* 87: 2560x1080p @ 25Hz */
        {.refresh = 25, .xres = 2560, .yres = 1080, .pixclock = 11111,
         .left_margin = 148, .right_margin = 448,
@@ -986,7 +1082,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(90000000)},
        /* 88: 2560x1080p @ 30Hz */
        {.refresh = 30, .xres = 2560, .yres = 1080, .pixclock = 8417,
         .left_margin = 148, .right_margin = 768,
@@ -994,7 +1091,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(118800000)},
        /* 89: 2560x1080p @ 50Hz */
        {.refresh = 50, .xres = 2560, .yres = 1080, .pixclock = 5387,
         .left_margin = 148, .right_margin = 548,
@@ -1002,7 +1100,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(185625000)},
        /* 90: 2560x1080p @ 60Hz */
        {.refresh = 60, .xres = 2560, .yres = 1080, .pixclock = 5050,
         .left_margin = 148, .right_margin = 248,
@@ -1010,7 +1109,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(198000000)},
        /* 91: 2560x1080p @ 100Hz */
        {.refresh = 100, .xres = 2560, .yres = 1080, .pixclock = 2693,
         .left_margin = 148, .right_margin = 218,
@@ -1018,7 +1118,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(371250000)},
        /* 92: 2560x1080p @ 120Hz */
        {.refresh = 120, .xres = 2560, .yres = 1080, .pixclock = 2020,
         .left_margin = 148, .right_margin = 548,
@@ -1026,7 +1127,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 44, .vsync_len = 5,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(495000000)},
        /* 93: 3840x2160p @ 24Hz */
        {.refresh = 24, .xres = 3840, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 1276,
@@ -1034,7 +1136,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 94: 3840x2160p @ 25Hz */
        {.refresh = 25, .xres = 3840, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 1056,
@@ -1042,7 +1145,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 95: 3840x2160p @ 30Hz */
        {.refresh = 30, .xres = 3840, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 176,
@@ -1050,7 +1154,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 96: 3840x2160p @ 50Hz */
        {.refresh = 50, .xres = 3840, .yres = 2160, .pixclock = 1683,
         .left_margin = 296, .right_margin = 1056,
@@ -1058,7 +1163,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(594000000)},
        /* 97: 3840x2160p @ 60Hz */
        {.refresh = 60, .xres = 3840, .yres = 2160, .pixclock = 1683,
         .left_margin = 296, .right_margin = 176,
@@ -1066,7 +1172,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(594000000)},
        /* 98: 4096x2160p @ 24Hz */
        {.refresh = 24, .xres = 4096, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 1020,
@@ -1074,7 +1181,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_256_135,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 99: 4096x2160p @ 25Hz */
        {.refresh = 25, .xres = 4096, .yres = 2160, .pixclock = 3367,
         .left_margin = 128, .right_margin = 968,
@@ -1082,7 +1190,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_256_135,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 100: 4096x2160p @ 30Hz */
        {.refresh = 30, .xres = 4096, .yres = 2160, .pixclock = 3367,
         .left_margin = 128, .right_margin = 88,
@@ -1090,7 +1199,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_256_135,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 101: 4096x2160p @ 50Hz */
        {.refresh = 50, .xres = 4096, .yres = 2160, .pixclock = 1683,
         .left_margin = 128, .right_margin = 968,
@@ -1098,7 +1208,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_256_135,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(594000000)},
        /* 102: 4096x2160p @ 60Hz */
        {.refresh = 60, .xres = 4096, .yres = 2160, .pixclock = 1683,
         .left_margin = 128, .right_margin = 88,
@@ -1106,7 +1217,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_256_135,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(594000000)},
        /* 103: 3840x2160p @ 24Hz */
        {.refresh = 24, .xres = 3840, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 1276,
@@ -1114,7 +1226,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 104: 3840x2160p @ 25Hz */
        {.refresh = 25, .xres = 3840, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 1056,
@@ -1122,7 +1235,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 105: 3840x2160p @ 30Hz */
        {.refresh = 30, .xres = 3840, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 176,
@@ -1130,7 +1244,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* 106: 3840x2160p @ 50Hz */
        {.refresh = 50, .xres = 3840, .yres = 2160, .pixclock = 1683,
         .left_margin = 296, .right_margin = 1056,
@@ -1138,7 +1253,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(594000000)},
        /* 107: 3840x2160p @ 60Hz */
        {.refresh = 60, .xres = 3840, .yres = 2160, .pixclock = 1683,
         .left_margin = 296, .right_margin = 176,
@@ -1146,7 +1262,8 @@ const struct fb_videomode cea_modes[] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_64_27,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(594000000)},
 };
 EXPORT_SYMBOL(cea_modes);
 
@@ -1159,7 +1276,8 @@ const struct fb_videomode hdmi_ext_modes[HDMI_EXT_MODEDB_SIZE] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* HDMI_VIC 0x02: 3840x2160p @ 25Hz */
        {.refresh = 25, .xres = 3840, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 1056,
@@ -1167,7 +1285,8 @@ const struct fb_videomode hdmi_ext_modes[HDMI_EXT_MODEDB_SIZE] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* HDMI_VIC 0x03: 3840x2160p @ 23.98/24Hz */
        {.refresh = 24, .xres = 3840, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 1276,
@@ -1175,7 +1294,8 @@ const struct fb_videomode hdmi_ext_modes[HDMI_EXT_MODEDB_SIZE] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
        /* HDMI_VIC 0x04: 4096x2160p @ 24Hz */
        {.refresh = 24, .xres = 4096, .yres = 2160, .pixclock = 3367,
         .left_margin = 296, .right_margin = 1020,
@@ -1183,296 +1303,383 @@ const struct fb_videomode hdmi_ext_modes[HDMI_EXT_MODEDB_SIZE] = {
         .hsync_len = 88, .vsync_len = 10,
         .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
         .flag = FB_FLAG_RATIO_16_9,
-        .vmode = FB_VMODE_NONINTERLACED},
+        .vmode = FB_VMODE_NONINTERLACED,
+        PCLK_HZ_PARAM(297000000)},
 };
 EXPORT_SYMBOL(hdmi_ext_modes);
 
 const struct fb_videomode vesa_modes[VESA_MODEDB_SIZE] = {
        /* 0 640x350-85 VESA */
        { NULL, 85, 640, 350, 31746, 96, 32, 60, 32, 64, 3,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(31500000) },
        /* 1 640x400-85 VESA */
        { NULL, 85, 640, 400, 31746, 96, 32, 41, 1, 64, 3,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(31500000) },
        /* 2 720x400-85 VESA */
        { NULL, 85, 720, 400, 28169, 108, 36, 42, 1, 72, 3,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(35500000) },
        /* 3 640x480-60 VESA */
        { NULL, 60, 640, 480, 39722, 48, 16, 33, 10, 96, 2,
-         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(25180000) },
        /* 4 640x480-72 VESA */
        { NULL, 72, 640, 480, 31746, 128, 24, 29, 9, 40, 2,
-         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(31500000) },
        /* 5 640x480-75 VESA */
        { NULL, 75, 640, 480, 31746, 120, 16, 16, 1, 64, 3,
-         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(31500000) },
        /* 6 640x480-85 VESA */
        { NULL, 85, 640, 480, 27777, 80, 56, 25, 1, 56, 3,
-         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(36000000) },
        /* 7 800x600-56 VESA */
        { NULL, 56, 800, 600, 27777, 128, 24, 22, 1, 72, 2,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(36000000) },
        /* 8 800x600-60 VESA */
        { NULL, 60, 800, 600, 25000, 88, 40, 23, 1, 128, 4,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(40000000) },
        /* 9 800x600-72 VESA */
        { NULL, 72, 800, 600, 20000, 64, 56, 23, 37, 120, 6,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(50000000) },
        /* 10 800x600-75 VESA */
        { NULL, 75, 800, 600, 20202, 160, 16, 21, 1, 80, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(49500000) },
        /* 11 800x600-85 VESA */
        { NULL, 85, 800, 600, 17777, 152, 32, 27, 1, 64, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(56250000) },
        /* 12 800x600-120 VESA */
        { NULL, 120, 800, 600, 13651, 80, 48, 29, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(73250000) },
        /* 13 848x480-60 VESA */
        { NULL, 60, 848, 480, 29629, 112, 16, 23, 6, 112, 8,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(33750000) },
        /* 14 1024x768-43 VESA */
        { NULL, 43, 1024, 768, 22271, 56, 8, 45, 0, 176, 4,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(44900000) },
        /* 15 1024x768-60 VESA */
        { NULL, 60, 1024, 768, 15384, 160, 24, 29, 3, 136, 6,
-         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(65000000) },
        /* 16 1024x768-70 VESA */
        { NULL, 70, 1024, 768, 13333, 144, 24, 29, 3, 136, 6,
-         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         0, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(75000000) },
        /* 17 1024x768-75 VESA */
        { NULL, 75, 1024, 768, 12698, 176, 16, 28, 1, 96, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(78750000) },
        /* 18 1024x768-85 VESA */
        { NULL, 85, 1024, 768, 10582, 208, 48, 36, 1, 96, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(94500000) },
        /* 19 1024x768-120 VESA */
        { NULL, 120, 1024, 768, 8658, 80, 48, 38, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(115500000) },
        /* 20 1152x864-75 VESA */
        { NULL, 75, 1152, 864, 9259, 256, 64, 32, 1, 128, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(108000000) },
        /* 21 1280x768-60 VESA */
        { NULL, 60, 1280, 768, 14652, 80, 48, 12, 3, 32, 7,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(68250000) },
        /* 22 1280x768-60 VESA */
        { NULL, 60, 1280, 768, 12578, 192, 64, 20, 3, 128, 7,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(79500000) },
        /* 23 1280x768-75 VESA */
        { NULL, 75, 1280, 768, 9779, 208, 80, 27, 3, 128, 7,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(102250000) },
        /* 24 1280x768-85 VESA */
        { NULL, 85, 1280, 768, 8510, 216, 80, 31, 3, 136, 7,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(117500000) },
        /* 25 1280x768-120 VESA */
        { NULL, 120, 1280, 768, 7130, 80, 48, 35, 3, 32, 7,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(140250000) },
        /* 26 1280x800-60 VESA */
        { NULL, 60, 1280, 800, 14084, 80, 48, 14, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(71000000) },
        /* 27 1280x800-60 VESA */
        { NULL, 60, 1280, 800, 11976, 200, 72, 22, 3, 128, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(83500000) },
        /* 28 1280x800-75 VESA */
        { NULL, 75, 1280, 800, 9389, 208, 80, 29, 3, 128, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(106500000) },
        /* 29 1280x800-85 VESA */
        { NULL, 85, 1280, 800, 8163, 216, 80, 34, 3, 136, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(122500000) },
        /* 30 1280x800-120 VESA */
        { NULL, 120, 1280, 800, 6837, 80, 48, 38, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(146250000) },
        /* 31 1280x960-60 VESA */
        { NULL, 60, 1280, 960, 9259, 312, 96, 36, 1, 112, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(108000000) },
        /* 32 1280x960-85 VESA */
        { NULL, 85, 1280, 960, 6734, 224, 64, 47, 1, 160, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(148500000) },
        /* 33 1280x960-120 VESA */
        { NULL, 120, 1280, 960, 5698, 80, 48, 50, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(175500000) },
        /* 34 1280x1024-60 VESA */
        { NULL, 60, 1280, 1024, 9262, 248, 48, 38, 1, 112, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(108000000) },
        /* 35 1280x1024-75 VESA */
        { NULL, 75, 1280, 1024, 7407, 248, 16, 38, 1, 144, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(135000000) },
        /* 36 1280x1024-85 VESA */
        { NULL, 85, 1280, 1024, 6349, 224, 64, 44, 1, 160, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(157500000) },
        /* 37 1280x1024-120 VESA */
        { NULL, 120, 1280, 1024, 5340, 80, 48, 50, 3, 32, 7,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(187250000) },
        /* 38 1360x768-60 VESA */
        { NULL, 60, 1360, 768, 11695, 256, 64, 18, 3, 112, 6,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(85500000) },
        /* 39 1360x768-120 VESA */
        { NULL, 120, 1360, 768, 6745, 80, 48, 37, 3, 32, 5,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(148250000) },
        /* 40 1400x1050-60 VESA */
        { NULL, 60, 1400, 1050, 9900, 80, 48, 23, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(101000000) },
        /* 41 1400x1050-60 VESA */
        { NULL, 60, 1400, 1050, 8213, 232, 88, 32, 3, 144, 4,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(121750000) },
        /* 42 1400x1050-75 VESA */
        { NULL, 75, 1400, 1050, 6410, 248, 104, 42, 3, 144, 4,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(156000000) },
        /* 43 1400x1050-85 VESA */
        { NULL, 85, 1400, 1050, 5571, 256, 104, 48, 3, 152, 4,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(179500000) },
        /* 44 1400x1050-120 VESA */
        { NULL, 120, 1400, 1050, 4807, 80, 48, -7, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(208000000) },
        /* 45 1440x900-60 VESA */
        { NULL, 60, 1440, 900, 11267, 80, 48, 17, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(88750000) },
        /* 46 1440x900-60 VESA */
        { NULL, 60, 1440, 900, 9389, 232, 80, 25, 3, 152, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(106500000) },
        /* 47 1440x900-75 VESA */
        { NULL, 75, 1440, 900, 7312, 248, 96, 33, 3, 152, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(136750000) },
        /* 48 1440x900-85 VESA */
        { NULL, 85, 1440, 900, 6369, 256, 104, 39, 3, 152, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(157000000) },
        /* 49 1440x900-120 VESA */
        { NULL, 120, 1440, 900, 5471, 80, 48, 44, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(182750000) },
        /* 50 1600x1200-60 VESA */
        { NULL, 60, 1600, 1200, 6172, 304, 64, 46, 1, 192, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(162000000) },
        /* 51 1600x1200-65 VESA */
        { NULL, 65, 1600, 1200, 5698, 304, 64, 46, 1, 192, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(175500000) },
        /* 52 1600x1200-70 VESA */
        { NULL, 70, 1600, 1200, 5291, 304, 64, 46, 1, 192, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(189000000) },
        /* 53 1600x1200-75 VESA */
        { NULL, 75, 1600, 1200, 4938, 304, 64, 46, 1, 192, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(202500000) },
        /* 54 1600x1200-85 VESA */
        { NULL, 85, 1600, 1200, 4357, 304, 64, 46, 1, 192, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(229500000) },
        /* 55 1600x1200-120 VESA */
        { NULL, 120, 1600, 1200, 3727, 80, 48, 64, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(268250000) },
        /* 56 1680x1050-60 VESA */
        { NULL, 60, 1680, 1050, 8403, 80, 48, 21, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(119000000) },
        /* 57 1680x1050-60 VESA */
        { NULL, 60, 1680, 1050, 6837, 280, 104, 30, 3, 176, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(146250000) },
        /* 58 1680x1050-75 VESA */
        { NULL, 75, 1680, 1050, 5347, 296, 120, 40, 3, 176, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(187000000) },
        /* 59 1680x1050-85 VESA */
        { NULL, 85, 1680, 1050, 4656, 304, 128, 46, 3, 176, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(214750000) },
        /* 60 1680x1050-120 VESA */
        { NULL, 120, 1680, 1050, 4073, 80, 48, 53, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(245500000) },
        /* 61 1792x1344-60 VESA */
        { NULL, 60, 1792, 1344, 4884, 328, 128, 46, 1, 200, 3,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(204750000) },
        /* 62 1792x1344-75 VESA */
        { NULL, 75, 1792, 1344, 3831, 352, 96, 69, 1, 216, 3,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(261000000) },
        /* 63 1792x1344-120 VESA */
        { NULL, 120, 1792, 1344, 3000, 80, 48, 72, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(333250000) },
        /* 64 1856x1392-60 VESA */
        { NULL, 60, 1856, 1392, 4581, 352, 96, 43, 1, 224, 3,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(218250000) },
        /* 65 1856x1392-75 VESA */
        { NULL, 75, 1856, 1392, 3472, 352, 128, 104, 1, 224, 3,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(288000000) },
        /* 66 1856x1392-120 VESA */
        { NULL, 120, 1856, 1392, 2805, 80, 48, 75, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(356500000) },
        /* 67 1920x1200-60 VESA */
        { NULL, 60, 1920, 1200, 6493, 80, 48, 26, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(154000000) },
        /* 68 1920x1200-60 VESA */
        { NULL, 60, 1920, 1200, 5174, 336, 136, 36, 3, 200, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(193250000) },
        /* 69 1920x1200-75 VESA */
        { NULL, 75, 1920, 1200, 4077, 344, 136, 46, 3, 208, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(245250000) },
        /* 70 1920x1200-85 VESA */
        { NULL, 85, 1920, 1200, 3555, 352, 144, 53, 3, 208, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(281250000) },
        /* 71 1920x1200-120 VESA */
        { NULL, 120, 1920, 1200, 3154, 80, 48, 62, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(317000000) },
        /* 72 1920x1440-60 VESA */
        { NULL, 60, 1920, 1440, 4273, 344, 128, 56, 1, 208, 3,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(234000000) },
        /* 73 1920x1440-75 VESA */
        { NULL, 75, 1920, 1440, 3367, 352, 144, 56, 1, 224, 3,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(297000000) },
        /* 74 1920x1440-120 VESA */
        { NULL, 120, 1920, 1440, 2628, 80, 48, 78, 3, 32, 4,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(380500000) },
        /* 75 2560x1600-60 VESA */
        { NULL, 60, 2560, 1600, 3724, 80, 48, 37, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(268500000) },
        /* 76 2560x1600-60 VESA */
        { NULL, 60, 2560, 1600, 2869, 472, 192, 49, 3, 280, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(348500000) },
        /* 77 2560x1600-75 VESA */
        { NULL, 75, 2560, 1600, 2256, 488, 208, 63, 3, 280, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(443250000) },
        /* 78 2560x1600-85 VESA */
        { NULL, 85, 2560, 1600, 1979, 488, 208, 73, 3, 280, 6,
-         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(505250000) },
        /* 79 2560x1600-120 VESA */
        { NULL, 120, 2560, 1600, 1809, 80, 48, 85, 3, 32, 6,
-         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_SYNC_HOR_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(552750000) },
        /* 80 1366x768-60 VESA */
        { NULL, 60, 1366, 768, 11695, 213, 70, 24, 3, 143, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(85500000) },
        /* 81 1920x1080-60 VESA */
        { NULL, 60, 1920, 1080, 6734, 148, 88, 36, 4, 44, 5,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(148500000) },
        /* 82 1600x900-60 VESA */
        { NULL, 60, 1600, 900, 9259, 96, 24, 96, 1, 80, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(108000000) },
        /* 83 2048x1152-60 VESA */
        { NULL, 60, 2048, 1152, 6172, 96, 26, 44, 1, 80, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(162000000) },
        /* 84 1280x720-60 VESA */
        { NULL, 60, 1280, 720, 13468, 220, 110, 20, 5, 40, 5,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(74250000) },
        /* 85 1366x768-60 VESA */
        { NULL, 60, 1366, 768, 13888, 64, 14, 28, 1, 56, 3,
          FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA },
+         FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA,
+         PCLK_HZ_VALUE(72000000) },
 };
 EXPORT_SYMBOL(vesa_modes);
 
@@ -1893,6 +2100,10 @@ void fb_var_to_videomode(struct fb_videomode *mode,
        mode->xres = var->xres;
        mode->yres = var->yres;
        mode->pixclock = var->pixclock;
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+       /* Initialize pixclock_hz to avoid having random value */
+       mode->pixclock_hz = 0;
+#endif
        mode->hsync_len = var->hsync_len;
        mode->vsync_len = var->vsync_len;
        mode->left_margin = var->left_margin;
index b3078bfe336f4beccd234f091613e086dd83e1f5..e5a368b592b0f5b7e5f9692c37569697f7085e4c 100644 (file)
@@ -810,6 +810,9 @@ struct fb_videomode {
        u32 sync;
        u32 vmode;
        u32 flag;
+#if defined(CONFIG_FB_MODE_PIXCLOCK_HZ)
+       u32 pixclock_hz;
+#endif
 };
 
 struct dmt_videomode {