It seem that when dealing with VRR capable eDP panels we need to accept fixed modes with variable vblank length (which is what VRR varies dynamically). Typically the preferred mode seems to be a non-VRR more (lowish dotclock/refresh rate + short vblank). We also have examples where it looks like even the hblank length is a bit different between the preferred mode vs. VRR mode(s). So let's just accept anything that has matching hdisp+vdisp+flags. v2: Document that is_alt_drrs_mode() is a subset of is_alt_vrr_mode() (Jani) Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/125 Reviewed-by: Jani Nikula <jani.nikula@intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20220531191844.11313-4-ville.syrjala@linux.intel.com
50 lines
1.9 KiB
C
50 lines
1.9 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_PANEL_H__
|
|
#define __INTEL_PANEL_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
enum drm_connector_status;
|
|
enum drrs_type;
|
|
struct drm_connector;
|
|
struct drm_connector_state;
|
|
struct drm_display_mode;
|
|
struct drm_i915_private;
|
|
struct intel_connector;
|
|
struct intel_crtc_state;
|
|
struct intel_encoder;
|
|
|
|
int intel_panel_init(struct intel_connector *connector);
|
|
void intel_panel_fini(struct intel_connector *connector);
|
|
enum drm_connector_status
|
|
intel_panel_detect(struct drm_connector *connector, bool force);
|
|
bool intel_panel_use_ssc(struct drm_i915_private *i915);
|
|
const struct drm_display_mode *
|
|
intel_panel_preferred_fixed_mode(struct intel_connector *connector);
|
|
const struct drm_display_mode *
|
|
intel_panel_fixed_mode(struct intel_connector *connector,
|
|
const struct drm_display_mode *mode);
|
|
const struct drm_display_mode *
|
|
intel_panel_downclock_mode(struct intel_connector *connector,
|
|
const struct drm_display_mode *adjusted_mode);
|
|
int intel_panel_get_modes(struct intel_connector *connector);
|
|
enum drrs_type intel_panel_drrs_type(struct intel_connector *connector);
|
|
enum drm_mode_status
|
|
intel_panel_mode_valid(struct intel_connector *connector,
|
|
const struct drm_display_mode *mode);
|
|
int intel_panel_fitting(struct intel_crtc_state *crtc_state,
|
|
const struct drm_connector_state *conn_state);
|
|
int intel_panel_compute_config(struct intel_connector *connector,
|
|
struct drm_display_mode *adjusted_mode);
|
|
void intel_panel_add_edid_fixed_modes(struct intel_connector *connector,
|
|
bool has_drrs, bool has_vrr);
|
|
void intel_panel_add_vbt_lfp_fixed_mode(struct intel_connector *connector);
|
|
void intel_panel_add_vbt_sdvo_fixed_mode(struct intel_connector *connector);
|
|
void intel_panel_add_encoder_fixed_mode(struct intel_connector *connector,
|
|
struct intel_encoder *encoder);
|
|
|
|
#endif /* __INTEL_PANEL_H__ */
|