From: Erik Gilling Date: Tue, 26 Oct 2010 22:29:11 +0000 (-0700) Subject: video: tegra: transmute HDMI modes into supported ones X-Git-Tag: firefly_0821_release~9833^2~140^2~1 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=e4886b1e1b098af06720724770622caaa9721dc9;p=firefly-linux-kernel-4.4.55.git video: tegra: transmute HDMI modes into supported ones Change-Id: I37222e9d1617a0ace062e05740365cfe5c0c2af8 Signed-off-by: Erik Gilling --- diff --git a/drivers/video/tegra/dc/hdmi.c b/drivers/video/tegra/dc/hdmi.c index 58ad135b90cc..acc3b36ea046 100644 --- a/drivers/video/tegra/dc/hdmi.c +++ b/drivers/video/tegra/dc/hdmi.c @@ -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;