#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/delay.h>
#include <linux/debugfs.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/iopoll.h>
#include <linux/kernel.h>
#include <linux/nvmem-consumer.h>
#include <linux/of.h>
#include <linux/platform_device.h>
#include <linux/reset.h>
#include <linux/thermal.h>
#include <dt-bindings/thermal/mediatek,lvts-thermal.h>
#include "../thermal_hwmon.h"
#define LVTS_MONCTL0(__base) …
#define LVTS_MONCTL1(__base) …
#define LVTS_MONCTL2(__base) …
#define LVTS_MONINT(__base) …
#define LVTS_MONINTSTS(__base) …
#define LVTS_MONIDET0(__base) …
#define LVTS_MONIDET1(__base) …
#define LVTS_MONIDET2(__base) …
#define LVTS_MONIDET3(__base) …
#define LVTS_H2NTHRE(__base) …
#define LVTS_HTHRE(__base) …
#define LVTS_OFFSETH(__base) …
#define LVTS_OFFSETL(__base) …
#define LVTS_MSRCTL0(__base) …
#define LVTS_MSRCTL1(__base) …
#define LVTS_TSSEL(__base) …
#define LVTS_CALSCALE(__base) …
#define LVTS_ID(__base) …
#define LVTS_CONFIG(__base) …
#define LVTS_EDATA00(__base) …
#define LVTS_EDATA01(__base) …
#define LVTS_EDATA02(__base) …
#define LVTS_EDATA03(__base) …
#define LVTS_MSR0(__base) …
#define LVTS_MSR1(__base) …
#define LVTS_MSR2(__base) …
#define LVTS_MSR3(__base) …
#define LVTS_IMMD0(__base) …
#define LVTS_IMMD1(__base) …
#define LVTS_IMMD2(__base) …
#define LVTS_IMMD3(__base) …
#define LVTS_PROTCTL(__base) …
#define LVTS_PROTTA(__base) …
#define LVTS_PROTTB(__base) …
#define LVTS_PROTTC(__base) …
#define LVTS_CLKEN(__base) …
#define LVTS_PERIOD_UNIT …
#define LVTS_GROUP_INTERVAL …
#define LVTS_FILTER_INTERVAL …
#define LVTS_SENSOR_INTERVAL …
#define LVTS_HW_FILTER …
#define LVTS_TSSEL_CONF …
#define LVTS_CALSCALE_CONF …
#define LVTS_MONINT_CONF …
#define LVTS_MONINT_OFFSET_SENSOR0 …
#define LVTS_MONINT_OFFSET_SENSOR1 …
#define LVTS_MONINT_OFFSET_SENSOR2 …
#define LVTS_MONINT_OFFSET_SENSOR3 …
#define LVTS_INT_SENSOR0 …
#define LVTS_INT_SENSOR1 …
#define LVTS_INT_SENSOR2 …
#define LVTS_INT_SENSOR3 …
#define LVTS_SENSOR_MAX …
#define LVTS_GOLDEN_TEMP_MAX …
#define LVTS_GOLDEN_TEMP_DEFAULT …
#define LVTS_COEFF_A_MT8195 …
#define LVTS_COEFF_B_MT8195 …
#define LVTS_COEFF_A_MT7988 …
#define LVTS_COEFF_B_MT7988 …
#define LVTS_MSR_IMMEDIATE_MODE …
#define LVTS_MSR_FILTERED_MODE …
#define LVTS_MSR_READ_TIMEOUT_US …
#define LVTS_MSR_READ_WAIT_US …
#define LVTS_HW_TSHUT_TEMP …
#define LVTS_MINIMUM_THRESHOLD …
static int golden_temp = …;
static int golden_temp_offset;
struct lvts_sensor_data { … };
struct lvts_ctrl_data { … };
#define VALID_SENSOR_MAP(s0, s1, s2, s3) …
#define lvts_for_each_valid_sensor(i, lvts_ctrl) …
struct lvts_data { … };
struct lvts_sensor { … };
struct lvts_ctrl { … };
struct lvts_domain { … };
#ifdef CONFIG_MTK_LVTS_THERMAL_DEBUGFS
#define LVTS_DEBUG_FS_REGS(__reg) …
static const struct debugfs_reg32 lvts_regs[] = …;
static int lvts_debugfs_init(struct device *dev, struct lvts_domain *lvts_td)
{ … }
static void lvts_debugfs_exit(struct lvts_domain *lvts_td)
{ … }
#else
static inline int lvts_debugfs_init(struct device *dev,
struct lvts_domain *lvts_td)
{
return 0;
}
static void lvts_debugfs_exit(struct lvts_domain *lvts_td) { }
#endif
static int lvts_raw_to_temp(u32 raw_temp, int temp_factor)
{ … }
static u32 lvts_temp_to_raw(int temperature, int temp_factor)
{ … }
static int lvts_get_temp(struct thermal_zone_device *tz, int *temp)
{ … }
static void lvts_update_irq_mask(struct lvts_ctrl *lvts_ctrl)
{ … }
static bool lvts_should_update_thresh(struct lvts_ctrl *lvts_ctrl, int high)
{ … }
static int lvts_set_trips(struct thermal_zone_device *tz, int low, int high)
{ … }
static irqreturn_t lvts_ctrl_irq_handler(struct lvts_ctrl *lvts_ctrl)
{ … }
static irqreturn_t lvts_irq_handler(int irq, void *data)
{ … }
static struct thermal_zone_device_ops lvts_ops = …;
static int lvts_sensor_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
const struct lvts_ctrl_data *lvts_ctrl_data)
{ … }
static int lvts_calibration_init(struct device *dev, struct lvts_ctrl *lvts_ctrl,
const struct lvts_ctrl_data *lvts_ctrl_data,
u8 *efuse_calibration,
size_t calib_len)
{ … }
static int lvts_calibration_read(struct device *dev, struct lvts_domain *lvts_td,
const struct lvts_data *lvts_data)
{ … }
static int lvts_golden_temp_init(struct device *dev, u8 *calib,
const struct lvts_data *lvts_data)
{ … }
static int lvts_ctrl_init(struct device *dev, struct lvts_domain *lvts_td,
const struct lvts_data *lvts_data)
{ … }
static void lvts_write_config(struct lvts_ctrl *lvts_ctrl, u32 *cmds, int nr_cmds)
{ … }
static int lvts_irq_init(struct lvts_ctrl *lvts_ctrl)
{ … }
static int lvts_domain_reset(struct device *dev, struct reset_control *reset)
{ … }
static int lvts_ctrl_set_enable(struct lvts_ctrl *lvts_ctrl, int enable)
{ … }
static int lvts_ctrl_connect(struct device *dev, struct lvts_ctrl *lvts_ctrl)
{ … }
static int lvts_ctrl_initialize(struct device *dev, struct lvts_ctrl *lvts_ctrl)
{ … }
static int lvts_ctrl_calibrate(struct device *dev, struct lvts_ctrl *lvts_ctrl)
{ … }
static int lvts_ctrl_configure(struct device *dev, struct lvts_ctrl *lvts_ctrl)
{ … }
static int lvts_ctrl_start(struct device *dev, struct lvts_ctrl *lvts_ctrl)
{ … }
static int lvts_domain_init(struct device *dev, struct lvts_domain *lvts_td,
const struct lvts_data *lvts_data)
{ … }
static int lvts_probe(struct platform_device *pdev)
{ … }
static void lvts_remove(struct platform_device *pdev)
{ … }
static const struct lvts_ctrl_data mt7988_lvts_ap_data_ctrl[] = …;
static int lvts_suspend(struct device *dev)
{ … }
static int lvts_resume(struct device *dev)
{ … }
static const struct lvts_ctrl_data mt8186_lvts_data_ctrl[] = …;
static const struct lvts_ctrl_data mt8188_lvts_mcu_data_ctrl[] = …;
static const struct lvts_ctrl_data mt8188_lvts_ap_data_ctrl[] = …;
static const struct lvts_ctrl_data mt8192_lvts_mcu_data_ctrl[] = …;
static const struct lvts_ctrl_data mt8192_lvts_ap_data_ctrl[] = …;
static const struct lvts_ctrl_data mt8195_lvts_mcu_data_ctrl[] = …;
static const struct lvts_ctrl_data mt8195_lvts_ap_data_ctrl[] = …;
static const struct lvts_data mt7988_lvts_ap_data = …;
static const struct lvts_data mt8186_lvts_data = …;
static const struct lvts_data mt8188_lvts_mcu_data = …;
static const struct lvts_data mt8188_lvts_ap_data = …;
static const struct lvts_data mt8192_lvts_mcu_data = …;
static const struct lvts_data mt8192_lvts_ap_data = …;
static const struct lvts_data mt8195_lvts_mcu_data = …;
static const struct lvts_data mt8195_lvts_ap_data = …;
static const struct of_device_id lvts_of_match[] = …;
MODULE_DEVICE_TABLE(of, lvts_of_match);
static const struct dev_pm_ops lvts_pm_ops = …;
static struct platform_driver lvts_driver = …;
module_platform_driver(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
MODULE_LICENSE(…) …;