drm/rockchip: dsi: solve dsi failed to enter command mode before system sleeping

dsi may failed to send command to panel before system sleeping:

[   95.191478][  T336] dw-mipi-dsi2 27d80000.dsi: failed to enter command mode
[   95.211617][  T336] dw-mipi-dsi2 27d80000.dsi: [drm:cri_fifos_wait_avail] *ERROR* command interface is busy
[   95.211744][  T336] panel-simple-dsi 27d80000.dsi.0: failed to write dcs cmd: -110

Change-Id: I24ea8bda3fc001145120c69e73bc786a1843a2a1
Signed-off-by: Guochun Huang <hero.huang@rock-chips.com>
This commit is contained in:
Guochun Huang
2025-09-03 11:05:28 +08:00
committed by Tao Huang
parent 7f26bae328
commit d0f521ef68

View File

@@ -172,7 +172,7 @@
#define DSI2_INT_FORCE_CRI 0x0468
#define DSI2_MAX_REGISGER DSI2_INT_FORCE_CRI
#define MODE_STATUS_TIMEOUT_US 10000
#define MODE_STATUS_TIMEOUT_US 20000
#define CMD_PKT_STATUS_TIMEOUT_US 20000
#define PSEC_PER_SEC 1000000000000LL
@@ -435,7 +435,7 @@ static void dw_mipi_dsi2_set_vid_mode(struct dw_mipi_dsi2 *dsi2)
regmap_write(dsi2->regmap, DSI2_MODE_CTRL, VIDEO_MODE);
ret = regmap_read_poll_timeout(dsi2->regmap, DSI2_MODE_STATUS,
mode, mode & VIDEO_MODE,
mode, mode == VIDEO_MODE,
1000, MODE_STATUS_TIMEOUT_US);
if (ret < 0)
dev_err(dsi2->dev, "failed to enter video mode\n");
@@ -448,7 +448,7 @@ static void dw_mipi_dsi2_set_data_stream_mode(struct dw_mipi_dsi2 *dsi2)
regmap_write(dsi2->regmap, DSI2_MODE_CTRL, DATA_STREAM_MODE);
ret = regmap_read_poll_timeout(dsi2->regmap, DSI2_MODE_STATUS,
mode, mode & DATA_STREAM_MODE,
mode, mode == DATA_STREAM_MODE,
1000, MODE_STATUS_TIMEOUT_US);
if (ret < 0)
dev_err(dsi2->dev, "failed to enter data stream mode\n");
@@ -461,7 +461,7 @@ static void dw_mipi_dsi2_set_cmd_mode(struct dw_mipi_dsi2 *dsi2)
regmap_write(dsi2->regmap, DSI2_MODE_CTRL, COMMAND_MODE);
ret = regmap_read_poll_timeout(dsi2->regmap, DSI2_MODE_STATUS,
mode, mode & COMMAND_MODE,
mode, mode == COMMAND_MODE,
1000, MODE_STATUS_TIMEOUT_US);
if (ret < 0)
dev_err(dsi2->dev, "failed to enter command mode\n");