Skip to content

Commit

Permalink
thermal: Add mode helpers
Browse files Browse the repository at this point in the history
Prepare for making the drivers not access tzd's private members.

Signed-off-by: Andrzej Pietrasiewicz <[email protected]>
Reviewed-by: Bartlomiej Zolnierkiewicz <[email protected]>
[staticize thermal_zone_device_set_mode()]
Signed-off-by: kernel test robot <[email protected]>
Signed-off-by: Daniel Lezcano <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
  • Loading branch information
andrzejtp authored and dlezcano committed Jun 29, 2020
1 parent 1ee1482 commit ac5d9ec
Show file tree
Hide file tree
Showing 2 changed files with 66 additions and 0 deletions.
53 changes: 53 additions & 0 deletions drivers/thermal/thermal_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -459,6 +459,59 @@ static void thermal_zone_device_reset(struct thermal_zone_device *tz)
thermal_zone_device_init(tz);
}

static int thermal_zone_device_set_mode(struct thermal_zone_device *tz,
enum thermal_device_mode mode)
{
int ret = 0;

mutex_lock(&tz->lock);

/* do nothing if mode isn't changing */
if (mode == tz->mode) {
mutex_unlock(&tz->lock);

return ret;
}

if (tz->ops->set_mode)
ret = tz->ops->set_mode(tz, mode);

if (!ret)
tz->mode = mode;

mutex_unlock(&tz->lock);

thermal_zone_device_update(tz, THERMAL_EVENT_UNSPECIFIED);

return ret;
}

int thermal_zone_device_enable(struct thermal_zone_device *tz)
{
return thermal_zone_device_set_mode(tz, THERMAL_DEVICE_ENABLED);
}
EXPORT_SYMBOL_GPL(thermal_zone_device_enable);

int thermal_zone_device_disable(struct thermal_zone_device *tz)
{
return thermal_zone_device_set_mode(tz, THERMAL_DEVICE_DISABLED);
}
EXPORT_SYMBOL_GPL(thermal_zone_device_disable);

int thermal_zone_device_is_enabled(struct thermal_zone_device *tz)
{
enum thermal_device_mode mode;

mutex_lock(&tz->lock);

mode = tz->mode;

mutex_unlock(&tz->lock);

return mode == THERMAL_DEVICE_ENABLED;
}
EXPORT_SYMBOL_GPL(thermal_zone_device_is_enabled);

void thermal_zone_device_update(struct thermal_zone_device *tz,
enum thermal_notify_event event)
{
Expand Down
13 changes: 13 additions & 0 deletions include/linux/thermal.h
Original file line number Diff line number Diff line change
Expand Up @@ -416,6 +416,9 @@ int thermal_zone_get_offset(struct thermal_zone_device *tz);

void thermal_cdev_update(struct thermal_cooling_device *);
void thermal_notify_framework(struct thermal_zone_device *, int);
int thermal_zone_device_enable(struct thermal_zone_device *tz);
int thermal_zone_device_disable(struct thermal_zone_device *tz);
int thermal_zone_device_is_enabled(struct thermal_zone_device *tz);
#else
static inline struct thermal_zone_device *thermal_zone_device_register(
const char *type, int trips, int mask, void *devdata,
Expand Down Expand Up @@ -463,6 +466,16 @@ static inline void thermal_cdev_update(struct thermal_cooling_device *cdev)
static inline void thermal_notify_framework(struct thermal_zone_device *tz,
int trip)
{ }

static inline int thermal_zone_device_enable(struct thermal_zone_device *tz)
{ return -ENODEV; }

static inline int thermal_zone_device_disable(struct thermal_zone_device *tz)
{ return -ENODEV; }

static inline int
thermal_zone_device_is_enabled(struct thermal_zone_device *tz)
{ return -ENODEV; }
#endif /* CONFIG_THERMAL */

#endif /* __THERMAL_H__ */

0 comments on commit ac5d9ec

Please sign in to comment.