18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Generic OPP Interface 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2009-2010 Texas Instruments Incorporated. 68c2ecf20Sopenharmony_ci * Nishanth Menon 78c2ecf20Sopenharmony_ci * Romit Dasgupta 88c2ecf20Sopenharmony_ci * Kevin Hilman 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#ifndef __LINUX_OPP_H__ 128c2ecf20Sopenharmony_ci#define __LINUX_OPP_H__ 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include <linux/energy_model.h> 158c2ecf20Sopenharmony_ci#include <linux/err.h> 168c2ecf20Sopenharmony_ci#include <linux/notifier.h> 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_cistruct clk; 198c2ecf20Sopenharmony_cistruct regulator; 208c2ecf20Sopenharmony_cistruct dev_pm_opp; 218c2ecf20Sopenharmony_cistruct device; 228c2ecf20Sopenharmony_cistruct opp_table; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cienum dev_pm_opp_event { 258c2ecf20Sopenharmony_ci OPP_EVENT_ADD, OPP_EVENT_REMOVE, OPP_EVENT_ENABLE, OPP_EVENT_DISABLE, 268c2ecf20Sopenharmony_ci OPP_EVENT_ADJUST_VOLTAGE, 278c2ecf20Sopenharmony_ci}; 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_ci/** 308c2ecf20Sopenharmony_ci * struct dev_pm_opp_supply - Power supply voltage/current values 318c2ecf20Sopenharmony_ci * @u_volt: Target voltage in microvolts corresponding to this OPP 328c2ecf20Sopenharmony_ci * @u_volt_min: Minimum voltage in microvolts corresponding to this OPP 338c2ecf20Sopenharmony_ci * @u_volt_max: Maximum voltage in microvolts corresponding to this OPP 348c2ecf20Sopenharmony_ci * @u_amp: Maximum current drawn by the device in microamperes 358c2ecf20Sopenharmony_ci * 368c2ecf20Sopenharmony_ci * This structure stores the voltage/current values for a single power supply. 378c2ecf20Sopenharmony_ci */ 388c2ecf20Sopenharmony_cistruct dev_pm_opp_supply { 398c2ecf20Sopenharmony_ci unsigned long u_volt; 408c2ecf20Sopenharmony_ci unsigned long u_volt_min; 418c2ecf20Sopenharmony_ci unsigned long u_volt_max; 428c2ecf20Sopenharmony_ci unsigned long u_amp; 438c2ecf20Sopenharmony_ci}; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci/** 468c2ecf20Sopenharmony_ci * struct dev_pm_opp_icc_bw - Interconnect bandwidth values 478c2ecf20Sopenharmony_ci * @avg: Average bandwidth corresponding to this OPP (in icc units) 488c2ecf20Sopenharmony_ci * @peak: Peak bandwidth corresponding to this OPP (in icc units) 498c2ecf20Sopenharmony_ci * 508c2ecf20Sopenharmony_ci * This structure stores the bandwidth values for a single interconnect path. 518c2ecf20Sopenharmony_ci */ 528c2ecf20Sopenharmony_cistruct dev_pm_opp_icc_bw { 538c2ecf20Sopenharmony_ci u32 avg; 548c2ecf20Sopenharmony_ci u32 peak; 558c2ecf20Sopenharmony_ci}; 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci/** 588c2ecf20Sopenharmony_ci * struct dev_pm_opp_info - OPP freq/voltage/current values 598c2ecf20Sopenharmony_ci * @rate: Target clk rate in hz 608c2ecf20Sopenharmony_ci * @supplies: Array of voltage/current values for all power supplies 618c2ecf20Sopenharmony_ci * 628c2ecf20Sopenharmony_ci * This structure stores the freq/voltage/current values for a single OPP. 638c2ecf20Sopenharmony_ci */ 648c2ecf20Sopenharmony_cistruct dev_pm_opp_info { 658c2ecf20Sopenharmony_ci unsigned long rate; 668c2ecf20Sopenharmony_ci struct dev_pm_opp_supply *supplies; 678c2ecf20Sopenharmony_ci}; 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ci/** 708c2ecf20Sopenharmony_ci * struct dev_pm_set_opp_data - Set OPP data 718c2ecf20Sopenharmony_ci * @old_opp: Old OPP info 728c2ecf20Sopenharmony_ci * @new_opp: New OPP info 738c2ecf20Sopenharmony_ci * @regulators: Array of regulator pointers 748c2ecf20Sopenharmony_ci * @regulator_count: Number of regulators 758c2ecf20Sopenharmony_ci * @clk: Pointer to clk 768c2ecf20Sopenharmony_ci * @dev: Pointer to the struct device 778c2ecf20Sopenharmony_ci * 788c2ecf20Sopenharmony_ci * This structure contains all information required for setting an OPP. 798c2ecf20Sopenharmony_ci */ 808c2ecf20Sopenharmony_cistruct dev_pm_set_opp_data { 818c2ecf20Sopenharmony_ci struct dev_pm_opp_info old_opp; 828c2ecf20Sopenharmony_ci struct dev_pm_opp_info new_opp; 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_ci struct regulator **regulators; 858c2ecf20Sopenharmony_ci unsigned int regulator_count; 868c2ecf20Sopenharmony_ci struct clk *clk; 878c2ecf20Sopenharmony_ci struct device *dev; 888c2ecf20Sopenharmony_ci}; 898c2ecf20Sopenharmony_ci 908c2ecf20Sopenharmony_ci#if defined(CONFIG_PM_OPP) 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_cistruct opp_table *dev_pm_opp_get_opp_table(struct device *dev); 938c2ecf20Sopenharmony_cistruct opp_table *dev_pm_opp_get_opp_table_indexed(struct device *dev, int index); 948c2ecf20Sopenharmony_civoid dev_pm_opp_put_opp_table(struct opp_table *opp_table); 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ciunsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp); 978c2ecf20Sopenharmony_ci 988c2ecf20Sopenharmony_ciunsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp); 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ciunsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp); 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_cibool dev_pm_opp_is_turbo(struct dev_pm_opp *opp); 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ciint dev_pm_opp_get_opp_count(struct device *dev); 1058c2ecf20Sopenharmony_ciunsigned long dev_pm_opp_get_max_clock_latency(struct device *dev); 1068c2ecf20Sopenharmony_ciunsigned long dev_pm_opp_get_max_volt_latency(struct device *dev); 1078c2ecf20Sopenharmony_ciunsigned long dev_pm_opp_get_max_transition_latency(struct device *dev); 1088c2ecf20Sopenharmony_ciunsigned long dev_pm_opp_get_suspend_opp_freq(struct device *dev); 1098c2ecf20Sopenharmony_ci 1108c2ecf20Sopenharmony_cistruct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 1118c2ecf20Sopenharmony_ci unsigned long freq, 1128c2ecf20Sopenharmony_ci bool available); 1138c2ecf20Sopenharmony_cistruct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev, 1148c2ecf20Sopenharmony_ci unsigned int level); 1158c2ecf20Sopenharmony_ci 1168c2ecf20Sopenharmony_cistruct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 1178c2ecf20Sopenharmony_ci unsigned long *freq); 1188c2ecf20Sopenharmony_cistruct dev_pm_opp *dev_pm_opp_find_freq_ceil_by_volt(struct device *dev, 1198c2ecf20Sopenharmony_ci unsigned long u_volt); 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_cistruct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 1228c2ecf20Sopenharmony_ci unsigned long *freq); 1238c2ecf20Sopenharmony_civoid dev_pm_opp_put(struct dev_pm_opp *opp); 1248c2ecf20Sopenharmony_ci 1258c2ecf20Sopenharmony_ciint dev_pm_opp_add(struct device *dev, unsigned long freq, 1268c2ecf20Sopenharmony_ci unsigned long u_volt); 1278c2ecf20Sopenharmony_civoid dev_pm_opp_remove(struct device *dev, unsigned long freq); 1288c2ecf20Sopenharmony_civoid dev_pm_opp_remove_all_dynamic(struct device *dev); 1298c2ecf20Sopenharmony_ci 1308c2ecf20Sopenharmony_ciint dev_pm_opp_adjust_voltage(struct device *dev, unsigned long freq, 1318c2ecf20Sopenharmony_ci unsigned long u_volt, unsigned long u_volt_min, 1328c2ecf20Sopenharmony_ci unsigned long u_volt_max); 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ciint dev_pm_opp_enable(struct device *dev, unsigned long freq); 1358c2ecf20Sopenharmony_ci 1368c2ecf20Sopenharmony_ciint dev_pm_opp_disable(struct device *dev, unsigned long freq); 1378c2ecf20Sopenharmony_ci 1388c2ecf20Sopenharmony_ciint dev_pm_opp_register_notifier(struct device *dev, struct notifier_block *nb); 1398c2ecf20Sopenharmony_ciint dev_pm_opp_unregister_notifier(struct device *dev, struct notifier_block *nb); 1408c2ecf20Sopenharmony_ci 1418c2ecf20Sopenharmony_cistruct opp_table *dev_pm_opp_set_supported_hw(struct device *dev, const u32 *versions, unsigned int count); 1428c2ecf20Sopenharmony_civoid dev_pm_opp_put_supported_hw(struct opp_table *opp_table); 1438c2ecf20Sopenharmony_cistruct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name); 1448c2ecf20Sopenharmony_civoid dev_pm_opp_put_prop_name(struct opp_table *opp_table); 1458c2ecf20Sopenharmony_cistruct opp_table *dev_pm_opp_set_regulators(struct device *dev, const char * const names[], unsigned int count); 1468c2ecf20Sopenharmony_civoid dev_pm_opp_put_regulators(struct opp_table *opp_table); 1478c2ecf20Sopenharmony_cistruct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char * name); 1488c2ecf20Sopenharmony_civoid dev_pm_opp_put_clkname(struct opp_table *opp_table); 1498c2ecf20Sopenharmony_cistruct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev, int (*set_opp)(struct dev_pm_set_opp_data *data)); 1508c2ecf20Sopenharmony_civoid dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table); 1518c2ecf20Sopenharmony_cistruct opp_table *dev_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs); 1528c2ecf20Sopenharmony_civoid dev_pm_opp_detach_genpd(struct opp_table *opp_table); 1538c2ecf20Sopenharmony_ciint dev_pm_opp_xlate_performance_state(struct opp_table *src_table, struct opp_table *dst_table, unsigned int pstate); 1548c2ecf20Sopenharmony_ciint dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq); 1558c2ecf20Sopenharmony_ciint dev_pm_opp_set_bw(struct device *dev, struct dev_pm_opp *opp); 1568c2ecf20Sopenharmony_ciint dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask); 1578c2ecf20Sopenharmony_ciint dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask); 1588c2ecf20Sopenharmony_civoid dev_pm_opp_remove_table(struct device *dev); 1598c2ecf20Sopenharmony_civoid dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask); 1608c2ecf20Sopenharmony_ci#else 1618c2ecf20Sopenharmony_cistatic inline struct opp_table *dev_pm_opp_get_opp_table(struct device *dev) 1628c2ecf20Sopenharmony_ci{ 1638c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 1648c2ecf20Sopenharmony_ci} 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_cistatic inline struct opp_table *dev_pm_opp_get_opp_table_indexed(struct device *dev, int index) 1678c2ecf20Sopenharmony_ci{ 1688c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 1698c2ecf20Sopenharmony_ci} 1708c2ecf20Sopenharmony_ci 1718c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_put_opp_table(struct opp_table *opp_table) {} 1728c2ecf20Sopenharmony_ci 1738c2ecf20Sopenharmony_cistatic inline unsigned long dev_pm_opp_get_voltage(struct dev_pm_opp *opp) 1748c2ecf20Sopenharmony_ci{ 1758c2ecf20Sopenharmony_ci return 0; 1768c2ecf20Sopenharmony_ci} 1778c2ecf20Sopenharmony_ci 1788c2ecf20Sopenharmony_cistatic inline unsigned long dev_pm_opp_get_freq(struct dev_pm_opp *opp) 1798c2ecf20Sopenharmony_ci{ 1808c2ecf20Sopenharmony_ci return 0; 1818c2ecf20Sopenharmony_ci} 1828c2ecf20Sopenharmony_ci 1838c2ecf20Sopenharmony_cistatic inline unsigned int dev_pm_opp_get_level(struct dev_pm_opp *opp) 1848c2ecf20Sopenharmony_ci{ 1858c2ecf20Sopenharmony_ci return 0; 1868c2ecf20Sopenharmony_ci} 1878c2ecf20Sopenharmony_ci 1888c2ecf20Sopenharmony_cistatic inline bool dev_pm_opp_is_turbo(struct dev_pm_opp *opp) 1898c2ecf20Sopenharmony_ci{ 1908c2ecf20Sopenharmony_ci return false; 1918c2ecf20Sopenharmony_ci} 1928c2ecf20Sopenharmony_ci 1938c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_get_opp_count(struct device *dev) 1948c2ecf20Sopenharmony_ci{ 1958c2ecf20Sopenharmony_ci return 0; 1968c2ecf20Sopenharmony_ci} 1978c2ecf20Sopenharmony_ci 1988c2ecf20Sopenharmony_cistatic inline unsigned long dev_pm_opp_get_max_clock_latency(struct device *dev) 1998c2ecf20Sopenharmony_ci{ 2008c2ecf20Sopenharmony_ci return 0; 2018c2ecf20Sopenharmony_ci} 2028c2ecf20Sopenharmony_ci 2038c2ecf20Sopenharmony_cistatic inline unsigned long dev_pm_opp_get_max_volt_latency(struct device *dev) 2048c2ecf20Sopenharmony_ci{ 2058c2ecf20Sopenharmony_ci return 0; 2068c2ecf20Sopenharmony_ci} 2078c2ecf20Sopenharmony_ci 2088c2ecf20Sopenharmony_cistatic inline unsigned long dev_pm_opp_get_max_transition_latency(struct device *dev) 2098c2ecf20Sopenharmony_ci{ 2108c2ecf20Sopenharmony_ci return 0; 2118c2ecf20Sopenharmony_ci} 2128c2ecf20Sopenharmony_ci 2138c2ecf20Sopenharmony_cistatic inline unsigned long dev_pm_opp_get_suspend_opp_freq(struct device *dev) 2148c2ecf20Sopenharmony_ci{ 2158c2ecf20Sopenharmony_ci return 0; 2168c2ecf20Sopenharmony_ci} 2178c2ecf20Sopenharmony_ci 2188c2ecf20Sopenharmony_cistatic inline struct dev_pm_opp *dev_pm_opp_find_freq_exact(struct device *dev, 2198c2ecf20Sopenharmony_ci unsigned long freq, bool available) 2208c2ecf20Sopenharmony_ci{ 2218c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 2228c2ecf20Sopenharmony_ci} 2238c2ecf20Sopenharmony_ci 2248c2ecf20Sopenharmony_cistatic inline struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev, 2258c2ecf20Sopenharmony_ci unsigned int level) 2268c2ecf20Sopenharmony_ci{ 2278c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 2288c2ecf20Sopenharmony_ci} 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_cistatic inline struct dev_pm_opp *dev_pm_opp_find_freq_floor(struct device *dev, 2318c2ecf20Sopenharmony_ci unsigned long *freq) 2328c2ecf20Sopenharmony_ci{ 2338c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 2348c2ecf20Sopenharmony_ci} 2358c2ecf20Sopenharmony_ci 2368c2ecf20Sopenharmony_cistatic inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil_by_volt(struct device *dev, 2378c2ecf20Sopenharmony_ci unsigned long u_volt) 2388c2ecf20Sopenharmony_ci{ 2398c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 2408c2ecf20Sopenharmony_ci} 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_cistatic inline struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev, 2438c2ecf20Sopenharmony_ci unsigned long *freq) 2448c2ecf20Sopenharmony_ci{ 2458c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 2468c2ecf20Sopenharmony_ci} 2478c2ecf20Sopenharmony_ci 2488c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_put(struct dev_pm_opp *opp) {} 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_add(struct device *dev, unsigned long freq, 2518c2ecf20Sopenharmony_ci unsigned long u_volt) 2528c2ecf20Sopenharmony_ci{ 2538c2ecf20Sopenharmony_ci return -ENOTSUPP; 2548c2ecf20Sopenharmony_ci} 2558c2ecf20Sopenharmony_ci 2568c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_remove(struct device *dev, unsigned long freq) 2578c2ecf20Sopenharmony_ci{ 2588c2ecf20Sopenharmony_ci} 2598c2ecf20Sopenharmony_ci 2608c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_remove_all_dynamic(struct device *dev) 2618c2ecf20Sopenharmony_ci{ 2628c2ecf20Sopenharmony_ci} 2638c2ecf20Sopenharmony_ci 2648c2ecf20Sopenharmony_cistatic inline int 2658c2ecf20Sopenharmony_cidev_pm_opp_adjust_voltage(struct device *dev, unsigned long freq, 2668c2ecf20Sopenharmony_ci unsigned long u_volt, unsigned long u_volt_min, 2678c2ecf20Sopenharmony_ci unsigned long u_volt_max) 2688c2ecf20Sopenharmony_ci{ 2698c2ecf20Sopenharmony_ci return 0; 2708c2ecf20Sopenharmony_ci} 2718c2ecf20Sopenharmony_ci 2728c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_enable(struct device *dev, unsigned long freq) 2738c2ecf20Sopenharmony_ci{ 2748c2ecf20Sopenharmony_ci return 0; 2758c2ecf20Sopenharmony_ci} 2768c2ecf20Sopenharmony_ci 2778c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_disable(struct device *dev, unsigned long freq) 2788c2ecf20Sopenharmony_ci{ 2798c2ecf20Sopenharmony_ci return 0; 2808c2ecf20Sopenharmony_ci} 2818c2ecf20Sopenharmony_ci 2828c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_register_notifier(struct device *dev, struct notifier_block *nb) 2838c2ecf20Sopenharmony_ci{ 2848c2ecf20Sopenharmony_ci return -ENOTSUPP; 2858c2ecf20Sopenharmony_ci} 2868c2ecf20Sopenharmony_ci 2878c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_unregister_notifier(struct device *dev, struct notifier_block *nb) 2888c2ecf20Sopenharmony_ci{ 2898c2ecf20Sopenharmony_ci return -ENOTSUPP; 2908c2ecf20Sopenharmony_ci} 2918c2ecf20Sopenharmony_ci 2928c2ecf20Sopenharmony_cistatic inline struct opp_table *dev_pm_opp_set_supported_hw(struct device *dev, 2938c2ecf20Sopenharmony_ci const u32 *versions, 2948c2ecf20Sopenharmony_ci unsigned int count) 2958c2ecf20Sopenharmony_ci{ 2968c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 2978c2ecf20Sopenharmony_ci} 2988c2ecf20Sopenharmony_ci 2998c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_put_supported_hw(struct opp_table *opp_table) {} 3008c2ecf20Sopenharmony_ci 3018c2ecf20Sopenharmony_cistatic inline struct opp_table *dev_pm_opp_register_set_opp_helper(struct device *dev, 3028c2ecf20Sopenharmony_ci int (*set_opp)(struct dev_pm_set_opp_data *data)) 3038c2ecf20Sopenharmony_ci{ 3048c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 3058c2ecf20Sopenharmony_ci} 3068c2ecf20Sopenharmony_ci 3078c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_unregister_set_opp_helper(struct opp_table *opp_table) {} 3088c2ecf20Sopenharmony_ci 3098c2ecf20Sopenharmony_cistatic inline struct opp_table *dev_pm_opp_set_prop_name(struct device *dev, const char *name) 3108c2ecf20Sopenharmony_ci{ 3118c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 3128c2ecf20Sopenharmony_ci} 3138c2ecf20Sopenharmony_ci 3148c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_put_prop_name(struct opp_table *opp_table) {} 3158c2ecf20Sopenharmony_ci 3168c2ecf20Sopenharmony_cistatic inline struct opp_table *dev_pm_opp_set_regulators(struct device *dev, const char * const names[], unsigned int count) 3178c2ecf20Sopenharmony_ci{ 3188c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 3198c2ecf20Sopenharmony_ci} 3208c2ecf20Sopenharmony_ci 3218c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_put_regulators(struct opp_table *opp_table) {} 3228c2ecf20Sopenharmony_ci 3238c2ecf20Sopenharmony_cistatic inline struct opp_table *dev_pm_opp_set_clkname(struct device *dev, const char * name) 3248c2ecf20Sopenharmony_ci{ 3258c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 3268c2ecf20Sopenharmony_ci} 3278c2ecf20Sopenharmony_ci 3288c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_put_clkname(struct opp_table *opp_table) {} 3298c2ecf20Sopenharmony_ci 3308c2ecf20Sopenharmony_cistatic inline struct opp_table *dev_pm_opp_attach_genpd(struct device *dev, const char **names, struct device ***virt_devs) 3318c2ecf20Sopenharmony_ci{ 3328c2ecf20Sopenharmony_ci return ERR_PTR(-ENOTSUPP); 3338c2ecf20Sopenharmony_ci} 3348c2ecf20Sopenharmony_ci 3358c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_detach_genpd(struct opp_table *opp_table) {} 3368c2ecf20Sopenharmony_ci 3378c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_xlate_performance_state(struct opp_table *src_table, struct opp_table *dst_table, unsigned int pstate) 3388c2ecf20Sopenharmony_ci{ 3398c2ecf20Sopenharmony_ci return -ENOTSUPP; 3408c2ecf20Sopenharmony_ci} 3418c2ecf20Sopenharmony_ci 3428c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_set_rate(struct device *dev, unsigned long target_freq) 3438c2ecf20Sopenharmony_ci{ 3448c2ecf20Sopenharmony_ci return -ENOTSUPP; 3458c2ecf20Sopenharmony_ci} 3468c2ecf20Sopenharmony_ci 3478c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_set_bw(struct device *dev, struct dev_pm_opp *opp) 3488c2ecf20Sopenharmony_ci{ 3498c2ecf20Sopenharmony_ci return -EOPNOTSUPP; 3508c2ecf20Sopenharmony_ci} 3518c2ecf20Sopenharmony_ci 3528c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_set_sharing_cpus(struct device *cpu_dev, const struct cpumask *cpumask) 3538c2ecf20Sopenharmony_ci{ 3548c2ecf20Sopenharmony_ci return -ENOTSUPP; 3558c2ecf20Sopenharmony_ci} 3568c2ecf20Sopenharmony_ci 3578c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask) 3588c2ecf20Sopenharmony_ci{ 3598c2ecf20Sopenharmony_ci return -EINVAL; 3608c2ecf20Sopenharmony_ci} 3618c2ecf20Sopenharmony_ci 3628c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_remove_table(struct device *dev) 3638c2ecf20Sopenharmony_ci{ 3648c2ecf20Sopenharmony_ci} 3658c2ecf20Sopenharmony_ci 3668c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_cpumask_remove_table(const struct cpumask *cpumask) 3678c2ecf20Sopenharmony_ci{ 3688c2ecf20Sopenharmony_ci} 3698c2ecf20Sopenharmony_ci 3708c2ecf20Sopenharmony_ci#endif /* CONFIG_PM_OPP */ 3718c2ecf20Sopenharmony_ci 3728c2ecf20Sopenharmony_ci#if defined(CONFIG_PM_OPP) && defined(CONFIG_OF) 3738c2ecf20Sopenharmony_ciint dev_pm_opp_of_add_table(struct device *dev); 3748c2ecf20Sopenharmony_ciint dev_pm_opp_of_add_table_indexed(struct device *dev, int index); 3758c2ecf20Sopenharmony_civoid dev_pm_opp_of_remove_table(struct device *dev); 3768c2ecf20Sopenharmony_ciint dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask); 3778c2ecf20Sopenharmony_civoid dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask); 3788c2ecf20Sopenharmony_ciint dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask); 3798c2ecf20Sopenharmony_cistruct device_node *dev_pm_opp_of_get_opp_desc_node(struct device *dev); 3808c2ecf20Sopenharmony_cistruct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp); 3818c2ecf20Sopenharmony_ciint of_get_required_opp_performance_state(struct device_node *np, int index); 3828c2ecf20Sopenharmony_ciint dev_pm_opp_of_find_icc_paths(struct device *dev, struct opp_table *opp_table); 3838c2ecf20Sopenharmony_ciint dev_pm_opp_of_register_em(struct device *dev, struct cpumask *cpus); 3848c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_of_unregister_em(struct device *dev) 3858c2ecf20Sopenharmony_ci{ 3868c2ecf20Sopenharmony_ci em_dev_unregister_perf_domain(dev); 3878c2ecf20Sopenharmony_ci} 3888c2ecf20Sopenharmony_ci#else 3898c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_of_add_table(struct device *dev) 3908c2ecf20Sopenharmony_ci{ 3918c2ecf20Sopenharmony_ci return -ENOTSUPP; 3928c2ecf20Sopenharmony_ci} 3938c2ecf20Sopenharmony_ci 3948c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_of_add_table_indexed(struct device *dev, int index) 3958c2ecf20Sopenharmony_ci{ 3968c2ecf20Sopenharmony_ci return -ENOTSUPP; 3978c2ecf20Sopenharmony_ci} 3988c2ecf20Sopenharmony_ci 3998c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_of_remove_table(struct device *dev) 4008c2ecf20Sopenharmony_ci{ 4018c2ecf20Sopenharmony_ci} 4028c2ecf20Sopenharmony_ci 4038c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_of_cpumask_add_table(const struct cpumask *cpumask) 4048c2ecf20Sopenharmony_ci{ 4058c2ecf20Sopenharmony_ci return -ENOTSUPP; 4068c2ecf20Sopenharmony_ci} 4078c2ecf20Sopenharmony_ci 4088c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_of_cpumask_remove_table(const struct cpumask *cpumask) 4098c2ecf20Sopenharmony_ci{ 4108c2ecf20Sopenharmony_ci} 4118c2ecf20Sopenharmony_ci 4128c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_of_get_sharing_cpus(struct device *cpu_dev, struct cpumask *cpumask) 4138c2ecf20Sopenharmony_ci{ 4148c2ecf20Sopenharmony_ci return -ENOTSUPP; 4158c2ecf20Sopenharmony_ci} 4168c2ecf20Sopenharmony_ci 4178c2ecf20Sopenharmony_cistatic inline struct device_node *dev_pm_opp_of_get_opp_desc_node(struct device *dev) 4188c2ecf20Sopenharmony_ci{ 4198c2ecf20Sopenharmony_ci return NULL; 4208c2ecf20Sopenharmony_ci} 4218c2ecf20Sopenharmony_ci 4228c2ecf20Sopenharmony_cistatic inline struct device_node *dev_pm_opp_get_of_node(struct dev_pm_opp *opp) 4238c2ecf20Sopenharmony_ci{ 4248c2ecf20Sopenharmony_ci return NULL; 4258c2ecf20Sopenharmony_ci} 4268c2ecf20Sopenharmony_ci 4278c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_of_register_em(struct device *dev, 4288c2ecf20Sopenharmony_ci struct cpumask *cpus) 4298c2ecf20Sopenharmony_ci{ 4308c2ecf20Sopenharmony_ci return -ENOTSUPP; 4318c2ecf20Sopenharmony_ci} 4328c2ecf20Sopenharmony_ci 4338c2ecf20Sopenharmony_cistatic inline void dev_pm_opp_of_unregister_em(struct device *dev) 4348c2ecf20Sopenharmony_ci{ 4358c2ecf20Sopenharmony_ci} 4368c2ecf20Sopenharmony_ci 4378c2ecf20Sopenharmony_cistatic inline int of_get_required_opp_performance_state(struct device_node *np, int index) 4388c2ecf20Sopenharmony_ci{ 4398c2ecf20Sopenharmony_ci return -ENOTSUPP; 4408c2ecf20Sopenharmony_ci} 4418c2ecf20Sopenharmony_ci 4428c2ecf20Sopenharmony_cistatic inline int dev_pm_opp_of_find_icc_paths(struct device *dev, struct opp_table *opp_table) 4438c2ecf20Sopenharmony_ci{ 4448c2ecf20Sopenharmony_ci return -ENOTSUPP; 4458c2ecf20Sopenharmony_ci} 4468c2ecf20Sopenharmony_ci#endif 4478c2ecf20Sopenharmony_ci 4488c2ecf20Sopenharmony_ci#endif /* __LINUX_OPP_H__ */ 449