diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index f89236cd4fcd..3c0652a369f0 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -259,8 +259,8 @@ static struct thermal_trip *acpi_thermal_trips_alloc_critical(struct acpi_therma
 							      struct thermal_trip *trips,
 							      int *num_trips)
 {
-	acpi_status status = AE_OK;
-	unsigned long long temp;
+	struct thermal_trip trip;
+	int ret;
 
 	/*
 	 * Module parameters disable the critical trip point
@@ -268,14 +268,12 @@ static struct thermal_trip *acpi_thermal_trips_alloc_critical(struct acpi_therma
 	if (crt < 0)
 		goto out;
 
-	status = acpi_evaluate_integer(tz->device->handle, "_CRT", NULL, &temp);
-	if (ACPI_FAILURE(status)) {
-		acpi_handle_debug(tz->device->handle, "No critical threshold\n");
+	ret = thermal_acpi_trip_crit(tz->device->handle, &trip);
+	if (ret)
 		goto out;
-	}
-
-	if (temp <= 2732) {
-		pr_info(FW_BUG "Invalid critical threshold (%llu)\n", temp);
+	
+	if (trip.temperature <= 0) {
+		pr_info(FW_BUG "Invalid critical threshold (%d)\n", trip.temperature);
 		goto out;
 	}
 
@@ -283,10 +281,7 @@ static struct thermal_trip *acpi_thermal_trips_alloc_critical(struct acpi_therma
 	if (!trips)
 		goto out;
 
-	memset(&trips[*num_trips], 0, sizeof(*trips));
-
-	trips[*num_trips].temperature = deci_kelvin_to_millicelsius(temp);
-	trips[*num_trips].type = THERMAL_TRIP_CRITICAL;
+	trips[*num_trips] = trip; /* structure copy */
 
 	if (crt > 0)
 		acpi_thermal_trips_override(&trips[*num_trips], crt * MILLI);
@@ -300,23 +295,18 @@ static struct thermal_trip *acpi_thermal_trips_alloc_hot(struct acpi_thermal *tz
 							 struct thermal_trip *trips,
 							 int *num_trips)
 {
-	acpi_status status;
-	unsigned long long temp;
+	struct thermal_trip trip;
+	int ret;
 
-	status = acpi_evaluate_integer(tz->device->handle, "_HOT", NULL, &temp);
-	if (ACPI_FAILURE(status)) {
-		acpi_handle_debug(tz->device->handle, "No hot threshold\n");
+	ret = thermal_acpi_trip_hot(tz->device->handle, &trip);
+	if (ret)
 		goto out;
-	}
 
 	trips = krealloc(trips, sizeof(*trips) * (*num_trips + 1), GFP_KERNEL);
 	if (!trips)
 		goto out;
 
-	memset(&trips[*num_trips], 0, sizeof(*trips));
-
-	trips[*num_trips].temperature = deci_kelvin_to_millicelsius(temp);
-	trips[*num_trips].type = THERMAL_TRIP_HOT;
+	trips[*num_trips] = trip; /* structure copy */
 	
 	(*num_trips)++;
 out:
@@ -327,9 +317,10 @@ static struct thermal_trip *acpi_thermal_trips_alloc_passive(struct acpi_thermal
 							     struct thermal_trip *trips,
 							     int *num_trips)
 {
-	struct acpi_handle_list devices;
 	acpi_status status;
-	unsigned long long temp;
+	struct thermal_trip trip;
+	struct acpi_handle_list devices;
+	int ret;
 
 	/*
 	 * Module parameters disable all passive trip points
@@ -337,26 +328,21 @@ static struct thermal_trip *acpi_thermal_trips_alloc_passive(struct acpi_thermal
 	if (psv < 0)
 		goto out;
 	
-	status = acpi_evaluate_integer(tz->device->handle, "_PSV", NULL, &temp);
-	if (ACPI_FAILURE(status)) {
-		acpi_handle_debug(tz->device->handle, "No passive threshold\n");
+	ret = thermal_acpi_trip_psv(tz->device->handle, &trip);
+	if (ret)
 		goto out;
-	}
-
+	
 	status = acpi_evaluate_reference(tz->device->handle, "_PSL", NULL, &devices);
 	if (ACPI_FAILURE(status)) {
 		acpi_handle_debug(tz->device->handle, "No passive device associated\n");
 		goto out;
 	}
-	
+
 	trips = krealloc(trips, sizeof(*trips) * (*num_trips + 1), GFP_KERNEL);
 	if (!trips)
 		goto out;
 
-	memset(&trips[*num_trips], 0, sizeof(*trips));
-
-	trips[*num_trips].temperature = deci_kelvin_to_millicelsius(temp);
-	trips[*num_trips].type = THERMAL_TRIP_PASSIVE;
+	trips[*num_trips] = trip; /* structure copy */	
 	
 	(*num_trips)++;
 out:
@@ -367,10 +353,9 @@ static struct thermal_trip *acpi_thermal_trips_alloc_active(struct acpi_thermal
 							    struct thermal_trip *trips,
 							    int *num_trips)
 {
-	struct acpi_handle_list devices;
 	acpi_status status;
-	unsigned long long temp;
-	int i;
+	struct acpi_handle_list devices;
+	int i, ret;
 
 	/*
 	 * Module parameters disable all active trip points
@@ -379,12 +364,11 @@ static struct thermal_trip *acpi_thermal_trips_alloc_active(struct acpi_thermal
 		return trips;
 
 	for (i = 0; i < ACPI_THERMAL_MAX_ACTIVE; i++) {
+		struct thermal_trip trip;
 		char name[5];
 
-		sprintf(name, "_AC%d", i);
-
-		status = acpi_evaluate_integer(tz->device->handle, name, NULL, &temp);
-		if (ACPI_FAILURE(status))
+		ret = thermal_acpi_trip_act(tz->device->handle, &trip, i);
+		if (ret)
 			break;
 
 		sprintf(name, "_AL%d", i);
@@ -394,16 +378,13 @@ static struct thermal_trip *acpi_thermal_trips_alloc_active(struct acpi_thermal
 			acpi_handle_info(tz->device->handle, "No _AL%d defined for _AC%d\n", i, i);
 			break;
 		}
-
+		
 		trips = krealloc(trips, sizeof(*trips) * (*num_trips + 1), GFP_KERNEL);
 		if (!trips)
 			break;
 
-		memset(&trips[*num_trips], 0, sizeof(*trips));
+		trips[*num_trips] = trip; /* structure copy */	
 
-		trips[*num_trips].temperature = deci_kelvin_to_millicelsius(temp);
-		trips[*num_trips].type = THERMAL_TRIP_ACTIVE;
-	
 		(*num_trips)++;
 	}
 
