|
@@ -63,6 +63,7 @@
|
|
|
|
|
|
struct thermal_zone_device;
|
|
|
struct thermal_cooling_device;
|
|
|
+struct thermal_instance;
|
|
|
|
|
|
enum thermal_device_mode {
|
|
|
THERMAL_DEVICE_DISABLED = 0,
|
|
@@ -116,6 +117,12 @@ struct thermal_cooling_device_ops {
|
|
|
int (*get_max_state) (struct thermal_cooling_device *, unsigned long *);
|
|
|
int (*get_cur_state) (struct thermal_cooling_device *, unsigned long *);
|
|
|
int (*set_cur_state) (struct thermal_cooling_device *, unsigned long);
|
|
|
+ int (*get_requested_power)(struct thermal_cooling_device *,
|
|
|
+ struct thermal_zone_device *, u32 *);
|
|
|
+ int (*state2power)(struct thermal_cooling_device *,
|
|
|
+ struct thermal_zone_device *, unsigned long, u32 *);
|
|
|
+ int (*power2state)(struct thermal_cooling_device *,
|
|
|
+ struct thermal_zone_device *, u32, unsigned long *);
|
|
|
};
|
|
|
|
|
|
struct thermal_cooling_device {
|
|
@@ -331,6 +338,16 @@ void thermal_zone_of_sensor_unregister(struct device *dev,
|
|
|
#endif
|
|
|
|
|
|
#if IS_ENABLED(CONFIG_THERMAL)
|
|
|
+static inline bool cdev_is_power_actor(struct thermal_cooling_device *cdev)
|
|
|
+{
|
|
|
+ return cdev->ops->get_requested_power && cdev->ops->state2power &&
|
|
|
+ cdev->ops->power2state;
|
|
|
+}
|
|
|
+
|
|
|
+int power_actor_get_max_power(struct thermal_cooling_device *,
|
|
|
+ struct thermal_zone_device *tz, u32 *max_power);
|
|
|
+int power_actor_set_power(struct thermal_cooling_device *,
|
|
|
+ struct thermal_instance *, u32);
|
|
|
struct thermal_zone_device *thermal_zone_device_register(const char *, int, int,
|
|
|
void *, struct thermal_zone_device_ops *,
|
|
|
const struct thermal_zone_params *, int, int);
|
|
@@ -359,6 +376,14 @@ struct thermal_instance *get_thermal_instance(struct thermal_zone_device *,
|
|
|
void thermal_cdev_update(struct thermal_cooling_device *);
|
|
|
void thermal_notify_framework(struct thermal_zone_device *, int);
|
|
|
#else
|
|
|
+static inline bool cdev_is_power_actor(struct thermal_cooling_device *cdev)
|
|
|
+{ return false; }
|
|
|
+static inline int power_actor_get_max_power(struct thermal_cooling_device *cdev,
|
|
|
+ struct thermal_zone_device *tz, u32 *max_power)
|
|
|
+{ return 0; }
|
|
|
+static inline int power_actor_set_power(struct thermal_cooling_device *cdev,
|
|
|
+ struct thermal_instance *tz, u32 power)
|
|
|
+{ return 0; }
|
|
|
static inline struct thermal_zone_device *thermal_zone_device_register(
|
|
|
const char *type, int trips, int mask, void *devdata,
|
|
|
struct thermal_zone_device_ops *ops,
|