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>
48 if (display->params.panel_use_ssc >= 0) in intel_panel_use_ssc()
49 return display->params.panel_use_ssc != 0; in intel_panel_use_ssc()
50 return display->vbt.lvds_use_ssc && in intel_panel_use_ssc()
57 return list_first_entry_or_null(&connector->panel.fixed_modes, in intel_panel_preferred_fixed_mode()
70 * With VRR always pick a mode with equal/higher than requested in is_best_fixed_mode()
80 return abs(fixed_mode_vrefresh - vrefresh) < in is_best_fixed_mode()
81 abs(drm_mode_vrefresh(best_mode) - vrefresh); in is_best_fixed_mode()
86 const struct drm_display_mode *mode) in intel_panel_fixed_mode() argument
89 int vrefresh = drm_mode_vrefresh(mode); in intel_panel_fixed_mode()
91 list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) { in intel_panel_fixed_mode()
102 static bool is_alt_drrs_mode(const struct drm_display_mode *mode, in is_alt_drrs_mode() argument
105 return drm_mode_match(mode, preferred_mode, in is_alt_drrs_mode()
109 mode->clock != preferred_mode->clock; in is_alt_drrs_mode()
112 static bool is_alt_fixed_mode(const struct drm_display_mode *mode, in is_alt_fixed_mode() argument
118 return (mode->flags & ~sync_flags) == (preferred_mode->flags & ~sync_flags) && in is_alt_fixed_mode()
119 mode->hdisplay == preferred_mode->hdisplay && in is_alt_fixed_mode()
120 mode->vdisplay == preferred_mode->vdisplay; in is_alt_fixed_mode()
128 int min_vrefresh = connector->panel.vbt.seamless_drrs_min_refresh_rate; in intel_panel_downclock_mode()
132 list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) { in intel_panel_downclock_mode()
152 list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) { in intel_panel_highest_mode()
153 if (fixed_mode->clock > best_mode->clock) in intel_panel_highest_mode()
165 list_for_each_entry(fixed_mode, &connector->panel.fixed_modes, head) { in intel_panel_get_modes()
166 struct drm_display_mode *mode; in intel_panel_get_modes() local
168 mode = drm_mode_duplicate(connector->base.dev, fixed_mode); in intel_panel_get_modes()
169 if (mode) { in intel_panel_get_modes()
170 drm_mode_probed_add(&connector->base, mode); in intel_panel_get_modes()
182 list_for_each_entry(mode1, &connector->panel.fixed_modes, head) { in has_drrs_modes()
185 list_for_each_entry_continue(mode2, &connector->panel.fixed_modes, head) { in has_drrs_modes()
196 return connector->panel.vbt.drrs_type; in intel_panel_drrs_type()
227 if (abs(vrefresh - fixed_mode_vrefresh) > 1) { in intel_panel_compute_config()
228 drm_dbg_kms(connector->base.dev, in intel_panel_compute_config()
229 … "[CONNECTOR:%d:%s] Requested mode vrefresh (%d Hz) does not match fixed mode vrefresh (%d Hz)\n", in intel_panel_compute_config()
230 connector->base.base.id, connector->base.name, in intel_panel_compute_config()
233 return -EINVAL; in intel_panel_compute_config()
240 adjusted_mode->vtotal = in intel_panel_compute_config()
241 DIV_ROUND_CLOSEST(adjusted_mode->clock * 1000, in intel_panel_compute_config()
242 adjusted_mode->htotal * vrefresh); in intel_panel_compute_config()
254 struct drm_display_mode *mode, *next; in intel_panel_add_edid_alt_fixed_modes() local
256 list_for_each_entry_safe(mode, next, &connector->base.probed_modes, head) { in intel_panel_add_edid_alt_fixed_modes()
257 if (!is_alt_fixed_mode(mode, preferred_mode)) in intel_panel_add_edid_alt_fixed_modes()
260 drm_dbg_kms(display->drm, in intel_panel_add_edid_alt_fixed_modes()
261 "[CONNECTOR:%d:%s] using alternate EDID fixed mode: " DRM_MODE_FMT "\n", in intel_panel_add_edid_alt_fixed_modes()
262 connector->base.base.id, connector->base.name, in intel_panel_add_edid_alt_fixed_modes()
263 DRM_MODE_ARG(mode)); in intel_panel_add_edid_alt_fixed_modes()
265 list_move_tail(&mode->head, &connector->panel.fixed_modes); in intel_panel_add_edid_alt_fixed_modes()
274 if (list_empty(&connector->base.probed_modes)) in intel_panel_add_edid_preferred_mode()
277 /* make sure the preferred mode is first */ in intel_panel_add_edid_preferred_mode()
278 list_for_each_entry(scan, &connector->base.probed_modes, head) { in intel_panel_add_edid_preferred_mode()
279 if (scan->type & DRM_MODE_TYPE_PREFERRED) { in intel_panel_add_edid_preferred_mode()
286 fixed_mode = list_first_entry(&connector->base.probed_modes, in intel_panel_add_edid_preferred_mode()
289 drm_dbg_kms(display->drm, in intel_panel_add_edid_preferred_mode()
290 "[CONNECTOR:%d:%s] using %s EDID fixed mode: " DRM_MODE_FMT "\n", in intel_panel_add_edid_preferred_mode()
291 connector->base.base.id, connector->base.name, in intel_panel_add_edid_preferred_mode()
292 fixed_mode->type & DRM_MODE_TYPE_PREFERRED ? "preferred" : "first", in intel_panel_add_edid_preferred_mode()
295 fixed_mode->type |= DRM_MODE_TYPE_PREFERRED; in intel_panel_add_edid_preferred_mode()
297 list_move_tail(&fixed_mode->head, &connector->panel.fixed_modes); in intel_panel_add_edid_preferred_mode()
303 struct drm_display_mode *mode, *next; in intel_panel_destroy_probed_modes() local
305 list_for_each_entry_safe(mode, next, &connector->base.probed_modes, head) { in intel_panel_destroy_probed_modes()
306 drm_dbg_kms(display->drm, in intel_panel_destroy_probed_modes()
307 "[CONNECTOR:%d:%s] not using EDID mode: " DRM_MODE_FMT "\n", in intel_panel_destroy_probed_modes()
308 connector->base.base.id, connector->base.name, in intel_panel_destroy_probed_modes()
309 DRM_MODE_ARG(mode)); in intel_panel_destroy_probed_modes()
310 list_del(&mode->head); in intel_panel_destroy_probed_modes()
311 drm_mode_destroy(display->drm, mode); in intel_panel_destroy_probed_modes()
329 struct drm_display_info *info = &connector->base.display_info; in intel_panel_add_fixed_mode()
334 fixed_mode->type |= DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER; in intel_panel_add_fixed_mode()
336 info->width_mm = fixed_mode->width_mm; in intel_panel_add_fixed_mode()
337 info->height_mm = fixed_mode->height_mm; in intel_panel_add_fixed_mode()
339 drm_dbg_kms(display->drm, "[CONNECTOR:%d:%s] using %s fixed mode: " DRM_MODE_FMT "\n", in intel_panel_add_fixed_mode()
340 connector->base.base.id, connector->base.name, type, in intel_panel_add_fixed_mode()
343 list_add_tail(&fixed_mode->head, &connector->panel.fixed_modes); in intel_panel_add_fixed_mode()
349 const struct drm_display_mode *mode; in intel_panel_add_vbt_lfp_fixed_mode() local
351 mode = connector->panel.vbt.lfp_vbt_mode; in intel_panel_add_vbt_lfp_fixed_mode()
352 if (!mode) in intel_panel_add_vbt_lfp_fixed_mode()
356 drm_mode_duplicate(display->drm, mode), in intel_panel_add_vbt_lfp_fixed_mode()
363 const struct drm_display_mode *mode; in intel_panel_add_vbt_sdvo_fixed_mode() local
365 mode = connector->panel.vbt.sdvo_lvds_vbt_mode; in intel_panel_add_vbt_sdvo_fixed_mode()
366 if (!mode) in intel_panel_add_vbt_sdvo_fixed_mode()
370 drm_mode_duplicate(display->drm, mode), in intel_panel_add_vbt_sdvo_fixed_mode()
385 struct intel_display *display = to_intel_display(connector->dev); in intel_panel_detect()
391 return connector->status; in intel_panel_detect()
398 const struct drm_display_mode *mode) in intel_panel_mode_valid() argument
401 intel_panel_fixed_mode(connector, mode); in intel_panel_mode_valid()
406 if (mode->hdisplay != fixed_mode->hdisplay) in intel_panel_mode_valid()
409 if (mode->vdisplay != fixed_mode->vdisplay) in intel_panel_mode_valid()
412 if (drm_mode_vrefresh(mode) != drm_mode_vrefresh(fixed_mode)) in intel_panel_mode_valid()
420 struct intel_panel *panel = &connector->panel; in intel_panel_init_alloc()
422 connector->panel.vbt.panel_type = -1; in intel_panel_init_alloc()
423 connector->panel.vbt.backlight.controller = -1; in intel_panel_init_alloc()
424 INIT_LIST_HEAD(&panel->fixed_modes); in intel_panel_init_alloc()
430 struct intel_panel *panel = &connector->panel; in intel_panel_init()
432 panel->fixed_edid = fixed_edid; in intel_panel_init()
437 connector->panel.vbt.drrs_type = DRRS_TYPE_NONE; in intel_panel_init()
439 drm_dbg_kms(connector->base.dev, in intel_panel_init()
441 connector->base.base.id, connector->base.name, in intel_panel_init()
449 struct intel_panel *panel = &connector->panel; in intel_panel_fini()
450 struct drm_display_mode *fixed_mode, *next; in intel_panel_fini() local
452 if (!IS_ERR_OR_NULL(panel->fixed_edid)) in intel_panel_fini()
453 drm_edid_free(panel->fixed_edid); in intel_panel_fini()
459 list_for_each_entry_safe(fixed_mode, next, &panel->fixed_modes, head) { in intel_panel_fini()
460 list_del(&fixed_mode->head); in intel_panel_fini()
461 drm_mode_destroy(connector->base.dev, fixed_mode); in intel_panel_fini()