at master 2.1 kB view raw
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 20enum 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_MAX_POWER, 28 PLATFORM_PROFILE_CUSTOM, 29 PLATFORM_PROFILE_LAST, /*must always be last */ 30}; 31 32/** 33 * struct platform_profile_ops - platform profile operations 34 * @probe: Callback to setup choices available to the new class device. These 35 * choices will only be enforced when setting a new profile, not when 36 * getting the current one. 37 * @hidden_choices: Callback to setup choices that are not visible to the user 38 * but can be set by the driver. 39 * @profile_get: Callback that will be called when showing the current platform 40 * profile in sysfs. 41 * @profile_set: Callback that will be called when storing a new platform 42 * profile in sysfs. 43 */ 44struct platform_profile_ops { 45 int (*probe)(void *drvdata, unsigned long *choices); 46 int (*hidden_choices)(void *drvdata, unsigned long *choices); 47 int (*profile_get)(struct device *dev, enum platform_profile_option *profile); 48 int (*profile_set)(struct device *dev, enum platform_profile_option profile); 49}; 50 51struct device *platform_profile_register(struct device *dev, const char *name, 52 void *drvdata, 53 const struct platform_profile_ops *ops); 54void platform_profile_remove(struct device *dev); 55struct device *devm_platform_profile_register(struct device *dev, const char *name, 56 void *drvdata, 57 const struct platform_profile_ops *ops); 58int platform_profile_cycle(void); 59void platform_profile_notify(struct device *dev); 60 61#endif /*_PLATFORM_PROFILE_H_*/