1 /* SPDX-License-Identifier: GPL-2.0-or-later */ 2 /* 3 * Platform profile sysfs interface 4 * 5 * See Documentation/userspace-api/sysfs-platform_profile.rst for more 6 * information. 7 */ 8 9 #ifndef _PLATFORM_PROFILE_H_ 10 #define _PLATFORM_PROFILE_H_ 11 12 #include <linux/device.h> 13 #include <linux/bitops.h> 14 15 /* 16 * If more options are added please update profile_names array in 17 * platform_profile.c and sysfs-platform_profile documentation. 18 */ 19 20 enum platform_profile_option { 21 PLATFORM_PROFILE_LOW_POWER, 22 PLATFORM_PROFILE_COOL, 23 PLATFORM_PROFILE_QUIET, 24 PLATFORM_PROFILE_BALANCED, 25 PLATFORM_PROFILE_BALANCED_PERFORMANCE, 26 PLATFORM_PROFILE_PERFORMANCE, 27 PLATFORM_PROFILE_CUSTOM, 28 PLATFORM_PROFILE_LAST, /*must always be last */ 29 }; 30 31 struct platform_profile_ops { 32 int (*probe)(void *drvdata, unsigned long *choices); 33 int (*profile_get)(struct device *dev, enum platform_profile_option *profile); 34 int (*profile_set)(struct device *dev, enum platform_profile_option profile); 35 }; 36 37 struct device *platform_profile_register(struct device *dev, const char *name, 38 void *drvdata, 39 const struct platform_profile_ops *ops); 40 int platform_profile_remove(struct device *dev); 41 struct device *devm_platform_profile_register(struct device *dev, const char *name, 42 void *drvdata, 43 const struct platform_profile_ops *ops); 44 int platform_profile_cycle(void); 45 void platform_profile_notify(struct device *dev); 46 47 #endif /*_PLATFORM_PROFILE_H_*/ 48