On Thu, Feb 27, 2020 at 09:46:42PM +1300, Chris Packham wrote: > Add a "adi,pwm-active-state" device-tree property to allow hardware > designs to use inverted logic on the PWM output. > > Signed-off-by: Chris Packham <chris.packham@xxxxxxxxxxxxxxxxxxx> Applied, with change described below. Please let me know if ignoring the error is not what you wanted. Thanks, Guenter > --- > > Notes: > Changes in v5: > - change to adi,pwm-active-state > - uint32 array > > Changes in v4: > - use vendor prefix for new property > > Changes in v3: > - New > > drivers/hwmon/adt7475.c | 34 ++++++++++++++++++++++++++++++++++ > 1 file changed, 34 insertions(+) > > diff --git a/drivers/hwmon/adt7475.c b/drivers/hwmon/adt7475.c > index 3649b18359dc..142a4fec688b 100644 > --- a/drivers/hwmon/adt7475.c > +++ b/drivers/hwmon/adt7475.c > @@ -1509,6 +1509,36 @@ static int load_attenuators(const struct i2c_client *client, int chip, > return 0; > } > > +static int adt7475_set_pwm_polarity(struct i2c_client *client) > +{ > + u32 states[ADT7475_PWM_COUNT]; > + int ret, i; > + u8 val; > + > + ret = of_property_read_u32_array(client->dev.of_node, > + "adi,pwm-active-state", states, > + ARRAY_SIZE(states)); > + if (ret) > + return ret; > + > + for (i = 0; i < ADT7475_PWM_COUNT; i++) { > + ret = adt7475_read(PWM_CONFIG_REG(i)); > + if (ret < 0) > + return ret; > + val = ret; > + if (states[i]) > + val &= ~BIT(4); > + else > + val |= BIT(4); > + > + ret = i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(i), val); > + if (ret) > + return ret; > + } > + > + return 0; > +} > + > static int adt7475_probe(struct i2c_client *client, > const struct i2c_device_id *id) > { > @@ -1617,6 +1647,10 @@ static int adt7475_probe(struct i2c_client *client, > for (i = 0; i < ADT7475_PWM_COUNT; i++) > adt7475_read_pwm(client, i); > > + ret = adt7475_set_pwm_polarity(client); > + if (ret && ret != -EINVAL) > + dev_err(&client->dev, "Error configuring pwm polarity\n"); dev_err -> dev_warn > + > /* Start monitoring */ > switch (chip) { > case adt7475: