]> Git Repo - J-linux.git/blob - include/linux/pci-pwrctl.h
Merge tag 'apparmor-pr-2024-07-25' of git://git.kernel.org/pub/scm/linux/kernel/git...
[J-linux.git] / include / linux / pci-pwrctl.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright (C) 2024 Linaro Ltd.
4  */
5
6 #ifndef __PCI_PWRCTL_H__
7 #define __PCI_PWRCTL_H__
8
9 #include <linux/notifier.h>
10
11 struct device;
12 struct device_link;
13
14 /*
15  * This is a simple framework for solving the issue of PCI devices that require
16  * certain resources (regulators, GPIOs, clocks) to be enabled before the
17  * device can actually be detected on the PCI bus.
18  *
19  * The idea is to reuse the platform bus to populate OF nodes describing the
20  * PCI device and its resources, let these platform devices probe and enable
21  * relevant resources and then trigger a rescan of the PCI bus allowing for the
22  * same device (with a second associated struct device) to be registered with
23  * the PCI subsystem.
24  *
25  * To preserve a correct hierarchy for PCI power management and device reset,
26  * we create a device link between the power control platform device (parent)
27  * and the supplied PCI device (child).
28  */
29
30 /**
31  * struct pci_pwrctl - PCI device power control context.
32  * @dev: Address of the power controlling device.
33  *
34  * An object of this type must be allocated by the PCI power control device and
35  * passed to the pwrctl subsystem to trigger a bus rescan and setup a device
36  * link with the device once it's up.
37  */
38 struct pci_pwrctl {
39         struct device *dev;
40
41         /* Private: don't use. */
42         struct notifier_block nb;
43         struct device_link *link;
44 };
45
46 int pci_pwrctl_device_set_ready(struct pci_pwrctl *pwrctl);
47 void pci_pwrctl_device_unset_ready(struct pci_pwrctl *pwrctl);
48 int devm_pci_pwrctl_device_set_ready(struct device *dev,
49                                      struct pci_pwrctl *pwrctl);
50
51 #endif /* __PCI_PWRCTL_H__ */
This page took 0.028532 seconds and 4 git commands to generate.