video: tegra: transmute HDMI modes into supported ones
authorErik Gilling <konkers@android.com>
Tue, 26 Oct 2010 22:29:11 +0000 (15:29 -0700)
committerErik Gilling <konkers@android.com>
Wed, 27 Oct 2010 01:20:13 +0000 (18:20 -0700)
Change-Id: I37222e9d1617a0ace062e05740365cfe5c0c2af8
Signed-off-by: Erik Gilling <konkers@android.com>
drivers/video/tegra/dc/hdmi.c

index 58ad135b90cc8a672a6de86d8eca2654dff9c165..acc3b36ea046977270708a227e1caf6981a9c94e 100644 (file)
@@ -391,23 +391,26 @@ static void hdmi_dumpregs(struct tegra_dc_hdmi_data *hdmi)
 static bool tegra_dc_hdmi_mode_equal(const struct fb_videomode *mode1,
                                        const struct fb_videomode *mode2)
 {
-       int diff = (s64)mode1->pixclock - (s64)mode2->pixclock;
-
        return mode1->xres      == mode2->xres &&
                mode1->yres     == mode2->yres &&
-               diff            < PIXCLOCK_TOLERANCE &&
-               diff            > -PIXCLOCK_TOLERANCE &&
                mode1->vmode    == mode2->vmode;
 }
 
 static bool tegra_dc_hdmi_mode_filter(struct fb_videomode *mode)
 {
        int i;
+       int clocks;
 
        for (i = 0; i < ARRAY_SIZE(tegra_dc_hdmi_supported_modes); i++) {
                if (tegra_dc_hdmi_mode_equal(&tegra_dc_hdmi_supported_modes[i],
-                                            mode))
+                                            mode)) {
+                       memcpy(mode, &tegra_dc_hdmi_supported_modes[i], sizeof(*mode));
+                       mode->flag = FB_MODE_IS_DETAILED;
+                       clocks = (mode->left_margin + mode->xres + mode->right_margin + mode->hsync_len) *
+                               (mode->upper_margin + mode->yres + mode->lower_margin + mode->vsync_len);
+                       mode->refresh = (PICOS2KHZ(mode->pixclock) * 1000) / clocks;
                        return true;
+               }
        }
 
        return false;