Lines Matching +full:next +full:- +full:mode

2  * Copyright © 2006-2010 Intel Corporation
12 * The above copyright notice and this permission notice (including the next
28 * Chris Wilson <chris@chris-wilson.co.uk>
49 if (display->params.panel_use_ssc >= 0) in intel_panel_use_ssc()
50 return display->params.panel_use_ssc != 0; in intel_panel_use_ssc()
51 return display->vbt.lvds_use_ssc && in intel_panel_use_ssc()
58 return list_first_entry_or_null(&connector->panel.fixed_modes, in intel_panel_preferred_fixed_mode()
71 * With VRR always pick a mode with equal/higher than requested in is_best_fixed_mode()
81 return abs(fixed_mode_vrefresh - vrefresh) < in is_best_fixed_mode()
82 abs(drm_mode_vrefresh(best_mode) - vrefresh); in is_best_fixed_mode()
87 const struct drm_display_mode *mode) in intel_panel_fixed_mode() argument
90 int vrefresh = drm_mode_vrefresh(mode); in intel_panel_fixed_mode()
92 list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) { in intel_panel_fixed_mode()
103 static bool is_alt_drrs_mode(const struct drm_display_mode *mode, in is_alt_drrs_mode() argument
106 return drm_mode_match(mode, preferred_mode, in is_alt_drrs_mode()
110 mode->clock != preferred_mode->clock; in is_alt_drrs_mode()
113 static bool is_alt_fixed_mode(const struct drm_display_mode *mode, in is_alt_fixed_mode() argument
119 return (mode->flags & ~sync_flags) == (preferred_mode->flags & ~sync_flags) && in is_alt_fixed_mode()
120 mode->hdisplay == preferred_mode->hdisplay && in is_alt_fixed_mode()
121 mode->vdisplay == preferred_mode->vdisplay; in is_alt_fixed_mode()
129 int min_vrefresh = connector->panel.vbt.seamless_drrs_min_refresh_rate; in intel_panel_downclock_mode()
133 list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) { in intel_panel_downclock_mode()
153 list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) { in intel_panel_highest_mode()
154 if (fixed_mode->clock > best_mode->clock) in intel_panel_highest_mode()
166 list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) { in intel_panel_get_modes()
167 struct drm_display_mode *mode; in intel_panel_get_modes() local
169 mode = drm_mode_duplicate(connector->base.dev, fixed_mode); in intel_panel_get_modes()
170 if (mode) { in intel_panel_get_modes()
171 drm_mode_probed_add(&connector->base, mode); in intel_panel_get_modes()
183 list_for_each_entry(mode1, &connector->panel.fixed_modes, head) { in has_drrs_modes()
186 list_for_each_entry_continue(mode2, &connector->panel.fixed_modes, head) { in has_drrs_modes()
197 return connector->panel.vbt.drrs_type; in intel_panel_drrs_type()
228 if (abs(vrefresh - fixed_mode_vrefresh) > 1) { in intel_panel_compute_config()
229 drm_dbg_kms(connector->base.dev, in intel_panel_compute_config()
230 … "[CONNECTOR:%d:%s] Requested mode vrefresh (%d Hz) does not match fixed mode vrefresh (%d Hz)\n", in intel_panel_compute_config()
231 connector->base.base.id, connector->base.name, in intel_panel_compute_config()
234 return -EINVAL; in intel_panel_compute_config()
241 adjusted_mode->vtotal = in intel_panel_compute_config()
242 DIV_ROUND_CLOSEST(adjusted_mode->clock * 1000, in intel_panel_compute_config()
243 adjusted_mode->htotal * vrefresh); in intel_panel_compute_config()
255 struct drm_display_mode *mode, *next; in intel_panel_add_edid_alt_fixed_modes() local
257 list_for_each_entry_safe(mode, next, &connector->base.probed_modes, head) { in intel_panel_add_edid_alt_fixed_modes()
258 if (!is_alt_fixed_mode(mode, preferred_mode)) in intel_panel_add_edid_alt_fixed_modes()
261 drm_dbg_kms(display->drm, in intel_panel_add_edid_alt_fixed_modes()
262 "[CONNECTOR:%d:%s] using alternate EDID fixed mode: " DRM_MODE_FMT "\n", in intel_panel_add_edid_alt_fixed_modes()
263 connector->base.base.id, connector->base.name, in intel_panel_add_edid_alt_fixed_modes()
264 DRM_MODE_ARG(mode)); in intel_panel_add_edid_alt_fixed_modes()
266 list_move_tail(&mode->head, &connector->panel.fixed_modes); in intel_panel_add_edid_alt_fixed_modes()
275 if (list_empty(&connector->base.probed_modes)) in intel_panel_add_edid_preferred_mode()
278 /* make sure the preferred mode is first */ in intel_panel_add_edid_preferred_mode()
279 list_for_each_entry(scan, &connector->base.probed_modes, head) { in intel_panel_add_edid_preferred_mode()
280 if (scan->type & DRM_MODE_TYPE_PREFERRED) { in intel_panel_add_edid_preferred_mode()
287 fixed_mode = list_first_entry(&connector->base.probed_modes, in intel_panel_add_edid_preferred_mode()
290 drm_dbg_kms(display->drm, in intel_panel_add_edid_preferred_mode()
291 "[CONNECTOR:%d:%s] using %s EDID fixed mode: " DRM_MODE_FMT "\n", in intel_panel_add_edid_preferred_mode()
292 connector->base.base.id, connector->base.name, in intel_panel_add_edid_preferred_mode()
293 fixed_mode->type & DRM_MODE_TYPE_PREFERRED ? "preferred" : "first", in intel_panel_add_edid_preferred_mode()
296 fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; in intel_panel_add_edid_preferred_mode()
298 list_move_tail(&fixed_mode->head, &connector->panel.fixed_modes); in intel_panel_add_edid_preferred_mode()
304 struct drm_display_mode *mode, *next; in intel_panel_destroy_probed_modes() local
306 list_for_each_entry_safe(mode, next, &connector->base.probed_modes, head) { in intel_panel_destroy_probed_modes()
307 drm_dbg_kms(display->drm, in intel_panel_destroy_probed_modes()
308 "[CONNECTOR:%d:%s] not using EDID mode: " DRM_MODE_FMT "\n", in intel_panel_destroy_probed_modes()
309 connector->base.base.id, connector->base.name, in intel_panel_destroy_probed_modes()
310 DRM_MODE_ARG(mode)); in intel_panel_destroy_probed_modes()
311 list_del(&mode->head); in intel_panel_destroy_probed_modes()
312 drm_mode_destroy(display->drm, mode); in intel_panel_destroy_probed_modes()
330 struct drm_display_info *info = &connector->base.display_info; in intel_panel_add_fixed_mode()
335 fixed_mode->type |= DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; in intel_panel_add_fixed_mode()
337 info->width_mm = fixed_mode->width_mm; in intel_panel_add_fixed_mode()
338 info->height_mm = fixed_mode->height_mm; in intel_panel_add_fixed_mode()
340 drm_dbg_kms(display->drm, "[CONNECTOR:%d:%s] using %s fixed mode: " DRM_MODE_FMT "\n", in intel_panel_add_fixed_mode()
341 connector->base.base.id, connector->base.name, type, in intel_panel_add_fixed_mode()
344 list_add_tail(&fixed_mode->head, &connector->panel.fixed_modes); in intel_panel_add_fixed_mode()
350 const struct drm_display_mode *mode; in intel_panel_add_vbt_lfp_fixed_mode() local
352 mode = connector->panel.vbt.lfp_vbt_mode; in intel_panel_add_vbt_lfp_fixed_mode()
353 if (!mode) in intel_panel_add_vbt_lfp_fixed_mode()
357 drm_mode_duplicate(display->drm, mode), in intel_panel_add_vbt_lfp_fixed_mode()
364 const struct drm_display_mode *mode; in intel_panel_add_vbt_sdvo_fixed_mode() local
366 mode = connector->panel.vbt.sdvo_lvds_vbt_mode; in intel_panel_add_vbt_sdvo_fixed_mode()
367 if (!mode) in intel_panel_add_vbt_sdvo_fixed_mode()
371 drm_mode_duplicate(display->drm, mode), in intel_panel_add_vbt_sdvo_fixed_mode()
386 struct intel_display *display = to_intel_display(connector->dev); in intel_panel_detect()
392 return connector->status; in intel_panel_detect()
399 const struct drm_display_mode *mode) in intel_panel_mode_valid() argument
402 intel_panel_fixed_mode(connector, mode); in intel_panel_mode_valid()
407 if (mode->hdisplay != fixed_mode->hdisplay) in intel_panel_mode_valid()
410 if (mode->vdisplay != fixed_mode->vdisplay) in intel_panel_mode_valid()
413 if (drm_mode_vrefresh(mode) != drm_mode_vrefresh(fixed_mode)) in intel_panel_mode_valid()
421 struct intel_panel *panel = &connector->panel; in intel_panel_init_alloc()
423 connector->panel.vbt.panel_type = -1; in intel_panel_init_alloc()
424 connector->panel.vbt.backlight.controller = -1; in intel_panel_init_alloc()
425 INIT_LIST_HEAD(&panel->fixed_modes); in intel_panel_init_alloc()
431 struct intel_panel *panel = &connector->panel; in intel_panel_init()
433 panel->fixed_edid = fixed_edid; in intel_panel_init()
438 connector->panel.vbt.drrs_type = DRRS_TYPE_NONE; in intel_panel_init()
440 drm_dbg_kms(connector->base.dev, in intel_panel_init()
442 connector->base.base.id, connector->base.name, in intel_panel_init()
450 struct intel_panel *panel = &connector->panel; in intel_panel_fini()
451 struct drm_display_mode *fixed_mode, *next; in intel_panel_fini() local
453 if (!IS_ERR_OR_NULL(panel->fixed_edid)) in intel_panel_fini()
454 drm_edid_free(panel->fixed_edid); in intel_panel_fini()
460 list_for_each_entry_safe(fixed_mode, next, &panel->fixed_modes, head) { in intel_panel_fini()
461 list_del(&fixed_mode->head); in intel_panel_fini()
462 drm_mode_destroy(connector->base.dev, fixed_mode); in intel_panel_fini()