[PATCH resend] drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too
Jani Nikula
jani.nikula at linux.intel.com
Fri Jul 4 09:26:59 UTC 2025
On Thu, 03 Jul 2025, Hans de Goede <hansg at kernel.org> wrote:
> From: Hans de Goede <hdegoede at redhat.com>
>
> It turns out that the fixup from vlv_fixup_mipi_sequences() is necessary
> for some DSI panel's with version 2 mipi-sequences too.
>
> Specifically the Acer Iconia One 8 A1-840 (not to be confused with the
> A1-840FHD which is different) has the following sequences:
>
> BDB block 53 (1284 bytes) - MIPI sequence block:
> Sequence block version v2
> Panel 0 *
>
> Sequence 2 - MIPI_SEQ_INIT_OTP
> GPIO index 9, source 0, set 0 (0x00)
> Delay: 50000 us
> GPIO index 9, source 0, set 1 (0x01)
> Delay: 6000 us
> GPIO index 9, source 0, set 0 (0x00)
> Delay: 6000 us
> GPIO index 9, source 0, set 1 (0x01)
> Delay: 25000 us
> Send DCS: Port A, VC 0, LP, Type 39, Length 5, Data ff aa 55 a5 80
> Send DCS: Port A, VC 0, LP, Type 39, Length 3, Data 6f 11 00
> ...
> Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 29
> Delay: 120000 us
>
> Sequence 4 - MIPI_SEQ_DISPLAY_OFF
> Send DCS: Port A, VC 0, LP, Type 05, Length 1, Data 28
> Delay: 105000 us
> Send DCS: Port A, VC 0, LP, Type 05, Length 2, Data 10 00
> Delay: 10000 us
>
> Sequence 5 - MIPI_SEQ_ASSERT_RESET
> Delay: 10000 us
> GPIO index 9, source 0, set 0 (0x00)
>
> Notice how there is no MIPI_SEQ_DEASSERT_RESET, instead the deassert
> is done at the beginning of MIPI_SEQ_INIT_OTP, which is exactly what
> the fixup from vlv_fixup_mipi_sequences() fixes up.
>
> Extend it to also apply to v2 sequences, this fixes the panel not working
> on the Acer Iconia One 8 A1-840.
I believe you have the most extensive collection of VLV/CHV DSI
machines, and I basically take your word for what works and what
doesn't.
Acked-by: Jani Nikula <jani.nikula at intel.com>
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>
> ---
> drivers/gpu/drm/i915/display/intel_bios.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_bios.c b/drivers/gpu/drm/i915/display/intel_bios.c
> index ba7b8938b17c..166ee11831ab 100644
> --- a/drivers/gpu/drm/i915/display/intel_bios.c
> +++ b/drivers/gpu/drm/i915/display/intel_bios.c
> @@ -1938,7 +1938,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
> int index, len;
>
> if (drm_WARN_ON(display->drm,
> - !data || panel->vbt.dsi.seq_version != 1))
> + !data || panel->vbt.dsi.seq_version >= 3))
> return 0;
>
> /* index = 1 to skip sequence byte */
> @@ -1961,7 +1961,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
> }
>
> /*
> - * Some v1 VBT MIPI sequences do the deassert in the init OTP sequence.
> + * Some v1/v2 VBT MIPI sequences do the deassert in the init OTP sequence.
> * The deassert must be done before calling intel_dsi_device_ready, so for
> * these devices we split the init OTP sequence into a deassert sequence and
> * the actual init OTP part.
> @@ -1972,9 +1972,9 @@ static void vlv_fixup_mipi_sequences(struct intel_display *display,
> u8 *init_otp;
> int len;
>
> - /* Limit this to v1 vid-mode sequences */
> + /* Limit this to v1/v2 vid-mode sequences */
> if (panel->vbt.dsi.config->is_cmd_mode ||
> - panel->vbt.dsi.seq_version != 1)
> + panel->vbt.dsi.seq_version >= 3)
> return;
>
> /* Only do this if there are otp and assert seqs and no deassert seq */
--
Jani Nikula, Intel
More information about the dri-devel
mailing list