/* SPDX-License-Identifier: GPL-2.0 */ /* * ESWIN EIC7700 Voltage, Temperature sensor driver * * Copyright 2026, Beijing ESWIN Computing Technology Co., Ltd. */ #ifndef __HWMON_EIC7700_PVT_H__ #define __HWMON_EIC7700_PVT_H__ #include #include #include #include /* ESWIN EIC7700 PVT registers and their bitfields */ #define PVT_TRIM 0x04 #define PVT_MODE 0x08 #define PVT_MODE_MASK GENMASK(2, 0) #define PVT_CTRL_MODE_TEMP 0x0 #define PVT_CTRL_MODE_VOLT 0x4 #define PVT_ENA 0x0c #define PVT_ENA_EN BIT(0) #define PVT_INT 0x10 #define PVT_INT_STAT BIT(0) #define PVT_INT_CLR BIT(1) #define PVT_DATA 0x14 #define PVT_DATA_OUT GENMASK(9, 0) /* * PVT sensors-related limits and default values * @PVT_TEMP_CHS: Number of temperature hwmon channels. * @PVT_VOLT_CHS: Number of voltage hwmon channels. * @PVT_TRIM_DEF: Default temperature sensor trim value (set a proper value * when one is determined for ESWIN EIC7700 SoC). * @PVT_TOUT_MIN: Minimal timeout between samples in nanoseconds. */ #define PVT_TEMP_CHS 1 #define PVT_VOLT_CHS 1 #define PVT_TRIM_DEF 0 #define PVT_TOUT_MIN (NSEC_PER_SEC / 3000) /* * enum pvt_sensor_type - ESWIN EIC7700 PVT sensor types (correspond to each PVT * sampling mode) * @PVT_TEMP: PVT Temperature sensor. * @PVT_VOLT: PVT Voltage sensor. */ enum pvt_sensor_type { PVT_TEMP = 0, PVT_VOLT }; #define PVT_CLK_NUM 2 /* * struct pvt_sensor_info - ESWIN EIC7700 PVT sensor informational structure * @channel: Sensor channel ID. * @label: hwmon sensor label. * @mode: PVT mode corresponding to the channel. * @type: Sensor type. */ struct pvt_sensor_info { int channel; const char *label; u32 mode; enum hwmon_sensor_types type; }; #define PVT_SENSOR_INFO(_ch, _label, _type, _mode) \ { \ .channel = _ch, \ .label = _label, \ .mode = PVT_CTRL_MODE_ ##_mode, \ .type = _type, \ } /* * struct pvt_hwmon - Eswin EIC7700 PVT private data * @dev: device structure of the PVT platform device. * @hwmon: hwmon device structure. * @regs: pointer to the Eswin EIC7700 PVT registers region. * @irq: PVT events IRQ number. * @clks: PVT clock descriptors. * @data_cache: data cache in raw format. * @conversion: data conversion completion. * @timeout: conversion timeout. */ struct pvt_hwmon { struct device *dev; struct device *hwmon; void __iomem *regs; int irq; struct clk_bulk_data clks[PVT_CLK_NUM]; u32 data_cache; struct completion conversion; ktime_t timeout; }; #endif /* __HWMON_EIC7700_PVT_H__ */