diff options
author | Daniel Matyas <daniel.matyas@analog.com> | 2023-10-31 19:21:55 +0100 |
---|---|---|
committer | Guenter Roeck <linux@roeck-us.net> | 2023-12-11 15:42:50 +0100 |
commit | 8a0806df46b62e88793cab0035da477092bda09a (patch) | |
tree | a491c7a142d90e9be7ceada37d13d6c1541b54ed /drivers/hwmon | |
parent | hwmon: (max31827) Add support for max31828 and max31829 (diff) | |
download | linux-8a0806df46b62e88793cab0035da477092bda09a.tar.xz linux-8a0806df46b62e88793cab0035da477092bda09a.zip |
hwmon: (max31827) Update bits with shutdown_write()
Added 'mask' parameter to the shutdown_write() function. Now it can
either write or update bits, depending on the value of mask. This is
needed, because for alarms a write is necessary, but for resolution only
the resolution bits should be updated.
Signed-off-by: Daniel Matyas <daniel.matyas@analog.com>
Link: https://lore.kernel.org/r/20231031182158.124608-3-daniel.matyas@analog.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Diffstat (limited to 'drivers/hwmon')
-rw-r--r-- | drivers/hwmon/max31827.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/hwmon/max31827.c b/drivers/hwmon/max31827.c index e42d5bce8a57..3b38fdf0ebb2 100644 --- a/drivers/hwmon/max31827.c +++ b/drivers/hwmon/max31827.c @@ -81,7 +81,7 @@ static const struct regmap_config max31827_regmap = { }; static int shutdown_write(struct max31827_state *st, unsigned int reg, - unsigned int val) + unsigned int mask, unsigned int val) { unsigned int cfg; unsigned int cnv_rate; @@ -98,7 +98,10 @@ static int shutdown_write(struct max31827_state *st, unsigned int reg, mutex_lock(&st->lock); if (!st->enable) { - ret = regmap_write(st->regmap, reg, val); + if (!mask) + ret = regmap_write(st->regmap, reg, val); + else + ret = regmap_update_bits(st->regmap, reg, mask, val); goto unlock; } @@ -113,7 +116,11 @@ static int shutdown_write(struct max31827_state *st, unsigned int reg, if (ret) goto unlock; - ret = regmap_write(st->regmap, reg, val); + if (!mask) + ret = regmap_write(st->regmap, reg, val); + else + ret = regmap_update_bits(st->regmap, reg, mask, val); + if (ret) goto unlock; @@ -131,7 +138,7 @@ static int write_alarm_val(struct max31827_state *st, unsigned int reg, { val = MAX31827_M_DGR_TO_16_BIT(val); - return shutdown_write(st, reg, val); + return shutdown_write(st, reg, 0, val); } static umode_t max31827_is_visible(const void *state, |