1*bf3608f3SIwona Winiarska /* SPDX-License-Identifier: GPL-2.0-only */ 2*bf3608f3SIwona Winiarska /* Copyright (c) 2021 Intel Corporation */ 3*bf3608f3SIwona Winiarska 4*bf3608f3SIwona Winiarska #include <linux/mutex.h> 5*bf3608f3SIwona Winiarska #include <linux/types.h> 6*bf3608f3SIwona Winiarska 7*bf3608f3SIwona Winiarska #ifndef __PECI_HWMON_COMMON_H 8*bf3608f3SIwona Winiarska #define __PECI_HWMON_COMMON_H 9*bf3608f3SIwona Winiarska 10*bf3608f3SIwona Winiarska #define PECI_HWMON_UPDATE_INTERVAL HZ 11*bf3608f3SIwona Winiarska 12*bf3608f3SIwona Winiarska /** 13*bf3608f3SIwona Winiarska * struct peci_sensor_state - PECI state information 14*bf3608f3SIwona Winiarska * @valid: flag to indicate the sensor value is valid 15*bf3608f3SIwona Winiarska * @last_updated: time of the last update in jiffies 16*bf3608f3SIwona Winiarska * @lock: mutex to protect sensor access 17*bf3608f3SIwona Winiarska */ 18*bf3608f3SIwona Winiarska struct peci_sensor_state { 19*bf3608f3SIwona Winiarska bool valid; 20*bf3608f3SIwona Winiarska unsigned long last_updated; 21*bf3608f3SIwona Winiarska struct mutex lock; /* protect sensor access */ 22*bf3608f3SIwona Winiarska }; 23*bf3608f3SIwona Winiarska 24*bf3608f3SIwona Winiarska /** 25*bf3608f3SIwona Winiarska * struct peci_sensor_data - PECI sensor information 26*bf3608f3SIwona Winiarska * @value: sensor value in milli units 27*bf3608f3SIwona Winiarska * @state: sensor update state 28*bf3608f3SIwona Winiarska */ 29*bf3608f3SIwona Winiarska 30*bf3608f3SIwona Winiarska struct peci_sensor_data { 31*bf3608f3SIwona Winiarska s32 value; 32*bf3608f3SIwona Winiarska struct peci_sensor_state state; 33*bf3608f3SIwona Winiarska }; 34*bf3608f3SIwona Winiarska 35*bf3608f3SIwona Winiarska /** 36*bf3608f3SIwona Winiarska * peci_sensor_need_update() - check whether sensor update is needed or not 37*bf3608f3SIwona Winiarska * @sensor: pointer to sensor data struct 38*bf3608f3SIwona Winiarska * 39*bf3608f3SIwona Winiarska * Return: true if update is needed, false if not. 40*bf3608f3SIwona Winiarska */ 41*bf3608f3SIwona Winiarska peci_sensor_need_update(struct peci_sensor_state * state)42*bf3608f3SIwona Winiarskastatic inline bool peci_sensor_need_update(struct peci_sensor_state *state) 43*bf3608f3SIwona Winiarska { 44*bf3608f3SIwona Winiarska return !state->valid || 45*bf3608f3SIwona Winiarska time_after(jiffies, state->last_updated + PECI_HWMON_UPDATE_INTERVAL); 46*bf3608f3SIwona Winiarska } 47*bf3608f3SIwona Winiarska 48*bf3608f3SIwona Winiarska /** 49*bf3608f3SIwona Winiarska * peci_sensor_mark_updated() - mark the sensor is updated 50*bf3608f3SIwona Winiarska * @sensor: pointer to sensor data struct 51*bf3608f3SIwona Winiarska */ peci_sensor_mark_updated(struct peci_sensor_state * state)52*bf3608f3SIwona Winiarskastatic inline void peci_sensor_mark_updated(struct peci_sensor_state *state) 53*bf3608f3SIwona Winiarska { 54*bf3608f3SIwona Winiarska state->valid = true; 55*bf3608f3SIwona Winiarska state->last_updated = jiffies; 56*bf3608f3SIwona Winiarska } 57*bf3608f3SIwona Winiarska 58*bf3608f3SIwona Winiarska #endif /* __PECI_HWMON_COMMON_H */ 59