| From b4e726795fa248285b39ae064a25082c518aa552 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 30 Dec 2020 12:21:05 +0200 |
| Subject: phy: cpcap-usb: Fix warning for missing regulator_disable |
| |
| From: Tony Lindgren <tony@atomide.com> |
| |
| [ Upstream commit 764257d9069a9c19758b626cc1ba4ae079335d9e ] |
| |
| On deferred probe, we will get the following splat: |
| |
| cpcap-usb-phy cpcap-usb-phy.0: could not initialize VBUS or ID IIO: -517 |
| WARNING: CPU: 0 PID: 21 at drivers/regulator/core.c:2123 regulator_put+0x68/0x78 |
| ... |
| (regulator_put) from [<c068ebf0>] (release_nodes+0x1b4/0x1fc) |
| (release_nodes) from [<c068a9a4>] (really_probe+0x104/0x4a0) |
| (really_probe) from [<c068b034>] (driver_probe_device+0x58/0xb4) |
| |
| Signed-off-by: Tony Lindgren <tony@atomide.com> |
| Link: https://lore.kernel.org/r/20201230102105.11826-1-tony@atomide.com |
| Signed-off-by: Vinod Koul <vkoul@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/phy/motorola/phy-cpcap-usb.c | 19 +++++++++++++------ |
| 1 file changed, 13 insertions(+), 6 deletions(-) |
| |
| diff --git a/drivers/phy/motorola/phy-cpcap-usb.c b/drivers/phy/motorola/phy-cpcap-usb.c |
| index 593c77dbde2eb..106f53f333242 100644 |
| --- a/drivers/phy/motorola/phy-cpcap-usb.c |
| +++ b/drivers/phy/motorola/phy-cpcap-usb.c |
| @@ -623,35 +623,42 @@ static int cpcap_usb_phy_probe(struct platform_device *pdev) |
| generic_phy = devm_phy_create(ddata->dev, NULL, &ops); |
| if (IS_ERR(generic_phy)) { |
| error = PTR_ERR(generic_phy); |
| - return PTR_ERR(generic_phy); |
| + goto out_reg_disable; |
| } |
| |
| phy_set_drvdata(generic_phy, ddata); |
| |
| phy_provider = devm_of_phy_provider_register(ddata->dev, |
| of_phy_simple_xlate); |
| - if (IS_ERR(phy_provider)) |
| - return PTR_ERR(phy_provider); |
| + if (IS_ERR(phy_provider)) { |
| + error = PTR_ERR(phy_provider); |
| + goto out_reg_disable; |
| + } |
| |
| error = cpcap_usb_init_optional_pins(ddata); |
| if (error) |
| - return error; |
| + goto out_reg_disable; |
| |
| cpcap_usb_init_optional_gpios(ddata); |
| |
| error = cpcap_usb_init_iio(ddata); |
| if (error) |
| - return error; |
| + goto out_reg_disable; |
| |
| error = cpcap_usb_init_interrupts(pdev, ddata); |
| if (error) |
| - return error; |
| + goto out_reg_disable; |
| |
| usb_add_phy_dev(&ddata->phy); |
| atomic_set(&ddata->active, 1); |
| schedule_delayed_work(&ddata->detect_work, msecs_to_jiffies(1)); |
| |
| return 0; |
| + |
| +out_reg_disable: |
| + regulator_disable(ddata->vusb); |
| + |
| + return error; |
| } |
| |
| static int cpcap_usb_phy_remove(struct platform_device *pdev) |
| -- |
| 2.27.0 |
| |