diff --git a/drivers/thermal/qoriq_thermal.c b/drivers/thermal/qoriq_thermal.c
index 460cdda..f56d931 100644
--- a/drivers/thermal/qoriq_thermal.c
+++ b/drivers/thermal/qoriq_thermal.c
@@ -94,9 +94,6 @@
 	struct qoriq_tmu_regs __iomem *regs;
 	int sensor_id;
 	bool little_endian;
-	int *trip_temp;
-	int ntrip_temp;
-	int temp_delta;
 	struct tmu_throttle_params throt_cfgs[THROTTLE_NUM];
 };
 
@@ -212,15 +209,21 @@
 static int tmu_get_trend(void *p,
 	int trip, enum thermal_trend *trend)
 {
-	int trip_temp;
+	int trip_temp, trip_hyst;
 	struct qoriq_tmu_data *data = p;
 
 	if (!data->tz)
 		return 0;
 
-	trip_temp = trip < data->ntrip_temp ? data->trip_temp[trip] : data->trip_temp[0];
+	if (!data->tz->ops->get_trip_temp ||
+		!data->tz->ops->get_trip_hyst ||
+		data->tz->ops->get_trip_temp(data->tz, trip, &trip_temp) ||
+		data->tz->ops->get_trip_hyst(data->tz, trip, &trip_hyst)) {
+		*trend = THERMAL_TREND_RAISE_FULL;
+		return 0;
+	}
 
-	if (data->tz->temperature >= (trip_temp - data->temp_delta))
+	if (data->tz->temperature >= (trip_temp - trip_hyst))
 		*trend = THERMAL_TREND_RAISE_FULL;
 	else
 		*trend = THERMAL_TREND_DROP_FULL;
@@ -228,21 +231,9 @@
 	return 0;
 }
 
-static int tmu_set_trip_temp(void *p, int trip,
-			     int temp)
-{
-	struct qoriq_tmu_data *data = p;
-
-	if (trip < data->ntrip_temp)
-		data->trip_temp[trip] = temp;
-
-	return 0;
-}
-
 static struct thermal_zone_of_device_ops tmu_tz_ops = {
 	.get_temp = tmu_get_temp,
 	.get_trend = tmu_get_trend,
-	.set_trip_temp = tmu_set_trip_temp,
 };
 
 static struct tmu_throttle_params *
@@ -294,16 +285,6 @@
 		return 0;
 	}
 
-	ret = of_property_read_u32(np_tc, "throttle,temp_delta", &val);
-	if (ret) {
-		dev_info(dev,
-			 "throttle-cfg: missing temp_delta parameter,"
-			 "use default 3000 (3C)\n");
-		qt->temp_delta = 3000;
-	} else {
-		qt->temp_delta = val;
-	}
-
 	for_each_child_of_node(np_tc, np_tcc) {
 		struct tmu_throttle_params *ttp;
 		name = np_tcc->name;
@@ -342,11 +323,9 @@
 static int qoriq_tmu_probe(struct platform_device *pdev)
 {
 	int ret;
-	const struct thermal_trip *trip;
 	struct qoriq_tmu_data *data;
 	struct device_node *np = pdev->dev.of_node;
 	u32 site = 0;
-	int i, ntrips;
 
 	if (!np) {
 		dev_err(&pdev->dev, "Device OF-Node is NULL");
@@ -391,21 +370,9 @@
 		goto err_tmu;
 	}
 
-	trip = of_thermal_get_trip_points(data->tz);
-	ntrips = of_thermal_get_ntrips(data->tz);
-	data->trip_temp = kzalloc(ntrips * sizeof(*data->trip_temp), GFP_KERNEL);
-	if (!data->trip_temp) {
-		ret = -ENOMEM;
-		goto err_tmu;
-	}
-	for (i=0; i<ntrips; i++) {
-		data->trip_temp[i] = trip[i].temperature;
-	}
-	data->ntrip_temp = ntrips;
-
 	ret = tmu_init_throttle_cdev(pdev);
 	if (ret)
-		goto err_cdev;
+		goto err_tmu;
 
 	/* Enable monitoring */
 	site |= 0x1 << (15 - data->sensor_id);
@@ -413,9 +380,6 @@
 
 	return 0;
 
-err_cdev:
-	kfree(data->trip_temp);
-
 err_tmu:
 	iounmap(data->regs);
 
@@ -434,7 +398,6 @@
 		if (data->throt_cfgs[i].inited)
 			devfreq_cooling_unregister(data->throt_cfgs[i].cdev);
 
-	kfree(data->trip_temp);
 	thermal_zone_of_sensor_unregister(&pdev->dev, data->tz);
 
 	/* Disable monitoring */
