drm/rockchip: rgb: add loader_protect support for mcu panel

Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
Change-Id: Ic0e5f48a5324d64d5218b7bd77bc1b4b9ad01fa3
This commit is contained in:
Damon Ding
2022-08-25 10:29:41 +08:00
committed by Tao Huang
parent 3f55e852e2
commit b164346221

View File

@@ -134,6 +134,7 @@ struct rockchip_rgb {
struct phy *phy;
struct regmap *grf;
bool data_sync_bypass;
bool is_mcu_panel;
const struct rockchip_rgb_funcs *funcs;
struct rockchip_drm_sub_dev sub_dev;
};
@@ -148,6 +149,11 @@ static inline struct rockchip_rgb *encoder_to_rgb(struct drm_encoder *e)
return container_of(e, struct rockchip_rgb, encoder);
}
static inline struct rockchip_mcu_panel *to_rockchip_mcu_panel(struct drm_panel *panel)
{
return container_of(panel, struct rockchip_mcu_panel, base);
}
static enum drm_connector_status
rockchip_rgb_connector_detect(struct drm_connector *connector, bool force)
{
@@ -307,6 +313,15 @@ static void rockchip_rgb_encoder_loader_protect(struct drm_encoder *encoder,
{
struct rockchip_rgb *rgb = encoder_to_rgb(encoder);
if (rgb->is_mcu_panel) {
struct rockchip_mcu_panel *mcu_panel = to_rockchip_mcu_panel(rgb->panel);
mcu_panel->prepared = true;
mcu_panel->enabled = true;
return;
}
if (rgb->panel)
panel_simple_loader_protect(rgb->panel);
}
@@ -403,11 +418,6 @@ static int rockchip_mcu_panel_parse_cmd_seq(struct device *dev,
return 0;
}
static inline struct rockchip_mcu_panel *to_rockchip_mcu_panel(struct drm_panel *panel)
{
return container_of(panel, struct rockchip_mcu_panel, base);
}
static int rockchip_mcu_panel_init(struct rockchip_rgb *rgb, struct device_node *np_mcu_panel)
{
struct device *dev = rgb->dev;
@@ -761,6 +771,8 @@ static int rockchip_rgb_bind(struct device *dev, struct device *master,
DRM_MODE_CONNECTOR_DPI);
drm_panel_add(&mcu_panel->base);
rgb->is_mcu_panel = true;
} else {
ret = drm_of_find_panel_or_bridge(dev->of_node, 1, -1,
&rgb->panel, &rgb->bridge);