phy: rockchip-usb: fix clock get-put mismatch

A patch from »phy: rockchip-usb: correct pll handling and usb-uart« in state Mainline for linux-kernel

From: Heiko Stuebner <heiko@...> Date: Tue, 3 Nov 2015 14:14:23 +0100

Commit-Message

Currently the phy driver only gets the optional clock reference but never puts it again, neither during error handling nor on remove. Fix that by moving the clk_put to a devm-action that gets called at the right time when all other devm actions are done. Signed-off-by: Heiko Stuebner <heiko@...> Reviewed-by: Douglas Anderson <dianders@...>

Patch-Comment

drivers/phy/phy-rockchip-usb.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+)

Statistics

  • 15 lines added
  • 0 lines removed

Changes

------------------------ drivers/phy/phy-rockchip-usb.c ------------------------
index 91d6f34..dfc056b 100644
@@ -90,6 +90,14 @@ static const struct phy_ops ops = {
.owner = THIS_MODULE,
};
+static void rockchip_usb_phy_action(void *data)
+{
+ struct rockchip_usb_phy *rk_phy = data;
+
+ if (rk_phy->clk)
+ clk_put(rk_phy->clk);
+}
+
static int rockchip_usb_phy_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -124,6 +132,13 @@ static int rockchip_usb_phy_probe(struct platform_device *pdev)
if (IS_ERR(rk_phy->clk))
rk_phy->clk = NULL;
+ err = devm_add_action(dev, rockchip_usb_phy_action, rk_phy);
+ if (err) {
+ if (rk_phy->clk)
+ clk_put(rk_phy->clk);
+ return err;
+ }
+
rk_phy->phy = devm_phy_create(dev, child, &ops);
if (IS_ERR(rk_phy->phy)) {
dev_err(dev, "failed to create PHY\n");
 
 

Recent Patches

About Us

Sed lacus. Donec lectus. Nullam pretium nibh ut turpis. Nam bibendum. In nulla tortor, elementum vel, tempor at, varius non, purus. Mauris vitae nisl nec metus placerat consectetuer.

Read More...