PWM duty reading works. Tested-by: Václav Kubernát <kubernat@xxxxxxxxxx> st 26. 5. 2021 v 17:40 odesílatel Guenter Roeck <linux@xxxxxxxxxxxx> napsal: > > The MAX31790 has two sets of registers for pwm duty cycles, one to request > a duty cycle and one to read the actual current duty cycle. Both do not > have to be the same. > > When reporting the pwm duty cycle to the user, the actual pwm duty cycle > from pwm duty cycle registers needs to be reported. When setting it, the > pwm target duty cycle needs to be written. Since we don't know the actual > pwm duty cycle after a target pwm duty cycle has been written, set the > valid flag to false to indicate that actual pwm duty cycle should be read > from the chip instead of using cached values. > > Cc: Jan Kundrát <jan.kundrat@xxxxxxxxx> > Cc: Václav Kubernát <kubernat@xxxxxxxxx> > Signed-off-by: Guenter Roeck <linux@xxxxxxxxxxxx> > --- > Documentation/hwmon/max31790.rst | 3 ++- > drivers/hwmon/max31790.c | 6 +++--- > 2 files changed, 5 insertions(+), 4 deletions(-) > > diff --git a/Documentation/hwmon/max31790.rst b/Documentation/hwmon/max31790.rst > index f301385d8cef..54ff0f49e28f 100644 > --- a/Documentation/hwmon/max31790.rst > +++ b/Documentation/hwmon/max31790.rst > @@ -39,5 +39,6 @@ fan[1-12]_input RO fan tachometer speed in RPM > fan[1-12]_fault RO fan experienced fault > fan[1-6]_target RW desired fan speed in RPM > pwm[1-6]_enable RW regulator mode, 0=disabled, 1=manual mode, 2=rpm mode > -pwm[1-6] RW fan target duty cycle (0-255) > +pwm[1-6] RW read: current pwm duty cycle, > + write: target pwm duty cycle (0-255) > ================== === ======================================================= > diff --git a/drivers/hwmon/max31790.c b/drivers/hwmon/max31790.c > index f6d4fc0a2f13..693497e09ac0 100644 > --- a/drivers/hwmon/max31790.c > +++ b/drivers/hwmon/max31790.c > @@ -104,7 +104,7 @@ static struct max31790_data *max31790_update_device(struct device *dev) > data->tach[NR_CHANNEL + i] = rv; > } else { > rv = i2c_smbus_read_word_swapped(client, > - MAX31790_REG_PWMOUT(i)); > + MAX31790_REG_PWM_DUTY_CYCLE(i)); > if (rv < 0) > goto abort; > data->pwm[i] = rv; > @@ -299,10 +299,10 @@ static int max31790_write_pwm(struct device *dev, u32 attr, int channel, > err = -EINVAL; > break; > } > - data->pwm[channel] = val << 8; > + data->valid = false; > err = i2c_smbus_write_word_swapped(client, > MAX31790_REG_PWMOUT(channel), > - data->pwm[channel]); > + val << 8); > break; > case hwmon_pwm_enable: > fan_config = data->fan_config[channel]; > -- > 2.25.1 >