Skip to content

Commit e778689

Browse files
Hans de Goederodrigovivi
authored andcommitted
drm/i915/bios: Apply vlv_fixup_mipi_sequences() to v2 mipi-sequences too
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. Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/14605 Signed-off-by: Hans de Goede <[email protected]> Acked-by: Jani Nikula <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Rodrigo Vivi <[email protected]> (cherry picked from commit 11895f3) Signed-off-by: Rodrigo Vivi <[email protected]>
1 parent d7b8f8e commit e778689

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

drivers/gpu/drm/i915/display/intel_bios.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1938,7 +1938,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
19381938
int index, len;
19391939

19401940
if (drm_WARN_ON(display->drm,
1941-
!data || panel->vbt.dsi.seq_version != 1))
1941+
!data || panel->vbt.dsi.seq_version >= 3))
19421942
return 0;
19431943

19441944
/* index = 1 to skip sequence byte */
@@ -1961,7 +1961,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
19611961
}
19621962

19631963
/*
1964-
* Some v1 VBT MIPI sequences do the deassert in the init OTP sequence.
1964+
* Some v1/v2 VBT MIPI sequences do the deassert in the init OTP sequence.
19651965
* The deassert must be done before calling intel_dsi_device_ready, so for
19661966
* these devices we split the init OTP sequence into a deassert sequence and
19671967
* the actual init OTP part.
@@ -1972,9 +1972,9 @@ static void vlv_fixup_mipi_sequences(struct intel_display *display,
19721972
u8 *init_otp;
19731973
int len;
19741974

1975-
/* Limit this to v1 vid-mode sequences */
1975+
/* Limit this to v1/v2 vid-mode sequences */
19761976
if (panel->vbt.dsi.config->is_cmd_mode ||
1977-
panel->vbt.dsi.seq_version != 1)
1977+
panel->vbt.dsi.seq_version >= 3)
19781978
return;
19791979

19801980
/* Only do this if there are otp and assert seqs and no deassert seq */

0 commit comments

Comments
 (0)