drm/rockchip: dw-dp: Support dp show uboot logo

When dp show uboot logo, It need skip the init process of dp
controller and set the phy status as power on.

Signed-off-by: Zhang Yubing <yubing.zhang@rock-chips.com>
Change-Id: I7dc3a00c1e71f92648cbb49ca527eb2a9f9026ac
This commit is contained in:
Zhang Yubing
2022-02-21 14:15:20 +08:00
committed by Tao Huang
parent 0a88c6e023
commit de30a9e538

View File

@@ -285,6 +285,8 @@ struct dw_dp {
struct drm_property *color_format_property;
struct drm_property *color_depth_capacity;
struct drm_property *color_format_capacity;
struct rockchip_drm_sub_dev sub_dev;
};
struct dw_dp_state {
@@ -1718,12 +1720,6 @@ static void dw_dp_hpd_init(struct dw_dp *dp)
static void dw_dp_aux_init(struct dw_dp *dp)
{
regmap_update_bits(dp->regmap, DPTX_SOFT_RESET_CTRL, AUX_RESET,
FIELD_PREP(AUX_RESET, 1));
usleep_range(10, 20);
regmap_update_bits(dp->regmap, DPTX_SOFT_RESET_CTRL, AUX_RESET,
FIELD_PREP(AUX_RESET, 0));
regmap_update_bits(dp->regmap, DPTX_GENERAL_INTERRUPT_ENABLE,
AUX_REPLY_EVENT_EN,
FIELD_PREP(AUX_REPLY_EVENT_EN, 1));
@@ -1731,18 +1727,6 @@ static void dw_dp_aux_init(struct dw_dp *dp)
static void dw_dp_init(struct dw_dp *dp)
{
regmap_update_bits(dp->regmap, DPTX_SOFT_RESET_CTRL, CONTROLLER_RESET,
FIELD_PREP(CONTROLLER_RESET, 1));
usleep_range(10, 20);
regmap_update_bits(dp->regmap, DPTX_SOFT_RESET_CTRL, CONTROLLER_RESET,
FIELD_PREP(CONTROLLER_RESET, 0));
regmap_update_bits(dp->regmap, DPTX_SOFT_RESET_CTRL, PHY_SOFT_RESET,
FIELD_PREP(PHY_SOFT_RESET, 1));
usleep_range(10, 20);
regmap_update_bits(dp->regmap, DPTX_SOFT_RESET_CTRL, PHY_SOFT_RESET,
FIELD_PREP(PHY_SOFT_RESET, 0));
regmap_update_bits(dp->regmap, DPTX_CCTL, DEFAULT_FAST_LINK_TRAIN_EN,
FIELD_PREP(DEFAULT_FAST_LINK_TRAIN_EN, 0));
@@ -1943,6 +1927,16 @@ static int dw_dp_bridge_mode_valid(struct drm_bridge *bridge,
return MODE_OK;
}
static void dw_dp_loader_protect(struct drm_encoder *encoder, bool on)
{
struct dw_dp *dp = encoder_to_dp(encoder);
if (on)
phy_power_on(dp->phy);
else
phy_power_off(dp->phy);
}
static int dw_dp_bridge_attach(struct drm_bridge *bridge,
enum drm_bridge_attach_flags flags)
{
@@ -1974,6 +1968,11 @@ static int dw_dp_bridge_attach(struct drm_bridge *bridge,
drm_connector_attach_encoder(connector, bridge->encoder);
dp->sub_dev.connector = connector;
dp->sub_dev.of_node = dp->dev->of_node;
dp->sub_dev.loader_protect = dw_dp_loader_protect;
rockchip_drm_register_sub_dev(&dp->sub_dev);
return 0;
}
@@ -2853,11 +2852,8 @@ static int __maybe_unused dw_dp_runtime_resume(struct device *dev)
clk_prepare_enable(dp->apb_clk);
clk_prepare_enable(dp->aux_clk);
reset_control_assert(dp->rstc);
udelay(10);
reset_control_deassert(dp->rstc);
dw_dp_init(dp);
enable_irq(dp->irq);
return 0;