mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
PCI/pwrctrl: Rename pwrctrl functions and structures
Rename pwrctrl functions and structures from "pwrctl" to "pwrctrl" to match the similar file renames. Link: https://lore.kernel.org/r/20241115214428.2061153-3-helgaas@kernel.org Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Krzysztof Wilczyński <kwilczynski@kernel.org> Acked-by: Krzysztof Wilczyński <kw@linux.com>
This commit is contained in:
parent
b88cbaaa6f
commit
3f925cd628
5 changed files with 81 additions and 79 deletions
|
@ -322,10 +322,10 @@ void __weak pcibios_resource_survey_bus(struct pci_bus *bus) { }
|
|||
void __weak pcibios_bus_add_device(struct pci_dev *pdev) { }
|
||||
|
||||
/*
|
||||
* Create pwrctl devices (if required) for the PCI devices to handle the power
|
||||
* Create pwrctrl devices (if required) for the PCI devices to handle the power
|
||||
* state.
|
||||
*/
|
||||
static void pci_pwrctl_create_devices(struct pci_dev *dev)
|
||||
static void pci_pwrctrl_create_devices(struct pci_dev *dev)
|
||||
{
|
||||
struct device_node *np = dev_of_node(&dev->dev);
|
||||
struct device *parent = &dev->dev;
|
||||
|
@ -337,23 +337,24 @@ static void pci_pwrctl_create_devices(struct pci_dev *dev)
|
|||
*/
|
||||
if (np && pci_is_bridge(dev)) {
|
||||
/*
|
||||
* Now look for the child PCI device nodes and create pwrctl
|
||||
* devices for them. The pwrctl device drivers will manage the
|
||||
* Now look for the child PCI device nodes and create pwrctrl
|
||||
* devices for them. The pwrctrl device drivers will manage the
|
||||
* power state of the devices.
|
||||
*/
|
||||
for_each_available_child_of_node_scoped(np, child) {
|
||||
/*
|
||||
* First check whether the pwrctl device really needs to
|
||||
* be created or not. This is decided based on at least
|
||||
* one of the power supplies being defined in the
|
||||
* devicetree node of the device.
|
||||
* First check whether the pwrctrl device really
|
||||
* needs to be created or not. This is decided
|
||||
* based on at least one of the power supplies
|
||||
* being defined in the devicetree node of the
|
||||
* device.
|
||||
*/
|
||||
if (!of_pci_supply_present(child)) {
|
||||
pci_dbg(dev, "skipping OF node: %s\n", child->name);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Now create the pwrctl device */
|
||||
/* Now create the pwrctrl device */
|
||||
pdev = of_platform_device_create(child, NULL, parent);
|
||||
if (!pdev)
|
||||
pci_err(dev, "failed to create OF node: %s\n", child->name);
|
||||
|
@ -385,12 +386,12 @@ void pci_bus_add_device(struct pci_dev *dev)
|
|||
pci_proc_attach_device(dev);
|
||||
pci_bridge_d3_update(dev);
|
||||
|
||||
pci_pwrctl_create_devices(dev);
|
||||
pci_pwrctrl_create_devices(dev);
|
||||
|
||||
/*
|
||||
* If the PCI device is associated with a pwrctl device with a
|
||||
* If the PCI device is associated with a pwrctrl device with a
|
||||
* power supply, create a device link between the PCI device and
|
||||
* pwrctl device. This ensures that pwrctl drivers are probed
|
||||
* pwrctrl device. This ensures that pwrctrl drivers are probed
|
||||
* before PCI client drivers.
|
||||
*/
|
||||
pdev = of_find_device_by_node(dn);
|
||||
|
|
|
@ -11,13 +11,13 @@
|
|||
#include <linux/property.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
static int pci_pwrctl_notify(struct notifier_block *nb, unsigned long action,
|
||||
void *data)
|
||||
static int pci_pwrctrl_notify(struct notifier_block *nb, unsigned long action,
|
||||
void *data)
|
||||
{
|
||||
struct pci_pwrctl *pwrctl = container_of(nb, struct pci_pwrctl, nb);
|
||||
struct pci_pwrctrl *pwrctrl = container_of(nb, struct pci_pwrctrl, nb);
|
||||
struct device *dev = data;
|
||||
|
||||
if (dev_fwnode(dev) != dev_fwnode(pwrctl->dev))
|
||||
if (dev_fwnode(dev) != dev_fwnode(pwrctrl->dev))
|
||||
return NOTIFY_DONE;
|
||||
|
||||
switch (action) {
|
||||
|
@ -40,31 +40,32 @@ static int pci_pwrctl_notify(struct notifier_block *nb, unsigned long action,
|
|||
|
||||
static void rescan_work_func(struct work_struct *work)
|
||||
{
|
||||
struct pci_pwrctl *pwrctl = container_of(work, struct pci_pwrctl, work);
|
||||
struct pci_pwrctrl *pwrctrl = container_of(work,
|
||||
struct pci_pwrctrl, work);
|
||||
|
||||
pci_lock_rescan_remove();
|
||||
pci_rescan_bus(to_pci_dev(pwrctl->dev->parent)->bus);
|
||||
pci_rescan_bus(to_pci_dev(pwrctrl->dev->parent)->bus);
|
||||
pci_unlock_rescan_remove();
|
||||
}
|
||||
|
||||
/**
|
||||
* pci_pwrctl_init() - Initialize the PCI power control context struct
|
||||
* pci_pwrctrl_init() - Initialize the PCI power control context struct
|
||||
*
|
||||
* @pwrctl: PCI power control data
|
||||
* @pwrctrl: PCI power control data
|
||||
* @dev: Parent device
|
||||
*/
|
||||
void pci_pwrctl_init(struct pci_pwrctl *pwrctl, struct device *dev)
|
||||
void pci_pwrctrl_init(struct pci_pwrctrl *pwrctrl, struct device *dev)
|
||||
{
|
||||
pwrctl->dev = dev;
|
||||
INIT_WORK(&pwrctl->work, rescan_work_func);
|
||||
pwrctrl->dev = dev;
|
||||
INIT_WORK(&pwrctrl->work, rescan_work_func);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_pwrctl_init);
|
||||
EXPORT_SYMBOL_GPL(pci_pwrctrl_init);
|
||||
|
||||
/**
|
||||
* pci_pwrctl_device_set_ready() - Notify the pwrctl subsystem that the PCI
|
||||
* pci_pwrctrl_device_set_ready() - Notify the pwrctrl subsystem that the PCI
|
||||
* device is powered-up and ready to be detected.
|
||||
*
|
||||
* @pwrctl: PCI power control data.
|
||||
* @pwrctrl: PCI power control data.
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success, negative error number on error.
|
||||
|
@ -74,31 +75,31 @@ EXPORT_SYMBOL_GPL(pci_pwrctl_init);
|
|||
* that the bus rescan was successfully started. The device will get bound to
|
||||
* its PCI driver asynchronously.
|
||||
*/
|
||||
int pci_pwrctl_device_set_ready(struct pci_pwrctl *pwrctl)
|
||||
int pci_pwrctrl_device_set_ready(struct pci_pwrctrl *pwrctrl)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!pwrctl->dev)
|
||||
if (!pwrctrl->dev)
|
||||
return -ENODEV;
|
||||
|
||||
pwrctl->nb.notifier_call = pci_pwrctl_notify;
|
||||
ret = bus_register_notifier(&pci_bus_type, &pwrctl->nb);
|
||||
pwrctrl->nb.notifier_call = pci_pwrctrl_notify;
|
||||
ret = bus_register_notifier(&pci_bus_type, &pwrctrl->nb);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
schedule_work(&pwrctl->work);
|
||||
schedule_work(&pwrctrl->work);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_pwrctl_device_set_ready);
|
||||
EXPORT_SYMBOL_GPL(pci_pwrctrl_device_set_ready);
|
||||
|
||||
/**
|
||||
* pci_pwrctl_device_unset_ready() - Notify the pwrctl subsystem that the PCI
|
||||
* pci_pwrctrl_device_unset_ready() - Notify the pwrctrl subsystem that the PCI
|
||||
* device is about to be powered-down.
|
||||
*
|
||||
* @pwrctl: PCI power control data.
|
||||
* @pwrctrl: PCI power control data.
|
||||
*/
|
||||
void pci_pwrctl_device_unset_ready(struct pci_pwrctl *pwrctl)
|
||||
void pci_pwrctrl_device_unset_ready(struct pci_pwrctrl *pwrctrl)
|
||||
{
|
||||
/*
|
||||
* We don't have to delete the link here. Typically, this function
|
||||
|
@ -106,41 +107,41 @@ void pci_pwrctl_device_unset_ready(struct pci_pwrctl *pwrctl)
|
|||
* it is being detached then the child PCI device must have already
|
||||
* been unbound too or the device core wouldn't let us unbind.
|
||||
*/
|
||||
bus_unregister_notifier(&pci_bus_type, &pwrctl->nb);
|
||||
bus_unregister_notifier(&pci_bus_type, &pwrctrl->nb);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(pci_pwrctl_device_unset_ready);
|
||||
EXPORT_SYMBOL_GPL(pci_pwrctrl_device_unset_ready);
|
||||
|
||||
static void devm_pci_pwrctl_device_unset_ready(void *data)
|
||||
static void devm_pci_pwrctrl_device_unset_ready(void *data)
|
||||
{
|
||||
struct pci_pwrctl *pwrctl = data;
|
||||
struct pci_pwrctrl *pwrctrl = data;
|
||||
|
||||
pci_pwrctl_device_unset_ready(pwrctl);
|
||||
pci_pwrctrl_device_unset_ready(pwrctrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* devm_pci_pwrctl_device_set_ready - Managed variant of
|
||||
* pci_pwrctl_device_set_ready().
|
||||
* devm_pci_pwrctrl_device_set_ready - Managed variant of
|
||||
* pci_pwrctrl_device_set_ready().
|
||||
*
|
||||
* @dev: Device managing this pwrctl provider.
|
||||
* @pwrctl: PCI power control data.
|
||||
* @dev: Device managing this pwrctrl provider.
|
||||
* @pwrctrl: PCI power control data.
|
||||
*
|
||||
* Returns:
|
||||
* 0 on success, negative error number on error.
|
||||
*/
|
||||
int devm_pci_pwrctl_device_set_ready(struct device *dev,
|
||||
struct pci_pwrctl *pwrctl)
|
||||
int devm_pci_pwrctrl_device_set_ready(struct device *dev,
|
||||
struct pci_pwrctrl *pwrctrl)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = pci_pwrctl_device_set_ready(pwrctl);
|
||||
ret = pci_pwrctrl_device_set_ready(pwrctrl);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return devm_add_action_or_reset(dev,
|
||||
devm_pci_pwrctl_device_unset_ready,
|
||||
pwrctl);
|
||||
devm_pci_pwrctrl_device_unset_ready,
|
||||
pwrctrl);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_pci_pwrctl_device_set_ready);
|
||||
EXPORT_SYMBOL_GPL(devm_pci_pwrctrl_device_set_ready);
|
||||
|
||||
MODULE_AUTHOR("Bartosz Golaszewski <bartosz.golaszewski@linaro.org>");
|
||||
MODULE_DESCRIPTION("PCI Device Power Control core driver");
|
||||
|
|
|
@ -13,21 +13,21 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct pci_pwrctl_pwrseq_data {
|
||||
struct pci_pwrctl ctx;
|
||||
struct pci_pwrctrl_pwrseq_data {
|
||||
struct pci_pwrctrl ctx;
|
||||
struct pwrseq_desc *pwrseq;
|
||||
};
|
||||
|
||||
static void devm_pci_pwrctl_pwrseq_power_off(void *data)
|
||||
static void devm_pci_pwrctrl_pwrseq_power_off(void *data)
|
||||
{
|
||||
struct pwrseq_desc *pwrseq = data;
|
||||
|
||||
pwrseq_power_off(pwrseq);
|
||||
}
|
||||
|
||||
static int pci_pwrctl_pwrseq_probe(struct platform_device *pdev)
|
||||
static int pci_pwrctrl_pwrseq_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct pci_pwrctl_pwrseq_data *data;
|
||||
struct pci_pwrctrl_pwrseq_data *data;
|
||||
struct device *dev = &pdev->dev;
|
||||
int ret;
|
||||
|
||||
|
@ -45,22 +45,22 @@ static int pci_pwrctl_pwrseq_probe(struct platform_device *pdev)
|
|||
return dev_err_probe(dev, ret,
|
||||
"Failed to power-on the device\n");
|
||||
|
||||
ret = devm_add_action_or_reset(dev, devm_pci_pwrctl_pwrseq_power_off,
|
||||
ret = devm_add_action_or_reset(dev, devm_pci_pwrctrl_pwrseq_power_off,
|
||||
data->pwrseq);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
pci_pwrctl_init(&data->ctx, dev);
|
||||
pci_pwrctrl_init(&data->ctx, dev);
|
||||
|
||||
ret = devm_pci_pwrctl_device_set_ready(dev, &data->ctx);
|
||||
ret = devm_pci_pwrctrl_device_set_ready(dev, &data->ctx);
|
||||
if (ret)
|
||||
return dev_err_probe(dev, ret,
|
||||
"Failed to register the pwrctl wrapper\n");
|
||||
"Failed to register the pwrctrl wrapper\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id pci_pwrctl_pwrseq_of_match[] = {
|
||||
static const struct of_device_id pci_pwrctrl_pwrseq_of_match[] = {
|
||||
{
|
||||
/* ATH11K in QCA6390 package. */
|
||||
.compatible = "pci17cb,1101",
|
||||
|
@ -78,16 +78,16 @@ static const struct of_device_id pci_pwrctl_pwrseq_of_match[] = {
|
|||
},
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, pci_pwrctl_pwrseq_of_match);
|
||||
MODULE_DEVICE_TABLE(of, pci_pwrctrl_pwrseq_of_match);
|
||||
|
||||
static struct platform_driver pci_pwrctl_pwrseq_driver = {
|
||||
static struct platform_driver pci_pwrctrl_pwrseq_driver = {
|
||||
.driver = {
|
||||
.name = "pci-pwrctl-pwrseq",
|
||||
.of_match_table = pci_pwrctl_pwrseq_of_match,
|
||||
.name = "pci-pwrctrl-pwrseq",
|
||||
.of_match_table = pci_pwrctrl_pwrseq_of_match,
|
||||
},
|
||||
.probe = pci_pwrctl_pwrseq_probe,
|
||||
.probe = pci_pwrctrl_pwrseq_probe,
|
||||
};
|
||||
module_platform_driver(pci_pwrctl_pwrseq_driver);
|
||||
module_platform_driver(pci_pwrctrl_pwrseq_driver);
|
||||
|
||||
MODULE_AUTHOR("Bartosz Golaszewski <bartosz.golaszewski@linaro.org>");
|
||||
MODULE_DESCRIPTION("Generic PCI Power Control module for power sequenced devices");
|
||||
|
|
|
@ -17,7 +17,7 @@ static void pci_free_resources(struct pci_dev *dev)
|
|||
}
|
||||
}
|
||||
|
||||
static void pci_pwrctl_unregister(struct device *dev)
|
||||
static void pci_pwrctrl_unregister(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
|
||||
|
@ -34,7 +34,7 @@ static void pci_stop_dev(struct pci_dev *dev)
|
|||
pci_pme_active(dev, false);
|
||||
|
||||
if (pci_dev_is_added(dev)) {
|
||||
pci_pwrctl_unregister(&dev->dev);
|
||||
pci_pwrctrl_unregister(&dev->dev);
|
||||
device_release_driver(&dev->dev);
|
||||
pci_proc_detach_device(dev);
|
||||
pci_remove_sysfs_dev_files(dev);
|
||||
|
|
|
@ -3,8 +3,8 @@
|
|||
* Copyright (C) 2024 Linaro Ltd.
|
||||
*/
|
||||
|
||||
#ifndef __PCI_PWRCTL_H__
|
||||
#define __PCI_PWRCTL_H__
|
||||
#ifndef __PCI_PWRCTRL_H__
|
||||
#define __PCI_PWRCTRL_H__
|
||||
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
@ -29,14 +29,14 @@ struct device_link;
|
|||
*/
|
||||
|
||||
/**
|
||||
* struct pci_pwrctl - PCI device power control context.
|
||||
* struct pci_pwrctrl - PCI device power control context.
|
||||
* @dev: Address of the power controlling device.
|
||||
*
|
||||
* An object of this type must be allocated by the PCI power control device and
|
||||
* passed to the pwrctl subsystem to trigger a bus rescan and setup a device
|
||||
* passed to the pwrctrl subsystem to trigger a bus rescan and setup a device
|
||||
* link with the device once it's up.
|
||||
*/
|
||||
struct pci_pwrctl {
|
||||
struct pci_pwrctrl {
|
||||
struct device *dev;
|
||||
|
||||
/* Private: don't use. */
|
||||
|
@ -45,10 +45,10 @@ struct pci_pwrctl {
|
|||
struct work_struct work;
|
||||
};
|
||||
|
||||
void pci_pwrctl_init(struct pci_pwrctl *pwrctl, struct device *dev);
|
||||
int pci_pwrctl_device_set_ready(struct pci_pwrctl *pwrctl);
|
||||
void pci_pwrctl_device_unset_ready(struct pci_pwrctl *pwrctl);
|
||||
int devm_pci_pwrctl_device_set_ready(struct device *dev,
|
||||
struct pci_pwrctl *pwrctl);
|
||||
void pci_pwrctrl_init(struct pci_pwrctrl *pwrctrl, struct device *dev);
|
||||
int pci_pwrctrl_device_set_ready(struct pci_pwrctrl *pwrctrl);
|
||||
void pci_pwrctrl_device_unset_ready(struct pci_pwrctrl *pwrctrl);
|
||||
int devm_pci_pwrctrl_device_set_ready(struct device *dev,
|
||||
struct pci_pwrctrl *pwrctrl);
|
||||
|
||||
#endif /* __PCI_PWRCTL_H__ */
|
||||
#endif /* __PCI_PWRCTRL_H__ */
|
||||
|
|
Loading…
Add table
Reference in a new issue