Am Sonntag, 2. März 2025, 09:30:43 Mitteleuropäische Sommerzeit schrieb Damon Ding: > With the commit f37952339cc2 ("drm/bridge: analogix_dp: handle clock via > runtime PM"), the PM operations can help enable/disable the clock. The > err_disable_clk label and clk_disable_unprepare() operations are no > longer necessary because the analogix_dp_resume() will not be called > during probing. > > Fixes: f37952339cc2 ("drm/bridge: analogix_dp: handle clock via runtime PM") > Suggested-by: Douglas Anderson <diand...@chromium.org> > Reviewed-by: Douglas Anderson <diand...@chromium.org> > Signed-off-by: Damon Ding <damon.d...@rock-chips.com>
Reviewed-by: Heiko Stuebner <he...@sntech.de> This patch seems to have fallen through the cracks? dp->clock never gets enabled in analogix_dp_probe(), so reaching that error handling code would create a enable-disable mismatch for the dp>clock. > --- > > Picked from: > https://patchwork.kernel.org/project/linux-rockchip/list/?series=936932 > > Changes in v8: > - Fix the conflict because of commit 43c00fb1a518 ("drm/bridge: > analogix_dp: Use devm_platform_ioremap_resource()") > --- > .../gpu/drm/bridge/analogix/analogix_dp_core.c | 18 +++++------------- > 1 file changed, 5 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > index f6e4bdc05ba0..817070613b03 100644 > --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_core.c > @@ -1605,10 +1605,8 @@ analogix_dp_probe(struct device *dev, struct > analogix_dp_plat_data *plat_data) > } > > dp->reg_base = devm_platform_ioremap_resource(pdev, 0); > - if (IS_ERR(dp->reg_base)) { > - ret = PTR_ERR(dp->reg_base); > - goto err_disable_clk; > - } > + if (IS_ERR(dp->reg_base)) > + return ERR_CAST(dp->reg_base); > > dp->force_hpd = of_property_read_bool(dev->of_node, "force-hpd"); > > @@ -1620,8 +1618,7 @@ analogix_dp_probe(struct device *dev, struct > analogix_dp_plat_data *plat_data) > if (IS_ERR(dp->hpd_gpiod)) { > dev_err(dev, "error getting HDP GPIO: %ld\n", > PTR_ERR(dp->hpd_gpiod)); > - ret = PTR_ERR(dp->hpd_gpiod); > - goto err_disable_clk; > + return ERR_CAST(dp->hpd_gpiod); > } > > if (dp->hpd_gpiod) { > @@ -1641,8 +1638,7 @@ analogix_dp_probe(struct device *dev, struct > analogix_dp_plat_data *plat_data) > > if (dp->irq == -ENXIO) { > dev_err(&pdev->dev, "failed to get irq\n"); > - ret = -ENODEV; > - goto err_disable_clk; > + return ERR_PTR(-ENODEV); > } > > ret = devm_request_threaded_irq(&pdev->dev, dp->irq, > @@ -1651,15 +1647,11 @@ analogix_dp_probe(struct device *dev, struct > analogix_dp_plat_data *plat_data) > irq_flags, "analogix-dp", dp); > if (ret) { > dev_err(&pdev->dev, "failed to request irq\n"); > - goto err_disable_clk; > + return ERR_PTR(ret); > } > disable_irq(dp->irq); > > return dp; > - > -err_disable_clk: > - clk_disable_unprepare(dp->clock); > - return ERR_PTR(ret); > } > EXPORT_SYMBOL_GPL(analogix_dp_probe); > >