video: tegra: transmute HDMI modes into supported ones

Change-Id: I37222e9d1617a0ace062e05740365cfe5c0c2af8
Signed-off-by: Erik Gilling <konkers@android.com>
This commit is contained in:
Erik Gilling
2010-10-26 15:29:11 -07:00
parent 06d191b17b
commit e4886b1e1b

View 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;