mirror of
https://github.com/torvalds/linux.git
synced 2026-05-30 10:04:04 +02:00
drm/i915/display: add intel_encoder_is_*() and _to_*() functions
Add a number of encoder based functions to check if the port/phy of the encoder is of a certain type, or to convert to phy or tc_port. Initially these are just wrappers around the existing functions, but they can be improved to use VBT data or use some cached info in the future. Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/7b2d350ee42883f2784030c649d16f983bd407bd.1710949619.git.jani.nikula@intel.com Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
parent
0a099232d2
commit
ba28989dcb
|
|
@ -29,6 +29,7 @@
|
|||
#define INTEL_CX0_LANE1 BIT(1)
|
||||
#define INTEL_CX0_BOTH_LANES (INTEL_CX0_LANE1 | INTEL_CX0_LANE0)
|
||||
|
||||
/* Prefer intel_encoder_is_c10phy() */
|
||||
bool intel_is_c10phy(struct drm_i915_private *i915, enum phy phy)
|
||||
{
|
||||
if ((IS_LUNARLAKE(i915) || IS_METEORLAKE(i915)) && phy < PHY_C)
|
||||
|
|
@ -37,6 +38,14 @@ bool intel_is_c10phy(struct drm_i915_private *i915, enum phy phy)
|
|||
return false;
|
||||
}
|
||||
|
||||
bool intel_encoder_is_c10phy(struct intel_encoder *encoder)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
enum phy phy = intel_encoder_to_phy(encoder);
|
||||
|
||||
return intel_is_c10phy(i915, phy);
|
||||
}
|
||||
|
||||
static int lane_mask_to_lane(u8 lane_mask)
|
||||
{
|
||||
if (WARN_ON((lane_mask & ~INTEL_CX0_BOTH_LANES) ||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ struct intel_encoder;
|
|||
struct intel_hdmi;
|
||||
|
||||
bool intel_is_c10phy(struct drm_i915_private *dev_priv, enum phy phy);
|
||||
bool intel_encoder_is_c10phy(struct intel_encoder *encoder);
|
||||
void intel_mtl_pll_enable(struct intel_encoder *encoder,
|
||||
const struct intel_crtc_state *crtc_state);
|
||||
void intel_mtl_pll_disable(struct intel_encoder *encoder);
|
||||
|
|
|
|||
|
|
@ -1836,6 +1836,7 @@ static void i9xx_pfit_enable(const struct intel_crtc_state *crtc_state)
|
|||
intel_de_write(dev_priv, BCLRPAT(crtc->pipe), 0);
|
||||
}
|
||||
|
||||
/* Prefer intel_encoder_is_combo() */
|
||||
bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
{
|
||||
if (phy == PHY_NONE)
|
||||
|
|
@ -1857,6 +1858,7 @@ bool intel_phy_is_combo(struct drm_i915_private *dev_priv, enum phy phy)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* Prefer intel_encoder_is_tc() */
|
||||
bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
{
|
||||
/*
|
||||
|
|
@ -1877,6 +1879,7 @@ bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy)
|
|||
return false;
|
||||
}
|
||||
|
||||
/* Prefer intel_encoder_is_snps() */
|
||||
bool intel_phy_is_snps(struct drm_i915_private *dev_priv, enum phy phy)
|
||||
{
|
||||
/*
|
||||
|
|
@ -1886,6 +1889,7 @@ bool intel_phy_is_snps(struct drm_i915_private *dev_priv, enum phy phy)
|
|||
return IS_DG2(dev_priv) && phy > PHY_NONE && phy <= PHY_E;
|
||||
}
|
||||
|
||||
/* Prefer intel_encoder_to_phy() */
|
||||
enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port)
|
||||
{
|
||||
if (DISPLAY_VER(i915) >= 13 && port >= PORT_D_XELPD)
|
||||
|
|
@ -1903,6 +1907,7 @@ enum phy intel_port_to_phy(struct drm_i915_private *i915, enum port port)
|
|||
return PHY_A + port - PORT_A;
|
||||
}
|
||||
|
||||
/* Prefer intel_encoder_to_tc() */
|
||||
enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv, enum port port)
|
||||
{
|
||||
if (!intel_phy_is_tc(dev_priv, intel_port_to_phy(dev_priv, port)))
|
||||
|
|
@ -1914,6 +1919,41 @@ enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv, enum port port)
|
|||
return TC_PORT_1 + port - PORT_C;
|
||||
}
|
||||
|
||||
enum phy intel_encoder_to_phy(struct intel_encoder *encoder)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
|
||||
return intel_port_to_phy(i915, encoder->port);
|
||||
}
|
||||
|
||||
bool intel_encoder_is_combo(struct intel_encoder *encoder)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
|
||||
return intel_phy_is_combo(i915, intel_encoder_to_phy(encoder));
|
||||
}
|
||||
|
||||
bool intel_encoder_is_snps(struct intel_encoder *encoder)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
|
||||
return intel_phy_is_snps(i915, intel_encoder_to_phy(encoder));
|
||||
}
|
||||
|
||||
bool intel_encoder_is_tc(struct intel_encoder *encoder)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
|
||||
return intel_phy_is_tc(i915, intel_encoder_to_phy(encoder));
|
||||
}
|
||||
|
||||
enum tc_port intel_encoder_to_tc(struct intel_encoder *encoder)
|
||||
{
|
||||
struct drm_i915_private *i915 = to_i915(encoder->base.dev);
|
||||
|
||||
return intel_port_to_tc(i915, encoder->port);
|
||||
}
|
||||
|
||||
enum intel_display_power_domain
|
||||
intel_aux_power_domain(struct intel_digital_port *dig_port)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -448,6 +448,13 @@ bool intel_phy_is_tc(struct drm_i915_private *dev_priv, enum phy phy);
|
|||
bool intel_phy_is_snps(struct drm_i915_private *dev_priv, enum phy phy);
|
||||
enum tc_port intel_port_to_tc(struct drm_i915_private *dev_priv,
|
||||
enum port port);
|
||||
|
||||
enum phy intel_encoder_to_phy(struct intel_encoder *encoder);
|
||||
bool intel_encoder_is_combo(struct intel_encoder *encoder);
|
||||
bool intel_encoder_is_snps(struct intel_encoder *encoder);
|
||||
bool intel_encoder_is_tc(struct intel_encoder *encoder);
|
||||
enum tc_port intel_encoder_to_tc(struct intel_encoder *encoder);
|
||||
|
||||
int intel_get_pipe_from_crtc_id_ioctl(struct drm_device *dev, void *data,
|
||||
struct drm_file *file_priv);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user