drm/rockchip: dsi2: add loader protect helper for kernel logo

Signed-off-by: Guochun Huang <hero.huang@rock-chips.com>
Change-Id: I8132c8c6146e110a1ec0f559ce9ee426a85dd7e2
This commit is contained in:
Guochun Huang
2021-12-07 11:27:51 +08:00
committed by Tao Huang
parent c1c7e5ac5e
commit 9dd3db9ef9

View File

@@ -431,9 +431,7 @@ static void dw_mipi_dsi2_set_cmd_mode(struct dw_mipi_dsi2 *dsi2)
static void dw_mipi_dsi2_disable(struct dw_mipi_dsi2 *dsi2)
{
regmap_write(dsi2->regmap, DSI2_PWR_UP, RESET);
regmap_write(dsi2->regmap, DSI2_IPI_PIX_PKT_CFG, 0);
regmap_write(dsi2->regmap, DSI2_PWR_UP, POWER_UP);
dw_mipi_dsi2_set_cmd_mode(dsi2);
if (dsi2->slave)
@@ -903,6 +901,37 @@ dw_mipi_dsi2_encoder_atomic_mode_set(struct drm_encoder *encoder,
drm_mode_copy(&dsi2->slave->mode, &crtc_state->adjusted_mode);
}
static void dw_mipi_dsi2_loader_protect(struct dw_mipi_dsi2 *dsi2, bool on)
{
if (on) {
pm_runtime_get_sync(dsi2->dev);
phy_init(dsi2->dcphy);
dsi2->phy_enabled = true;
if (dsi2->dcphy)
dsi2->dcphy->power_count++;
} else {
pm_runtime_put(dsi2->dev);
phy_exit(dsi2->dcphy);
dsi2->phy_enabled = false;
if (dsi2->dcphy)
dsi2->dcphy->power_count--;
}
if (dsi2->slave)
dw_mipi_dsi2_loader_protect(dsi2->slave, on);
}
static void dw_mipi_dsi2_encoder_loader_protect(struct drm_encoder *encoder,
bool on)
{
struct dw_mipi_dsi2 *dsi2 = encoder_to_dsi2(encoder);
if (dsi2->panel)
panel_simple_loader_protect(dsi2->panel);
dw_mipi_dsi2_loader_protect(dsi2, on);
}
static const struct drm_encoder_helper_funcs
dw_mipi_dsi2_encoder_helper_funcs = {
.enable = dw_mipi_dsi2_encoder_enable,
@@ -1132,6 +1161,7 @@ static int dw_mipi_dsi2_bind(struct device *dev, struct device *master,
dsi2->sub_dev.connector = &dsi2->connector;
dsi2->sub_dev.of_node = dev->of_node;
dsi2->sub_dev.loader_protect = dw_mipi_dsi2_encoder_loader_protect;
rockchip_drm_register_sub_dev(&dsi2->sub_dev);
} else {
dsi2->bridge->driver_private = &dsi2->host;