@@ -5971,12 +5971,14 @@ static void drm_parse_cea_ext(struct drm_connector *connector,
59715971}
59725972
59735973static
5974- void get_monitor_range (const struct detailed_timing * timing ,
5975- void * info_monitor_range )
5974+ void get_monitor_range (const struct detailed_timing * timing , void * c )
59765975{
5977- struct drm_monitor_range_info * monitor_range = info_monitor_range ;
5976+ struct detailed_mode_closure * closure = c ;
5977+ struct drm_display_info * info = & closure -> connector -> display_info ;
5978+ struct drm_monitor_range_info * monitor_range = & info -> monitor_range ;
59785979 const struct detailed_non_pixel * data = & timing -> data .other_data ;
59795980 const struct detailed_data_monitor_range * range = & data -> data .range ;
5981+ const struct edid * edid = closure -> drm_edid -> edid ;
59805982
59815983 if (!is_display_descriptor (timing , EDID_DETAIL_MONITOR_RANGE ))
59825984 return ;
@@ -5992,18 +5994,28 @@ void get_monitor_range(const struct detailed_timing *timing,
59925994
59935995 monitor_range -> min_vfreq = range -> min_vfreq ;
59945996 monitor_range -> max_vfreq = range -> max_vfreq ;
5997+
5998+ if (edid -> revision >= 4 ) {
5999+ if (data -> pad2 & DRM_EDID_RANGE_OFFSET_MIN_VFREQ )
6000+ monitor_range -> min_vfreq += 255 ;
6001+ if (data -> pad2 & DRM_EDID_RANGE_OFFSET_MAX_VFREQ )
6002+ monitor_range -> max_vfreq += 255 ;
6003+ }
59956004}
59966005
59976006static void drm_get_monitor_range (struct drm_connector * connector ,
59986007 const struct drm_edid * drm_edid )
59996008{
6000- struct drm_display_info * info = & connector -> display_info ;
6009+ const struct drm_display_info * info = & connector -> display_info ;
6010+ struct detailed_mode_closure closure = {
6011+ .connector = connector ,
6012+ .drm_edid = drm_edid ,
6013+ };
60016014
60026015 if (!version_greater (drm_edid , 1 , 1 ))
60036016 return ;
60046017
6005- drm_for_each_detailed_block (drm_edid , get_monitor_range ,
6006- & info -> monitor_range );
6018+ drm_for_each_detailed_block (drm_edid , get_monitor_range , & closure );
60076019
60086020 DRM_DEBUG_KMS ("Supported Monitor Refresh rate range is %d Hz - %d Hz\n" ,
60096021 info -> monitor_range .min_vfreq ,
0 commit comments