mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-13 08:20:40 -04:00
drm/rockchip: dw_hdmi_qp: Improve error handling with dev_err_probe()
The error handling in dw_hdmi_qp_rockchip_bind() is quite inconsistent, i.e. in some cases the error code is not included in the message, while in some other cases there is no check for -EPROBE_DEFER. Since this is part of the probe path, address the aforementioned issues by switching to dev_err_probe(), which also reduces the code a bit. Reviewed-by: Daniel Stone <daniels@collabora.com> Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> Signed-off-by: Heiko Stuebner <heiko@sntech.de> Link: https://lore.kernel.org/r/20250903-rk3588-hdmi-cec-v4-3-fa25163c4b08@collabora.com
This commit is contained in:
committed by
Heiko Stuebner
parent
f7a1de0d86
commit
b6736a4ea3
@@ -455,10 +455,8 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
|
||||
return -ENODEV;
|
||||
|
||||
if (!cfg->ctrl_ops || !cfg->ctrl_ops->io_init ||
|
||||
!cfg->ctrl_ops->irq_callback || !cfg->ctrl_ops->hardirq_callback) {
|
||||
dev_err(dev, "Missing platform ctrl ops\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
!cfg->ctrl_ops->irq_callback || !cfg->ctrl_ops->hardirq_callback)
|
||||
return dev_err_probe(dev, -ENODEV, "Missing platform ctrl ops\n");
|
||||
|
||||
hdmi->ctrl_ops = cfg->ctrl_ops;
|
||||
hdmi->dev = &pdev->dev;
|
||||
@@ -471,10 +469,9 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (hdmi->port_id < 0) {
|
||||
dev_err(hdmi->dev, "Failed to match HDMI port ID\n");
|
||||
return hdmi->port_id;
|
||||
}
|
||||
if (hdmi->port_id < 0)
|
||||
return dev_err_probe(hdmi->dev, hdmi->port_id,
|
||||
"Failed to match HDMI port ID\n");
|
||||
|
||||
plat_data.phy_ops = cfg->phy_ops;
|
||||
plat_data.phy_data = hdmi;
|
||||
@@ -495,39 +492,30 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
|
||||
|
||||
hdmi->regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
|
||||
"rockchip,grf");
|
||||
if (IS_ERR(hdmi->regmap)) {
|
||||
dev_err(hdmi->dev, "Unable to get rockchip,grf\n");
|
||||
return PTR_ERR(hdmi->regmap);
|
||||
}
|
||||
if (IS_ERR(hdmi->regmap))
|
||||
return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->regmap),
|
||||
"Unable to get rockchip,grf\n");
|
||||
|
||||
hdmi->vo_regmap = syscon_regmap_lookup_by_phandle(dev->of_node,
|
||||
"rockchip,vo-grf");
|
||||
if (IS_ERR(hdmi->vo_regmap)) {
|
||||
dev_err(hdmi->dev, "Unable to get rockchip,vo-grf\n");
|
||||
return PTR_ERR(hdmi->vo_regmap);
|
||||
}
|
||||
if (IS_ERR(hdmi->vo_regmap))
|
||||
return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->vo_regmap),
|
||||
"Unable to get rockchip,vo-grf\n");
|
||||
|
||||
ret = devm_clk_bulk_get_all_enabled(hdmi->dev, &clks);
|
||||
if (ret < 0) {
|
||||
dev_err(hdmi->dev, "Failed to get clocks: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (ret < 0)
|
||||
return dev_err_probe(hdmi->dev, ret, "Failed to get clocks\n");
|
||||
|
||||
hdmi->enable_gpio = devm_gpiod_get_optional(hdmi->dev, "enable",
|
||||
GPIOD_OUT_HIGH);
|
||||
if (IS_ERR(hdmi->enable_gpio)) {
|
||||
ret = PTR_ERR(hdmi->enable_gpio);
|
||||
dev_err(hdmi->dev, "Failed to request enable GPIO: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (IS_ERR(hdmi->enable_gpio))
|
||||
return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->enable_gpio),
|
||||
"Failed to request enable GPIO\n");
|
||||
|
||||
hdmi->phy = devm_of_phy_get_by_index(dev, dev->of_node, 0);
|
||||
if (IS_ERR(hdmi->phy)) {
|
||||
ret = PTR_ERR(hdmi->phy);
|
||||
if (ret != -EPROBE_DEFER)
|
||||
dev_err(hdmi->dev, "failed to get phy: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (IS_ERR(hdmi->phy))
|
||||
return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->phy),
|
||||
"Failed to get phy\n");
|
||||
|
||||
cfg->ctrl_ops->io_init(hdmi);
|
||||
|
||||
@@ -556,17 +544,15 @@ static int dw_hdmi_qp_rockchip_bind(struct device *dev, struct device *master,
|
||||
|
||||
hdmi->hdmi = dw_hdmi_qp_bind(pdev, encoder, &plat_data);
|
||||
if (IS_ERR(hdmi->hdmi)) {
|
||||
ret = PTR_ERR(hdmi->hdmi);
|
||||
drm_encoder_cleanup(encoder);
|
||||
return ret;
|
||||
return dev_err_probe(hdmi->dev, PTR_ERR(hdmi->hdmi),
|
||||
"Failed to bind dw-hdmi-qp");
|
||||
}
|
||||
|
||||
connector = drm_bridge_connector_init(drm, encoder);
|
||||
if (IS_ERR(connector)) {
|
||||
ret = PTR_ERR(connector);
|
||||
dev_err(hdmi->dev, "failed to init bridge connector: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (IS_ERR(connector))
|
||||
return dev_err_probe(hdmi->dev, PTR_ERR(connector),
|
||||
"Failed to init bridge connector\n");
|
||||
|
||||
return drm_connector_attach_encoder(connector, encoder);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user