hwmon: (adt7475) Add support for inverting pwm output
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@alliedtelesis.co.nz> [groeck: dev_err -> dev_warn] Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
2ecff39791
commit
86da28eed4
@ -1509,6 +1509,36 @@ static int load_attenuators(const struct i2c_client *client, int chip,
|
|||||||
return 0;
|
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,
|
static int adt7475_probe(struct i2c_client *client,
|
||||||
const struct i2c_device_id *id)
|
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++)
|
for (i = 0; i < ADT7475_PWM_COUNT; i++)
|
||||||
adt7475_read_pwm(client, i);
|
adt7475_read_pwm(client, i);
|
||||||
|
|
||||||
|
ret = adt7475_set_pwm_polarity(client);
|
||||||
|
if (ret && ret != -EINVAL)
|
||||||
|
dev_warn(&client->dev, "Error configuring pwm polarity\n");
|
||||||
|
|
||||||
/* Start monitoring */
|
/* Start monitoring */
|
||||||
switch (chip) {
|
switch (chip) {
|
||||||
case adt7475:
|
case adt7475:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user