Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 289a414a authored by Johan Hovold's avatar Johan Hovold Committed by Greg Kroah-Hartman
Browse files

phy: ti-pipe3: fix device leak at unbind



commit e19bcea99749ce8e8f1d359f68ae03210694ad56 upstream.

Make sure to drop the reference to the control device taken by
of_find_device_by_node() during probe when the driver is unbound.

Fixes: 918ee0d2 ("usb: phy: omap-usb3: Don't use omap_get_control_dev()")
Cc: stable@vger.kernel.org	# 3.13
Cc: Roger Quadros <rogerq@kernel.org>
Signed-off-by: default avatarJohan Hovold <johan@kernel.org>
Link: https://lore.kernel.org/r/20250724131206.2211-4-johan@kernel.org


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 2e257a61
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -667,12 +667,20 @@ static int ti_pipe3_get_clk(struct ti_pipe3 *phy)
	return 0;
}

static void ti_pipe3_put_device(void *_dev)
{
	struct device *dev = _dev;

	put_device(dev);
}

static int ti_pipe3_get_sysctrl(struct ti_pipe3 *phy)
{
	struct device *dev = phy->dev;
	struct device_node *node = dev->of_node;
	struct device_node *control_node;
	struct platform_device *control_pdev;
	int ret;

	phy->phy_power_syscon = syscon_regmap_lookup_by_phandle(node,
							"syscon-phy-power");
@@ -703,6 +711,11 @@ static int ti_pipe3_get_sysctrl(struct ti_pipe3 *phy)
		}

		phy->control_dev = &control_pdev->dev;

		ret = devm_add_action_or_reset(dev, ti_pipe3_put_device,
					       phy->control_dev);
		if (ret)
			return ret;
	}

	if (phy->mode == PIPE3_MODE_PCIE) {