cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

st_thermal.h (3054B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * ST Thermal Sensor Driver for STi series of SoCs
      4 * Author: Ajit Pal Singh <ajitpal.singh@st.com>
      5 *
      6 * Copyright (C) 2003-2014 STMicroelectronics (R&D) Limited
      7 */
      8
      9#ifndef __STI_THERMAL_SYSCFG_H
     10#define __STI_THERMAL_SYSCFG_H
     11
     12#include <linux/interrupt.h>
     13#include <linux/platform_device.h>
     14#include <linux/regmap.h>
     15#include <linux/thermal.h>
     16
     17enum st_thermal_regfield_ids {
     18	INT_THRESH_HI = 0, /* Top two regfield IDs are mutually exclusive */
     19	TEMP_PWR = 0,
     20	DCORRECT,
     21	OVERFLOW,
     22	DATA,
     23	INT_ENABLE,
     24
     25	MAX_REGFIELDS
     26};
     27
     28/* Thermal sensor power states */
     29enum st_thermal_power_state {
     30	POWER_OFF = 0,
     31	POWER_ON
     32};
     33
     34struct st_thermal_sensor;
     35
     36/**
     37 * Description of private thermal sensor ops.
     38 *
     39 * @power_ctrl:		Function for powering on/off a sensor. Clock to the
     40 *			sensor is also controlled from this function.
     41 * @alloc_regfields: 	Allocate regmap register fields, specific to a sensor.
     42 * @do_memmap_regmap: 	Memory map the thermal register space and init regmap
     43 *			instance or find regmap instance.
     44 * @register_irq: 	Register an interrupt handler for a sensor.
     45 */
     46struct st_thermal_sensor_ops {
     47	int (*power_ctrl)(struct st_thermal_sensor *, enum st_thermal_power_state);
     48	int (*alloc_regfields)(struct st_thermal_sensor *);
     49	int (*regmap_init)(struct st_thermal_sensor *);
     50	int (*register_enable_irq)(struct st_thermal_sensor *);
     51	int (*enable_irq)(struct st_thermal_sensor *);
     52};
     53
     54/**
     55 * Description of thermal driver compatible data.
     56 *
     57 * @reg_fields:		Pointer to the regfields array for a sensor.
     58 * @sys_compat:		Pointer to the syscon node compatible string.
     59 * @ops: 		Pointer to private thermal ops for a sensor.
     60 * @calibration_val: 	Default calibration value to be written to the DCORRECT
     61 *			register field for a sensor.
     62 * @temp_adjust_val: 	Value to be added/subtracted from the data read from
     63 *			the sensor. If value needs to be added please provide a
     64 *			positive value and if it is to be subtracted please
     65 * 			provide a negative value.
     66 * @crit_temp: 		The temperature beyond which the SoC should be shutdown
     67 * 			to prevent damage.
     68 */
     69struct st_thermal_compat_data {
     70	char *sys_compat;
     71	const struct reg_field *reg_fields;
     72	const struct st_thermal_sensor_ops *ops;
     73	unsigned int calibration_val;
     74	int temp_adjust_val;
     75	int crit_temp;
     76};
     77
     78struct st_thermal_sensor {
     79	struct device *dev;
     80	struct thermal_zone_device *thermal_dev;
     81	const struct st_thermal_sensor_ops *ops;
     82	const struct st_thermal_compat_data *cdata;
     83	struct clk *clk;
     84	struct regmap *regmap;
     85	struct regmap_field *pwr;
     86	struct regmap_field *dcorrect;
     87	struct regmap_field *overflow;
     88	struct regmap_field *temp_data;
     89	struct regmap_field *int_thresh_hi;
     90	struct regmap_field *int_enable;
     91	int irq;
     92	void __iomem *mmio_base;
     93};
     94
     95extern int st_thermal_register(struct platform_device *pdev,
     96			       const struct of_device_id *st_thermal_of_match);
     97extern int st_thermal_unregister(struct platform_device *pdev);
     98extern const struct dev_pm_ops st_thermal_pm_ops;
     99
    100#endif /* __STI_RESET_SYSCFG_H */