Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial
[cascardo/linux.git] / drivers / hwmon / hwmon.c
index 3e4cc44..adae684 100644 (file)
@@ -108,7 +108,13 @@ static DEFINE_IDA(hwmon_ida);
 
 /* Thermal zone handling */
 
-#if IS_REACHABLE(CONFIG_THERMAL) && defined(CONFIG_THERMAL_OF)
+/*
+ * The complex conditional is necessary to avoid a cyclic dependency
+ * between hwmon and thermal_sys modules.
+ */
+#if IS_REACHABLE(CONFIG_THERMAL) && defined(CONFIG_THERMAL_OF) && \
+       (!defined(CONFIG_THERMAL_HWMON) || \
+        !(defined(MODULE) && IS_MODULE(CONFIG_THERMAL)))
 static int hwmon_thermal_get_temp(void *data, int *temp)
 {
        struct hwmon_thermal_data *tdata = data;
@@ -153,7 +159,7 @@ static int hwmon_thermal_add_sensor(struct device *dev,
 {
        return 0;
 }
-#endif /* IS_REACHABLE(CONFIG_THERMAL) && defined(CONFIG_THERMAL_OF) */
+#endif /* IS_REACHABLE(CONFIG_THERMAL) && ... */
 
 /* sysfs attribute management */
 
@@ -259,6 +265,9 @@ static struct attribute *hwmon_genattr(struct device *dev,
 
 static const char * const hwmon_chip_attr_templates[] = {
        [hwmon_chip_temp_reset_history] = "temp_reset_history",
+       [hwmon_chip_in_reset_history] = "in_reset_history",
+       [hwmon_chip_curr_reset_history] = "curr_reset_history",
+       [hwmon_chip_power_reset_history] = "power_reset_history",
        [hwmon_chip_update_interval] = "update_interval",
        [hwmon_chip_alarms] = "alarms",
 };
@@ -290,14 +299,128 @@ static const char * const hwmon_temp_attr_templates[] = {
        [hwmon_temp_reset_history] = "temp%d_reset_history",
 };
 
+static const char * const hwmon_in_attr_templates[] = {
+       [hwmon_in_input] = "in%d_input",
+       [hwmon_in_min] = "in%d_min",
+       [hwmon_in_max] = "in%d_max",
+       [hwmon_in_lcrit] = "in%d_lcrit",
+       [hwmon_in_crit] = "in%d_crit",
+       [hwmon_in_average] = "in%d_average",
+       [hwmon_in_lowest] = "in%d_lowest",
+       [hwmon_in_highest] = "in%d_highest",
+       [hwmon_in_reset_history] = "in%d_reset_history",
+       [hwmon_in_label] = "in%d_label",
+       [hwmon_in_alarm] = "in%d_alarm",
+       [hwmon_in_min_alarm] = "in%d_min_alarm",
+       [hwmon_in_max_alarm] = "in%d_max_alarm",
+       [hwmon_in_lcrit_alarm] = "in%d_lcrit_alarm",
+       [hwmon_in_crit_alarm] = "in%d_crit_alarm",
+};
+
+static const char * const hwmon_curr_attr_templates[] = {
+       [hwmon_curr_input] = "curr%d_input",
+       [hwmon_curr_min] = "curr%d_min",
+       [hwmon_curr_max] = "curr%d_max",
+       [hwmon_curr_lcrit] = "curr%d_lcrit",
+       [hwmon_curr_crit] = "curr%d_crit",
+       [hwmon_curr_average] = "curr%d_average",
+       [hwmon_curr_lowest] = "curr%d_lowest",
+       [hwmon_curr_highest] = "curr%d_highest",
+       [hwmon_curr_reset_history] = "curr%d_reset_history",
+       [hwmon_curr_label] = "curr%d_label",
+       [hwmon_curr_alarm] = "curr%d_alarm",
+       [hwmon_curr_min_alarm] = "curr%d_min_alarm",
+       [hwmon_curr_max_alarm] = "curr%d_max_alarm",
+       [hwmon_curr_lcrit_alarm] = "curr%d_lcrit_alarm",
+       [hwmon_curr_crit_alarm] = "curr%d_crit_alarm",
+};
+
+static const char * const hwmon_power_attr_templates[] = {
+       [hwmon_power_average] = "power%d_average",
+       [hwmon_power_average_interval] = "power%d_average_interval",
+       [hwmon_power_average_interval_max] = "power%d_interval_max",
+       [hwmon_power_average_interval_min] = "power%d_interval_min",
+       [hwmon_power_average_highest] = "power%d_average_highest",
+       [hwmon_power_average_lowest] = "power%d_average_lowest",
+       [hwmon_power_average_max] = "power%d_average_max",
+       [hwmon_power_average_min] = "power%d_average_min",
+       [hwmon_power_input] = "power%d_input",
+       [hwmon_power_input_highest] = "power%d_input_highest",
+       [hwmon_power_input_lowest] = "power%d_input_lowest",
+       [hwmon_power_reset_history] = "power%d_reset_history",
+       [hwmon_power_accuracy] = "power%d_accuracy",
+       [hwmon_power_cap] = "power%d_cap",
+       [hwmon_power_cap_hyst] = "power%d_cap_hyst",
+       [hwmon_power_cap_max] = "power%d_cap_max",
+       [hwmon_power_cap_min] = "power%d_cap_min",
+       [hwmon_power_max] = "power%d_max",
+       [hwmon_power_crit] = "power%d_crit",
+       [hwmon_power_label] = "power%d_label",
+       [hwmon_power_alarm] = "power%d_alarm",
+       [hwmon_power_cap_alarm] = "power%d_cap_alarm",
+       [hwmon_power_max_alarm] = "power%d_max_alarm",
+       [hwmon_power_crit_alarm] = "power%d_crit_alarm",
+};
+
+static const char * const hwmon_energy_attr_templates[] = {
+       [hwmon_energy_input] = "energy%d_input",
+       [hwmon_energy_label] = "energy%d_label",
+};
+
+static const char * const hwmon_humidity_attr_templates[] = {
+       [hwmon_humidity_input] = "humidity%d_input",
+       [hwmon_humidity_label] = "humidity%d_label",
+       [hwmon_humidity_min] = "humidity%d_min",
+       [hwmon_humidity_min_hyst] = "humidity%d_min_hyst",
+       [hwmon_humidity_max] = "humidity%d_max",
+       [hwmon_humidity_max_hyst] = "humidity%d_max_hyst",
+       [hwmon_humidity_alarm] = "humidity%d_alarm",
+       [hwmon_humidity_fault] = "humidity%d_fault",
+};
+
+static const char * const hwmon_fan_attr_templates[] = {
+       [hwmon_fan_input] = "fan%d_input",
+       [hwmon_fan_label] = "fan%d_label",
+       [hwmon_fan_min] = "fan%d_min",
+       [hwmon_fan_max] = "fan%d_max",
+       [hwmon_fan_div] = "fan%d_div",
+       [hwmon_fan_pulses] = "fan%d_pulses",
+       [hwmon_fan_target] = "fan%d_target",
+       [hwmon_fan_alarm] = "fan%d_alarm",
+       [hwmon_fan_min_alarm] = "fan%d_min_alarm",
+       [hwmon_fan_max_alarm] = "fan%d_max_alarm",
+       [hwmon_fan_fault] = "fan%d_fault",
+};
+
+static const char * const hwmon_pwm_attr_templates[] = {
+       [hwmon_pwm_input] = "pwm%d",
+       [hwmon_pwm_enable] = "pwm%d_enable",
+       [hwmon_pwm_mode] = "pwm%d_mode",
+       [hwmon_pwm_freq] = "pwm%d_freq",
+};
+
 static const char * const *__templates[] = {
        [hwmon_chip] = hwmon_chip_attr_templates,
        [hwmon_temp] = hwmon_temp_attr_templates,
+       [hwmon_in] = hwmon_in_attr_templates,
+       [hwmon_curr] = hwmon_curr_attr_templates,
+       [hwmon_power] = hwmon_power_attr_templates,
+       [hwmon_energy] = hwmon_energy_attr_templates,
+       [hwmon_humidity] = hwmon_humidity_attr_templates,
+       [hwmon_fan] = hwmon_fan_attr_templates,
+       [hwmon_pwm] = hwmon_pwm_attr_templates,
 };
 
 static const int __templates_size[] = {
        [hwmon_chip] = ARRAY_SIZE(hwmon_chip_attr_templates),
        [hwmon_temp] = ARRAY_SIZE(hwmon_temp_attr_templates),
+       [hwmon_in] = ARRAY_SIZE(hwmon_in_attr_templates),
+       [hwmon_curr] = ARRAY_SIZE(hwmon_curr_attr_templates),
+       [hwmon_power] = ARRAY_SIZE(hwmon_power_attr_templates),
+       [hwmon_energy] = ARRAY_SIZE(hwmon_energy_attr_templates),
+       [hwmon_humidity] = ARRAY_SIZE(hwmon_humidity_attr_templates),
+       [hwmon_fan] = ARRAY_SIZE(hwmon_fan_attr_templates),
+       [hwmon_pwm] = ARRAY_SIZE(hwmon_pwm_attr_templates),
 };
 
 static int hwmon_num_channel_attrs(const struct hwmon_channel_info *info)