We have a Panel that requires init commands to be sent.
We have modified the panel-raydium-rm67191.c to send our command list.
As with similar questions, we moved sending the command list from the 'prepare' function to the 'enable' function.
Using the 'generic_write' will successfully send all commands. But if we use the 'dcs_write' functions it fails after over 100 commands are sent.
From testing, it appears to be due to sending a command with 0x35 as the cmd field, eg:
mipi_dsi_dcs_write_seq(dsi, 0xFF,0x30); // set target to config page 3
mipi_dsi_dcs_write_seq(dsi, 0xFF,0x52);
mipi_dsi_dcs_write_seq(dsi, 0xFF,0x03);
...
mipi_dsi_dcs_write_seq(dsi, 0x35,0x00); // After this command D0+ & D0- held low
mipi_dsi_dcs_write_seq(dsi, 0x36,0x00); // This command fails with wait pkthdr tx done time out because it can't transmit while lines held
(commenting out any 0x35 commands successfully completes sending all commands).
From digging, it appears that the IMX8MM MIPI-DSI controller sees the 0x35 command as the "MIPI_DCS_SET_TEAR_ON = 0x35" command and automatically sets the lines in BTA mode. From the datasheet DSI_ESCMODE register:
mharg_0-1730356220965.png
But we're sending this as a custom register configuration request to the panel, not a SET_TEAR_ON request.
Note: That this issue occurs exactly the same with or without a panel connected.
Is there a way to disable the automatic BTA request when the controller sees a 0x35 command?