mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user