drm/bridge: Centralize error message when bridge attach fails
Being informed of a failure to attach a bridge is useful, and many drivers prints an error message in that case. Move the message to drm_bridge_attach() to avoid code duplication. Suggested-by: Stephen Boyd <swboyd@chromium.org> Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Reviewed-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com> Reviewed-by: Jyri Sarha <jyri.sarha@iki.fi>
This commit is contained in:
parent
5e7ef0b85c
commit
fb8d617f8f
|
@ -1583,7 +1583,6 @@ static int analogix_dp_create_bridge(struct drm_device *drm_dev,
|
|||
struct analogix_dp_device *dp)
|
||||
{
|
||||
struct drm_bridge *bridge;
|
||||
int ret;
|
||||
|
||||
bridge = devm_kzalloc(drm_dev->dev, sizeof(*bridge), GFP_KERNEL);
|
||||
if (!bridge) {
|
||||
|
@ -1596,13 +1595,7 @@ static int analogix_dp_create_bridge(struct drm_device *drm_dev,
|
|||
bridge->driver_private = dp;
|
||||
bridge->funcs = &analogix_dp_bridge_funcs;
|
||||
|
||||
ret = drm_bridge_attach(dp->encoder, bridge, NULL, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("failed to attach drm bridge\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return drm_bridge_attach(dp->encoder, bridge, NULL, 0);
|
||||
}
|
||||
|
||||
static int analogix_dp_dt_parse_pdata(struct analogix_dp_device *dp)
|
||||
|
|
|
@ -1359,11 +1359,8 @@ static int anx7625_bridge_attach(struct drm_bridge *bridge,
|
|||
err = drm_bridge_attach(bridge->encoder,
|
||||
ctx->pdata.panel_bridge,
|
||||
&ctx->bridge, flags);
|
||||
if (err) {
|
||||
DRM_DEV_ERROR(dev,
|
||||
"Fail to attach panel bridge: %d\n", err);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
ctx->bridge_attached = 1;
|
||||
|
|
|
@ -3474,7 +3474,6 @@ struct dw_hdmi *dw_hdmi_bind(struct platform_device *pdev,
|
|||
ret = drm_bridge_attach(encoder, &hdmi->bridge, NULL, 0);
|
||||
if (ret) {
|
||||
dw_hdmi_remove(hdmi);
|
||||
DRM_ERROR("Failed to initialize bridge with drm\n");
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
|
|
|
@ -1229,15 +1229,7 @@ EXPORT_SYMBOL_GPL(dw_mipi_dsi_remove);
|
|||
*/
|
||||
int dw_mipi_dsi_bind(struct dw_mipi_dsi *dsi, struct drm_encoder *encoder)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to initialize bridge with drm\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return drm_bridge_attach(encoder, &dsi->bridge, NULL, 0);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(dw_mipi_dsi_bind);
|
||||
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include <drm/drm_atomic_state_helper.h>
|
||||
#include <drm/drm_bridge.h>
|
||||
#include <drm/drm_encoder.h>
|
||||
#include <drm/drm_print.h>
|
||||
|
||||
#include "drm_crtc_internal.h"
|
||||
|
||||
|
@ -225,6 +226,15 @@ err_reset_bridge:
|
|||
bridge->dev = NULL;
|
||||
bridge->encoder = NULL;
|
||||
list_del(&bridge->chain_node);
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
DRM_ERROR("failed to attach bridge %pOF to encoder %s: %d\n",
|
||||
bridge->of_node, encoder->name, ret);
|
||||
#else
|
||||
DRM_ERROR("failed to attach bridge to encoder %s: %d\n",
|
||||
encoder->name, ret);
|
||||
#endif
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_bridge_attach);
|
||||
|
|
|
@ -109,11 +109,8 @@ static int exynos_dp_bridge_attach(struct analogix_dp_plat_data *plat_data,
|
|||
if (dp->ptn_bridge) {
|
||||
ret = drm_bridge_attach(&dp->encoder, dp->ptn_bridge, bridge,
|
||||
0);
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(dp->dev,
|
||||
"Failed to attach bridge to drm\n");
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -970,11 +970,8 @@ static int hdmi_create_connector(struct drm_encoder *encoder)
|
|||
drm_connector_helper_add(connector, &hdmi_connector_helper_funcs);
|
||||
drm_connector_attach_encoder(connector, encoder);
|
||||
|
||||
if (hdata->bridge) {
|
||||
if (hdata->bridge)
|
||||
ret = drm_bridge_attach(encoder, hdata->bridge, NULL, 0);
|
||||
if (ret)
|
||||
DRM_DEV_ERROR(hdata->dev, "Failed to attach bridge\n");
|
||||
}
|
||||
|
||||
cec_fill_conn_info_from_drm(&conn_info, connector);
|
||||
|
||||
|
|
|
@ -769,16 +769,9 @@ static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi)
|
|||
{
|
||||
struct drm_encoder *encoder = &dsi->encoder;
|
||||
struct drm_bridge *bridge = dsi->bridge;
|
||||
int ret;
|
||||
|
||||
/* associate the bridge to dsi encoder */
|
||||
ret = drm_bridge_attach(encoder, bridge, NULL, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("failed to attach external bridge\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return drm_bridge_attach(encoder, bridge, NULL, 0);
|
||||
}
|
||||
|
||||
static int dsi_bind(struct device *dev, struct device *master, void *data)
|
||||
|
|
|
@ -93,11 +93,8 @@ static int dcss_kms_bridge_connector_init(struct dcss_kms_dev *kms)
|
|||
|
||||
ret = drm_bridge_attach(encoder, bridge, NULL,
|
||||
DRM_BRIDGE_ATTACH_NO_CONNECTOR);
|
||||
if (ret < 0) {
|
||||
dev_err(ddev->dev, "Unable to attach bridge %pOF\n",
|
||||
bridge->of_node);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
kms->connector = drm_bridge_connector_init(ddev, encoder);
|
||||
if (IS_ERR(kms->connector)) {
|
||||
|
|
|
@ -465,10 +465,8 @@ static int imx_ldb_register(struct drm_device *drm,
|
|||
|
||||
if (imx_ldb_ch->bridge) {
|
||||
ret = drm_bridge_attach(encoder, imx_ldb_ch->bridge, NULL, 0);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to initialize bridge with drm\n");
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* We want to add the connector whenever there is no bridge
|
||||
|
|
|
@ -294,11 +294,8 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data)
|
|||
|
||||
if (imxpd->next_bridge) {
|
||||
ret = drm_bridge_attach(encoder, imxpd->next_bridge, bridge, 0);
|
||||
if (ret < 0) {
|
||||
dev_err(imxpd->dev, "failed to attach bridge: %d\n",
|
||||
ret);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
} else {
|
||||
drm_connector_helper_add(connector,
|
||||
&imx_pd_connector_helper_funcs);
|
||||
|
|
|
@ -1081,10 +1081,8 @@ static int ingenic_drm_bind(struct device *dev, bool has_components)
|
|||
drm_encoder_helper_add(encoder, &ingenic_drm_encoder_helper_funcs);
|
||||
|
||||
ret = drm_bridge_attach(encoder, bridge, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(dev, "Unable to attach bridge\n");
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
drm_for_each_encoder(encoder, drm) {
|
||||
|
|
|
@ -1441,7 +1441,6 @@ int kmb_dsi_encoder_init(struct drm_device *dev, struct kmb_dsi *kmb_dsi)
|
|||
ret = drm_bridge_attach(encoder, adv_bridge, NULL,
|
||||
DRM_BRIDGE_ATTACH_NO_CONNECTOR);
|
||||
if (ret) {
|
||||
DRM_ERROR("failed to attach bridge to MIPI\n");
|
||||
drm_encoder_cleanup(encoder);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -1052,7 +1052,6 @@ static int mcde_dsi_bridge_attach(struct drm_bridge *bridge,
|
|||
{
|
||||
struct mcde_dsi *d = bridge_to_mcde_dsi(bridge);
|
||||
struct drm_device *drm = bridge->dev;
|
||||
int ret;
|
||||
|
||||
if (!drm_core_check_feature(drm, DRIVER_ATOMIC)) {
|
||||
dev_err(d->dev, "we need atomic updates\n");
|
||||
|
@ -1060,13 +1059,7 @@ static int mcde_dsi_bridge_attach(struct drm_bridge *bridge,
|
|||
}
|
||||
|
||||
/* Attach the DSI bridge to the output (panel etc) bridge */
|
||||
ret = drm_bridge_attach(bridge->encoder, d->bridge_out, bridge, flags);
|
||||
if (ret) {
|
||||
dev_err(d->dev, "failed to attach the DSI bridge\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return drm_bridge_attach(bridge->encoder, d->bridge_out, bridge, flags);
|
||||
}
|
||||
|
||||
static const struct drm_bridge_funcs mcde_dsi_bridge_funcs = {
|
||||
|
|
|
@ -714,10 +714,8 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data)
|
|||
|
||||
ret = drm_bridge_attach(&dpi->encoder, &dpi->bridge, NULL,
|
||||
DRM_BRIDGE_ATTACH_NO_CONNECTOR);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to attach bridge: %d\n", ret);
|
||||
if (ret)
|
||||
goto err_cleanup;
|
||||
}
|
||||
|
||||
dpi->connector = drm_bridge_connector_init(drm_dev, &dpi->encoder);
|
||||
if (IS_ERR(dpi->connector)) {
|
||||
|
|
|
@ -1293,11 +1293,8 @@ static int mtk_hdmi_bridge_attach(struct drm_bridge *bridge,
|
|||
if (hdmi->next_bridge) {
|
||||
ret = drm_bridge_attach(bridge->encoder, hdmi->next_bridge,
|
||||
bridge, flags);
|
||||
if (ret) {
|
||||
dev_err(hdmi->dev,
|
||||
"Failed to attach external bridge: %d\n", ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
mtk_cec_set_hpd_event(hdmi->cec_dev, mtk_hdmi_hpd_event, hdmi->dev);
|
||||
|
|
|
@ -290,12 +290,8 @@ static int omap_modeset_init(struct drm_device *dev)
|
|||
ret = drm_bridge_attach(pipe->encoder,
|
||||
pipe->output->bridge, NULL,
|
||||
DRM_BRIDGE_ATTACH_NO_CONNECTOR);
|
||||
if (ret < 0) {
|
||||
dev_err(priv->dev,
|
||||
"unable to attach bridge %pOF\n",
|
||||
pipe->output->bridge->of_node);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
id = omap_display_id(pipe->output);
|
||||
|
|
|
@ -636,11 +636,8 @@ static int rockchip_lvds_bind(struct device *dev, struct device *master,
|
|||
}
|
||||
} else {
|
||||
ret = drm_bridge_attach(encoder, lvds->bridge, NULL, 0);
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(drm_dev->dev,
|
||||
"failed to attach bridge: %d\n", ret);
|
||||
if (ret)
|
||||
goto err_free_encoder;
|
||||
}
|
||||
}
|
||||
|
||||
pm_runtime_enable(dev);
|
||||
|
|
|
@ -143,11 +143,8 @@ struct rockchip_rgb *rockchip_rgb_init(struct device *dev,
|
|||
rgb->bridge = bridge;
|
||||
|
||||
ret = drm_bridge_attach(encoder, rgb->bridge, NULL, 0);
|
||||
if (ret) {
|
||||
DRM_DEV_ERROR(drm_dev->dev,
|
||||
"failed to attach bridge: %d\n", ret);
|
||||
if (ret)
|
||||
goto err_free_encoder;
|
||||
}
|
||||
|
||||
return rgb;
|
||||
|
||||
|
|
|
@ -463,10 +463,8 @@ static int sti_dvo_bind(struct device *dev, struct device *master, void *data)
|
|||
drm_bridge_add(bridge);
|
||||
|
||||
err = drm_bridge_attach(encoder, bridge, NULL, 0);
|
||||
if (err) {
|
||||
DRM_ERROR("Failed to attach bridge\n");
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
dvo->bridge = bridge;
|
||||
connector->encoder = encoder;
|
||||
|
|
|
@ -142,10 +142,8 @@ int sun4i_lvds_init(struct drm_device *drm, struct sun4i_tcon *tcon)
|
|||
|
||||
if (bridge) {
|
||||
ret = drm_bridge_attach(encoder, bridge, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(drm->dev, "Couldn't attach our bridge\n");
|
||||
if (ret)
|
||||
goto err_cleanup_connector;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -234,10 +234,8 @@ int sun4i_rgb_init(struct drm_device *drm, struct sun4i_tcon *tcon)
|
|||
|
||||
if (rgb->bridge) {
|
||||
ret = drm_bridge_attach(encoder, rgb->bridge, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(drm->dev, "Couldn't attach our bridge\n");
|
||||
if (ret)
|
||||
goto err_cleanup_connector;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -275,11 +275,8 @@ int tegra_dc_rgb_init(struct drm_device *drm, struct tegra_dc *dc)
|
|||
if (output->bridge) {
|
||||
err = drm_bridge_attach(&output->encoder, output->bridge,
|
||||
NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
|
||||
if (err) {
|
||||
dev_err(output->dev, "failed to attach bridge: %d\n",
|
||||
err);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
connector = drm_bridge_connector_init(drm, &output->encoder);
|
||||
if (IS_ERR(connector)) {
|
||||
|
|
|
@ -227,10 +227,8 @@ static int tidss_dispc_modeset_init(struct tidss_device *tidss)
|
|||
}
|
||||
|
||||
ret = drm_bridge_attach(enc, pipes[i].bridge, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(tidss->dev, "bridge attach failed: %d\n", ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
/* create overlay planes of the leftover planes */
|
||||
|
|
|
@ -93,10 +93,8 @@ int tilcdc_attach_bridge(struct drm_device *ddev, struct drm_bridge *bridge)
|
|||
priv->external_encoder->possible_crtcs = BIT(0);
|
||||
|
||||
ret = drm_bridge_attach(priv->external_encoder, bridge, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(ddev->dev, "drm_bridge_attach() failed %d\n", ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
||||
tilcdc_crtc_set_panel_info(priv->crtc, &panel_info_default);
|
||||
|
||||
|
|
|
@ -1646,10 +1646,8 @@ static int vc4_dsi_bind(struct device *dev, struct device *master, void *data)
|
|||
drm_encoder_helper_add(dsi->encoder, &vc4_dsi_encoder_helper_funcs);
|
||||
|
||||
ret = drm_bridge_attach(dsi->encoder, dsi->bridge, NULL, 0);
|
||||
if (ret) {
|
||||
dev_err(dev, "bridge attach failed: %d\n", ret);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
/* Disable the atomic helper calls into the bridge. We
|
||||
* manually call the bridge pre_enable / enable / etc. calls
|
||||
* from our driver, since we need to sequence them within the
|
||||
|
|
Loading…
Reference in New Issue