Commit 515d07de authored by Jani Nikula's avatar Jani Nikula

drm/i915/dsi: abstract VLV gpio element execution to a separate function

Prepare for future. No functional changes.

v2: Move earlier in the series. Use bool for gpio value.
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
[Jani: restored fixme comment while applying.]
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/ee791fed271d7f31c34163de6c6be37d1b704ef3.1459884518.git.jani.nikula@intel.com
parent b0c91cd0
...@@ -187,41 +187,21 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data) ...@@ -187,41 +187,21 @@ static const u8 *mipi_exec_delay(struct intel_dsi *intel_dsi, const u8 *data)
return data; return data;
} }
static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data) static void vlv_exec_gpio(struct drm_i915_private *dev_priv,
u8 gpio_source, u8 gpio_index, bool value)
{ {
u8 gpio_source, gpio_index, action, port;
u16 pconf0, padval; u16 pconf0, padval;
u32 val; u32 tmp;
struct drm_device *dev = intel_dsi->base.base.dev; u8 port;
struct drm_i915_private *dev_priv = dev->dev_private;
if (dev_priv->vbt.dsi.seq_version >= 3)
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;
if (gpio_index >= ARRAY_SIZE(vlv_gpio_table)) { if (gpio_index >= ARRAY_SIZE(vlv_gpio_table)) {
DRM_DEBUG_KMS("unknown gpio index %u\n", gpio_index); DRM_DEBUG_KMS("unknown gpio index %u\n", gpio_index);
goto out; return;
}
if (!IS_VALLEYVIEW(dev_priv)) {
DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
goto out;
} }
if (dev_priv->vbt.dsi.seq_version >= 3) { if (dev_priv->vbt.dsi.seq_version >= 3) {
DRM_DEBUG_KMS("GPIO element v3 not supported\n"); DRM_DEBUG_KMS("GPIO element v3 not supported\n");
goto out; return;
} else { } else {
if (gpio_source == 0) { if (gpio_source == 0) {
port = IOSF_PORT_GPIO_NC; port = IOSF_PORT_GPIO_NC;
...@@ -229,7 +209,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data) ...@@ -229,7 +209,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
port = IOSF_PORT_GPIO_SC; port = IOSF_PORT_GPIO_SC;
} else { } else {
DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source); DRM_DEBUG_KMS("unknown gpio source %u\n", gpio_source);
goto out; return;
} }
} }
...@@ -238,19 +218,42 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data) ...@@ -238,19 +218,42 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
mutex_lock(&dev_priv->sb_lock); mutex_lock(&dev_priv->sb_lock);
if (!vlv_gpio_table[gpio_index].init) { if (!vlv_gpio_table[gpio_index].init) {
/* program the function */
/* FIXME: remove constant below */ /* FIXME: remove constant below */
vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00); vlv_iosf_sb_write(dev_priv, port, pconf0, 0x2000CC00);
vlv_gpio_table[gpio_index].init = true; vlv_gpio_table[gpio_index].init = true;
} }
val = 0x4 | action; tmp = 0x4 | value;
vlv_iosf_sb_write(dev_priv, port, padval, tmp);
mutex_unlock(&dev_priv->sb_lock);
}
static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
{
struct drm_device *dev = intel_dsi->base.base.dev;
struct drm_i915_private *dev_priv = dev->dev_private;
u8 gpio_source, gpio_index;
bool value;
if (dev_priv->vbt.dsi.seq_version >= 3)
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 */ /* pull up/down */
vlv_iosf_sb_write(dev_priv, port, padval, val); value = *data++ & 1;
mutex_unlock(&dev_priv->sb_lock);
if (IS_VALLEYVIEW(dev_priv))
vlv_exec_gpio(dev_priv, gpio_source, gpio_index, value);
else
DRM_DEBUG_KMS("GPIO element not supported on this platform\n");
out:
return data; return data;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment