|
@@ -104,22 +104,36 @@ static ssize_t
|
|
|
temp_show(struct device *dev, struct device_attribute *attr, char *buf)
|
|
|
{
|
|
|
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
|
|
+ long temperature;
|
|
|
+ int ret;
|
|
|
|
|
|
if (!tz->ops->get_temp)
|
|
|
return -EPERM;
|
|
|
|
|
|
- return tz->ops->get_temp(tz, buf);
|
|
|
+ ret = tz->ops->get_temp(tz, &temperature);
|
|
|
+
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ return sprintf(buf, "%ld\n", temperature);
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
|
mode_show(struct device *dev, struct device_attribute *attr, char *buf)
|
|
|
{
|
|
|
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
|
|
+ enum thermal_device_mode mode;
|
|
|
+ int result;
|
|
|
|
|
|
if (!tz->ops->get_mode)
|
|
|
return -EPERM;
|
|
|
|
|
|
- return tz->ops->get_mode(tz, buf);
|
|
|
+ result = tz->ops->get_mode(tz, &mode);
|
|
|
+ if (result)
|
|
|
+ return result;
|
|
|
+
|
|
|
+ return sprintf(buf, "%s\n", mode == THERMAL_DEVICE_ENABLED ? "enabled"
|
|
|
+ : "disabled");
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
@@ -132,7 +146,13 @@ mode_store(struct device *dev, struct device_attribute *attr,
|
|
|
if (!tz->ops->set_mode)
|
|
|
return -EPERM;
|
|
|
|
|
|
- result = tz->ops->set_mode(tz, buf);
|
|
|
+ if (!strncmp(buf, "enabled", sizeof("enabled")))
|
|
|
+ result = tz->ops->set_mode(tz, THERMAL_DEVICE_ENABLED);
|
|
|
+ else if (!strncmp(buf, "disabled", sizeof("disabled")))
|
|
|
+ result = tz->ops->set_mode(tz, THERMAL_DEVICE_DISABLED);
|
|
|
+ else
|
|
|
+ result = -EINVAL;
|
|
|
+
|
|
|
if (result)
|
|
|
return result;
|
|
|
|
|
@@ -144,7 +164,8 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr,
|
|
|
char *buf)
|
|
|
{
|
|
|
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
|
|
- int trip;
|
|
|
+ enum thermal_trip_type type;
|
|
|
+ int trip, result;
|
|
|
|
|
|
if (!tz->ops->get_trip_type)
|
|
|
return -EPERM;
|
|
@@ -152,7 +173,22 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr,
|
|
|
if (!sscanf(attr->attr.name, "trip_point_%d_type", &trip))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- return tz->ops->get_trip_type(tz, trip, buf);
|
|
|
+ result = tz->ops->get_trip_type(tz, trip, &type);
|
|
|
+ if (result)
|
|
|
+ return result;
|
|
|
+
|
|
|
+ switch (type) {
|
|
|
+ case THERMAL_TRIP_CRITICAL:
|
|
|
+ return sprintf(buf, "critical");
|
|
|
+ case THERMAL_TRIP_HOT:
|
|
|
+ return sprintf(buf, "hot");
|
|
|
+ case THERMAL_TRIP_PASSIVE:
|
|
|
+ return sprintf(buf, "passive");
|
|
|
+ case THERMAL_TRIP_ACTIVE:
|
|
|
+ return sprintf(buf, "active");
|
|
|
+ default:
|
|
|
+ return sprintf(buf, "unknown");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
@@ -160,7 +196,8 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr,
|
|
|
char *buf)
|
|
|
{
|
|
|
struct thermal_zone_device *tz = to_thermal_zone(dev);
|
|
|
- int trip;
|
|
|
+ int trip, ret;
|
|
|
+ long temperature;
|
|
|
|
|
|
if (!tz->ops->get_trip_temp)
|
|
|
return -EPERM;
|
|
@@ -168,7 +205,12 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr,
|
|
|
if (!sscanf(attr->attr.name, "trip_point_%d_temp", &trip))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- return tz->ops->get_trip_temp(tz, trip, buf);
|
|
|
+ ret = tz->ops->get_trip_temp(tz, trip, &temperature);
|
|
|
+
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ return sprintf(buf, "%ld\n", temperature);
|
|
|
}
|
|
|
|
|
|
static DEVICE_ATTR(type, 0444, type_show, NULL);
|
|
@@ -236,8 +278,13 @@ thermal_cooling_device_max_state_show(struct device *dev,
|
|
|
struct device_attribute *attr, char *buf)
|
|
|
{
|
|
|
struct thermal_cooling_device *cdev = to_cooling_device(dev);
|
|
|
+ unsigned long state;
|
|
|
+ int ret;
|
|
|
|
|
|
- return cdev->ops->get_max_state(cdev, buf);
|
|
|
+ ret = cdev->ops->get_max_state(cdev, &state);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ return sprintf(buf, "%ld\n", state);
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
@@ -245,8 +292,13 @@ thermal_cooling_device_cur_state_show(struct device *dev,
|
|
|
struct device_attribute *attr, char *buf)
|
|
|
{
|
|
|
struct thermal_cooling_device *cdev = to_cooling_device(dev);
|
|
|
+ unsigned long state;
|
|
|
+ int ret;
|
|
|
|
|
|
- return cdev->ops->get_cur_state(cdev, buf);
|
|
|
+ ret = cdev->ops->get_cur_state(cdev, &state);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+ return sprintf(buf, "%ld\n", state);
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
@@ -255,10 +307,10 @@ thermal_cooling_device_cur_state_store(struct device *dev,
|
|
|
const char *buf, size_t count)
|
|
|
{
|
|
|
struct thermal_cooling_device *cdev = to_cooling_device(dev);
|
|
|
- int state;
|
|
|
+ unsigned long state;
|
|
|
int result;
|
|
|
|
|
|
- if (!sscanf(buf, "%d\n", &state))
|
|
|
+ if (!sscanf(buf, "%ld\n", &state))
|
|
|
return -EINVAL;
|
|
|
|
|
|
if (state < 0)
|
|
@@ -312,13 +364,20 @@ static DEVICE_ATTR(name, 0444, name_show, NULL);
|
|
|
static ssize_t
|
|
|
temp_input_show(struct device *dev, struct device_attribute *attr, char *buf)
|
|
|
{
|
|
|
+ long temperature;
|
|
|
+ int ret;
|
|
|
struct thermal_hwmon_attr *hwmon_attr
|
|
|
= container_of(attr, struct thermal_hwmon_attr, attr);
|
|
|
struct thermal_zone_device *tz
|
|
|
= container_of(hwmon_attr, struct thermal_zone_device,
|
|
|
temp_input);
|
|
|
|
|
|
- return tz->ops->get_temp(tz, buf);
|
|
|
+ ret = tz->ops->get_temp(tz, &temperature);
|
|
|
+
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ return sprintf(buf, "%ld\n", temperature);
|
|
|
}
|
|
|
|
|
|
static ssize_t
|
|
@@ -330,8 +389,14 @@ temp_crit_show(struct device *dev, struct device_attribute *attr,
|
|
|
struct thermal_zone_device *tz
|
|
|
= container_of(hwmon_attr, struct thermal_zone_device,
|
|
|
temp_crit);
|
|
|
+ long temperature;
|
|
|
+ int ret;
|
|
|
+
|
|
|
+ ret = tz->ops->get_trip_temp(tz, 0, &temperature);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
|
|
|
- return tz->ops->get_trip_temp(tz, 0, buf);
|
|
|
+ return sprintf(buf, "%ld\n", temperature);
|
|
|
}
|
|
|
|
|
|
|