drm/rockchip: Pass struct rockchip_drm_sub_dev for &rockchip_drm_sub_dev.loader_protect()

In order to enhance the flexibility of loader protect callback
&rockchip_drm_sub_dev.loader_protect(), we replace the parameter
'struct drm_encoder *encoder' by 'struct rockchip_drm_sub_dev'so that
the panel or bridge drivers can apply it to achieve the loader
protect function.

Change-Id: Ic26110583245c1a0807fee35f4dd889ee8f1f845
Signed-off-by: Damon Ding <damon.ding@rock-chips.com>
This commit is contained in:
Damon Ding
2025-06-30 17:28:31 +08:00
parent 927ec42749
commit d8e42edcd6
10 changed files with 22 additions and 24 deletions

View File

@@ -251,9 +251,9 @@ static int rockchip_dp_get_modes(struct analogix_dp_plat_data *plat_data,
return 0;
}
static int rockchip_dp_loader_protect(struct drm_encoder *encoder, bool on)
static int rockchip_dp_loader_protect(struct rockchip_drm_sub_dev *sub_dev, bool on)
{
struct rockchip_dp_device *dp = encoder_to_dp(encoder);
struct rockchip_dp_device *dp = container_of(sub_dev, struct rockchip_dp_device, sub_dev);
struct analogix_dp_plat_data *plat_data = &dp->plat_data;
struct rockchip_dp_device *secondary = NULL;
int ret;
@@ -261,7 +261,7 @@ static int rockchip_dp_loader_protect(struct drm_encoder *encoder, bool on)
if (plat_data->right) {
secondary = rockchip_dp_find_by_id(dp->dev->driver, !dp->id);
ret = rockchip_dp_loader_protect(&secondary->encoder.encoder, on);
ret = rockchip_dp_loader_protect(&secondary->sub_dev, on);
if (ret)
return ret;
}

View File

@@ -3308,9 +3308,9 @@ static void _dw_dp_loader_protect(struct dw_dp *dp, bool on)
}
}
static int dw_dp_loader_protect(struct drm_encoder *encoder, bool on)
static int dw_dp_loader_protect(struct rockchip_drm_sub_dev *sub_dev, bool on)
{
struct dw_dp *dp = encoder_to_dp(encoder);
struct dw_dp *dp = container_of(sub_dev, struct dw_dp, sub_dev);
dp->is_loader_protect = true;
_dw_dp_loader_protect(dp, on);

View File

@@ -914,10 +914,11 @@ static void dw_mipi_dsi_rockchip_loader_protect(struct dw_mipi_dsi_rockchip *dsi
dw_mipi_dsi_rockchip_loader_protect(dsi->slave, on);
}
static int dw_mipi_dsi_rockchip_encoder_loader_protect(struct drm_encoder *encoder,
bool on)
static int dw_mipi_dsi_rockchip_encoder_loader_protect(struct rockchip_drm_sub_dev *sub_dev,
bool on)
{
struct dw_mipi_dsi_rockchip *dsi = to_dsi(encoder);
struct dw_mipi_dsi_rockchip *dsi = container_of(sub_dev, struct dw_mipi_dsi_rockchip,
sub_dev);
if (dsi->panel)
panel_simple_loader_protect(dsi->panel);

View File

@@ -1191,10 +1191,9 @@ static void dw_mipi_dsi2_loader_protect(struct dw_mipi_dsi2 *dsi2, bool on)
dw_mipi_dsi2_loader_protect(dsi2->slave, on);
}
static int dw_mipi_dsi2_encoder_loader_protect(struct drm_encoder *encoder,
bool on)
static int dw_mipi_dsi2_encoder_loader_protect(struct rockchip_drm_sub_dev *sub_dev, bool on)
{
struct dw_mipi_dsi2 *dsi2 = encoder_to_dsi2(encoder);
struct dw_mipi_dsi2 *dsi2 = container_of(sub_dev, struct dw_mipi_dsi2, sub_dev);
if (dsi2->panel)
panel_simple_loader_protect(dsi2->panel);

View File

@@ -2153,9 +2153,9 @@ static int _dw_hdmi_rockchip_encoder_loader_protect(struct rockchip_hdmi *hdmi,
return 0;
}
static int dw_hdmi_rockchip_encoder_loader_protect(struct drm_encoder *encoder, bool on)
static int dw_hdmi_rockchip_encoder_loader_protect(struct rockchip_drm_sub_dev *sub_dev, bool on)
{
struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
struct rockchip_hdmi *hdmi = container_of(sub_dev, struct rockchip_hdmi, sub_dev);
struct rockchip_hdmi *secondary;
_dw_hdmi_rockchip_encoder_loader_protect(hdmi, on);

View File

@@ -144,7 +144,7 @@ struct rockchip_drm_sub_dev {
struct list_head list;
struct drm_connector *connector;
struct device_node *of_node;
int (*loader_protect)(struct drm_encoder *encoder, bool on);
int (*loader_protect)(struct rockchip_drm_sub_dev *sub_dev, bool on);
void (*update_vfp_for_vrr)(struct drm_connector *connector, struct drm_display_mode *mode,
int vfp);
};

View File

@@ -813,7 +813,7 @@ static int setup_initial_state(struct drm_device *drm_dev,
conn_state->best_encoder = rockchip_drm_connector_get_single_encoder(connector);
if (set->sub_dev->loader_protect) {
ret = set->sub_dev->loader_protect(conn_state->best_encoder, true);
ret = set->sub_dev->loader_protect(set->sub_dev, true);
if (ret) {
dev_err(drm_dev->dev,
"connector[%s] loader protect failed\n",
@@ -979,7 +979,7 @@ error_crtc:
priv->crtc_funcs[pipe]->loader_protect(crtc, false, NULL);
error_conn:
if (set->sub_dev->loader_protect)
set->sub_dev->loader_protect(conn_state->best_encoder, false);
set->sub_dev->loader_protect(set->sub_dev, false);
return ret;
}

View File

@@ -546,9 +546,9 @@ rockchip_tve_encoder_atomic_check(struct drm_encoder *encoder,
return 0;
}
static int rockchip_tve_encoder_loader_protect(struct drm_encoder *encoder, bool on)
static int rockchip_tve_encoder_loader_protect(struct rockchip_drm_sub_dev *sub_dev, bool on)
{
struct rockchip_tve *tve = encoder_to_tve(encoder);
struct rockchip_tve *tve = container_of(sub_dev, struct rockchip_tve, sub_dev);
int ret;
if (on) {

View File

@@ -431,10 +431,9 @@ static void rockchip_lvds_encoder_disable(struct drm_encoder *encoder)
drm_panel_unprepare(lvds->panel);
}
static int rockchip_lvds_encoder_loader_protect(struct drm_encoder *encoder,
bool on)
static int rockchip_lvds_encoder_loader_protect(struct rockchip_drm_sub_dev *sub_dev, bool on)
{
struct rockchip_lvds *lvds = encoder_to_lvds(encoder);
struct rockchip_lvds *lvds = container_of(sub_dev, struct rockchip_lvds, sub_dev);
if (lvds->panel)
panel_simple_loader_protect(lvds->panel);

View File

@@ -403,10 +403,9 @@ rockchip_rgb_encoder_atomic_check(struct drm_encoder *encoder,
return 0;
}
static int rockchip_rgb_encoder_loader_protect(struct drm_encoder *encoder,
bool on)
static int rockchip_rgb_encoder_loader_protect(struct rockchip_drm_sub_dev *sub_dev, bool on)
{
struct rockchip_rgb *rgb = encoder_to_rgb(encoder);
struct rockchip_rgb *rgb = container_of(sub_dev, struct rockchip_rgb, sub_dev);
if (rgb->np_mcu_panel) {
struct rockchip_mcu_panel *mcu_panel = to_rockchip_mcu_panel(rgb->panel);