Re: [Intel-gfx] [PATCH] drm/i915: Split pin mapping into per platform functions

2017-08-17 Thread Srivatsa, Anusha


>-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

2017-08-17 Thread Paulo Zanoni
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

2017-08-16 Thread Anusha Srivatsa
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

2017-08-14 Thread Srivatsa, Anusha


>-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

2017-08-10 Thread Anusha Srivatsa
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

2017-07-26 Thread Anusha Srivatsa
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