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;