f71805f: Always create all fan inputs Fans can be hotplugged, so we should create sysfs file even for fans which are disabled at driver load time. Signed-off-by: Jean Delvare --- drivers/hwmon/f71805f.c | 74 +++++++++++++++-------------------------------- 1 file changed, 23 insertions(+), 51 deletions(-) --- linux-2.6.19-rc2.orig/drivers/hwmon/f71805f.c 2006-10-17 22:54:43.000000000 +0200 +++ linux-2.6.19-rc2/drivers/hwmon/f71805f.c 2006-10-18 00:35:09.000000000 +0200 @@ -132,7 +132,6 @@ #define F71805F_REG_STATUS(nr) (0x36 + (nr)) /* individual register bits */ -#define FAN_CTRL_SKIP 0x80 #define FAN_CTRL_DC_MODE 0x10 #define FAN_CTRL_LATCH_FULL 0x08 #define FAN_CTRL_MODE_MASK 0x03 @@ -337,8 +336,6 @@ F71805F_REG_IN_LOW(nr)); } for (nr = 0; nr < 3; nr++) { - if (data->fan_ctrl[nr] & FAN_CTRL_SKIP) - continue; data->fan_low[nr] = f71805f_read16(data, F71805F_REG_FAN_LOW(nr)); data->fan_target[nr] = f71805f_read16(data, @@ -367,8 +364,6 @@ F71805F_REG_IN(nr)); } for (nr = 0; nr < 3; nr++) { - if (data->fan_ctrl[nr] & FAN_CTRL_SKIP) - continue; data->fan[nr] = f71805f_read16(data, F71805F_REG_FAN(nr)); data->fan_ctrl[nr] = f71805f_read8(data, @@ -991,6 +986,29 @@ &sensor_dev_attr_in7_max.dev_attr.attr, &sensor_dev_attr_in7_min.dev_attr.attr, + &sensor_dev_attr_fan1_input.dev_attr.attr, + &sensor_dev_attr_fan1_min.dev_attr.attr, + &sensor_dev_attr_fan1_alarm.dev_attr.attr, + &sensor_dev_attr_fan1_target.dev_attr.attr, + &sensor_dev_attr_fan2_input.dev_attr.attr, + &sensor_dev_attr_fan2_min.dev_attr.attr, + &sensor_dev_attr_fan2_alarm.dev_attr.attr, + &sensor_dev_attr_fan2_target.dev_attr.attr, + &sensor_dev_attr_fan3_input.dev_attr.attr, + &sensor_dev_attr_fan3_min.dev_attr.attr, + &sensor_dev_attr_fan3_alarm.dev_attr.attr, + &sensor_dev_attr_fan3_target.dev_attr.attr, + + &sensor_dev_attr_pwm1.dev_attr.attr, + &sensor_dev_attr_pwm1_enable.dev_attr.attr, + &sensor_dev_attr_pwm1_mode.dev_attr.attr, + &sensor_dev_attr_pwm2.dev_attr.attr, + &sensor_dev_attr_pwm2_enable.dev_attr.attr, + &sensor_dev_attr_pwm2_mode.dev_attr.attr, + &sensor_dev_attr_pwm3.dev_attr.attr, + &sensor_dev_attr_pwm3_enable.dev_attr.attr, + &sensor_dev_attr_pwm3_mode.dev_attr.attr, + &sensor_dev_attr_temp1_input.dev_attr.attr, &sensor_dev_attr_temp1_max.dev_attr.attr, &sensor_dev_attr_temp1_max_hyst.dev_attr.attr, @@ -1061,43 +1079,6 @@ { .attrs = f71805f_attributes_optin[3] }, }; -static struct attribute *f71805f_attributes_fan[3][8] = { - { - &sensor_dev_attr_fan1_input.dev_attr.attr, - &sensor_dev_attr_fan1_min.dev_attr.attr, - &sensor_dev_attr_fan1_alarm.dev_attr.attr, - &sensor_dev_attr_fan1_target.dev_attr.attr, - &sensor_dev_attr_pwm1.dev_attr.attr, - &sensor_dev_attr_pwm1_enable.dev_attr.attr, - &sensor_dev_attr_pwm1_mode.dev_attr.attr, - NULL - }, { - &sensor_dev_attr_fan2_input.dev_attr.attr, - &sensor_dev_attr_fan2_min.dev_attr.attr, - &sensor_dev_attr_fan2_alarm.dev_attr.attr, - &sensor_dev_attr_fan2_target.dev_attr.attr, - &sensor_dev_attr_pwm2.dev_attr.attr, - &sensor_dev_attr_pwm2_enable.dev_attr.attr, - &sensor_dev_attr_pwm2_mode.dev_attr.attr, - NULL - }, { - &sensor_dev_attr_fan3_input.dev_attr.attr, - &sensor_dev_attr_fan3_min.dev_attr.attr, - &sensor_dev_attr_fan3_alarm.dev_attr.attr, - &sensor_dev_attr_fan3_target.dev_attr.attr, - &sensor_dev_attr_pwm3.dev_attr.attr, - &sensor_dev_attr_pwm3_enable.dev_attr.attr, - &sensor_dev_attr_pwm3_mode.dev_attr.attr, - NULL - } -}; - -static const struct attribute_group f71805f_group_fan[3] = { - { .attrs = f71805f_attributes_fan[0] }, - { .attrs = f71805f_attributes_fan[1] }, - { .attrs = f71805f_attributes_fan[2] }, -}; - /* We don't include pwm_freq files in the arrays above, because they must be created conditionally (only if pwm_mode is 1 == PWM) */ static struct attribute *f71805f_attributes_pwm_freq[] = { @@ -1216,11 +1197,6 @@ goto exit_remove_files; } for (i = 0; i < 3; i++) { - if (data->fan_ctrl[i] & FAN_CTRL_SKIP) - continue; - if ((err = sysfs_create_group(&pdev->dev.kobj, - &f71805f_group_fan[i]))) - goto exit_remove_files; /* If control mode is PWM, create pwm_freq file */ if (!(data->fan_ctrl[i] & FAN_CTRL_DC_MODE)) { if ((err = sysfs_create_file(&pdev->dev.kobj, @@ -1252,8 +1228,6 @@ sysfs_remove_group(&pdev->dev.kobj, &f71805f_group); for (i = 0; i < 4; i++) sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_optin[i]); - for (i = 0; i < 3; i++) - sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_fan[i]); sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_pwm_freq); exit_free: platform_set_drvdata(pdev, NULL); @@ -1272,8 +1246,6 @@ sysfs_remove_group(&pdev->dev.kobj, &f71805f_group); for (i = 0; i < 4; i++) sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_optin[i]); - for (i = 0; i < 3; i++) - sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_fan[i]); sysfs_remove_group(&pdev->dev.kobj, &f71805f_group_pwm_freq); kfree(data);