Skip to content

Commit

Permalink
drm/i915/dsi: add support for DSI sequence block v2 gpio element
Browse files Browse the repository at this point in the history
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

Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/87152feec8f921dc82502af1b29c0956b0d360bb.1458299160.git.jani.nikula@intel.com
  • Loading branch information
Jani Nikula committed Apr 5, 2016
1 parent 27af5ee commit 1d96a4a
Showing 1 changed file with 18 additions and 4 deletions.
22 changes: 18 additions & 4 deletions drivers/gpu/drm/i915/intel_dsi_panel_vbt.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;

Expand All @@ -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;
Expand All @@ -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:
Expand Down

0 comments on commit 1d96a4a

Please sign in to comment.