Commit 2d8c5098 authored by Chen-Yu Tsai's avatar Chen-Yu Tsai Committed by Bjorn Helgaas
Browse files

PCI/pwrctrl: Do not power off on pwrctrl device removal



With the move to explicit pwrctrl power on/off APIs, the caller, i.e., the
PCI controller driver, should manage the power state. The pwrctrl drivers
should not try to clean up or power off when they are removed, as this
might end up disabling an already disabled regulator, causing a big
warning.  This can be triggered if a PCI controller driver's .remove()
callback calls pci_pwrctrl_destroy_devices() after
pci_pwrctrl_power_off_devices().

Drop the devm cleanup parts that turn off regulators from the pwrctrl
drivers.

Fixes: b921aa3f ("PCI/pwrctrl: Switch to pwrctrl create, power on/off, destroy APIs")
Signed-off-by: default avatarChen-Yu Tsai <wenst@chromium.org>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
Reviewed-by: default avatarBartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
Reviewed-by: default avatarManivannan Sadhasivam <mani@kernel.org>
Link: https://patch.msgid.link/20260226092234.3859740-1-wenst@chromium.org
parent c3692998
Loading
Loading
Loading
Loading
+0 −12
Original line number Diff line number Diff line
@@ -68,13 +68,6 @@ static int pwrseq_pwrctrl_power_off(struct pci_pwrctrl *pwrctrl)
	return pwrseq_power_off(pwrseq->pwrseq);
}

static void devm_pwrseq_pwrctrl_power_off(void *data)
{
	struct pwrseq_pwrctrl *pwrseq = data;

	pwrseq_pwrctrl_power_off(&pwrseq->pwrctrl);
}

static int pwrseq_pwrctrl_probe(struct platform_device *pdev)
{
	const struct pwrseq_pwrctrl_pdata *pdata;
@@ -101,11 +94,6 @@ static int pwrseq_pwrctrl_probe(struct platform_device *pdev)
		return dev_err_probe(dev, PTR_ERR(pwrseq->pwrseq),
				     "Failed to get the power sequencer\n");

	ret = devm_add_action_or_reset(dev, devm_pwrseq_pwrctrl_power_off,
				       pwrseq);
	if (ret)
		return ret;

	pwrseq->pwrctrl.power_on = pwrseq_pwrctrl_power_on;
	pwrseq->pwrctrl.power_off = pwrseq_pwrctrl_power_off;

+0 −1
Original line number Diff line number Diff line
@@ -63,7 +63,6 @@ static void devm_slot_pwrctrl_release(void *data)
{
	struct slot_pwrctrl *slot = data;

	slot_pwrctrl_power_off(&slot->pwrctrl);
	regulator_bulk_free(slot->num_supplies, slot->supplies);
}