Skip to content

Commit 801fec8

Browse files
DelphineCCChiugroeck
authored andcommitted
hwmon: (max31790) revise the scale to write pwm
Since the value for PWMOUT Target Duty Cycle register is a 9 bit left-justified value that ranges from 0 to 511 and is contained in 2 bytes. There is an issue that the PWM signal recorded by oscilloscope would not be on consistently if we set PWM to 100% to the driver. It is because the LSB of the 9 bit would always be zero if it just left shift 8 bit for the value that write to PWMOUT Target Duty Cycle register. Therefore, revise the scale of the value that was written to pwm input from 255 to 511 and modify the value to left-justified value. Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com> Link: https://lore.kernel.org/r/20240416022211.859483-1-Delphine_CC_Chiu@wiwynn.com Signed-off-by: Guenter Roeck <linux@roeck-us.net>
1 parent 8ec8d6c commit 801fec8

1 file changed

Lines changed: 7 additions & 1 deletion

File tree

drivers/hwmon/max31790.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,9 @@
4949

5050
#define NR_CHANNEL 6
5151

52+
#define PWM_INPUT_SCALE 255
53+
#define MAX31790_REG_PWMOUT_SCALE 511
54+
5255
/*
5356
* Client data (each client gets its own)
5457
*/
@@ -343,10 +346,13 @@ static int max31790_write_pwm(struct device *dev, u32 attr, int channel,
343346
err = -EINVAL;
344347
break;
345348
}
349+
350+
val = DIV_ROUND_CLOSEST(val * MAX31790_REG_PWMOUT_SCALE,
351+
PWM_INPUT_SCALE);
346352
data->valid = false;
347353
err = i2c_smbus_write_word_swapped(client,
348354
MAX31790_REG_PWMOUT(channel),
349-
val << 8);
355+
val << 7);
350356
break;
351357
case hwmon_pwm_enable:
352358
fan_config = data->fan_config[channel];

0 commit comments

Comments
 (0)