Message ID | 87152feec8f921dc82502af1b29c0956b0d360bb.1458299160.git.jani.nikula@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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.nikula@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@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
On Mon, 04 Apr 2016, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote: > 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.nikula@intel.com> > > Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Pushed to drm-intel-next-queued, thanks for the review. BR, Jani. > >> --- >> 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
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:
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.nikula@intel.com> --- drivers/gpu/drm/i915/intel_dsi_panel_vbt.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-)