On Fri, Mar 18, 2016 at 01:11:10PM +0200, Jani Nikula wrote:
> In sequence block v2, and only in v2, the gpio source (i.e. IOSF port)
> is specified separately.
> 
> v2: initialize gpio_source to 0 and handle v1 and v2 in the same branch
> 
> Signed-off-by: Jani Nikula <jani.nik...@intel.com>

Reviewed-by: Ville Syrjälä <ville.syrj...@linux.intel.com>

> ---
>  drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 22 ++++++++++++++++++----
>  1 file changed, 18 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c 
> b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> index f687b2e9d8ca..af1a47b5224f 100644
> --- a/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> +++ b/drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
> @@ -198,7 +198,7 @@ static const u8 *mipi_exec_delay(struct intel_dsi 
> *intel_dsi, const u8 *data)
>  
>  static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
>  {
> -     u8 gpio_index, action;
> +     u8 gpio_source, gpio_index, action, port;
>       u16 function, pad;
>       u32 val;
>       struct drm_device *dev = intel_dsi->base.base.dev;
> @@ -209,6 +209,12 @@ static const u8 *mipi_exec_gpio(struct intel_dsi 
> *intel_dsi, const u8 *data)
>  
>       gpio_index = *data++;
>  
> +     /* gpio source in sequence v2 only */
> +     if (dev_priv->vbt.dsi.seq_version == 2)
> +             gpio_source = (*data >> 1) & 3;
> +     else
> +             gpio_source = 0;
> +
>       /* pull up/down */
>       action = *data++ & 1;
>  
> @@ -225,6 +231,15 @@ static const u8 *mipi_exec_gpio(struct intel_dsi 
> *intel_dsi, const u8 *data)
>       if (dev_priv->vbt.dsi.seq_version >= 3) {
>               DRM_DEBUG_KMS("GPIO element v3 not supported\n");
>               goto out;
> +     } else {
> +             if (gpio_source == 0) {
> +                     port = IOSF_PORT_GPIO_NC;
> +             } else if (gpio_source == 1) {
> +                     port = IOSF_PORT_GPIO_SC;
> +             } else {
> +                     DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
> +                     goto out;
> +             }
>       }
>  
>       function = gtable[gpio_index].function_reg;
> @@ -234,15 +249,14 @@ static const u8 *mipi_exec_gpio(struct intel_dsi 
> *intel_dsi, const u8 *data)
>       if (!gtable[gpio_index].init) {
>               /* program the function */
>               /* FIXME: remove constant below */
> -             vlv_iosf_sb_write(dev_priv, IOSF_PORT_GPIO_NC, function,
> -                               0x2000CC00);
> +             vlv_iosf_sb_write(dev_priv, port, function, 0x2000CC00);
>               gtable[gpio_index].init = 1;
>       }
>  
>       val = 0x4 | action;
>  
>       /* pull up/down */
> -     vlv_iosf_sb_write(dev_priv, IOSF_PORT_GPIO_NC, pad, val);
> +     vlv_iosf_sb_write(dev_priv, port, pad, val);
>       mutex_unlock(&dev_priv->sb_lock);
>  
>  out:
> -- 
> 2.1.4

-- 
Ville Syrjälä
Intel OTC
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to