Re: [Intel-gfx] [PATCH] drm/i915: Split pin mapping into per platform functions
>-Original Message- >From: Zanoni, Paulo R >Sent: Thursday, August 17, 2017 1:24 PM >To: Srivatsa, Anusha ; intel- >g...@lists.freedesktop.org >Cc: Ville Syrjala ; Vivi, Rodrigo >; Taylor, Clinton A >Subject: Re: [PATCH] drm/i915: Split pin mapping into per platform functions > >Em Qua, 2017-08-16 às 16:45 -0700, Anusha Srivatsa escreveu: >> Cleanup the code. Map the pins in accordance to individual platforms >> rather than according to ports. >> Create separate functions for platforms. >> >> v2: >> - Add missing condition for CoffeeLake. Make platform >> specific functions static. Add function >> i915_ddc_pin_mapping(). >> >> v3: >> - Rename functions to x_port_to_ddc_pin() which directly >> indicates the purpose. Correct default return values on CNP >> and BXT. Rename i915_port_to_ to g4x_port_to since that was >> the first platform to run this. Correct code style. (Paulo) >> > >Reviewed-by: Paulo Zanoni > Thanks for the review Paulo! Anusha >> Sugested-by Ville Syrjala >> Cc: Ville Syrjala >> Cc: Paulo Zanoni >> Cc: Rodrigo Vivi >> Cc: Clinton Tayloe >> Signed-off-by: Anusha Srivatsa >> --- >> drivers/gpu/drm/i915/intel_hdmi.c | 113 >> ++ >> 1 file changed, 91 insertions(+), 22 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c >> b/drivers/gpu/drm/i915/intel_hdmi.c >> index e30c27a..e8abea7 100644 >> --- a/drivers/gpu/drm/i915/intel_hdmi.c >> +++ b/drivers/gpu/drm/i915/intel_hdmi.c >> @@ -1843,45 +1843,114 @@ void >> intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder, >> DRM_DEBUG_KMS("sink scrambling handled\n"); >> } >> >> -static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, >> - enum port port) >> +static u8 chv_port_to_ddc_pin(struct drm_i915_private *dev_priv, >> enum port port) >> { >> -const struct ddi_vbt_port_info *info = >> -&dev_priv->vbt.ddi_port_info[port]; >> u8 ddc_pin; >> >> -if (info->alternate_ddc_pin) { >> -DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c >> (VBT)\n", >> - info->alternate_ddc_pin, >> port_name(port)); >> -return info->alternate_ddc_pin; >> +switch (port) { >> +case PORT_B: >> +ddc_pin = GMBUS_PIN_DPB; >> +break; >> +case PORT_C: >> +ddc_pin = GMBUS_PIN_DPC; >> +break; >> +case PORT_D: >> +ddc_pin = GMBUS_PIN_DPD_CHV; >> +break; >> +default: >> +MISSING_CASE(port); >> +ddc_pin = GMBUS_PIN_DPB; >> +break; >> } >> +return ddc_pin; >> +} >> + >> +static u8 bxt_port_to_ddc_pin(struct drm_i915_private *dev_priv, >> enum port port) >> +{ >> +u8 ddc_pin; >> >> switch (port) { >> case PORT_B: >> -if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) >> -ddc_pin = GMBUS_PIN_1_BXT; >> -else >> -ddc_pin = GMBUS_PIN_DPB; >> +ddc_pin = GMBUS_PIN_1_BXT; >> break; >> case PORT_C: >> -if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) >> -ddc_pin = GMBUS_PIN_2_BXT; >> -else >> -ddc_pin = GMBUS_PIN_DPC; >> +ddc_pin = GMBUS_PIN_2_BXT; >> +break; >> +default: >> +MISSING_CASE(port); >> +ddc_pin = GMBUS_PIN_1_BXT; >> +break; >> +} >> +return ddc_pin; >> +} >> + >> +static u8 cnp_port_to_ddc_pin(struct drm_i915_private *dev_priv, >> + enum port port) >> +{ >> +u8 ddc_pin; >> + >> +switch (port) { >> +case PORT_B: >> +ddc_pin = GMBUS_PIN_1_BXT; >> +break; >> +case PORT_C: >> +ddc_pin = GMBUS_PIN_2_BXT; >> break; >> case PORT_D: >> -if (HAS_PCH_CNP(dev_priv)) >> -ddc_pin = GMBUS_PIN_4_CNP; >> -else if (IS_CHERRYVIEW(dev_priv)) >> -ddc_pin = GMBUS_PIN_DPD_CHV; >> -else >> -ddc_pin = GMBUS_PIN_DPD; >> +ddc_pin = GMBUS_PIN_4_CNP; >> +break; >> +default: >> +MISSING_CASE(port); >> +ddc_pin = GMBUS_PIN_1_BXT; >> +break; >> +} >> +return ddc_pin; >> +} >> + >> +static u8 g4x_port_to_ddc_pin(struct drm_i915_private *dev_priv, >> + enum port port) >> +{ >> +u8 ddc_pin; >> + >> +switch (port) { >> +case PORT_B: >> +ddc_pin = GMBUS_PIN_DPB; >> +break; >> +case PORT_C: >> +ddc_pin = GMBUS_PIN_DPC; >> +break; >> +case PORT_D: >> +ddc_pin = GMBUS_PIN_DPD; >> break; >> default: >> MISSING_CASE(port); >> ddc_pin = GMBUS_PIN_DPB; >> break; >> } >> +return ddc_pin; >> +} >> + >> +static u8 intel_hdmi_
Re: [Intel-gfx] [PATCH] drm/i915: Split pin mapping into per platform functions
Em Qua, 2017-08-16 às 16:45 -0700, Anusha Srivatsa escreveu: > Cleanup the code. Map the pins in accordance to > individual platforms rather than according to ports. > Create separate functions for platforms. > > v2: > - Add missing condition for CoffeeLake. Make platform > specific functions static. Add function > i915_ddc_pin_mapping(). > > v3: > - Rename functions to x_port_to_ddc_pin() which directly > indicates the purpose. Correct default return values on CNP > and BXT. Rename i915_port_to_ to g4x_port_to since that was > the first platform to run this. Correct code style. (Paulo) > Reviewed-by: Paulo Zanoni > Sugested-by Ville Syrjala > Cc: Ville Syrjala > Cc: Paulo Zanoni > Cc: Rodrigo Vivi > Cc: Clinton Tayloe > Signed-off-by: Anusha Srivatsa > --- > drivers/gpu/drm/i915/intel_hdmi.c | 113 > ++ > 1 file changed, 91 insertions(+), 22 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_hdmi.c > b/drivers/gpu/drm/i915/intel_hdmi.c > index e30c27a..e8abea7 100644 > --- a/drivers/gpu/drm/i915/intel_hdmi.c > +++ b/drivers/gpu/drm/i915/intel_hdmi.c > @@ -1843,45 +1843,114 @@ void > intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder, > DRM_DEBUG_KMS("sink scrambling handled\n"); > } > > -static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, > - enum port port) > +static u8 chv_port_to_ddc_pin(struct drm_i915_private *dev_priv, > enum port port) > { > - const struct ddi_vbt_port_info *info = > - &dev_priv->vbt.ddi_port_info[port]; > u8 ddc_pin; > > - if (info->alternate_ddc_pin) { > - DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c > (VBT)\n", > - info->alternate_ddc_pin, > port_name(port)); > - return info->alternate_ddc_pin; > + switch (port) { > + case PORT_B: > + ddc_pin = GMBUS_PIN_DPB; > + break; > + case PORT_C: > + ddc_pin = GMBUS_PIN_DPC; > + break; > + case PORT_D: > + ddc_pin = GMBUS_PIN_DPD_CHV; > + break; > + default: > + MISSING_CASE(port); > + ddc_pin = GMBUS_PIN_DPB; > + break; > } > + return ddc_pin; > +} > + > +static u8 bxt_port_to_ddc_pin(struct drm_i915_private *dev_priv, > enum port port) > +{ > + u8 ddc_pin; > > switch (port) { > case PORT_B: > - if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) > - ddc_pin = GMBUS_PIN_1_BXT; > - else > - ddc_pin = GMBUS_PIN_DPB; > + ddc_pin = GMBUS_PIN_1_BXT; > break; > case PORT_C: > - if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) > - ddc_pin = GMBUS_PIN_2_BXT; > - else > - ddc_pin = GMBUS_PIN_DPC; > + ddc_pin = GMBUS_PIN_2_BXT; > + break; > + default: > + MISSING_CASE(port); > + ddc_pin = GMBUS_PIN_1_BXT; > + break; > + } > + return ddc_pin; > +} > + > +static u8 cnp_port_to_ddc_pin(struct drm_i915_private *dev_priv, > + enum port port) > +{ > + u8 ddc_pin; > + > + switch (port) { > + case PORT_B: > + ddc_pin = GMBUS_PIN_1_BXT; > + break; > + case PORT_C: > + ddc_pin = GMBUS_PIN_2_BXT; > break; > case PORT_D: > - if (HAS_PCH_CNP(dev_priv)) > - ddc_pin = GMBUS_PIN_4_CNP; > - else if (IS_CHERRYVIEW(dev_priv)) > - ddc_pin = GMBUS_PIN_DPD_CHV; > - else > - ddc_pin = GMBUS_PIN_DPD; > + ddc_pin = GMBUS_PIN_4_CNP; > + break; > + default: > + MISSING_CASE(port); > + ddc_pin = GMBUS_PIN_1_BXT; > + break; > + } > + return ddc_pin; > +} > + > +static u8 g4x_port_to_ddc_pin(struct drm_i915_private *dev_priv, > + enum port port) > +{ > + u8 ddc_pin; > + > + switch (port) { > + case PORT_B: > + ddc_pin = GMBUS_PIN_DPB; > + break; > + case PORT_C: > + ddc_pin = GMBUS_PIN_DPC; > + break; > + case PORT_D: > + ddc_pin = GMBUS_PIN_DPD; > break; > default: > MISSING_CASE(port); > ddc_pin = GMBUS_PIN_DPB; > break; > } > + return ddc_pin; > +} > + > +static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, > + enum port port) > +{ > + const struct ddi_vbt_port_info *info = > + &dev_priv->vbt.ddi_port_info[port]; > + u8 ddc_pin; > + > + if (info->alternate_ddc_pin) { > + DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c > (VBT)\n", > + info->alternate_ddc_pin,
[Intel-gfx] [PATCH] drm/i915: Split pin mapping into per platform functions
Cleanup the code. Map the pins in accordance to individual platforms rather than according to ports. Create separate functions for platforms. v2: - Add missing condition for CoffeeLake. Make platform specific functions static. Add function i915_ddc_pin_mapping(). v3: - Rename functions to x_port_to_ddc_pin() which directly indicates the purpose. Correct default return values on CNP and BXT. Rename i915_port_to_ to g4x_port_to since that was the first platform to run this. Correct code style. (Paulo) Sugested-by Ville Syrjala Cc: Ville Syrjala Cc: Paulo Zanoni Cc: Rodrigo Vivi Cc: Clinton Tayloe Signed-off-by: Anusha Srivatsa --- drivers/gpu/drm/i915/intel_hdmi.c | 113 ++ 1 file changed, 91 insertions(+), 22 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index e30c27a..e8abea7 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -1843,45 +1843,114 @@ void intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder, DRM_DEBUG_KMS("sink scrambling handled\n"); } -static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, -enum port port) +static u8 chv_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port) { - const struct ddi_vbt_port_info *info = - &dev_priv->vbt.ddi_port_info[port]; u8 ddc_pin; - if (info->alternate_ddc_pin) { - DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n", - info->alternate_ddc_pin, port_name(port)); - return info->alternate_ddc_pin; + switch (port) { + case PORT_B: + ddc_pin = GMBUS_PIN_DPB; + break; + case PORT_C: + ddc_pin = GMBUS_PIN_DPC; + break; + case PORT_D: + ddc_pin = GMBUS_PIN_DPD_CHV; + break; + default: + MISSING_CASE(port); + ddc_pin = GMBUS_PIN_DPB; + break; } + return ddc_pin; +} + +static u8 bxt_port_to_ddc_pin(struct drm_i915_private *dev_priv, enum port port) +{ + u8 ddc_pin; switch (port) { case PORT_B: - if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_1_BXT; - else - ddc_pin = GMBUS_PIN_DPB; + ddc_pin = GMBUS_PIN_1_BXT; break; case PORT_C: - if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_2_BXT; - else - ddc_pin = GMBUS_PIN_DPC; + ddc_pin = GMBUS_PIN_2_BXT; + break; + default: + MISSING_CASE(port); + ddc_pin = GMBUS_PIN_1_BXT; + break; + } + return ddc_pin; +} + +static u8 cnp_port_to_ddc_pin(struct drm_i915_private *dev_priv, + enum port port) +{ + u8 ddc_pin; + + switch (port) { + case PORT_B: + ddc_pin = GMBUS_PIN_1_BXT; + break; + case PORT_C: + ddc_pin = GMBUS_PIN_2_BXT; break; case PORT_D: - if (HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_4_CNP; - else if (IS_CHERRYVIEW(dev_priv)) - ddc_pin = GMBUS_PIN_DPD_CHV; - else - ddc_pin = GMBUS_PIN_DPD; + ddc_pin = GMBUS_PIN_4_CNP; + break; + default: + MISSING_CASE(port); + ddc_pin = GMBUS_PIN_1_BXT; + break; + } + return ddc_pin; +} + +static u8 g4x_port_to_ddc_pin(struct drm_i915_private *dev_priv, + enum port port) +{ + u8 ddc_pin; + + switch (port) { + case PORT_B: + ddc_pin = GMBUS_PIN_DPB; + break; + case PORT_C: + ddc_pin = GMBUS_PIN_DPC; + break; + case PORT_D: + ddc_pin = GMBUS_PIN_DPD; break; default: MISSING_CASE(port); ddc_pin = GMBUS_PIN_DPB; break; } + return ddc_pin; +} + +static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, +enum port port) +{ + const struct ddi_vbt_port_info *info = + &dev_priv->vbt.ddi_port_info[port]; + u8 ddc_pin; + + if (info->alternate_ddc_pin) { + DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n", + info->alternate_ddc_pin, port_name(port)); + return info->alternate_ddc_pin; + } + + if (IS_CHERRYVIEW(dev_priv)) + ddc_pin = chv_port_to_ddc_pin(dev_priv, port); + else if (IS_GEN9_LP(dev_priv
Re: [Intel-gfx] [PATCH] drm/i915: Split pin mapping into per platform functions
>-Original Message- >From: Zanoni, Paulo R >Sent: Monday, August 14, 2017 2:14 PM >To: Srivatsa, Anusha ; intel- >g...@lists.freedesktop.org >Cc: Vivi, Rodrigo >Subject: Re: [Intel-gfx] [PATCH] drm/i915: Split pin mapping into per platform >functions > >Em Qui, 2017-08-10 às 11:42 -0700, Anusha Srivatsa escreveu: >> Cleanup the code. Map the pins in accordance to individual platforms >> rather than according to ports. >> Create separate functions for platforms. >> >> v2: >> - Add missing condition for CoffeeLake. Make platform >> specific functions static. Add function >> i915_ddc_pin_mapping(). >> >> Sugested-by Ville Syrjala >> Cc: Ville Syrjala >> Cc: Rodrigo Vivi >> Cc: Clinton Tayloe >> Signed-off-by: Anusha Srivatsa >> --- >> drivers/gpu/drm/i915/intel_hdmi.c | 115 >> ++ >> 1 file changed, 92 insertions(+), 23 deletions(-) >> >> diff --git a/drivers/gpu/drm/i915/intel_hdmi.c >> b/drivers/gpu/drm/i915/intel_hdmi.c >> index 2ef1ee85129d..41e6ba01ec1c 100644 >> --- a/drivers/gpu/drm/i915/intel_hdmi.c >> +++ b/drivers/gpu/drm/i915/intel_hdmi.c >> @@ -1843,49 +1843,118 @@ void >> intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder, >> DRM_DEBUG_KMS("sink scrambling handled\n"); >> } >> >> -static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, >> - enum port port) >> +static u8 chv_ddc_pin_mapping(struct drm_i915_private *dev_priv, > >Bikeshedding: what these functions do is pretty much map ports to DDC pins, so >I'd have named them x_port_to_ddc_pin() since that's the most usual naming >when converting "units", but I'm not opposed to the current naming. Your >choice. > > >> enum port port) >> { >> -const struct ddi_vbt_port_info *info = >> -&dev_priv->vbt.ddi_port_info[port]; >> u8 ddc_pin; >> >> -if (info->alternate_ddc_pin) { >> -DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c >> (VBT)\n", >> - info->alternate_ddc_pin, >> port_name(port)); >> -return info->alternate_ddc_pin; >> +switch (port) { >> + > >This is the only switch statement where you added a blank line at this point. >Doing >this is not our usual coding style. Will change in the next version. > >> +case PORT_B: >> +ddc_pin = GMBUS_PIN_DPB; >> +break; >> +case PORT_C: >> +ddc_pin = GMBUS_PIN_DPC; >> +break; >> +case PORT_D: >> +ddc_pin = GMBUS_PIN_DPD_CHV; >> +break; >> +default: >> +MISSING_CASE(port); >> +ddc_pin = GMBUS_PIN_DPB; >> +break; >> } >> +return ddc_pin; > >Another bikeshedding which you don't need to implement: just returning the pins >inside the switch statements (return GMBUX_PIN_XYZ) without the ddc_pin >variable would have made the functions much shorter. > Hmm... yes. I agree. >> +} >> + >> +static u8 bxt_ddc_pin_mapping(struct drm_i915_private *dev_priv, >> enum port port) >> +{ >> +u8 ddc_pin; >> >> switch (port) { >> case PORT_B: >> -if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) >> -ddc_pin = GMBUS_PIN_1_BXT; >> -else >> -ddc_pin = GMBUS_PIN_DPB; >> +ddc_pin = GMBUS_PIN_1_BXT; >> break; >> case PORT_C: >> -if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) >> -ddc_pin = GMBUS_PIN_2_BXT; >> -else >> -ddc_pin = GMBUS_PIN_DPC; >> +ddc_pin = GMBUS_PIN_2_BXT; >> +break; >> +default: >> +MISSING_CASE(port); >> +ddc_pin = GMBUS_PIN_DPB; > >Now that you've reorganized the code it's very easy to notice that on bxt/cnp >the >default value doesn't even match what we return from port B. I wouldn't >complain if you addressed this issue in a follow-up patch. > Yes. Will change. >> +break; >> +} >> +return ddc_pin; >> +} >> + >> +static u8 cnp_ddc_pin_mapping(struct drm_i915_private *dev_priv, >> +enum port port) >> +{ >> +u8 ddc_pin; >> + >> +switch (port) { >> +case PORT_B: >> +
[Intel-gfx] [PATCH] drm/i915: Split pin mapping into per platform functions
Cleanup the code. Map the pins in accordance to individual platforms rather than according to ports. Create separate functions for platforms. v2: - Add missing condition for CoffeeLake. Make platform specific functions static. Add function i915_ddc_pin_mapping(). Sugested-by Ville Syrjala Cc: Ville Syrjala Cc: Rodrigo Vivi Cc: Clinton Tayloe Signed-off-by: Anusha Srivatsa --- drivers/gpu/drm/i915/intel_hdmi.c | 115 ++ 1 file changed, 92 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 2ef1ee85129d..41e6ba01ec1c 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -1843,49 +1843,118 @@ void intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder, DRM_DEBUG_KMS("sink scrambling handled\n"); } -static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, -enum port port) +static u8 chv_ddc_pin_mapping(struct drm_i915_private *dev_priv, enum port port) { - const struct ddi_vbt_port_info *info = - &dev_priv->vbt.ddi_port_info[port]; u8 ddc_pin; - if (info->alternate_ddc_pin) { - DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n", - info->alternate_ddc_pin, port_name(port)); - return info->alternate_ddc_pin; + switch (port) { + + case PORT_B: + ddc_pin = GMBUS_PIN_DPB; + break; + case PORT_C: + ddc_pin = GMBUS_PIN_DPC; + break; + case PORT_D: + ddc_pin = GMBUS_PIN_DPD_CHV; + break; + default: + MISSING_CASE(port); + ddc_pin = GMBUS_PIN_DPB; + break; } + return ddc_pin; +} + +static u8 bxt_ddc_pin_mapping(struct drm_i915_private *dev_priv, enum port port) +{ + u8 ddc_pin; switch (port) { case PORT_B: - if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_1_BXT; - else - ddc_pin = GMBUS_PIN_DPB; + ddc_pin = GMBUS_PIN_1_BXT; break; case PORT_C: - if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_2_BXT; - else - ddc_pin = GMBUS_PIN_DPC; + ddc_pin = GMBUS_PIN_2_BXT; + break; + default: + MISSING_CASE(port); + ddc_pin = GMBUS_PIN_DPB; + break; + } + return ddc_pin; +} + +static u8 cnp_ddc_pin_mapping(struct drm_i915_private *dev_priv, + enum port port) +{ + u8 ddc_pin; + + switch (port) { + case PORT_B: + ddc_pin = GMBUS_PIN_1_BXT; + break; + case PORT_C: + ddc_pin = GMBUS_PIN_2_BXT; break; case PORT_D: - if (HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_4_CNP; - else if (IS_CHERRYVIEW(dev_priv)) - ddc_pin = GMBUS_PIN_DPD_CHV; - else - ddc_pin = GMBUS_PIN_DPD; + ddc_pin = GMBUS_PIN_4_CNP; + break; + default: + MISSING_CASE(port); + ddc_pin = GMBUS_PIN_DPB; + break; + } + return ddc_pin; +} + +static u8 i915_ddc_pin_mapping(struct drm_i915_private *dev_priv, + enum port port) +{ + u8 ddc_pin; + + switch (port) { + case PORT_B: + ddc_pin = GMBUS_PIN_DPB; + break; + case PORT_C: + ddc_pin = GMBUS_PIN_DPC; + break; + case PORT_D: + ddc_pin = GMBUS_PIN_DPD; break; default: MISSING_CASE(port); ddc_pin = GMBUS_PIN_DPB; break; } + return ddc_pin; + +} +static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, +enum port port) +{ + const struct ddi_vbt_port_info *info = + &dev_priv->vbt.ddi_port_info[port]; + u8 ddc_pin = 0; + + if (info->alternate_ddc_pin) { + DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n", + info->alternate_ddc_pin, port_name(port)); + return info->alternate_ddc_pin; + } + + if (IS_CHERRYVIEW(dev_priv)) + ddc_pin = chv_ddc_pin_mapping(dev_priv, port); + else if (IS_GEN9_LP(dev_priv)) + ddc_pin = bxt_ddc_pin_mapping(dev_priv, port); + else if (HAS_PCH_CNP(dev_priv)) + ddc_pin = cnp_ddc_pin_mapping(dev_priv, port); + else + ddc_pin = i915_ddc_pin_mapping(dev_priv, port); DRM_DEBUG_KMS("Using DDC pin
[Intel-gfx] [PATCH] drm/i915: Split pin mapping into per platform functions
Cleanup the code. Map the pins in accordance to individual platforms rather than according to ports. Create separate functions for platforms. Suugested-by Ville Syrjala Cc: Ville Syrjala Signed-off-by: Anusha Srivatsa --- drivers/gpu/drm/i915/intel_drv.h | 4 ++- drivers/gpu/drm/i915/intel_hdmi.c | 74 +-- 2 files changed, 58 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index ee0daecff713..0d3168b25f14 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -1649,7 +1649,9 @@ void intel_hdmi_handle_sink_scrambling(struct intel_encoder *intel_encoder, bool high_tmds_clock_ratio, bool scrambling); void intel_dp_dual_mode_set_tmds_output(struct intel_hdmi *hdmi, bool enable); - +u8 gen8_ddc_pin_mapping(struct drm_i915_private *dev_priv, enum port port); +u8 gen9_lp_ddc_pin_mapping(struct drm_i915_private *dev_priv, enum port port); +u8 gen10_ddc_pin_mapping(struct drm_i915_private *dev_priv, enum port port); /* intel_lvds.c */ void intel_lvds_init(struct drm_i915_private *dev_priv); diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 5609976539bf..b87bc3006b13 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c @@ -1850,7 +1850,7 @@ static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, { const struct ddi_vbt_port_info *info = &dev_priv->vbt.ddi_port_info[port]; - u8 ddc_pin; + u8 ddc_pin = 0; if (info->alternate_ddc_pin) { DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (VBT)\n", @@ -1858,36 +1858,72 @@ static u8 intel_hdmi_ddc_pin(struct drm_i915_private *dev_priv, return info->alternate_ddc_pin; } + if (IS_CHERRYVIEW(dev_priv)) + ddc_pin = gen8_ddc_pin_mapping(dev_priv, port); + else if (IS_GEN9_LP(dev_priv)) + ddc_pin = gen9_lp_ddc_pin_mapping(dev_priv, port); + else if (IS_CANNONLAKE(dev_priv)) + ddc_pin = gen10_ddc_pin_mapping(dev_priv, port); + + DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (platform default)\n", + ddc_pin, port_name(port)); + return ddc_pin; +} + +u8 gen8_ddc_pin_mapping(struct drm_i915_private *dev_priv, enum port port) +{ + u8 ddc_pin; + + switch (port) { + case PORT_D: + ddc_pin = GMBUS_PIN_DPD_CHV; + break; + default: + MISSING_CASE(port); + ddc_pin = GMBUS_PIN_DPB; + break; + } + return ddc_pin; +} + +u8 gen9_lp_ddc_pin_mapping(struct drm_i915_private *dev_priv, enum port port) +{ + u8 ddc_pin; + switch (port) { case PORT_B: - if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_1_BXT; - else - ddc_pin = GMBUS_PIN_DPB; + ddc_pin = GMBUS_PIN_1_BXT; break; case PORT_C: - if (IS_GEN9_LP(dev_priv) || HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_2_BXT; - else - ddc_pin = GMBUS_PIN_DPC; - break; - case PORT_D: - if (HAS_PCH_CNP(dev_priv)) - ddc_pin = GMBUS_PIN_4_CNP; - else if (IS_CHERRYVIEW(dev_priv)) - ddc_pin = GMBUS_PIN_DPD_CHV; - else - ddc_pin = GMBUS_PIN_DPD; + ddc_pin = GMBUS_PIN_2_BXT; break; default: MISSING_CASE(port); ddc_pin = GMBUS_PIN_DPB; break; } + return ddc_pin; +} - DRM_DEBUG_KMS("Using DDC pin 0x%x for port %c (platform default)\n", - ddc_pin, port_name(port)); +u8 gen10_ddc_pin_mapping(struct drm_i915_private *dev_priv, enum port port) +{ + u8 ddc_pin; + switch (port) { + case PORT_B: + ddc_pin = GMBUS_PIN_1_BXT; + break; + case PORT_C: + ddc_pin = GMBUS_PIN_2_BXT; + break; + case PORT_D: + ddc_pin = GMBUS_PIN_4_CNP; + break; + default: + MISSING_CASE(port); + ddc_pin = GMBUS_PIN_DPB; + break; + } return ddc_pin; } -- 2.11.0 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx