android_kernel_xiaomi_sm8450/include/linux/pm_domain.h
Ivaylo Georgiev fd88580ed5 Merge keystone/android12-5.10-keystone-qcom-release.32+ (0fad51f) into msm-5.10
* refs/heads/tmp-0fad51f:
  ANDROID: sched: Add vendor hooks for update_load_avg
  ANDROID: Update ABI with __traceiter_*() additions
  ANDROID: Update the cf symbol list
  ANDROID: Update the qcom symbol list
  ANDROID: Update the hikey960 symbol list
  ANDROID: Update the generic symbol list
  ANDROID: Update the exynos symbol list
  ANDROID: Update the db845c symbol list
  UPSTREAM: arm64: Move PSTATE.TCO setting to separate functions
  FROMGIT: kasan: Add report for async mode
  FROMGIT: arm64: mte: Drop arch_enable_tagging()
  ANDROID: GKI: 4/23 KMI update
  FROMGIT: kasan: Add KASAN mode kernel parameter
  FROMGIT: arm64: mte: Add asynchronous mode support
  ANDROID: GKI: update ABI description
  FROMLIST: remoteproc: core: Move cdev add before device add
  ANDROID: mm: allow vmas with vm_ops to be speculatively handled
  ANDROID: sched: Add ANDROID_OEM_DATA_ARRAY in user_struct.
  ANDROID: sched: Add vendor hooks for sched.
  ANDROID: sched: Add vendor hooks to compute new cpu freq.
  Revert "Revert "net: xfrm: Localize sequence counter per network namespace""
  FROMGIT: usb: typec: tcpm: Allow slow charging loops to comply to pSnkStby
  FROMGIT: usb: dwc3: gadget: Check for disabled LPM quirk
  ANDROID: GKI: arm64: reserve space in cpu_hwcaps and cpu_hwcap_keys arrays
  FROMLIST: export: Make CRCs robust to symbol trimming
  ANDROID: Kconfig.gki Add SND_SOC_TOPOLOGY
  ANDROID: GKI: Change UCLAMP_BUCKETS_COUNT to 20
  FROMGIT: ASoC: soc-component: Add snd_soc_pcm_component_ack
  UPSTREAM: ASoC: dmaengine_pcm: add peripheral configuration
  UPSTREAM: dmaengine: add peripheral configuration
  UPSTREAM: PM: domains: use device's next wakeup to determine domain idle state
  UPSTREAM: PM: domains: inform PM domain of a device's next wakeup
  Revert "FROMLIST: PM / Domains: add domain feature flag for next wakeup"
  Revert "FROMLIST: PM / domains: inform PM domain of a device's next wakeup"
  Revert "FROMLIST: PM / Domains: use device's next wakeup to determine domain idle state"
  FROMGIT: mm: cma: add the CMA instance name to cma trace events
  FROMGIT: mm: cma: Add the CMA instance name to the cma_alloc_start trace event
  FROMGIT: mm: cma: add trace events for CMA alloc perf testing
  ANDROID: mm: compaction: fix isolate_and_split_free_page() redefinition
  ANDROID: vendor_hooks: Fix build-break due to psi_event
  ANDROID: GKI: Update abi_gki_aarch64_qcom list for kprobe module
  ANDROID: GKI: Enable CONFIG_HIST_TRIGGERS
  FROMGIT: tick/broadcast: Allow late registered device to enter oneshot mode
  UPSTREAM: arm64: uaccess: split user/kernel routines
  UPSTREAM: arm64: uaccess: refactor __{get,put}_user
  BACKPORT: arm64: uaccess: rename privileged uaccess routines
  ANDROID: Incremental fs: Add INCFS_IOC_GET_LAST_READ_ERROR
  ANDROID: Incremental fs: Fix INCFS_MAGIC_NUMBER casts
  ANDROID: Incremental fs: Add status to sysfs
  ANDROID: Incremental fs: fix u64 integer cast to pointer
  ANDROID: Incremental fs: stat should return actual used blocks
  ANDROID: Incremental fs: Add FS_IOC_READ_VERITY_METADATA
  ANDROID: export find_user() & free_uid()for GKI purpose.
  ANDROID: GKI: update ABI description
  ANDROID: GKI: Update abi_gki_aarch64_qcom for kgsl AO tracing support
  ANDROID: ABI: update symbols to unisoc whitelist for the fifth time
  ANDROID: sched: Add vendor hooks for cpu affinity.
  ANDROID: GKI: Update abi_gki_aarch64_qcom list for reverse migration
  ANDROID: abi_gki_aarch64_generic: Add a few more symbols
  FROMGIT: usb: dwc3: gadget: Remove FS bInterval_m1 limitation
  ANDROID: abi_gki_aarch64_qcom: Add __bitmap_or
  ANDROID: GKI: Update abi_gki_aarch64_qcom for gpio block read tracepoint
  FROMGIT: dt-bindings: connector: Add slow-charger-loop definition
  FROMGIT: usb: dwc3: gadget: Fix START_TRANSFER link state check
  FROMGIT: usb: gadget: Fix double free of device descriptor pointers
  FROMGIT: usb: typec: tcpm: Fix error while calculating PPS out values
  ANDROID: inline isolate_and_split_free_page
  ANDROID: kernel: clear debug_kinfo precisely
  ANDROID: cgroup: Add vendor hook for cpuset.
  ANDROID: GKI: Update abi_gki_aarch64_qcom for PSI tracepoints
  ANDROID: psi: Add vendor hooks for PSI tracing
  Linux 5.10.32
  net: phy: marvell: fix detection of PHY on Topaz switches
  bpf: Move sanitize_val_alu out of op switch
  bpf: Improve verifier error messages for users
  bpf: Rework ptr_limit into alu_limit and add common error path
  arm64: mte: Ensure TIF_MTE_ASYNC_FAULT is set atomically
  ARM: 9071/1: uprobes: Don't hook on thumb instructions
  bpf: Move off_reg into sanitize_ptr_alu
  bpf: Ensure off_reg has no mixed signed bounds for all types
  r8169: don't advertise pause in jumbo mode
  r8169: tweak max read request size for newer chips also in jumbo mtu mode
  KVM: VMX: Don't use vcpu->run->internal.ndata as an array index
  KVM: VMX: Convert vcpu_vmx.exit_reason to a union
  bpf: Use correct permission flag for mixed signed bounds arithmetic
  arm64: dts: allwinner: h6: beelink-gs1: Remove ext. 32 kHz osc reference
  arm64: dts: allwinner: Fix SD card CD GPIO for SOPine systems
  ARM: OMAP2+: Fix uninitialized sr_inst
  ARM: footbridge: fix PCI interrupt mapping
  ARM: 9069/1: NOMMU: Fix conversion for_each_membock() to for_each_mem_range()
  ARM: OMAP2+: Fix warning for omap_init_time_of()
  gro: ensure frag0 meets IP header alignment
  ch_ktls: do not send snd_una update to TCB in middle
  ch_ktls: tcb close causes tls connection failure
  ch_ktls: fix device connection close
  ch_ktls: Fix kernel panic
  ibmvnic: remove duplicate napi_schedule call in open function
  ibmvnic: remove duplicate napi_schedule call in do_reset function
  ibmvnic: avoid calling napi_disable() twice
  ia64: tools: remove inclusion of ia64-specific version of errno.h header
  ia64: remove duplicate entries in generic_defconfig
  ethtool: pause: make sure we init driver stats
  i40e: fix the panic when running bpf in xdpdrv mode
  net: Make tcp_allowed_congestion_control readonly in non-init netns
  mm: ptdump: fix build failure
  net: ip6_tunnel: Unregister catch-all devices
  net: sit: Unregister catch-all devices
  net: davicom: Fix regulator not turned off on failed probe
  net/mlx5e: Fix setting of RS FEC mode
  netfilter: nft_limit: avoid possible divide error in nft_limit_init
  net/mlx5e: fix ingress_ifindex check in mlx5e_flower_parse_meta
  net: macb: fix the restore of cmp registers
  libbpf: Fix potential NULL pointer dereference
  netfilter: arp_tables: add pre_exit hook for table unregister
  netfilter: bridge: add pre_exit hooks for ebtable unregistration
  libnvdimm/region: Fix nvdimm_has_flush() to handle ND_REGION_ASYNC
  ice: Fix potential infinite loop when using u8 loop counter
  netfilter: conntrack: do not print icmpv6 as unknown via /proc
  netfilter: flowtable: fix NAT IPv6 offload mangling
  ixgbe: fix unbalanced device enable/disable in suspend/resume
  scsi: libsas: Reset num_scatter if libata marks qc as NODATA
  riscv: Fix spelling mistake "SPARSEMEM" to "SPARSMEM"
  vfio/pci: Add missing range check in vfio_pci_mmap
  arm64: alternatives: Move length validation in alternative_{insn, endif}
  arm64: fix inline asm in load_unaligned_zeropad()
  readdir: make sure to verify directory entry for legacy interfaces too
  dm verity fec: fix misaligned RS roots IO
  HID: wacom: set EV_KEY and EV_ABS only for non-HID_GENERIC type of devices
  Input: i8042 - fix Pegatron C15B ID entry
  Input: s6sy761 - fix coordinate read bit shift
  lib: fix kconfig dependency on ARCH_WANT_FRAME_POINTERS
  virt_wifi: Return micros for BSS TSF values
  mac80211: clear sta->fast_rx when STA removed from 4-addr VLAN
  pcnet32: Use pci_resource_len to validate PCI resource
  net: ieee802154: forbid monitor for add llsec seclevel
  net: ieee802154: stop dump llsec seclevels for monitors
  net: ieee802154: forbid monitor for del llsec devkey
  net: ieee802154: forbid monitor for add llsec devkey
  net: ieee802154: stop dump llsec devkeys for monitors
  net: ieee802154: forbid monitor for del llsec dev
  net: ieee802154: forbid monitor for add llsec dev
  net: ieee802154: stop dump llsec devs for monitors
  net: ieee802154: forbid monitor for del llsec key
  net: ieee802154: forbid monitor for add llsec key
  net: ieee802154: stop dump llsec keys for monitors
  iwlwifi: add support for Qu with AX201 device
  scsi: scsi_transport_srp: Don't block target in SRP_PORT_LOST state
  ASoC: fsl_esai: Fix TDM slot setup for I2S mode
  drm/msm: Fix a5xx/a6xx timestamps
  ARM: omap1: fix building with clang IAS
  ARM: keystone: fix integer overflow warning
  neighbour: Disregard DEAD dst in neigh_update
  gpu/xen: Fix a use after free in xen_drm_drv_init
  ASoC: max98373: Added 30ms turn on/off time delay
  ASoC: max98373: Changed amp shutdown register as volatile
  xfrm: BEET mode doesn't support fragments for inner packets
  iwlwifi: Fix softirq/hardirq disabling in iwl_pcie_enqueue_hcmd()
  arc: kernel: Return -EFAULT if copy_to_user() fails
  lockdep: Add a missing initialization hint to the "INFO: Trying to register non-static key" message
  ARM: dts: Fix moving mmc devices with aliases for omap4 & 5
  ARM: dts: Drop duplicate sha2md5_fck to fix clk_disable race
  ACPI: x86: Call acpi_boot_table_init() after acpi_table_upgrade()
  dmaengine: idxd: fix wq cleanup of WQCFG registers
  dmaengine: plx_dma: add a missing put_device() on error path
  dmaengine: Fix a double free in dma_async_device_register
  dmaengine: dw: Make it dependent to HAS_IOMEM
  dmaengine: idxd: fix wq size store permission state
  dmaengine: idxd: fix opcap sysfs attribute output
  dmaengine: idxd: fix delta_rec and crc size field for completion record
  dmaengine: idxd: Fix clobbering of SWERR overflow bit on writeback
  gpio: sysfs: Obey valid_mask
  Input: nspire-keypad - enable interrupts only when opened
  mtd: rawnand: mtk: Fix WAITRDY break condition and timeout
  net/sctp: fix race condition in sctp_destroy_sock
  ANDROID: abi_gki_aarch64_qcom: Add android_rvh_sched_setaffinity
  ANDROID: gki_defconfig: temporarily disable KFENCE in GKI
  ANDROID: GKI: Update abi_gki_aarch64_qcom list for minidump
  ANDROID: implement wrapper for reverse migration
  ANDROID: cpuidle: enable TEO and MENU governors in gki_defconfig
  ANDROID: abi_gki_aarch64_qcom: Update symbol list
  ANDROID: clang: update to 12.0.5
  ANDROID: Add initial Exynos symbol list

Conflicts:
	Documentation/devicetree/bindings
	Documentation/devicetree/bindings/connector/usb-connector.yaml
	include/linux/pm_domain.h

Change-Id: I5701e429fa31cfb870b758f09af62b9bdad0fac9
Signed-off-by: Ivaylo Georgiev <irgeorgiev@codeaurora.org>
2021-04-29 21:38:09 -07:00

445 lines
13 KiB
C

/* SPDX-License-Identifier: GPL-2.0-only */
/*
* pm_domain.h - Definitions and headers related to device power domains.
*
* Copyright (C) 2011 Rafael J. Wysocki <rjw@sisk.pl>, Renesas Electronics Corp.
*/
#ifndef _LINUX_PM_DOMAIN_H
#define _LINUX_PM_DOMAIN_H
#include <linux/device.h>
#include <linux/ktime.h>
#include <linux/mutex.h>
#include <linux/pm.h>
#include <linux/err.h>
#include <linux/of.h>
#include <linux/notifier.h>
#include <linux/spinlock.h>
#include <linux/cpumask.h>
/*
* Flags to control the behaviour of a genpd.
*
* These flags may be set in the struct generic_pm_domain's flags field by a
* genpd backend driver. The flags must be set before it calls pm_genpd_init(),
* which initializes a genpd.
*
* GENPD_FLAG_PM_CLK: Instructs genpd to use the PM clk framework,
* while powering on/off attached devices.
*
* GENPD_FLAG_IRQ_SAFE: This informs genpd that its backend callbacks,
* ->power_on|off(), doesn't sleep. Hence, these
* can be invoked from within atomic context, which
* enables genpd to power on/off the PM domain,
* even when pm_runtime_is_irq_safe() returns true,
* for any of its attached devices. Note that, a
* genpd having this flag set, requires its
* masterdomains to also have it set.
*
* GENPD_FLAG_ALWAYS_ON: Instructs genpd to always keep the PM domain
* powered on.
*
* GENPD_FLAG_ACTIVE_WAKEUP: Instructs genpd to keep the PM domain powered
* on, in case any of its attached devices is used
* in the wakeup path to serve system wakeups.
*
* GENPD_FLAG_CPU_DOMAIN: Instructs genpd that it should expect to get
* devices attached, which may belong to CPUs or
* possibly have subdomains with CPUs attached.
* This flag enables the genpd backend driver to
* deploy idle power management support for CPUs
* and groups of CPUs. Note that, the backend
* driver must then comply with the so called,
* last-man-standing algorithm, for the CPUs in the
* PM domain.
*
* GENPD_FLAG_RPM_ALWAYS_ON: Instructs genpd to always keep the PM domain
* powered on except for system suspend.
*
* GENPD_FLAG_MIN_RESIDENCY: Enable the genpd governor to consider its
* components' next wakeup when determining the
* optimal idle state.
*/
#define GENPD_FLAG_PM_CLK (1U << 0)
#define GENPD_FLAG_IRQ_SAFE (1U << 1)
#define GENPD_FLAG_ALWAYS_ON (1U << 2)
#define GENPD_FLAG_ACTIVE_WAKEUP (1U << 3)
#define GENPD_FLAG_CPU_DOMAIN (1U << 4)
#define GENPD_FLAG_RPM_ALWAYS_ON (1U << 5)
#define GENPD_FLAG_MIN_RESIDENCY (1U << 6)
enum gpd_status {
GENPD_STATE_ON = 0, /* PM domain is on */
GENPD_STATE_OFF, /* PM domain is off */
};
enum genpd_notication {
GENPD_NOTIFY_PRE_OFF = 0,
GENPD_NOTIFY_OFF,
GENPD_NOTIFY_PRE_ON,
GENPD_NOTIFY_ON,
};
struct dev_power_governor {
bool (*power_down_ok)(struct dev_pm_domain *domain);
bool (*suspend_ok)(struct device *dev);
};
struct gpd_dev_ops {
int (*start)(struct device *dev);
int (*stop)(struct device *dev);
};
struct genpd_power_state {
s64 power_off_latency_ns;
s64 power_on_latency_ns;
s64 residency_ns;
u64 usage;
u64 rejected;
struct fwnode_handle *fwnode;
ktime_t idle_time;
void *data;
};
struct genpd_lock_ops;
struct dev_pm_opp;
struct opp_table;
struct generic_pm_domain {
struct device dev;
struct dev_pm_domain domain; /* PM domain operations */
struct list_head gpd_list_node; /* Node in the global PM domains list */
struct list_head parent_links; /* Links with PM domain as a parent */
struct list_head child_links; /* Links with PM domain as a child */
struct list_head dev_list; /* List of devices */
struct dev_power_governor *gov;
struct work_struct power_off_work;
struct fwnode_handle *provider; /* Identity of the domain provider */
bool has_provider;
const char *name;
atomic_t sd_count; /* Number of subdomains with power "on" */
enum gpd_status status; /* Current state of the domain */
unsigned int device_count; /* Number of devices */
unsigned int suspended_count; /* System suspend device counter */
unsigned int prepared_count; /* Suspend counter of prepared devices */
unsigned int performance_state; /* Aggregated max performance state */
cpumask_var_t cpus; /* A cpumask of the attached CPUs */
int (*power_off)(struct generic_pm_domain *domain);
int (*power_on)(struct generic_pm_domain *domain);
struct raw_notifier_head power_notifiers; /* Power on/off notifiers */
struct opp_table *opp_table; /* OPP table of the genpd */
unsigned int (*opp_to_performance_state)(struct generic_pm_domain *genpd,
struct dev_pm_opp *opp);
int (*set_performance_state)(struct generic_pm_domain *genpd,
unsigned int state);
struct gpd_dev_ops dev_ops;
s64 max_off_time_ns; /* Maximum allowed "suspended" time. */
ktime_t next_wakeup; /* Maintained by the domain governor */
bool max_off_time_changed;
bool cached_power_down_ok;
bool cached_power_down_state_idx;
int (*attach_dev)(struct generic_pm_domain *domain,
struct device *dev);
void (*detach_dev)(struct generic_pm_domain *domain,
struct device *dev);
unsigned int flags; /* Bit field of configs for genpd */
struct genpd_power_state *states;
void (*free_states)(struct genpd_power_state *states,
unsigned int state_count);
unsigned int state_count; /* number of states */
unsigned int state_idx; /* state that genpd will go to when off */
ktime_t on_time;
ktime_t accounting_time;
const struct genpd_lock_ops *lock_ops;
union {
struct mutex mlock;
struct {
spinlock_t slock;
unsigned long lock_flags;
};
};
};
static inline struct generic_pm_domain *pd_to_genpd(struct dev_pm_domain *pd)
{
return container_of(pd, struct generic_pm_domain, domain);
}
struct gpd_link {
struct generic_pm_domain *parent;
struct list_head parent_node;
struct generic_pm_domain *child;
struct list_head child_node;
/* Sub-domain's per-master domain performance state */
unsigned int performance_state;
unsigned int prev_performance_state;
};
struct gpd_timing_data {
s64 suspend_latency_ns;
s64 resume_latency_ns;
s64 effective_constraint_ns;
bool constraint_changed;
bool cached_suspend_ok;
};
struct pm_domain_data {
struct list_head list_node;
struct device *dev;
};
struct generic_pm_domain_data {
struct pm_domain_data base;
struct gpd_timing_data td;
struct notifier_block nb;
struct notifier_block *power_nb;
int cpu;
unsigned int performance_state;
ktime_t next_wakeup;
void *data;
};
#ifdef CONFIG_PM_GENERIC_DOMAINS
static inline struct generic_pm_domain_data *to_gpd_data(struct pm_domain_data *pdd)
{
return container_of(pdd, struct generic_pm_domain_data, base);
}
static inline struct generic_pm_domain_data *dev_gpd_data(struct device *dev)
{
return to_gpd_data(dev->power.subsys_data->domain_data);
}
int pm_genpd_add_device(struct generic_pm_domain *genpd, struct device *dev);
int pm_genpd_remove_device(struct device *dev);
int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
struct generic_pm_domain *subdomain);
int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
struct generic_pm_domain *subdomain);
int pm_genpd_init(struct generic_pm_domain *genpd,
struct dev_power_governor *gov, bool is_off);
int pm_genpd_remove(struct generic_pm_domain *genpd);
int dev_pm_genpd_set_performance_state(struct device *dev, unsigned int state);
int dev_pm_genpd_add_notifier(struct device *dev, struct notifier_block *nb);
int dev_pm_genpd_remove_notifier(struct device *dev);
void genpd_enable_next_wakeup(struct generic_pm_domain *genpd, bool enable);
void dev_pm_genpd_set_next_wakeup(struct device *dev, ktime_t next);
extern struct dev_power_governor simple_qos_governor;
extern struct dev_power_governor pm_domain_always_on_gov;
#ifdef CONFIG_CPU_IDLE
extern struct dev_power_governor pm_domain_cpu_gov;
#endif
#else
static inline struct generic_pm_domain_data *dev_gpd_data(struct device *dev)
{
return ERR_PTR(-ENOSYS);
}
static inline int pm_genpd_add_device(struct generic_pm_domain *genpd,
struct device *dev)
{
return -ENOSYS;
}
static inline int pm_genpd_remove_device(struct device *dev)
{
return -ENOSYS;
}
static inline int pm_genpd_add_subdomain(struct generic_pm_domain *genpd,
struct generic_pm_domain *subdomain)
{
return -ENOSYS;
}
static inline int pm_genpd_remove_subdomain(struct generic_pm_domain *genpd,
struct generic_pm_domain *subdomain)
{
return -ENOSYS;
}
static inline int pm_genpd_init(struct generic_pm_domain *genpd,
struct dev_power_governor *gov, bool is_off)
{
return -ENOSYS;
}
static inline int pm_genpd_remove(struct generic_pm_domain *genpd)
{
return -ENOTSUPP;
}
static inline int dev_pm_genpd_set_performance_state(struct device *dev,
unsigned int state)
{
return -ENOTSUPP;
}
static inline int dev_pm_genpd_add_notifier(struct device *dev,
struct notifier_block *nb)
{
return -ENOTSUPP;
}
static inline int dev_pm_genpd_remove_notifier(struct device *dev)
{
return -ENOTSUPP;
}
static inline void genpd_enable_next_wakeup(struct generic_pm_domain *genpd,
bool enable)
{ }
static inline void dev_pm_genpd_set_next_wakeup(struct device *dev, ktime_t next)
{ }
#define simple_qos_governor (*(struct dev_power_governor *)(NULL))
#define pm_domain_always_on_gov (*(struct dev_power_governor *)(NULL))
#endif
#ifdef CONFIG_PM_GENERIC_DOMAINS_SLEEP
void dev_pm_genpd_suspend(struct device *dev);
void dev_pm_genpd_resume(struct device *dev);
#else
static inline void dev_pm_genpd_suspend(struct device *dev) {}
static inline void dev_pm_genpd_resume(struct device *dev) {}
#endif
/* OF PM domain providers */
struct of_device_id;
typedef struct generic_pm_domain *(*genpd_xlate_t)(struct of_phandle_args *args,
void *data);
struct genpd_onecell_data {
struct generic_pm_domain **domains;
unsigned int num_domains;
genpd_xlate_t xlate;
};
#ifdef CONFIG_PM_GENERIC_DOMAINS_OF
int of_genpd_add_provider_simple(struct device_node *np,
struct generic_pm_domain *genpd);
int of_genpd_add_provider_onecell(struct device_node *np,
struct genpd_onecell_data *data);
void of_genpd_del_provider(struct device_node *np);
int of_genpd_add_device(struct of_phandle_args *args, struct device *dev);
int of_genpd_add_subdomain(struct of_phandle_args *parent_spec,
struct of_phandle_args *subdomain_spec);
int of_genpd_remove_subdomain(struct of_phandle_args *parent_spec,
struct of_phandle_args *subdomain_spec);
struct generic_pm_domain *of_genpd_remove_last(struct device_node *np);
int of_genpd_parse_idle_states(struct device_node *dn,
struct genpd_power_state **states, int *n);
unsigned int pm_genpd_opp_to_performance_state(struct device *genpd_dev,
struct dev_pm_opp *opp);
int genpd_dev_pm_attach(struct device *dev);
struct device *genpd_dev_pm_attach_by_id(struct device *dev,
unsigned int index);
struct device *genpd_dev_pm_attach_by_name(struct device *dev,
const char *name);
#else /* !CONFIG_PM_GENERIC_DOMAINS_OF */
static inline int of_genpd_add_provider_simple(struct device_node *np,
struct generic_pm_domain *genpd)
{
return -ENOTSUPP;
}
static inline int of_genpd_add_provider_onecell(struct device_node *np,
struct genpd_onecell_data *data)
{
return -ENOTSUPP;
}
static inline void of_genpd_del_provider(struct device_node *np) {}
static inline int of_genpd_add_device(struct of_phandle_args *args,
struct device *dev)
{
return -ENODEV;
}
static inline int of_genpd_add_subdomain(struct of_phandle_args *parent_spec,
struct of_phandle_args *subdomain_spec)
{
return -ENODEV;
}
static inline int of_genpd_remove_subdomain(struct of_phandle_args *parent_spec,
struct of_phandle_args *subdomain_spec)
{
return -ENODEV;
}
static inline int of_genpd_parse_idle_states(struct device_node *dn,
struct genpd_power_state **states, int *n)
{
return -ENODEV;
}
static inline unsigned int
pm_genpd_opp_to_performance_state(struct device *genpd_dev,
struct dev_pm_opp *opp)
{
return 0;
}
static inline int genpd_dev_pm_attach(struct device *dev)
{
return 0;
}
static inline struct device *genpd_dev_pm_attach_by_id(struct device *dev,
unsigned int index)
{
return NULL;
}
static inline struct device *genpd_dev_pm_attach_by_name(struct device *dev,
const char *name)
{
return NULL;
}
static inline
struct generic_pm_domain *of_genpd_remove_last(struct device_node *np)
{
return ERR_PTR(-ENOTSUPP);
}
#endif /* CONFIG_PM_GENERIC_DOMAINS_OF */
#ifdef CONFIG_PM
int dev_pm_domain_attach(struct device *dev, bool power_on);
struct device *dev_pm_domain_attach_by_id(struct device *dev,
unsigned int index);
struct device *dev_pm_domain_attach_by_name(struct device *dev,
const char *name);
void dev_pm_domain_detach(struct device *dev, bool power_off);
int dev_pm_domain_start(struct device *dev);
void dev_pm_domain_set(struct device *dev, struct dev_pm_domain *pd);
#else
static inline int dev_pm_domain_attach(struct device *dev, bool power_on)
{
return 0;
}
static inline struct device *dev_pm_domain_attach_by_id(struct device *dev,
unsigned int index)
{
return NULL;
}
static inline struct device *dev_pm_domain_attach_by_name(struct device *dev,
const char *name)
{
return NULL;
}
static inline void dev_pm_domain_detach(struct device *dev, bool power_off) {}
static inline int dev_pm_domain_start(struct device *dev)
{
return 0;
}
static inline void dev_pm_domain_set(struct device *dev,
struct dev_pm_domain *pd) {}
#endif
#endif /* _LINUX_PM_DOMAIN_H */