#include <linux/cpufreq.h>
#include <linux/cpu_cooling.h>
#include <linux/device.h>
#include <linux/interrupt.h>
#include <linux/kernel.h>
#include <linux/mfd/syscon.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/thermal.h>
#include <linux/nvmem-consumer.h>
#define IMX6_MISC0 0x0150
#define IMX6_MISC0_REFTOP_SELBIASOFF (1 << 3)
#define IMX6_MISC1 0x0160
#define IMX6_MISC1_IRQ_TEMPHIGH (1 << 29)
#define IMX6_MISC1_IRQ_TEMPLOW (1 << 28)
#define IMX6_MISC1_IRQ_TEMPPANIC (1 << 27)
#define IMX6_TEMPSENSE0 0x0180
#define IMX6_TEMPSENSE0_ALARM_VALUE_SHIFT 20
#define IMX6_TEMPSENSE0_ALARM_VALUE_MASK (0xfff << 20)
#define IMX6_TEMPSENSE0_TEMP_CNT_SHIFT 8
#define IMX6_TEMPSENSE0_TEMP_CNT_MASK (0xfff << 8)
#define IMX6_TEMPSENSE0_FINISHED (1 << 2)
#define IMX6_TEMPSENSE0_MEASURE_TEMP (1 << 1)
#define IMX6_TEMPSENSE0_POWER_DOWN (1 << 0)
#define IMX6_TEMPSENSE1 0x0190
#define IMX6_TEMPSENSE1_MEASURE_FREQ 0xffff
#define IMX6_TEMPSENSE1_MEASURE_FREQ_SHIFT 0
#define OCOTP_MEM0 0x0480
#define OCOTP_ANA1 0x04e0
#define IMX6_TEMPSENSE2 0x0290
#define IMX6_TEMPSENSE2_LOW_VALUE_SHIFT 0
#define IMX6_TEMPSENSE2_LOW_VALUE_MASK 0xfff
#define IMX6_TEMPSENSE2_PANIC_VALUE_SHIFT 16
#define IMX6_TEMPSENSE2_PANIC_VALUE_MASK 0xfff0000
#define IMX7_ANADIG_DIGPROG 0x800
#define IMX7_TEMPSENSE0 0x300
#define IMX7_TEMPSENSE0_PANIC_ALARM_SHIFT 18
#define IMX7_TEMPSENSE0_PANIC_ALARM_MASK (0x1ff << 18)
#define IMX7_TEMPSENSE0_HIGH_ALARM_SHIFT 9
#define IMX7_TEMPSENSE0_HIGH_ALARM_MASK (0x1ff << 9)
#define IMX7_TEMPSENSE0_LOW_ALARM_SHIFT 0
#define IMX7_TEMPSENSE0_LOW_ALARM_MASK 0x1ff
#define IMX7_TEMPSENSE1 0x310
#define IMX7_TEMPSENSE1_MEASURE_FREQ_SHIFT 16
#define IMX7_TEMPSENSE1_MEASURE_FREQ_MASK (0xffff << 16)
#define IMX7_TEMPSENSE1_FINISHED (1 << 11)
#define IMX7_TEMPSENSE1_MEASURE_TEMP (1 << 10)
#define IMX7_TEMPSENSE1_POWER_DOWN (1 << 9)
#define IMX7_TEMPSENSE1_TEMP_VALUE_SHIFT 0
#define IMX7_TEMPSENSE1_TEMP_VALUE_MASK 0x1ff
#define IMX_POLLING_DELAY 2000
#define IMX_PASSIVE_DELAY 1000