hwmon: (adt7475) Implement support for #pwm-cells = <3>

The adt7475 driver and binding are outliers requiring 4 pwm-cells. The
typical value is 3, there are a few devices that use a lesser value for
historical reasons, no other uses a value bigger than 3.

Implement support for 3 cells to make the adt7475 binding match the
usual PWM binding.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com>
Link: https://lore.kernel.org/r/b5cc994cbe74095e39468fd694c721d7c879db78.1750361514.git.u.kleine-koenig@baylibre.com
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
Uwe Kleine-König 2025-06-19 21:37:45 +02:00 committed by Guenter Roeck
parent 75ca1e5875
commit 50f16073d1
1 changed files with 17 additions and 3 deletions

View File

@ -1704,12 +1704,15 @@ static int adt7475_pwm_properties_parse_reference_args(struct fwnode_handle *fwn
if (ret)
return ret;
if (rargs.nargs != 4) {
if (rargs.nargs != 3 && rargs.nargs != 4) {
fwnode_handle_put(rargs.fwnode);
return -EINVAL;
}
for (i = 0; i < 4; i++)
/* Let duty_cycle default to period */
args[3] = rargs.args[1];
for (i = 0; i < rargs.nargs; i++)
args[i] = rargs.args[i];
ret = _adt7475_pwm_properties_parse_args(args, cfg);
@ -1724,11 +1727,22 @@ static int adt7475_pwm_properties_parse_args(struct fwnode_handle *fwnode,
{
int ret;
u32 args[4] = {};
size_t n_vals = fwnode_property_count_u32(fwnode, "pwms");
ret = fwnode_property_read_u32_array(fwnode, "pwms", args, ARRAY_SIZE(args));
if (n_vals != 3 && n_vals != 4)
return -EOVERFLOW;
ret = fwnode_property_read_u32_array(fwnode, "pwms", args, n_vals);
if (ret)
return ret;
/*
* If there are no item to define the duty_cycle, default it to the
* period.
*/
if (n_vals == 3)
args[3] = args[1];
return _adt7475_pwm_properties_parse_args(args, cfg);
}