From 730004820bcdd4385ff492f8274c43552e40ca89 Mon Sep 17 00:00:00 2001 From: Zhang Yubing Date: Thu, 21 Dec 2023 19:14:59 +0800 Subject: [PATCH] mfd: rkx110_x120: reset dsi tx host when generator pattern Change-Id: I92b4733152532c62e79d39eabdf2ec99d006a257 Signed-off-by: Zhang Yubing --- drivers/mfd/rkx110_x120/pattern_gen.c | 9 ++++++++- drivers/mfd/rkx110_x120/rkx120_dsi_tx.c | 6 ++++++ drivers/mfd/rkx110_x120/rkx120_dsi_tx.h | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/drivers/mfd/rkx110_x120/pattern_gen.c b/drivers/mfd/rkx110_x120/pattern_gen.c index 8ad25745280a..32762f16c035 100644 --- a/drivers/mfd/rkx110_x120/pattern_gen.c +++ b/drivers/mfd/rkx110_x120/pattern_gen.c @@ -9,6 +9,7 @@ #include "rkx110_x120.h" #include "rkx110_x120_display.h" +#include "rkx120_dsi_tx.h" #include "hal/cru_api.h" #define PATTERN_GEN_PATTERN_CTRL 0x0000 @@ -114,7 +115,7 @@ static void pattern_start_stream(struct pattern_gen *pattern_gen, bool is_patter return; if (pattern_gen->chip != &serdes->chip[DEVICE_LOCAL]) - return; + goto out; if (!strcmp(pattern_gen->name, "lvds0")) { hwclk_reset_deassert(serdes->chip[DEVICE_LOCAL].hwclk, @@ -170,6 +171,12 @@ static void pattern_start_stream(struct pattern_gen *pattern_gen, bool is_patter } rk_serdes_display_video_start(serdes, pattern_gen->route, true); + +out: + if (pattern_gen->route->remote0_port0 == RK_SERDES_DSI_TX0) + rkx120_dsi_tx_reset(serdes, DEVICE_REMOTE0); + if (pattern_gen->route->remote1_port0 == RK_SERDES_DSI_TX0) + rkx120_dsi_tx_reset(serdes, DEVICE_REMOTE1); } static void pattern_switch_clk_to_pattern(struct pattern_gen *pattern_gen, struct videomode *vm) diff --git a/drivers/mfd/rkx110_x120/rkx120_dsi_tx.c b/drivers/mfd/rkx110_x120/rkx120_dsi_tx.c index 4e262c4ea1d9..86c5e4dc81d6 100644 --- a/drivers/mfd/rkx110_x120/rkx120_dsi_tx.c +++ b/drivers/mfd/rkx110_x120/rkx120_dsi_tx.c @@ -1181,3 +1181,9 @@ void rkx120_dsi_tx_disable(struct rk_serdes *des, struct rk_serdes_route *route, dsi_write(des, remote_id, DSI_MODE_CFG, CMD_VIDEO_MODE(COMMAND_MODE)); dsi_write(des, remote_id, DSI_PWR_UP, POWER_UP); } + +void rkx120_dsi_tx_reset(struct rk_serdes *des, u8 remote_id) +{ + dsi_write(des, remote_id, DSI_PWR_UP, RESET); + dsi_write(des, remote_id, DSI_PWR_UP, POWER_UP); +} diff --git a/drivers/mfd/rkx110_x120/rkx120_dsi_tx.h b/drivers/mfd/rkx110_x120/rkx120_dsi_tx.h index 1703766c3608..b426fc583f22 100644 --- a/drivers/mfd/rkx110_x120/rkx120_dsi_tx.h +++ b/drivers/mfd/rkx110_x120/rkx120_dsi_tx.h @@ -20,4 +20,5 @@ void rkx120_dsi_tx_post_disable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id); void rkx120_dsi_tx_disable(struct rk_serdes *serdes, struct rk_serdes_route *route, u8 remote_id); +void rkx120_dsi_tx_reset(struct rk_serdes *des, u8 remote_id); #endif