Commit 703a7d2b authored by Jani Nikula's avatar Jani Nikula
Browse files

drm/i915/dsi: clarify GPIO exec sequence



With the various sequence versions and pointer increments interleaved,
it's a bit hard to decipher what's going on. Add separate paths for
different sequence versions.

Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tested-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20231103201831.1037416-4-andriy.shevchenko@linux.intel.com
parent 03930e3d
Loading
Loading
Loading
Loading
+17 −14
Original line number Diff line number Diff line
@@ -456,26 +456,29 @@ 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 *i915 = to_i915(dev);
	struct intel_connector *connector = intel_dsi->attached_connector;
	u8 gpio_source, gpio_index = 0, gpio_number;
	u8 gpio_source = 0, gpio_index = 0, gpio_number;
	bool value;
	int size;
	bool native = DISPLAY_VER(i915) >= 11;

	if (connector->panel.vbt.dsi.seq_version >= 3)
		gpio_index = *data++;

	gpio_number = *data++;
	if (connector->panel.vbt.dsi.seq_version >= 3) {
		size = 3;

	/* gpio source in sequence v2 only */
	if (connector->panel.vbt.dsi.seq_version == 2)
		gpio_source = (*data >> 1) & 3;
	else
		gpio_source = 0;
		gpio_index = data[0];
		gpio_number = data[1];
		value = data[2] & BIT(0);

	if (connector->panel.vbt.dsi.seq_version >= 4 && *data & BIT(1))
		if (connector->panel.vbt.dsi.seq_version >= 4 && data[2] & BIT(1))
			native = false;
	} else {
		size = 2;

	/* pull up/down */
	value = *data++ & 1;
		gpio_number = data[0];
		value = data[1] & BIT(0);

		if (connector->panel.vbt.dsi.seq_version == 2)
			gpio_source = (data[1] >> 1) & 3;
	}

	drm_dbg_kms(&i915->drm, "GPIO index %u, number %u, source %u, native %s, set to %s\n",
		    gpio_index, gpio_number, gpio_source, str_yes_no(native), str_on_off(value));
@@ -491,7 +494,7 @@ static const u8 *mipi_exec_gpio(struct intel_dsi *intel_dsi, const u8 *data)
	else
		bxt_exec_gpio(connector, gpio_source, gpio_index, value);

	return data;
	return data + size;
}

#ifdef CONFIG_ACPI