mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
drm/rockchip: Add return value to .loader_protect()
Callback loader_protect() maybe failed. Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com> Change-Id: Icb9a25701929c79b94c9a63568a408913e49f87c
This commit is contained in:
@@ -1714,6 +1714,12 @@ static void analogix_dp_bridge_disable(struct drm_bridge *bridge)
|
||||
dp->dpms_mode = DRM_MODE_DPMS_OFF;
|
||||
}
|
||||
|
||||
void analogix_dp_disable(struct analogix_dp_device *dp)
|
||||
{
|
||||
analogix_dp_bridge_disable(&dp->bridge);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(analogix_dp_disable);
|
||||
|
||||
static void
|
||||
analogix_dp_bridge_atomic_disable(struct drm_bridge *bridge,
|
||||
struct drm_bridge_state *old_bridge_state)
|
||||
@@ -2105,15 +2111,19 @@ int analogix_dp_loader_protect(struct analogix_dp_device *dp)
|
||||
|
||||
ret = analogix_dp_fast_link_train_detection(dp);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err_disable;
|
||||
|
||||
if (analogix_dp_detect_sink_psr(dp)) {
|
||||
ret = analogix_dp_enable_sink_psr(dp);
|
||||
if (ret)
|
||||
return ret;
|
||||
goto err_disable;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_disable:
|
||||
analogix_dp_disable(dp);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(analogix_dp_loader_protect);
|
||||
|
||||
|
||||
@@ -232,25 +232,35 @@ static int rockchip_dp_get_modes(struct analogix_dp_plat_data *plat_data,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rockchip_dp_loader_protect(struct drm_encoder *encoder, bool on)
|
||||
static int rockchip_dp_loader_protect(struct drm_encoder *encoder, bool on)
|
||||
{
|
||||
struct rockchip_dp_device *dp = to_dp(encoder);
|
||||
struct analogix_dp_plat_data *plat_data = &dp->plat_data;
|
||||
struct rockchip_dp_device *secondary = NULL;
|
||||
int ret;
|
||||
|
||||
if (plat_data->right) {
|
||||
struct rockchip_dp_device *secondary =
|
||||
rockchip_dp_find_by_id(dp->dev->driver, !dp->id);
|
||||
secondary = rockchip_dp_find_by_id(dp->dev->driver, !dp->id);
|
||||
|
||||
rockchip_dp_loader_protect(&secondary->encoder, on);
|
||||
ret = rockchip_dp_loader_protect(&secondary->encoder, on);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!on)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
if (plat_data->panel)
|
||||
panel_simple_loader_protect(plat_data->panel);
|
||||
|
||||
analogix_dp_loader_protect(dp->adp);
|
||||
ret = analogix_dp_loader_protect(dp->adp);
|
||||
if (ret) {
|
||||
if (secondary)
|
||||
analogix_dp_disable(secondary->adp);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static bool rockchip_dp_skip_connector(struct drm_bridge *bridge)
|
||||
|
||||
@@ -2106,13 +2106,15 @@ static void _dw_dp_loader_protect(struct dw_dp *dp, bool on)
|
||||
}
|
||||
}
|
||||
|
||||
static void dw_dp_loader_protect(struct drm_encoder *encoder, bool on)
|
||||
static int dw_dp_loader_protect(struct drm_encoder *encoder, bool on)
|
||||
{
|
||||
struct dw_dp *dp = encoder_to_dp(encoder);
|
||||
|
||||
_dw_dp_loader_protect(dp, on);
|
||||
if (dp->right)
|
||||
_dw_dp_loader_protect(dp->right, on);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dw_dp_connector_init(struct dw_dp *dp)
|
||||
|
||||
@@ -830,7 +830,7 @@ static void dw_mipi_dsi_rockchip_loader_protect(struct dw_mipi_dsi_rockchip *dsi
|
||||
dw_mipi_dsi_rockchip_loader_protect(dsi->slave, on);
|
||||
}
|
||||
|
||||
static void dw_mipi_dsi_rockchip_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
static int dw_mipi_dsi_rockchip_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
bool on)
|
||||
{
|
||||
struct dw_mipi_dsi_rockchip *dsi = to_dsi(encoder);
|
||||
@@ -839,6 +839,8 @@ static void dw_mipi_dsi_rockchip_encoder_loader_protect(struct drm_encoder *enco
|
||||
panel_simple_loader_protect(dsi->panel);
|
||||
|
||||
dw_mipi_dsi_rockchip_loader_protect(dsi, on);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct drm_encoder_helper_funcs
|
||||
|
||||
@@ -962,7 +962,7 @@ static void dw_mipi_dsi2_loader_protect(struct dw_mipi_dsi2 *dsi2, bool on)
|
||||
dw_mipi_dsi2_loader_protect(dsi2->slave, on);
|
||||
}
|
||||
|
||||
static void dw_mipi_dsi2_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
static int dw_mipi_dsi2_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
bool on)
|
||||
{
|
||||
struct dw_mipi_dsi2 *dsi2 = encoder_to_dsi2(encoder);
|
||||
@@ -971,6 +971,8 @@ static void dw_mipi_dsi2_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
panel_simple_loader_protect(dsi2->panel);
|
||||
|
||||
dw_mipi_dsi2_loader_protect(dsi2, on);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct drm_encoder_helper_funcs
|
||||
|
||||
@@ -1573,7 +1573,7 @@ static void dw_hdmi_rockchip_encoder_enable(struct drm_encoder *encoder)
|
||||
ret ? "LIT" : "BIG");
|
||||
}
|
||||
|
||||
static void dw_hdmi_rockchip_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
static int dw_hdmi_rockchip_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
bool on)
|
||||
{
|
||||
struct rockchip_hdmi *hdmi = to_rockchip_hdmi(encoder);
|
||||
@@ -1584,7 +1584,7 @@ static void dw_hdmi_rockchip_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
ret = clk_prepare_enable(hdmi->link_clk);
|
||||
if (ret < 0) {
|
||||
DRM_DEV_ERROR(hdmi->dev, "failed to enable link_clk %d\n", ret);
|
||||
return;
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1593,6 +1593,8 @@ static void dw_hdmi_rockchip_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
clk_disable_unprepare(hdmi->link_clk);
|
||||
hdmi->phy->power_count--;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rk3588_set_link_mode(struct rockchip_hdmi *hdmi)
|
||||
|
||||
@@ -90,7 +90,7 @@ struct rockchip_drm_sub_dev {
|
||||
struct list_head list;
|
||||
struct drm_connector *connector;
|
||||
struct device_node *of_node;
|
||||
void (*loader_protect)(struct drm_encoder *encoder, bool on);
|
||||
int (*loader_protect)(struct drm_encoder *encoder, bool on);
|
||||
void (*oob_hotplug_event)(struct drm_connector *connector);
|
||||
void (*update_vfp_for_vrr)(struct drm_connector *connector, struct drm_display_mode *mode,
|
||||
int vfp);
|
||||
|
||||
@@ -657,8 +657,16 @@ static int setup_initial_state(struct drm_device *drm_dev,
|
||||
else
|
||||
conn_state->best_encoder = rockchip_drm_connector_get_single_encoder(connector);
|
||||
|
||||
if (set->sub_dev->loader_protect)
|
||||
set->sub_dev->loader_protect(conn_state->best_encoder, true);
|
||||
if (set->sub_dev->loader_protect) {
|
||||
ret = set->sub_dev->loader_protect(conn_state->best_encoder, true);
|
||||
if (ret) {
|
||||
dev_err(drm_dev->dev,
|
||||
"connector[%s] loader protect failed\n",
|
||||
connector->name);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
num_modes = rockchip_drm_fill_connector_modes(connector, 7680, 7680, set->force_output);
|
||||
if (!num_modes) {
|
||||
dev_err(drm_dev->dev, "connector[%s] can't found any modes\n",
|
||||
|
||||
@@ -318,13 +318,15 @@ static void rockchip_lvds_encoder_disable(struct drm_encoder *encoder)
|
||||
drm_panel_unprepare(lvds->panel);
|
||||
}
|
||||
|
||||
static void rockchip_lvds_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
bool on)
|
||||
static int rockchip_lvds_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
bool on)
|
||||
{
|
||||
struct rockchip_lvds *lvds = encoder_to_lvds(encoder);
|
||||
|
||||
if (lvds->panel)
|
||||
panel_simple_loader_protect(lvds->panel);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const
|
||||
|
||||
@@ -308,8 +308,8 @@ rockchip_rgb_encoder_atomic_check(struct drm_encoder *encoder,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void rockchip_rgb_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
bool on)
|
||||
static int rockchip_rgb_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
bool on)
|
||||
{
|
||||
struct rockchip_rgb *rgb = encoder_to_rgb(encoder);
|
||||
|
||||
@@ -319,11 +319,13 @@ static void rockchip_rgb_encoder_loader_protect(struct drm_encoder *encoder,
|
||||
mcu_panel->prepared = true;
|
||||
mcu_panel->enabled = true;
|
||||
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (rgb->panel)
|
||||
panel_simple_loader_protect(rgb->panel);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum drm_mode_status
|
||||
|
||||
@@ -80,5 +80,6 @@ int analogix_dp_audio_startup(struct analogix_dp_device *dp);
|
||||
int analogix_dp_audio_get_eld(struct analogix_dp_device *dp,
|
||||
u8 *buf, size_t len);
|
||||
int analogix_dp_loader_protect(struct analogix_dp_device *dp);
|
||||
void analogix_dp_disable(struct analogix_dp_device *dp);
|
||||
|
||||
#endif /* _ANALOGIX_DP_H_ */
|
||||
|
||||
Reference in New Issue
Block a user