Skip to content

Commit

Permalink
Pull thermal into release branch
Browse files Browse the repository at this point in the history
  • Loading branch information
Len Brown committed Oct 10, 2007
2 parents 73a855f + 6e21578 commit a2883df
Showing 1 changed file with 18 additions and 10 deletions.
28 changes: 18 additions & 10 deletions drivers/acpi/thermal.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ struct acpi_thermal {
struct acpi_thermal_trips trips;
struct acpi_handle_list devices;
struct timer_list timer;
struct mutex lock;
};

static const struct file_operations acpi_thermal_state_fops = {
Expand Down Expand Up @@ -711,6 +712,7 @@ static void acpi_thermal_check(void *data)
int result = 0;
struct acpi_thermal *tz = data;
unsigned long sleep_time = 0;
unsigned long timeout_jiffies = 0;
int i = 0;
struct acpi_thermal_state state;

Expand All @@ -720,11 +722,15 @@ static void acpi_thermal_check(void *data)
return;
}

/* Check if someone else is already running */
if (!mutex_trylock(&tz->lock))
return;

state = tz->state;

result = acpi_thermal_get_temperature(tz);
if (result)
return;
goto unlock;

memset(&tz->state, 0, sizeof(tz->state));

Expand Down Expand Up @@ -787,10 +793,13 @@ static void acpi_thermal_check(void *data)
* a thermal event occurs). Note that _TSP and _TZD values are
* given in 1/10th seconds (we must covert to milliseconds).
*/
if (tz->state.passive)
if (tz->state.passive) {
sleep_time = tz->trips.passive.tsp * 100;
else if (tz->polling_frequency > 0)
timeout_jiffies = jiffies + (HZ * sleep_time) / 1000;
} else if (tz->polling_frequency > 0) {
sleep_time = tz->polling_frequency * 100;
timeout_jiffies = round_jiffies(jiffies + (HZ * sleep_time) / 1000);
}

ACPI_DEBUG_PRINT((ACPI_DB_INFO, "%s: temperature[%lu] sleep[%lu]\n",
tz->name, tz->temperature, sleep_time));
Expand All @@ -804,17 +813,16 @@ static void acpi_thermal_check(void *data)
del_timer(&(tz->timer));
} else {
if (timer_pending(&(tz->timer)))
mod_timer(&(tz->timer),
jiffies + (HZ * sleep_time) / 1000);
mod_timer(&(tz->timer), timeout_jiffies);
else {
tz->timer.data = (unsigned long)tz;
tz->timer.function = acpi_thermal_run;
tz->timer.expires = jiffies + (HZ * sleep_time) / 1000;
tz->timer.expires = timeout_jiffies;
add_timer(&(tz->timer));
}
}

return;
unlock:
mutex_unlock(&tz->lock);
}

/* --------------------------------------------------------------------------
Expand Down Expand Up @@ -1251,7 +1259,7 @@ static int acpi_thermal_add(struct acpi_device *device)
strcpy(acpi_device_name(device), ACPI_THERMAL_DEVICE_NAME);
strcpy(acpi_device_class(device), ACPI_THERMAL_CLASS);
acpi_driver_data(device) = tz;

mutex_init(&tz->lock);
result = acpi_thermal_get_info(tz);
if (result)
goto end;
Expand Down Expand Up @@ -1321,7 +1329,7 @@ static int acpi_thermal_remove(struct acpi_device *device, int type)
}

acpi_thermal_remove_fs(device);

mutex_destroy(&tz->lock);
kfree(tz);
return 0;
}
Expand Down

0 comments on commit a2883df

Please sign in to comment.