Skip to content

Commit

Permalink
PCI: PCIe portdrv: Implement pm object
Browse files Browse the repository at this point in the history
Implement pm object for the PCI Express port driver in order to use
the new power management framework and reduce the code size.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
  • Loading branch information
Rafael J. Wysocki authored and Jesse Barnes committed Mar 20, 2009
1 parent ae40582 commit 3a3c244
Show file tree
Hide file tree
Showing 6 changed files with 26 additions and 35 deletions.
4 changes: 2 additions & 2 deletions drivers/pci/hotplug/pciehp_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -475,7 +475,7 @@ static void pciehp_remove (struct pcie_device *dev)
}

#ifdef CONFIG_PM
static int pciehp_suspend (struct pcie_device *dev, pm_message_t state)
static int pciehp_suspend (struct pcie_device *dev)
{
dev_info(&dev->device, "%s ENTRY\n", __func__);
return 0;
Expand Down Expand Up @@ -503,7 +503,7 @@ static int pciehp_resume (struct pcie_device *dev)
}
return 0;
}
#endif
#endif /* PM */

static struct pcie_port_service_driver hpdriver_portdrv = {
.name = PCIE_MODULE_NAME,
Expand Down
6 changes: 0 additions & 6 deletions drivers/pci/pcie/aer/aerdrv.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,6 @@ MODULE_LICENSE("GPL");

static int __devinit aer_probe (struct pcie_device *dev);
static void aer_remove(struct pcie_device *dev);
static int aer_suspend(struct pcie_device *dev, pm_message_t state)
{return 0;}
static int aer_resume(struct pcie_device *dev) {return 0;}
static pci_ers_result_t aer_error_detected(struct pci_dev *dev,
enum pci_channel_state error);
static void aer_error_resume(struct pci_dev *dev);
Expand All @@ -61,9 +58,6 @@ static struct pcie_port_service_driver aerdriver = {
.probe = aer_probe,
.remove = aer_remove,

.suspend = aer_suspend,
.resume = aer_resume,

.err_handler = &aer_error_handlers,

.reset_link = aer_root_reset,
Expand Down
4 changes: 2 additions & 2 deletions drivers/pci/pcie/portdrv.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ extern struct bus_type pcie_port_bus_type;
extern int pcie_port_device_probe(struct pci_dev *dev);
extern int pcie_port_device_register(struct pci_dev *dev);
#ifdef CONFIG_PM
extern int pcie_port_device_suspend(struct pci_dev *dev, pm_message_t state);
extern int pcie_port_device_resume(struct pci_dev *dev);
extern int pcie_port_device_suspend(struct device *dev);
extern int pcie_port_device_resume(struct device *dev);
#endif
extern void pcie_port_device_remove(struct pci_dev *dev);
extern int __must_check pcie_port_bus_register(void);
Expand Down
14 changes: 6 additions & 8 deletions drivers/pci/pcie/portdrv_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -410,25 +410,23 @@ int pcie_port_device_register(struct pci_dev *dev)
static int suspend_iter(struct device *dev, void *data)
{
struct pcie_port_service_driver *service_driver;
pm_message_t state = * (pm_message_t *) data;

if ((dev->bus == &pcie_port_bus_type) &&
(dev->driver)) {
service_driver = to_service_driver(dev->driver);
if (service_driver->suspend)
service_driver->suspend(to_pcie_device(dev), state);
service_driver->suspend(to_pcie_device(dev));
}
return 0;
}

/**
* pcie_port_device_suspend - suspend port services associated with a PCIe port
* @dev: PCI Express port to handle
* @state: Representation of system power management transition in progress
*/
int pcie_port_device_suspend(struct pci_dev *dev, pm_message_t state)
int pcie_port_device_suspend(struct device *dev)
{
return device_for_each_child(&dev->dev, &state, suspend_iter);
return device_for_each_child(dev, NULL, suspend_iter);
}

static int resume_iter(struct device *dev, void *data)
Expand All @@ -448,11 +446,11 @@ static int resume_iter(struct device *dev, void *data)
* pcie_port_device_suspend - resume port services associated with a PCIe port
* @dev: PCI Express port to handle
*/
int pcie_port_device_resume(struct pci_dev *dev)
int pcie_port_device_resume(struct device *dev)
{
return device_for_each_child(&dev->dev, NULL, resume_iter);
return device_for_each_child(dev, NULL, resume_iter);
}
#endif
#endif /* PM */

static int remove_iter(struct device *dev, void *data)
{
Expand Down
31 changes: 15 additions & 16 deletions drivers/pci/pcie/portdrv_pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -44,21 +44,21 @@ static int pcie_portdrv_restore_config(struct pci_dev *dev)
}

#ifdef CONFIG_PM
static int pcie_portdrv_suspend(struct pci_dev *dev, pm_message_t state)
{
return pcie_port_device_suspend(dev, state);
static struct dev_pm_ops pcie_portdrv_pm_ops = {
.suspend = pcie_port_device_suspend,
.resume = pcie_port_device_resume,
.freeze = pcie_port_device_suspend,
.thaw = pcie_port_device_resume,
.poweroff = pcie_port_device_suspend,
.restore = pcie_port_device_resume,
};

}
#define PCIE_PORTDRV_PM_OPS (&pcie_portdrv_pm_ops)

static int pcie_portdrv_resume(struct pci_dev *dev)
{
pci_set_master(dev);
return pcie_port_device_resume(dev);
}
#else
#define pcie_portdrv_suspend NULL
#define pcie_portdrv_resume NULL
#endif
#else /* !PM */

#define PCIE_PORTDRV_PM_OPS NULL
#endif /* !PM */

/*
* pcie_portdrv_probe - Probe PCI-Express port devices
Expand Down Expand Up @@ -268,10 +268,9 @@ static struct pci_driver pcie_portdriver = {
.probe = pcie_portdrv_probe,
.remove = pcie_portdrv_remove,

.suspend = pcie_portdrv_suspend,
.resume = pcie_portdrv_resume,

.err_handler = &pcie_portdrv_err_handler,

.driver.pm = PCIE_PORTDRV_PM_OPS,
};

static int __init pcie_portdrv_init(void)
Expand Down
2 changes: 1 addition & 1 deletion include/linux/pcieport_if.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ struct pcie_port_service_driver {
const char *name;
int (*probe) (struct pcie_device *dev);
void (*remove) (struct pcie_device *dev);
int (*suspend) (struct pcie_device *dev, pm_message_t state);
int (*suspend) (struct pcie_device *dev);
int (*resume) (struct pcie_device *dev);

/* Service Error Recovery Handler */
Expand Down

0 comments on commit 3a3c244

Please sign in to comment.