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;