162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* Copyright (c) 2021 Intel Corporation */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <linux/mutex.h> 562306a36Sopenharmony_ci#include <linux/types.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#ifndef __PECI_HWMON_COMMON_H 862306a36Sopenharmony_ci#define __PECI_HWMON_COMMON_H 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define PECI_HWMON_UPDATE_INTERVAL HZ 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/** 1362306a36Sopenharmony_ci * struct peci_sensor_state - PECI state information 1462306a36Sopenharmony_ci * @valid: flag to indicate the sensor value is valid 1562306a36Sopenharmony_ci * @last_updated: time of the last update in jiffies 1662306a36Sopenharmony_ci * @lock: mutex to protect sensor access 1762306a36Sopenharmony_ci */ 1862306a36Sopenharmony_cistruct peci_sensor_state { 1962306a36Sopenharmony_ci bool valid; 2062306a36Sopenharmony_ci unsigned long last_updated; 2162306a36Sopenharmony_ci struct mutex lock; /* protect sensor access */ 2262306a36Sopenharmony_ci}; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/** 2562306a36Sopenharmony_ci * struct peci_sensor_data - PECI sensor information 2662306a36Sopenharmony_ci * @value: sensor value in milli units 2762306a36Sopenharmony_ci * @state: sensor update state 2862306a36Sopenharmony_ci */ 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_cistruct peci_sensor_data { 3162306a36Sopenharmony_ci s32 value; 3262306a36Sopenharmony_ci struct peci_sensor_state state; 3362306a36Sopenharmony_ci}; 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/** 3662306a36Sopenharmony_ci * peci_sensor_need_update() - check whether sensor update is needed or not 3762306a36Sopenharmony_ci * @sensor: pointer to sensor data struct 3862306a36Sopenharmony_ci * 3962306a36Sopenharmony_ci * Return: true if update is needed, false if not. 4062306a36Sopenharmony_ci */ 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_cistatic inline bool peci_sensor_need_update(struct peci_sensor_state *state) 4362306a36Sopenharmony_ci{ 4462306a36Sopenharmony_ci return !state->valid || 4562306a36Sopenharmony_ci time_after(jiffies, state->last_updated + PECI_HWMON_UPDATE_INTERVAL); 4662306a36Sopenharmony_ci} 4762306a36Sopenharmony_ci 4862306a36Sopenharmony_ci/** 4962306a36Sopenharmony_ci * peci_sensor_mark_updated() - mark the sensor is updated 5062306a36Sopenharmony_ci * @sensor: pointer to sensor data struct 5162306a36Sopenharmony_ci */ 5262306a36Sopenharmony_cistatic inline void peci_sensor_mark_updated(struct peci_sensor_state *state) 5362306a36Sopenharmony_ci{ 5462306a36Sopenharmony_ci state->valid = true; 5562306a36Sopenharmony_ci state->last_updated = jiffies; 5662306a36Sopenharmony_ci} 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#endif /* __PECI_HWMON_COMMON_H */ 59