|
@@ -140,6 +140,12 @@ thermal_hwmon_lookup_temp(const struct thermal_hwmon_device *hwmon,
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
+static bool thermal_zone_crit_temp_valid(struct thermal_zone_device *tz)
|
|
|
+{
|
|
|
+ unsigned long temp;
|
|
|
+ return tz->ops->get_crit_temp && !tz->ops->get_crit_temp(tz, &temp);
|
|
|
+}
|
|
|
+
|
|
|
int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz)
|
|
|
{
|
|
|
struct thermal_hwmon_device *hwmon;
|
|
@@ -189,21 +195,18 @@ int thermal_add_hwmon_sysfs(struct thermal_zone_device *tz)
|
|
|
if (result)
|
|
|
goto free_temp_mem;
|
|
|
|
|
|
- if (tz->ops->get_crit_temp) {
|
|
|
- unsigned long temperature;
|
|
|
- if (!tz->ops->get_crit_temp(tz, &temperature)) {
|
|
|
- snprintf(temp->temp_crit.name,
|
|
|
- sizeof(temp->temp_crit.name),
|
|
|
+ if (thermal_zone_crit_temp_valid(tz)) {
|
|
|
+ snprintf(temp->temp_crit.name,
|
|
|
+ sizeof(temp->temp_crit.name),
|
|
|
"temp%d_crit", hwmon->count);
|
|
|
- temp->temp_crit.attr.attr.name = temp->temp_crit.name;
|
|
|
- temp->temp_crit.attr.attr.mode = 0444;
|
|
|
- temp->temp_crit.attr.show = temp_crit_show;
|
|
|
- sysfs_attr_init(&temp->temp_crit.attr.attr);
|
|
|
- result = device_create_file(hwmon->device,
|
|
|
- &temp->temp_crit.attr);
|
|
|
- if (result)
|
|
|
- goto unregister_input;
|
|
|
- }
|
|
|
+ temp->temp_crit.attr.attr.name = temp->temp_crit.name;
|
|
|
+ temp->temp_crit.attr.attr.mode = 0444;
|
|
|
+ temp->temp_crit.attr.show = temp_crit_show;
|
|
|
+ sysfs_attr_init(&temp->temp_crit.attr.attr);
|
|
|
+ result = device_create_file(hwmon->device,
|
|
|
+ &temp->temp_crit.attr);
|
|
|
+ if (result)
|
|
|
+ goto unregister_input;
|
|
|
}
|
|
|
|
|
|
mutex_lock(&thermal_hwmon_list_lock);
|
|
@@ -250,7 +253,7 @@ void thermal_remove_hwmon_sysfs(struct thermal_zone_device *tz)
|
|
|
}
|
|
|
|
|
|
device_remove_file(hwmon->device, &temp->temp_input.attr);
|
|
|
- if (tz->ops->get_crit_temp)
|
|
|
+ if (thermal_zone_crit_temp_valid(tz))
|
|
|
device_remove_file(hwmon->device, &temp->temp_crit.attr);
|
|
|
|
|
|
mutex_lock(&thermal_hwmon_list_lock);
|