Skip to content

Commit 11895f3

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]>
1 parent d6a59ee commit 11895f3

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
@@ -1939,7 +1939,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
19391939
int index, len;
19401940

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

19451945
/* index = 1 to skip sequence byte */
@@ -1962,7 +1962,7 @@ static int get_init_otp_deassert_fragment_len(struct intel_display *display,
19621962
}
19631963

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

1976-
/* Limit this to v1 vid-mode sequences */
1976+
/* Limit this to v1/v2 vid-mode sequences */
19771977
if (panel->vbt.dsi.config->is_cmd_mode ||
1978-
panel->vbt.dsi.seq_version != 1)
1978+
panel->vbt.dsi.seq_version >= 3)
19791979
return;
19801980

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

0 commit comments

Comments
 (0)