|
@@ -536,6 +536,23 @@ static ssize_t radeon_hwmon_show_temp(struct device *dev,
|
|
|
return snprintf(buf, PAGE_SIZE, "%d\n", temp);
|
|
|
}
|
|
|
|
|
|
+static ssize_t radeon_hwmon_show_temp_thresh(struct device *dev,
|
|
|
+ struct device_attribute *attr,
|
|
|
+ char *buf)
|
|
|
+{
|
|
|
+ struct drm_device *ddev = dev_get_drvdata(dev);
|
|
|
+ struct radeon_device *rdev = ddev->dev_private;
|
|
|
+ int hyst = to_sensor_dev_attr(attr)->index;
|
|
|
+ int temp;
|
|
|
+
|
|
|
+ if (hyst)
|
|
|
+ temp = rdev->pm.dpm.thermal.min_temp;
|
|
|
+ else
|
|
|
+ temp = rdev->pm.dpm.thermal.max_temp;
|
|
|
+
|
|
|
+ return snprintf(buf, PAGE_SIZE, "%d\n", temp);
|
|
|
+}
|
|
|
+
|
|
|
static ssize_t radeon_hwmon_show_name(struct device *dev,
|
|
|
struct device_attribute *attr,
|
|
|
char *buf)
|
|
@@ -544,16 +561,37 @@ static ssize_t radeon_hwmon_show_name(struct device *dev,
|
|
|
}
|
|
|
|
|
|
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, radeon_hwmon_show_temp, NULL, 0);
|
|
|
+static SENSOR_DEVICE_ATTR(temp1_crit, S_IRUGO, radeon_hwmon_show_temp_thresh, NULL, 0);
|
|
|
+static SENSOR_DEVICE_ATTR(temp1_crit_hyst, S_IRUGO, radeon_hwmon_show_temp_thresh, NULL, 1);
|
|
|
static SENSOR_DEVICE_ATTR(name, S_IRUGO, radeon_hwmon_show_name, NULL, 0);
|
|
|
|
|
|
static struct attribute *hwmon_attributes[] = {
|
|
|
&sensor_dev_attr_temp1_input.dev_attr.attr,
|
|
|
+ &sensor_dev_attr_temp1_crit.dev_attr.attr,
|
|
|
+ &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
|
|
|
&sensor_dev_attr_name.dev_attr.attr,
|
|
|
NULL
|
|
|
};
|
|
|
|
|
|
+static umode_t hwmon_attributes_visible(struct kobject *kobj,
|
|
|
+ struct attribute *attr, int index)
|
|
|
+{
|
|
|
+ struct device *dev = container_of(kobj, struct device, kobj);
|
|
|
+ struct drm_device *ddev = dev_get_drvdata(dev);
|
|
|
+ struct radeon_device *rdev = ddev->dev_private;
|
|
|
+
|
|
|
+ /* Skip limit attributes if DPM is not enabled */
|
|
|
+ if (rdev->pm.pm_method != PM_METHOD_DPM &&
|
|
|
+ (attr == &sensor_dev_attr_temp1_crit.dev_attr.attr ||
|
|
|
+ attr == &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr))
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ return attr->mode;
|
|
|
+}
|
|
|
+
|
|
|
static const struct attribute_group hwmon_attrgroup = {
|
|
|
.attrs = hwmon_attributes,
|
|
|
+ .is_visible = hwmon_attributes_visible,
|
|
|
};
|
|
|
|
|
|
static int radeon_hwmon_init(struct radeon_device *rdev)
|