|
@@ -2930,11 +2930,15 @@ cea_mode_alternate_timings(u8 vic, struct drm_display_mode *mode)
|
|
static u8 drm_match_cea_mode_clock_tolerance(const struct drm_display_mode *to_match,
|
|
static u8 drm_match_cea_mode_clock_tolerance(const struct drm_display_mode *to_match,
|
|
unsigned int clock_tolerance)
|
|
unsigned int clock_tolerance)
|
|
{
|
|
{
|
|
|
|
+ unsigned int match_flags = DRM_MODE_MATCH_TIMINGS | DRM_MODE_MATCH_FLAGS;
|
|
u8 vic;
|
|
u8 vic;
|
|
|
|
|
|
if (!to_match->clock)
|
|
if (!to_match->clock)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
|
|
+ if (to_match->picture_aspect_ratio)
|
|
|
|
+ match_flags |= DRM_MODE_MATCH_ASPECT_RATIO;
|
|
|
|
+
|
|
for (vic = 1; vic < ARRAY_SIZE(edid_cea_modes); vic++) {
|
|
for (vic = 1; vic < ARRAY_SIZE(edid_cea_modes); vic++) {
|
|
struct drm_display_mode cea_mode = edid_cea_modes[vic];
|
|
struct drm_display_mode cea_mode = edid_cea_modes[vic];
|
|
unsigned int clock1, clock2;
|
|
unsigned int clock1, clock2;
|
|
@@ -2948,7 +2952,7 @@ static u8 drm_match_cea_mode_clock_tolerance(const struct drm_display_mode *to_m
|
|
continue;
|
|
continue;
|
|
|
|
|
|
do {
|
|
do {
|
|
- if (drm_mode_equal_no_clocks_no_stereo(to_match, &cea_mode))
|
|
|
|
|
|
+ if (drm_mode_match(to_match, &cea_mode, match_flags))
|
|
return vic;
|
|
return vic;
|
|
} while (cea_mode_alternate_timings(vic, &cea_mode));
|
|
} while (cea_mode_alternate_timings(vic, &cea_mode));
|
|
}
|
|
}
|
|
@@ -2965,11 +2969,15 @@ static u8 drm_match_cea_mode_clock_tolerance(const struct drm_display_mode *to_m
|
|
*/
|
|
*/
|
|
u8 drm_match_cea_mode(const struct drm_display_mode *to_match)
|
|
u8 drm_match_cea_mode(const struct drm_display_mode *to_match)
|
|
{
|
|
{
|
|
|
|
+ unsigned int match_flags = DRM_MODE_MATCH_TIMINGS | DRM_MODE_MATCH_FLAGS;
|
|
u8 vic;
|
|
u8 vic;
|
|
|
|
|
|
if (!to_match->clock)
|
|
if (!to_match->clock)
|
|
return 0;
|
|
return 0;
|
|
|
|
|
|
|
|
+ if (to_match->picture_aspect_ratio)
|
|
|
|
+ match_flags |= DRM_MODE_MATCH_ASPECT_RATIO;
|
|
|
|
+
|
|
for (vic = 1; vic < ARRAY_SIZE(edid_cea_modes); vic++) {
|
|
for (vic = 1; vic < ARRAY_SIZE(edid_cea_modes); vic++) {
|
|
struct drm_display_mode cea_mode = edid_cea_modes[vic];
|
|
struct drm_display_mode cea_mode = edid_cea_modes[vic];
|
|
unsigned int clock1, clock2;
|
|
unsigned int clock1, clock2;
|
|
@@ -2983,7 +2991,7 @@ u8 drm_match_cea_mode(const struct drm_display_mode *to_match)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
do {
|
|
do {
|
|
- if (drm_mode_equal_no_clocks_no_stereo(to_match, &cea_mode))
|
|
|
|
|
|
+ if (drm_mode_match(to_match, &cea_mode, match_flags))
|
|
return vic;
|
|
return vic;
|
|
} while (cea_mode_alternate_timings(vic, &cea_mode));
|
|
} while (cea_mode_alternate_timings(vic, &cea_mode));
|
|
}
|
|
}
|
|
@@ -3030,6 +3038,7 @@ hdmi_mode_alternate_clock(const struct drm_display_mode *hdmi_mode)
|
|
static u8 drm_match_hdmi_mode_clock_tolerance(const struct drm_display_mode *to_match,
|
|
static u8 drm_match_hdmi_mode_clock_tolerance(const struct drm_display_mode *to_match,
|
|
unsigned int clock_tolerance)
|
|
unsigned int clock_tolerance)
|
|
{
|
|
{
|
|
|
|
+ unsigned int match_flags = DRM_MODE_MATCH_TIMINGS | DRM_MODE_MATCH_FLAGS;
|
|
u8 vic;
|
|
u8 vic;
|
|
|
|
|
|
if (!to_match->clock)
|
|
if (!to_match->clock)
|
|
@@ -3047,7 +3056,7 @@ static u8 drm_match_hdmi_mode_clock_tolerance(const struct drm_display_mode *to_
|
|
abs(to_match->clock - clock2) > clock_tolerance)
|
|
abs(to_match->clock - clock2) > clock_tolerance)
|
|
continue;
|
|
continue;
|
|
|
|
|
|
- if (drm_mode_equal_no_clocks_no_stereo(to_match, hdmi_mode))
|
|
|
|
|
|
+ if (drm_mode_match(to_match, hdmi_mode, match_flags))
|
|
return vic;
|
|
return vic;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -3064,6 +3073,7 @@ static u8 drm_match_hdmi_mode_clock_tolerance(const struct drm_display_mode *to_
|
|
*/
|
|
*/
|
|
static u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match)
|
|
static u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match)
|
|
{
|
|
{
|
|
|
|
+ unsigned int match_flags = DRM_MODE_MATCH_TIMINGS | DRM_MODE_MATCH_FLAGS;
|
|
u8 vic;
|
|
u8 vic;
|
|
|
|
|
|
if (!to_match->clock)
|
|
if (!to_match->clock)
|
|
@@ -3079,7 +3089,7 @@ static u8 drm_match_hdmi_mode(const struct drm_display_mode *to_match)
|
|
|
|
|
|
if ((KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock1) ||
|
|
if ((KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock1) ||
|
|
KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock2)) &&
|
|
KHZ2PICOS(to_match->clock) == KHZ2PICOS(clock2)) &&
|
|
- drm_mode_equal_no_clocks_no_stereo(to_match, hdmi_mode))
|
|
|
|
|
|
+ drm_mode_match(to_match, hdmi_mode, match_flags))
|
|
return vic;
|
|
return vic;
|
|
}
|
|
}
|
|
return 0;
|
|
return 0;
|