@@ -64,38 +64,100 @@ struct hwmon_data {
void **channel_data;
};
-struct curve_point default_curve[] = {
+struct curve_point quiet_curve[] = {
{
- .temp = 0x10,
- .pwm = 0x19,
+ .temp = 0x1F,
+ .pwm = 0x15,
},
{
- .temp = 0x14,
- .pwm = 0x19,
+ .temp = 0x21,
+ .pwm = 0x1E,
+ },
+ {
+ .temp = 0x24,
+ .pwm = 0x25,
+ },
+ {
+ .temp = 0x27,
+ .pwm = 0x2D,
+ },
+ {
+ .temp = 0x29,
+ .pwm = 0x38,
+ },
+ {
+ .temp = 0x2C,
+ .pwm = 0x4A,
+ },
+ {
+ .temp = 0x2F,
+ .pwm = 0x64,
+ },
+};
+
+struct curve_point balanced_curve[] = {
+ {
+ .temp = 0x1C,
+ .pwm = 0x15,
+ },
+ {
+ .temp = 0x1E,
+ .pwm = 0x1B,
},
{
.temp = 0x20,
- .pwm = 0x27,
+ .pwm = 0x23,
},
{
- .temp = 0x28,
- .pwm = 0x32,
+ .temp = 0x22,
+ .pwm = 0x28,
},
{
- .temp = 0x32,
- .pwm = 0x4b,
+ .temp = 0x24,
+ .pwm = 0x32,
},
{
- .temp = 0x37,
- .pwm = 0x5a,
+ .temp = 0x27,
+ .pwm = 0x48,
},
{
- .temp = 0x3c,
+ .temp = 0x29,
.pwm = 0x64,
},
+};
+struct curve_point extreme_curve[] = {
+ {
+ .temp = 0x19,
+ .pwm = 0x28,
+ },
+ {
+ .temp = 0x1B,
+ .pwm = 0x2E,
+ },
+ {
+ .temp = 0x1D,
+ .pwm = 0x37,
+ },
+ {
+ .temp = 0x1E,
+ .pwm = 0x41,
+ },
+ {
+ .temp = 0x1F,
+ .pwm = 0x4C,
+ },
+ {
+ .temp = 0x20,
+ .pwm = 0x56,
+ },
+ {
+ .temp = 0x21,
+ .pwm = 0x64,
+ },
};
+#define default_curve quiet_curve
static const char SUCCESS[2] = { 0x12, 0x34 };
#define SUCCES_LENGTH 3
@@ -347,7 +409,7 @@ static int write_func(struct device *dev, enum hwmon_sensor_types type,
return retval;
goto cleanup;
- case hwmon_pwm_mode:
+ case hwmon_pwm_enable:
fan_data = data->channel_data[channel];
retval = usb_autopm_get_interface(cdev->interface);
@@ -360,10 +422,12 @@ static int write_func(struct device *dev, enum hwmon_sensor_types type,
}
fan_data->mode = val;
- if (val == 0) {
+ switch (val) {
+ case 0:
set_fan_rpm_curve(cdev, fan_data,
default_curve);
- } else if (val == 1) {
+ break;
+ case 1:
if (fan_data->fan_target != 0) {
retval = set_fan_target_rpm(
cdev, fan_data,
@@ -377,6 +441,18 @@ static int write_func(struct device *dev, enum hwmon_sensor_types type,
if (retval)
goto cleanup;
}
+ break;
+ case 2:
+ set_fan_rpm_curve(cdev, fan_data, quiet_curve);
+ break;
+ case 3:
+ set_fan_rpm_curve(cdev, fan_data,
+ balanced_curve);
+ break;
+ case 4:
+ set_fan_rpm_curve(cdev, fan_data,
+ extreme_curve);
+ break;
}
goto cleanup;
default:
@@ -465,7 +541,7 @@ int read_func(struct device *dev, enum hwmon_sensor_types type, u32 attr,
return retval;
}
#define fan_config HWMON_F_INPUT | HWMON_F_TARGET | HWMON_F_MIN
-#define pwm_config HWMON_PWM_INPUT | HWMON_PWM_MODE
+#define pwm_config HWMON_PWM_INPUT | HWMON_PWM_ENABLE
static const struct hwmon_ops asetek_6_ops = {
.is_visible = is_visible_func,
Signed-off-by: Jaap Aarts <jaap.aarts1@example.com> --- drivers/hwmon/asetek_gen6.c | 110 ++++++++++++++++++++++++++++++------ 1 file changed, 93 insertions(+), 17 deletions(-)