Commit 0b3c04c8 authored by Guenter Roeck's avatar Guenter Roeck
Browse files

hwmon: (pmbus) Do not set regulators_node for single-channel chips



Single-channel regulators do not need and should not have a "regulators"
node. We can not entirely remove it due to existing bindings. To solve the
problem for new drivers, provide additional macros PMBUS_REGULATOR_ONE_NODE
and PMBUS_REGULATOR_STEP_ONE_NODE and convert existing drivers to use those
macros. The exception is the ir38064 driver because its devicetree files
and its description do not require or use the nested regulators node.

Modify PMBUS_REGULATOR_STEP_ONE and PMBUS_REGULATOR_ONE to set the
regulators_node pointer to NULL.

Cc: Cedricjustine.Encarnacion@analog.com
Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
Reviewed-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/r/20250322142602.560042-1-linux@roeck-us.net


Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
parent 629cf8f6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -437,7 +437,7 @@ static int lm25066_write_word_data(struct i2c_client *client, int page, int reg,

#if IS_ENABLED(CONFIG_SENSORS_LM25066_REGULATOR)
static const struct regulator_desc lm25066_reg_desc[] = {
	PMBUS_REGULATOR_ONE("vout"),
	PMBUS_REGULATOR_ONE_NODE("vout"),
};
#endif

+2 −2
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ static const struct regulator_desc mpq7932_regulators_desc[] = {
};

static const struct regulator_desc mpq7932_regulators_desc_one[] = {
	PMBUS_REGULATOR_STEP_ONE("buck", MPQ7932_N_VOLTAGES,
	PMBUS_REGULATOR_STEP_ONE_NODE("buck", MPQ7932_N_VOLTAGES,
				      MPQ7932_UV_STEP, MPQ7932_BUCK_UV_MIN),
};
#endif
+15 −3
Original line number Diff line number Diff line
@@ -509,11 +509,11 @@ int pmbus_regulator_init_cb(struct regulator_dev *rdev,

#define PMBUS_REGULATOR(_name, _id)   PMBUS_REGULATOR_STEP(_name, _id, 0, 0, 0)

#define PMBUS_REGULATOR_STEP_ONE(_name, _voltages, _step, _min_uV)  \
#define __PMBUS_REGULATOR_STEP_ONE(_name, _node, _voltages, _step, _min_uV)  \
	{							\
		.name = (_name),				\
		.of_match = of_match_ptr(_name),		\
		.regulators_node = of_match_ptr("regulators"),	\
		.regulators_node = of_match_ptr(_node),		\
		.ops = &pmbus_regulator_ops,			\
		.type = REGULATOR_VOLTAGE,			\
		.owner = THIS_MODULE,				\
@@ -523,6 +523,18 @@ int pmbus_regulator_init_cb(struct regulator_dev *rdev,
		.init_cb = pmbus_regulator_init_cb,		\
	}

/*
 * _NODE macros are defined for historic reasons and MUST NOT be used in new
 * drivers.
 */
#define PMBUS_REGULATOR_STEP_ONE_NODE(_name, _voltages, _step, _min_uV)  \
	__PMBUS_REGULATOR_STEP_ONE(_name, "regulators", _voltages, _step, _min_uV)

#define PMBUS_REGULATOR_ONE_NODE(_name)	PMBUS_REGULATOR_STEP_ONE_NODE(_name, 0, 0, 0)

#define PMBUS_REGULATOR_STEP_ONE(_name, _voltages, _step, _min_uV)  \
	__PMBUS_REGULATOR_STEP_ONE(_name, NULL, _voltages, _step, _min_uV)

#define PMBUS_REGULATOR_ONE(_name)	PMBUS_REGULATOR_STEP_ONE(_name, 0, 0, 0)

/* Function declarations */
+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
#include "pmbus.h"

static const struct regulator_desc __maybe_unused tda38640_reg_desc[] = {
	PMBUS_REGULATOR_ONE("vout"),
	PMBUS_REGULATOR_ONE_NODE("vout"),
};

struct tda38640_data {
+1 −1
Original line number Diff line number Diff line
@@ -333,7 +333,7 @@ static int tps25990_write_byte_data(struct i2c_client *client,

#if IS_ENABLED(CONFIG_SENSORS_TPS25990_REGULATOR)
static const struct regulator_desc tps25990_reg_desc[] = {
	PMBUS_REGULATOR_ONE("vout"),
	PMBUS_REGULATOR_ONE_NODE("vout"),
};
#endif