mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-02-22 03:00:19 +07:00
drm/tegra: dsi: Soft-reset controller on ->disable
This reset is necessary to properly clean up the internal state of the controller. Signed-off-by: Thierry Reding <treding@nvidia.com>
This commit is contained in:
parent
9c0b4ca112
commit
92f0e073ed
@ -724,6 +724,30 @@ static void tegra_dsi_disable(struct tegra_dsi *dsi)
|
||||
usleep_range(5000, 10000);
|
||||
}
|
||||
|
||||
static void tegra_dsi_soft_reset(struct tegra_dsi *dsi)
|
||||
{
|
||||
u32 value;
|
||||
|
||||
value = tegra_dsi_readl(dsi, DSI_POWER_CONTROL);
|
||||
value &= ~DSI_POWER_CONTROL_ENABLE;
|
||||
tegra_dsi_writel(dsi, value, DSI_POWER_CONTROL);
|
||||
|
||||
usleep_range(300, 1000);
|
||||
|
||||
value = tegra_dsi_readl(dsi, DSI_POWER_CONTROL);
|
||||
value |= DSI_POWER_CONTROL_ENABLE;
|
||||
tegra_dsi_writel(dsi, value, DSI_POWER_CONTROL);
|
||||
|
||||
usleep_range(300, 1000);
|
||||
|
||||
value = tegra_dsi_readl(dsi, DSI_TRIGGER);
|
||||
if (value)
|
||||
tegra_dsi_writel(dsi, 0, DSI_TRIGGER);
|
||||
|
||||
if (dsi->slave)
|
||||
tegra_dsi_soft_reset(dsi->slave);
|
||||
}
|
||||
|
||||
static int tegra_output_dsi_disable(struct tegra_output *output)
|
||||
{
|
||||
struct tegra_dc *dc = to_tegra_dc(output->encoder.crtc);
|
||||
@ -762,6 +786,7 @@ static int tegra_output_dsi_disable(struct tegra_output *output)
|
||||
if (err < 0)
|
||||
dev_dbg(dsi->dev, "failed to idle DSI: %d\n", err);
|
||||
|
||||
tegra_dsi_soft_reset(dsi);
|
||||
tegra_dsi_disable(dsi);
|
||||
|
||||
dsi->enabled = false;
|
||||
|
Loading…
Reference in New Issue
Block a user