diff --git a/drivers/thermal/hisi_thermal.c b/drivers/thermal/hisi_thermal.c
index 7266ce7..7c5d464 100644
--- a/drivers/thermal/hisi_thermal.c
+++ b/drivers/thermal/hisi_thermal.c
@@ -23,103 +23,79 @@
 #include <linux/module.h>
 #include <linux/platform_device.h>
 #include <linux/io.h>
-#include <linux/of_device.h>
 
 #include "thermal_core.h"
 
-#define HI6220_TEMP0_LAG			(0x0)
-#define HI6220_TEMP0_TH				(0x4)
-#define HI6220_TEMP0_RST_TH			(0x8)
-#define HI6220_TEMP0_CFG			(0xC)
-#define HI6220_TEMP0_CFG_SS_MSK			(0xF000)
-#define HI6220_TEMP0_CFG_HDAK_MSK		(0x30)
-#define HI6220_TEMP0_EN				(0x10)
-#define HI6220_TEMP0_INT_EN			(0x14)
-#define HI6220_TEMP0_INT_CLR			(0x18)
-#define HI6220_TEMP0_RST_MSK			(0x1C)
-#define HI6220_TEMP0_VALUE			(0x28)
+#define TEMP0_LAG			(0x0)
+#define TEMP0_TH			(0x4)
+#define TEMP0_RST_TH			(0x8)
+#define TEMP0_CFG			(0xC)
+#define TEMP0_CFG_SS_MSK		(0xF000)
+#define TEMP0_CFG_HDAK_MSK		(0x30)
+#define TEMP0_EN			(0x10)
+#define TEMP0_INT_EN			(0x14)
+#define TEMP0_INT_CLR			(0x18)
+#define TEMP0_RST_MSK			(0x1C)
+#define TEMP0_VALUE			(0x28)
 
-#define HI3660_OFFSET(chan)		((chan) * 0x40)
-#define HI3660_TEMP(chan)		(HI3660_OFFSET(chan) + 0x1C)
-#define HI3660_TH(chan)			(HI3660_OFFSET(chan) + 0x20)
-#define HI3660_LAG(chan)		(HI3660_OFFSET(chan) + 0x28)
-#define HI3660_INT_EN(chan)		(HI3660_OFFSET(chan) + 0x2C)
-#define HI3660_INT_CLR(chan)		(HI3660_OFFSET(chan) + 0x30)
+#define HISI_TEMP_BASE			(-60000)
+#define HISI_TEMP_RESET			(100000)
+#define HISI_TEMP_STEP			(784)
+#define HISI_TEMP_LAG			(3500)
 
-#define HI6220_TEMP_BASE			(-60000)
-#define HI6220_TEMP_RESET			(100000)
-#define HI6220_TEMP_STEP			(785)
-#define HI6220_TEMP_LAG				(3500)
-
-#define HI3660_TEMP_BASE		(-63780)
-#define HI3660_TEMP_STEP		(205)
-#define HI3660_TEMP_LAG			(4000)
-
-#define HI6220_DEFAULT_SENSOR		2
-#define HI3660_DEFAULT_SENSOR		1
+#define HISI_MAX_SENSORS		4
+#define HISI_DEFAULT_SENSOR		2
 
 struct hisi_thermal_sensor {
+	struct hisi_thermal_data *thermal;
 	struct thermal_zone_device *tzd;
+
+	long sensor_temp;
 	uint32_t id;
 	uint32_t thres_temp;
 };
 
 struct hisi_thermal_data {
-	int (*get_temp)(struct hisi_thermal_data *data);
-	int (*enable_sensor)(struct hisi_thermal_data *data);
-	int (*disable_sensor)(struct hisi_thermal_data *data);
-	int (*irq_handler)(struct hisi_thermal_data *data);
+	struct mutex thermal_lock;    /* protects register data */
 	struct platform_device *pdev;
 	struct clk *clk;
-	struct hisi_thermal_sensor sensor;
-	void __iomem *regs;
+	struct hisi_thermal_sensor sensors;
 	int irq;
+	void __iomem *regs;
 };
 
 /*
  * The temperature computation on the tsensor is as follow:
  *	Unit: millidegree Celsius
- *	Step: 200/255 (0.7843)
+ *	Step: 255/200 (0.7843)
  *	Temperature base: -60°C
  *
- * The register is programmed in temperature steps, every step is 785
+ * The register is programmed in temperature steps, every step is 784
  * millidegree and begins at -60 000 m°C
  *
  * The temperature from the steps:
  *
- *	Temp = TempBase + (steps x 785)
+ *	Temp = TempBase + (steps x 784)
  *
  * and the steps from the temperature:
  *
- *	steps = (Temp - TempBase) / 785
+ *	steps = (Temp - TempBase) / 784
  *
  */
-static inline int hi6220_thermal_step_to_temp(int step)
+static inline int hisi_thermal_step_to_temp(int step)
 {
-	return HI6220_TEMP_BASE + (step * HI6220_TEMP_STEP);
+	return HISI_TEMP_BASE + (step * HISI_TEMP_STEP);
 }
 
-static inline int hi6220_thermal_temp_to_step(int temp)
+static inline long hisi_thermal_temp_to_step(long temp)
 {
-	return DIV_ROUND_UP(temp - HI6220_TEMP_BASE, HI6220_TEMP_STEP);
+	return (temp - HISI_TEMP_BASE) / HISI_TEMP_STEP;
 }
 
-/*
- * for Hi3660,
- *	Step: 189/922 (0.205)
- *	Temperature base: -63.780°C
- *
- * The register is programmed in temperature steps, every step is 205
- * millidegree and begins at -63 780 m°C
- */
-static inline int hi3660_thermal_step_to_temp(int step)
+static inline long hisi_thermal_round_temp(int temp)
 {
-	return HI3660_TEMP_BASE + step * HI3660_TEMP_STEP;
-}
-
-static inline int hi3660_thermal_temp_to_step(int temp)
-{
-	return DIV_ROUND_UP(temp - HI3660_TEMP_BASE, HI3660_TEMP_STEP);
+	return hisi_thermal_step_to_temp(
+		hisi_thermal_temp_to_step(temp));
 }
 
 /*
@@ -146,92 +122,51 @@ static inline int hi3660_thermal_temp_to_step(int temp)
  *
  * [0:4] : lag register
  *
- * The temperature is coded in steps, cf. HI6220_TEMP_STEP.
+ * The temperature is coded in steps, cf. HISI_TEMP_STEP.
  *
  * Min : 0x00 :  0.0 °C
  * Max : 0x1F : 24.3 °C
  *
  * The 'value' parameter is in milliCelsius.
  */
-static inline void hi6220_thermal_set_lag(void __iomem *addr, int value)
+static inline void hisi_thermal_set_lag(void __iomem *addr, int value)
 {
-	writel(DIV_ROUND_UP(value, HI6220_TEMP_STEP) & 0x1F,
-			addr + HI6220_TEMP0_LAG);
+	writel((value / HISI_TEMP_STEP) & 0x1F, addr + TEMP0_LAG);
 }
 
-static inline void hi6220_thermal_alarm_clear(void __iomem *addr, int value)
+static inline void hisi_thermal_alarm_clear(void __iomem *addr, int value)
 {
-	writel(value, addr + HI6220_TEMP0_INT_CLR);
+	writel(value, addr + TEMP0_INT_CLR);
 }
 
-static inline void hi6220_thermal_alarm_enable(void __iomem *addr, int value)
+static inline void hisi_thermal_alarm_enable(void __iomem *addr, int value)
 {
-	writel(value, addr + HI6220_TEMP0_INT_EN);
+	writel(value, addr + TEMP0_INT_EN);
 }
 
-static inline void hi6220_thermal_alarm_set(void __iomem *addr, int temp)
+static inline void hisi_thermal_alarm_set(void __iomem *addr, int temp)
 {
-	writel(hi6220_thermal_temp_to_step(temp) | 0x0FFFFFF00,
-	       addr + HI6220_TEMP0_TH);
+	writel(hisi_thermal_temp_to_step(temp) | 0x0FFFFFF00, addr + TEMP0_TH);
 }
 
-static inline void hi6220_thermal_reset_set(void __iomem *addr, int temp)
+static inline void hisi_thermal_reset_set(void __iomem *addr, int temp)
 {
-	writel(hi6220_thermal_temp_to_step(temp), addr + HI6220_TEMP0_RST_TH);
+	writel(hisi_thermal_temp_to_step(temp), addr + TEMP0_RST_TH);
 }
 
-static inline void hi6220_thermal_reset_enable(void __iomem *addr, int value)
+static inline void hisi_thermal_reset_enable(void __iomem *addr, int value)
 {
-	writel(value, addr + HI6220_TEMP0_RST_MSK);
+	writel(value, addr + TEMP0_RST_MSK);
 }
 
-static inline void hi6220_thermal_enable(void __iomem *addr, int value)
+static inline void hisi_thermal_enable(void __iomem *addr, int value)
 {
-	writel(value, addr + HI6220_TEMP0_EN);
+	writel(value, addr + TEMP0_EN);
 }
 
-static inline int hi6220_thermal_get_temperature(void __iomem *addr)
+static inline int hisi_thermal_get_temperature(void __iomem *addr)
 {
-	return hi6220_thermal_step_to_temp(readl(addr + HI6220_TEMP0_VALUE));
-}
-
-/*
- * [0:6] lag register
- *
- * The temperature is coded in steps, cf. HI3660_TEMP_STEP.
- *
- * Min : 0x00 :  0.0 °C
- * Max : 0x7F : 26.0 °C
- *
- */
-static inline void hi3660_thermal_set_lag(void __iomem *addr,
-					  int id, int value)
-{
-	writel(DIV_ROUND_UP(value, HI3660_TEMP_STEP) & 0x7F,
-			addr + HI3660_LAG(id));
-}
-
-static inline void hi3660_thermal_alarm_clear(void __iomem *addr,
-					      int id, int value)
-{
-	writel(value, addr + HI3660_INT_CLR(id));
-}
-
-static inline void hi3660_thermal_alarm_enable(void __iomem *addr,
-					       int id, int value)
-{
-	writel(value, addr + HI3660_INT_EN(id));
-}
-
-static inline void hi3660_thermal_alarm_set(void __iomem *addr,
-					    int id, int value)
-{
-	writel(value, addr + HI3660_TH(id));
-}
-
-static inline int hi3660_thermal_get_temperature(void __iomem *addr, int id)
-{
-	return hi3660_thermal_step_to_temp(readl(addr + HI3660_TEMP(id)));
+	return hisi_thermal_step_to_temp(readl(addr + TEMP0_VALUE));
 }
 
 /*
@@ -244,10 +179,10 @@ static inline int hi3660_thermal_get_temperature(void __iomem *addr, int id)
  * 0x2: remote sensor 2 (ACPU cluster 0)
  * 0x3: remote sensor 3 (G3D)
  */
-static inline void hi6220_thermal_sensor_select(void __iomem *addr, int sensor)
+static inline void hisi_thermal_sensor_select(void __iomem *addr, int sensor)
 {
-	writel((readl(addr + HI6220_TEMP0_CFG) & ~HI6220_TEMP0_CFG_SS_MSK) |
-	       (sensor << 12), addr + HI6220_TEMP0_CFG);
+	writel((readl(addr + TEMP0_CFG) & ~TEMP0_CFG_SS_MSK) |
+	       (sensor << 12), addr + TEMP0_CFG);
 }
 
 /*
@@ -260,182 +195,30 @@ static inline void hi6220_thermal_sensor_select(void __iomem *addr, int sensor)
  * 0x2 :  49.152 ms
  * 0x3 : 393.216 ms
  */
-static inline void hi6220_thermal_hdak_set(void __iomem *addr, int value)
+static inline void hisi_thermal_hdak_set(void __iomem *addr, int value)
 {
-	writel((readl(addr + HI6220_TEMP0_CFG) & ~HI6220_TEMP0_CFG_HDAK_MSK) |
-	       (value << 4), addr + HI6220_TEMP0_CFG);
+	writel((readl(addr + TEMP0_CFG) & ~TEMP0_CFG_HDAK_MSK) |
+	       (value << 4), addr + TEMP0_CFG);
 }
 
-static int hi6220_thermal_irq_handler(struct hisi_thermal_data *data)
+static void hisi_thermal_disable_sensor(struct hisi_thermal_data *data)
 {
-	hi6220_thermal_alarm_clear(data->regs, 1);
-	return 0;
-}
+	mutex_lock(&data->thermal_lock);
 
-static int hi3660_thermal_irq_handler(struct hisi_thermal_data *data)
-{
-	hi3660_thermal_alarm_clear(data->regs, data->sensor.id, 1);
-	return 0;
-}
-
-static int hi6220_thermal_get_temp(struct hisi_thermal_data *data)
-{
-	return hi6220_thermal_get_temperature(data->regs);
-}
-
-static int hi3660_thermal_get_temp(struct hisi_thermal_data *data)
-{
-	return hi3660_thermal_get_temperature(data->regs, data->sensor.id);
-}
-
-static int hi6220_thermal_disable_sensor(struct hisi_thermal_data *data)
-{
 	/* disable sensor module */
-	hi6220_thermal_enable(data->regs, 0);
-	hi6220_thermal_alarm_enable(data->regs, 0);
-	hi6220_thermal_reset_enable(data->regs, 0);
+	hisi_thermal_enable(data->regs, 0);
+	hisi_thermal_alarm_enable(data->regs, 0);
+	hisi_thermal_reset_enable(data->regs, 0);
 
-	clk_disable_unprepare(data->clk);
-
-	return 0;
+	mutex_unlock(&data->thermal_lock);
 }
 
-static int hi3660_thermal_disable_sensor(struct hisi_thermal_data *data)
+static int hisi_thermal_get_temp(void *_sensor, int *temp)
 {
-	/* disable sensor module */
-	hi3660_thermal_alarm_enable(data->regs, data->sensor.id, 0);
-	return 0;
-}
+	struct hisi_thermal_sensor *sensor = _sensor;
+	struct hisi_thermal_data *data = sensor->thermal;
 
-static int hi6220_thermal_enable_sensor(struct hisi_thermal_data *data)
-{
-	struct hisi_thermal_sensor *sensor = &data->sensor;
-	int ret;
-
-	/* enable clock for tsensor */
-	ret = clk_prepare_enable(data->clk);
-	if (ret)
-		return ret;
-
-	/* disable module firstly */
-	hi6220_thermal_reset_enable(data->regs, 0);
-	hi6220_thermal_enable(data->regs, 0);
-
-	/* select sensor id */
-	hi6220_thermal_sensor_select(data->regs, sensor->id);
-
-	/* setting the hdak time */
-	hi6220_thermal_hdak_set(data->regs, 0);
-
-	/* setting lag value between current temp and the threshold */
-	hi6220_thermal_set_lag(data->regs, HI6220_TEMP_LAG);
-
-	/* enable for interrupt */
-	hi6220_thermal_alarm_set(data->regs, sensor->thres_temp);
-
-	hi6220_thermal_reset_set(data->regs, HI6220_TEMP_RESET);
-
-	/* enable module */
-	hi6220_thermal_reset_enable(data->regs, 1);
-	hi6220_thermal_enable(data->regs, 1);
-
-	hi6220_thermal_alarm_clear(data->regs, 0);
-	hi6220_thermal_alarm_enable(data->regs, 1);
-
-	return 0;
-}
-
-static int hi3660_thermal_enable_sensor(struct hisi_thermal_data *data)
-{
-	unsigned int value;
-	struct hisi_thermal_sensor *sensor = &data->sensor;
-
-	/* disable interrupt */
-	hi3660_thermal_alarm_enable(data->regs, sensor->id, 0);
-
-	/* setting lag value between current temp and the threshold */
-	hi3660_thermal_set_lag(data->regs, sensor->id, HI3660_TEMP_LAG);
-
-	/* set interrupt threshold */
-	value = hi3660_thermal_temp_to_step(sensor->thres_temp);
-	hi3660_thermal_alarm_set(data->regs, sensor->id, value);
-
-	/* enable interrupt */
-	hi3660_thermal_alarm_clear(data->regs, sensor->id, 1);
-	hi3660_thermal_alarm_enable(data->regs, sensor->id, 1);
-
-	return 0;
-}
-
-static int hi6220_thermal_probe(struct hisi_thermal_data *data)
-{
-	struct platform_device *pdev = data->pdev;
-	struct device *dev = &pdev->dev;
-	struct resource *res;
-	int ret;
-
-	data->get_temp = hi6220_thermal_get_temp;
-	data->enable_sensor = hi6220_thermal_enable_sensor;
-	data->disable_sensor = hi6220_thermal_disable_sensor;
-	data->irq_handler = hi6220_thermal_irq_handler;
-
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	data->regs = devm_ioremap_resource(dev, res);
-	if (IS_ERR(data->regs)) {
-		dev_err(dev, "failed to get io address\n");
-		return PTR_ERR(data->regs);
-	}
-
-	data->clk = devm_clk_get(dev, "thermal_clk");
-	if (IS_ERR(data->clk)) {
-		ret = PTR_ERR(data->clk);
-		if (ret != -EPROBE_DEFER)
-			dev_err(dev, "failed to get thermal clk: %d\n", ret);
-		return ret;
-	}
-
-	data->irq = platform_get_irq(pdev, 0);
-	if (data->irq < 0)
-		return data->irq;
-
-	data->sensor.id = HI6220_DEFAULT_SENSOR;
-
-	return 0;
-}
-
-static int hi3660_thermal_probe(struct hisi_thermal_data *data)
-{
-	struct platform_device *pdev = data->pdev;
-	struct device *dev = &pdev->dev;
-	struct resource *res;
-
-	data->get_temp = hi3660_thermal_get_temp;
-	data->enable_sensor = hi3660_thermal_enable_sensor;
-	data->disable_sensor = hi3660_thermal_disable_sensor;
-	data->irq_handler = hi3660_thermal_irq_handler;
-
-	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-	data->regs = devm_ioremap_resource(dev, res);
-	if (IS_ERR(data->regs)) {
-		dev_err(dev, "failed to get io address\n");
-		return PTR_ERR(data->regs);
-	}
-
-	data->irq = platform_get_irq(pdev, 0);
-	if (data->irq < 0)
-		return data->irq;
-
-	data->sensor.id = HI3660_DEFAULT_SENSOR;
-
-	return 0;
-}
-
-static int hisi_thermal_get_temp(void *__data, int *temp)
-{
-	struct hisi_thermal_data *data = __data;
-	struct hisi_thermal_sensor *sensor = &data->sensor;
-
-	*temp = data->get_temp(data);
+	*temp = hisi_thermal_get_temperature(data->regs);
 
 	dev_dbg(&data->pdev->dev, "id=%d, temp=%d, thres=%d\n",
 		sensor->id, *temp, sensor->thres_temp);
@@ -450,21 +233,21 @@ static const struct thermal_zone_of_device_ops hisi_of_thermal_ops = {
 static irqreturn_t hisi_thermal_alarm_irq_thread(int irq, void *dev)
 {
 	struct hisi_thermal_data *data = dev;
-	struct hisi_thermal_sensor *sensor = &data->sensor;
-	int temp = 0;
+	struct hisi_thermal_sensor *sensor = &data->sensors;
+	int temp;
 
-	data->irq_handler(data);
+	hisi_thermal_alarm_clear(data->regs, 1);
 
-	hisi_thermal_get_temp(data, &temp);
+	temp = hisi_thermal_get_temperature(data->regs);
 
 	if (temp >= sensor->thres_temp) {
 		dev_crit(&data->pdev->dev, "THERMAL ALARM: %d > %d\n",
 			 temp, sensor->thres_temp);
 
-		thermal_zone_device_update(data->sensor.tzd,
+		thermal_zone_device_update(data->sensors.tzd,
 					   THERMAL_EVENT_UNSPECIFIED);
 
-	} else {
+	} else if (temp < sensor->thres_temp) {
 		dev_crit(&data->pdev->dev, "THERMAL ALARM stopped: %d < %d\n",
 			 temp, sensor->thres_temp);
 	}
@@ -474,14 +257,17 @@ static irqreturn_t hisi_thermal_alarm_irq_thread(int irq, void *dev)
 
 static int hisi_thermal_register_sensor(struct platform_device *pdev,
 					struct hisi_thermal_data *data,
-					struct hisi_thermal_sensor *sensor)
+					struct hisi_thermal_sensor *sensor,
+					int index)
 {
 	int ret, i;
 	const struct thermal_trip *trip;
 
+	sensor->id = index;
+	sensor->thermal = data;
+
 	sensor->tzd = devm_thermal_zone_of_sensor_register(&pdev->dev,
-							   sensor->id, data,
-							   &hisi_of_thermal_ops);
+				sensor->id, sensor, &hisi_of_thermal_ops);
 	if (IS_ERR(sensor->tzd)) {
 		ret = PTR_ERR(sensor->tzd);
 		sensor->tzd = NULL;
@@ -494,7 +280,7 @@ static int hisi_thermal_register_sensor(struct platform_device *pdev,
 
 	for (i = 0; i < of_thermal_get_ntrips(sensor->tzd); i++) {
 		if (trip[i].type == THERMAL_TRIP_PASSIVE) {
-			sensor->thres_temp = trip[i].temperature;
+			sensor->thres_temp = hisi_thermal_round_temp(trip[i].temperature);
 			break;
 		}
 	}
@@ -503,14 +289,7 @@ static int hisi_thermal_register_sensor(struct platform_device *pdev,
 }
 
 static const struct of_device_id of_hisi_thermal_match[] = {
-	{
-		.compatible = "hisilicon,tsensor",
-		.data = hi6220_thermal_probe
-	},
-	{
-		.compatible = "hisilicon,hi3660-tsensor",
-		.data = hi3660_thermal_probe
-	},
+	{ .compatible = "hisilicon,tsensor" },
 	{ /* end */ }
 };
 MODULE_DEVICE_TABLE(of, of_hisi_thermal_match);
@@ -561,51 +340,69 @@ static int hisi_thermal_setup(struct hisi_thermal_data *data)
 static int hisi_thermal_probe(struct platform_device *pdev)
 {
 	struct hisi_thermal_data *data;
-	int const (*platform_probe)(struct hisi_thermal_data *);
-	struct device *dev = &pdev->dev;
+	struct resource *res;
 	int ret;
 
-	data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
+	data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL);
 	if (!data)
 		return -ENOMEM;
 
+	mutex_init(&data->thermal_lock);
 	data->pdev = pdev;
+
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	data->regs = devm_ioremap_resource(&pdev->dev, res);
+	if (IS_ERR(data->regs)) {
+		dev_err(&pdev->dev, "failed to get io address\n");
+		return PTR_ERR(data->regs);
+	}
+
+	data->irq = platform_get_irq(pdev, 0);
+	if (data->irq < 0)
+		return data->irq;
+
 	platform_set_drvdata(pdev, data);
 
-	platform_probe = of_device_get_match_data(dev);
-	if (!platform_probe) {
-		dev_err(dev, "failed to get probe func\n");
-		return -EINVAL;
+	data->clk = devm_clk_get(&pdev->dev, "thermal_clk");
+	if (IS_ERR(data->clk)) {
+		ret = PTR_ERR(data->clk);
+		if (ret != -EPROBE_DEFER)
+			dev_err(&pdev->dev,
+				"failed to get thermal clk: %d\n", ret);
+		return ret;
 	}
 
-	ret = platform_probe(data);
-	if (ret)
+	/* enable clock for thermal */
+	ret = clk_prepare_enable(data->clk);
+	if (ret) {
+		dev_err(&pdev->dev, "failed to enable thermal clk: %d\n", ret);
 		return ret;
+	}
 
 	ret = hisi_thermal_register_sensor(pdev, data,
-					   &data->sensor);
+					   &data->sensors,
+					   HISI_DEFAULT_SENSOR);
 	if (ret) {
-		dev_err(dev, "failed to register thermal sensor: %d\n", ret);
+		dev_err(&pdev->dev, "failed to register thermal sensor: %d\n",
+			ret);
 		return ret;
 	}
 
-	ret = data->enable_sensor(data);
+	ret = hisi_thermal_setup(data);
 	if (ret) {
-		dev_err(dev, "Failed to setup the sensor: %d\n", ret);
+		dev_err(&pdev->dev, "Failed to setup the sensor: %d\n", ret);
 		return ret;
 	}
 
-	if (data->irq) {
-		ret = devm_request_threaded_irq(dev, data->irq, NULL,
-				hisi_thermal_alarm_irq_thread,
-				IRQF_ONESHOT, "hisi_thermal", data);
-		if (ret < 0) {
-			dev_err(dev, "failed to request alarm irq: %d\n", ret);
-			return ret;
-		}
+	ret = devm_request_threaded_irq(&pdev->dev, data->irq, NULL,
+					hisi_thermal_alarm_irq_thread,
+					IRQF_ONESHOT, "hisi_thermal", data);
+	if (ret < 0) {
+		dev_err(&pdev->dev, "failed to request alarm irq: %d\n", ret);
+		return ret;
 	}
 
-	hisi_thermal_toggle_sensor(&data->sensor, true);
+	hisi_thermal_toggle_sensor(&data->sensors, true);
 
 	return 0;
 }
@@ -613,11 +410,11 @@ static int hisi_thermal_probe(struct platform_device *pdev)
 static int hisi_thermal_remove(struct platform_device *pdev)
 {
 	struct hisi_thermal_data *data = platform_get_drvdata(pdev);
-	struct hisi_thermal_sensor *sensor = &data->sensor;
+	struct hisi_thermal_sensor *sensor = &data->sensors;
 
 	hisi_thermal_toggle_sensor(sensor, false);
-
-	data->disable_sensor(data);
+	hisi_thermal_disable_sensor(data);
+	clk_disable_unprepare(data->clk);
 
 	return 0;
 }
@@ -627,7 +424,9 @@ static int hisi_thermal_suspend(struct device *dev)
 {
 	struct hisi_thermal_data *data = dev_get_drvdata(dev);
 
-	data->disable_sensor(data);
+	hisi_thermal_disable_sensor(data);
+
+	clk_disable_unprepare(data->clk);
 
 	return 0;
 }
@@ -635,8 +434,15 @@ static int hisi_thermal_suspend(struct device *dev)
 static int hisi_thermal_resume(struct device *dev)
 {
 	struct hisi_thermal_data *data = dev_get_drvdata(dev);
+	int ret;
 
-	return data->enable_sensor(data);
+	ret = clk_prepare_enable(data->clk);
+	if (ret)
+		return ret;
+
+	hisi_thermal_setup(data);
+
+	return 0;
 }
 #endif
 
