All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/6] regulator: mcp16502: add support for ramp delay
@ 2020-11-11  9:06 ` Claudiu Beznea
  0 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: s.hauer, ttynkkynen, linus.walleij, axel.lin, linux-kernel,
	linux-arm-kernel, Claudiu Beznea

Hi,

This series adds support for ramp delay on mcp16502. It also adds
some cleanup on mcp16502.

Apart from that patches 1/6 fixes the selector validation in case
the regulator::desc::linear_min_sel is not zero.

Thank you,
Claudiu Beznea

Changes in v2:
- rebase on top of regulator/for-next
- checked 1/6 and 3/6 applies on top of regulator/for-5.10

Claudiu Beznea (6):
  regulator: core: validate selector against linear_min_sel
  regulator: core: do not continue if selector match
  regulator: mcp16502: add linear_min_sel
  regulator: mcp16502: adapt for get/set on other registers
  regulator: mcp16502: add support for ramp delay
  regulator: mcp16502: remove void documentation of struct mcp16502

 drivers/regulator/core.c     |  12 +++-
 drivers/regulator/helpers.c  |   3 +-
 drivers/regulator/mcp16502.c | 135 ++++++++++++++++++++++++++++++++++++-------
 3 files changed, 127 insertions(+), 23 deletions(-)

-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 0/6] regulator: mcp16502: add support for ramp delay
@ 2020-11-11  9:06 ` Claudiu Beznea
  0 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: axel.lin, s.hauer, linux-kernel, Claudiu Beznea, ttynkkynen,
	linus.walleij, linux-arm-kernel

Hi,

This series adds support for ramp delay on mcp16502. It also adds
some cleanup on mcp16502.

Apart from that patches 1/6 fixes the selector validation in case
the regulator::desc::linear_min_sel is not zero.

Thank you,
Claudiu Beznea

Changes in v2:
- rebase on top of regulator/for-next
- checked 1/6 and 3/6 applies on top of regulator/for-5.10

Claudiu Beznea (6):
  regulator: core: validate selector against linear_min_sel
  regulator: core: do not continue if selector match
  regulator: mcp16502: add linear_min_sel
  regulator: mcp16502: adapt for get/set on other registers
  regulator: mcp16502: add support for ramp delay
  regulator: mcp16502: remove void documentation of struct mcp16502

 drivers/regulator/core.c     |  12 +++-
 drivers/regulator/helpers.c  |   3 +-
 drivers/regulator/mcp16502.c | 135 ++++++++++++++++++++++++++++++++++++-------
 3 files changed, 127 insertions(+), 23 deletions(-)

-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 1/6] regulator: core: validate selector against linear_min_sel
  2020-11-11  9:06 ` Claudiu Beznea
@ 2020-11-11  9:06   ` Claudiu Beznea
  -1 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: s.hauer, ttynkkynen, linus.walleij, axel.lin, linux-kernel,
	linux-arm-kernel, Claudiu Beznea

There are regulators who's min selector is not zero. Selectors loops
(looping b/w zero and regulator::desc::n_voltages) might throw errors
because invalid selectors are used (lower than
regulator::desc::linear_min_sel). For this situations validate selectors
against regulator::desc::linear_min_sel.

Fixes: 3a40cfc36bb3d ("regulator: core: create unlocked version of regulator_list_voltage")
Fixes: 04eca28cde52c ("regulator: Add helpers for low-level register access")
Fixes: 88cd222b259d6 ("regulator: provide consumer interface for fall/rise time")
Fixes: d295f7670127e ("regulator: core: Move list_voltage_{linear,linear_range,table} to helpers.c")
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/core.c    | 9 +++++++--
 drivers/regulator/helpers.c | 3 ++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 2e1ea18221ef..1d0d35f14f37 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -2958,7 +2958,8 @@ static int _regulator_list_voltage(struct regulator_dev *rdev,
 		return rdev->desc->fixed_uV;
 
 	if (ops->list_voltage) {
-		if (selector >= rdev->desc->n_voltages)
+		if (selector >= rdev->desc->n_voltages ||
+		    selector < rdev->desc->linear_min_sel)
 			return -EINVAL;
 		if (lock)
 			regulator_lock(rdev);
@@ -3109,7 +3110,8 @@ int regulator_list_hardware_vsel(struct regulator *regulator,
 	struct regulator_dev *rdev = regulator->rdev;
 	const struct regulator_ops *ops = rdev->desc->ops;
 
-	if (selector >= rdev->desc->n_voltages)
+	if (selector >= rdev->desc->n_voltages ||
+	    selector < rdev->desc->linear_min_sel)
 		return -EINVAL;
 	if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap)
 		return -EOPNOTSUPP;
@@ -4032,6 +4034,9 @@ int regulator_set_voltage_time(struct regulator *regulator,
 
 	for (i = 0; i < rdev->desc->n_voltages; i++) {
 		/* We only look for exact voltage matches here */
+		if (i < rdev->desc->linear_min_sel)
+			continue;
+
 		voltage = regulator_list_voltage(regulator, i);
 		if (voltage < 0)
 			return -EINVAL;
diff --git a/drivers/regulator/helpers.c b/drivers/regulator/helpers.c
index e4bb09bbd3fa..974f1a63993d 100644
--- a/drivers/regulator/helpers.c
+++ b/drivers/regulator/helpers.c
@@ -647,7 +647,8 @@ int regulator_list_voltage_table(struct regulator_dev *rdev,
 		return -EINVAL;
 	}
 
-	if (selector >= rdev->desc->n_voltages)
+	if (selector >= rdev->desc->n_voltages ||
+	    selector < rdev->desc->linear_min_sel)
 		return -EINVAL;
 
 	return rdev->desc->volt_table[selector];
-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 1/6] regulator: core: validate selector against linear_min_sel
@ 2020-11-11  9:06   ` Claudiu Beznea
  0 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: axel.lin, s.hauer, linux-kernel, Claudiu Beznea, ttynkkynen,
	linus.walleij, linux-arm-kernel

There are regulators who's min selector is not zero. Selectors loops
(looping b/w zero and regulator::desc::n_voltages) might throw errors
because invalid selectors are used (lower than
regulator::desc::linear_min_sel). For this situations validate selectors
against regulator::desc::linear_min_sel.

Fixes: 3a40cfc36bb3d ("regulator: core: create unlocked version of regulator_list_voltage")
Fixes: 04eca28cde52c ("regulator: Add helpers for low-level register access")
Fixes: 88cd222b259d6 ("regulator: provide consumer interface for fall/rise time")
Fixes: d295f7670127e ("regulator: core: Move list_voltage_{linear,linear_range,table} to helpers.c")
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/core.c    | 9 +++++++--
 drivers/regulator/helpers.c | 3 ++-
 2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 2e1ea18221ef..1d0d35f14f37 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -2958,7 +2958,8 @@ static int _regulator_list_voltage(struct regulator_dev *rdev,
 		return rdev->desc->fixed_uV;
 
 	if (ops->list_voltage) {
-		if (selector >= rdev->desc->n_voltages)
+		if (selector >= rdev->desc->n_voltages ||
+		    selector < rdev->desc->linear_min_sel)
 			return -EINVAL;
 		if (lock)
 			regulator_lock(rdev);
@@ -3109,7 +3110,8 @@ int regulator_list_hardware_vsel(struct regulator *regulator,
 	struct regulator_dev *rdev = regulator->rdev;
 	const struct regulator_ops *ops = rdev->desc->ops;
 
-	if (selector >= rdev->desc->n_voltages)
+	if (selector >= rdev->desc->n_voltages ||
+	    selector < rdev->desc->linear_min_sel)
 		return -EINVAL;
 	if (ops->set_voltage_sel != regulator_set_voltage_sel_regmap)
 		return -EOPNOTSUPP;
@@ -4032,6 +4034,9 @@ int regulator_set_voltage_time(struct regulator *regulator,
 
 	for (i = 0; i < rdev->desc->n_voltages; i++) {
 		/* We only look for exact voltage matches here */
+		if (i < rdev->desc->linear_min_sel)
+			continue;
+
 		voltage = regulator_list_voltage(regulator, i);
 		if (voltage < 0)
 			return -EINVAL;
diff --git a/drivers/regulator/helpers.c b/drivers/regulator/helpers.c
index e4bb09bbd3fa..974f1a63993d 100644
--- a/drivers/regulator/helpers.c
+++ b/drivers/regulator/helpers.c
@@ -647,7 +647,8 @@ int regulator_list_voltage_table(struct regulator_dev *rdev,
 		return -EINVAL;
 	}
 
-	if (selector >= rdev->desc->n_voltages)
+	if (selector >= rdev->desc->n_voltages ||
+	    selector < rdev->desc->linear_min_sel)
 		return -EINVAL;
 
 	return rdev->desc->volt_table[selector];
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 2/6] regulator: core: do not continue if selector match
  2020-11-11  9:06 ` Claudiu Beznea
@ 2020-11-11  9:06   ` Claudiu Beznea
  -1 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: s.hauer, ttynkkynen, linus.walleij, axel.lin, linux-kernel,
	linux-arm-kernel, Claudiu Beznea

Do not continue if selector has already been located.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/core.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 1d0d35f14f37..6724324d372c 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -4037,6 +4037,9 @@ int regulator_set_voltage_time(struct regulator *regulator,
 		if (i < rdev->desc->linear_min_sel)
 			continue;
 
+		if (old_sel >= 0 && new_sel >= 0)
+			break;
+
 		voltage = regulator_list_voltage(regulator, i);
 		if (voltage < 0)
 			return -EINVAL;
-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 2/6] regulator: core: do not continue if selector match
@ 2020-11-11  9:06   ` Claudiu Beznea
  0 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: axel.lin, s.hauer, linux-kernel, Claudiu Beznea, ttynkkynen,
	linus.walleij, linux-arm-kernel

Do not continue if selector has already been located.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/core.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 1d0d35f14f37..6724324d372c 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -4037,6 +4037,9 @@ int regulator_set_voltage_time(struct regulator *regulator,
 		if (i < rdev->desc->linear_min_sel)
 			continue;
 
+		if (old_sel >= 0 && new_sel >= 0)
+			break;
+
 		voltage = regulator_list_voltage(regulator, i);
 		if (voltage < 0)
 			return -EINVAL;
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 3/6] regulator: mcp16502: add linear_min_sel
  2020-11-11  9:06 ` Claudiu Beznea
@ 2020-11-11  9:06   ` Claudiu Beznea
  -1 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: s.hauer, ttynkkynen, linus.walleij, axel.lin, linux-kernel,
	linux-arm-kernel, Claudiu Beznea

Selectors b/w zero and VDD_LOW_SEL are not valid. Use linear_min_sel.

Fixes: 919261c03e7ca ("regulator: mcp16502: add regulator driver for MCP16502")
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/mcp16502.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/regulator/mcp16502.c b/drivers/regulator/mcp16502.c
index 6d0ad74935b3..ab78f831f5bf 100644
--- a/drivers/regulator/mcp16502.c
+++ b/drivers/regulator/mcp16502.c
@@ -93,6 +93,7 @@ static unsigned int mcp16502_of_map_mode(unsigned int mode)
 		.owner			= THIS_MODULE,			\
 		.n_voltages		= MCP16502_VSEL + 1,		\
 		.linear_ranges		= _ranges,			\
+		.linear_min_sel		= VDD_LOW_SEL,			\
 		.n_linear_ranges	= ARRAY_SIZE(_ranges),		\
 		.of_match		= of_match_ptr(_name),		\
 		.of_map_mode		= mcp16502_of_map_mode,		\
-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 3/6] regulator: mcp16502: add linear_min_sel
@ 2020-11-11  9:06   ` Claudiu Beznea
  0 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: axel.lin, s.hauer, linux-kernel, Claudiu Beznea, ttynkkynen,
	linus.walleij, linux-arm-kernel

Selectors b/w zero and VDD_LOW_SEL are not valid. Use linear_min_sel.

Fixes: 919261c03e7ca ("regulator: mcp16502: add regulator driver for MCP16502")
Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/mcp16502.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/regulator/mcp16502.c b/drivers/regulator/mcp16502.c
index 6d0ad74935b3..ab78f831f5bf 100644
--- a/drivers/regulator/mcp16502.c
+++ b/drivers/regulator/mcp16502.c
@@ -93,6 +93,7 @@ static unsigned int mcp16502_of_map_mode(unsigned int mode)
 		.owner			= THIS_MODULE,			\
 		.n_voltages		= MCP16502_VSEL + 1,		\
 		.linear_ranges		= _ranges,			\
+		.linear_min_sel		= VDD_LOW_SEL,			\
 		.n_linear_ranges	= ARRAY_SIZE(_ranges),		\
 		.of_match		= of_match_ptr(_name),		\
 		.of_map_mode		= mcp16502_of_map_mode,		\
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 4/6] regulator: mcp16502: adapt for get/set on other registers
  2020-11-11  9:06 ` Claudiu Beznea
@ 2020-11-11  9:06   ` Claudiu Beznea
  -1 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: s.hauer, ttynkkynen, linus.walleij, axel.lin, linux-kernel,
	linux-arm-kernel, Claudiu Beznea

MCP16502 have multiple registers for each regulator (as described
in enum mcp16502_reg). Adapt the code to be able to get/set all these
registers. This is necessary for the following commits.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/mcp16502.c | 43 +++++++++++++++++++++++++++----------------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/drivers/regulator/mcp16502.c b/drivers/regulator/mcp16502.c
index ab78f831f5bf..48eb64bc4018 100644
--- a/drivers/regulator/mcp16502.c
+++ b/drivers/regulator/mcp16502.c
@@ -54,13 +54,9 @@
  * This function is useful for iterating over all regulators and accessing their
  * registers in a generic way or accessing a regulator device by its id.
  */
-#define MCP16502_BASE(i) (((i) + 1) << 4)
+#define MCP16502_REG_BASE(i, r) ((((i) + 1) << 4) + MCP16502_REG_##r)
 #define MCP16502_STAT_BASE(i) ((i) + 5)
 
-#define MCP16502_OFFSET_MODE_A 0
-#define MCP16502_OFFSET_MODE_LPM 1
-#define MCP16502_OFFSET_MODE_HIB 2
-
 #define MCP16502_OPMODE_ACTIVE REGULATOR_MODE_NORMAL
 #define MCP16502_OPMODE_LPM REGULATOR_MODE_IDLE
 #define MCP16502_OPMODE_HIB REGULATOR_MODE_STANDBY
@@ -75,6 +71,23 @@
 #define MCP16502_MIN_REG 0x0
 #define MCP16502_MAX_REG 0x65
 
+/**
+ * enum mcp16502_reg - MCP16502 regulators's registers
+ * @MCP16502_REG_A: active state register
+ * @MCP16502_REG_LPM: low power mode state register
+ * @MCP16502_REG_HIB: hibernate state register
+ * @MCP16502_REG_SEQ: startup sequence register
+ * @MCP16502_REG_CFG: configuration register
+ */
+enum mcp16502_reg {
+	MCP16502_REG_A,
+	MCP16502_REG_LPM,
+	MCP16502_REG_HIB,
+	MCP16502_REG_HPM,
+	MCP16502_REG_SEQ,
+	MCP16502_REG_CFG,
+};
+
 static unsigned int mcp16502_of_map_mode(unsigned int mode)
 {
 	if (mode == REGULATOR_MODE_NORMAL || mode == REGULATOR_MODE_IDLE)
@@ -144,22 +157,20 @@ static void mcp16502_gpio_set_mode(struct mcp16502 *mcp, int mode)
 }
 
 /*
- * mcp16502_get_reg() - get the PMIC's configuration register for opmode
+ * mcp16502_get_reg() - get the PMIC's state configuration register for opmode
  *
  * @rdev: the regulator whose register we are searching
  * @opmode: the PMIC's operating mode ACTIVE, Low-power, Hibernate
  */
-static int mcp16502_get_reg(struct regulator_dev *rdev, int opmode)
+static int mcp16502_get_state_reg(struct regulator_dev *rdev, int opmode)
 {
-	int reg = MCP16502_BASE(rdev_get_id(rdev));
-
 	switch (opmode) {
 	case MCP16502_OPMODE_ACTIVE:
-		return reg + MCP16502_OFFSET_MODE_A;
+		return MCP16502_REG_BASE(rdev_get_id(rdev), A);
 	case MCP16502_OPMODE_LPM:
-		return reg + MCP16502_OFFSET_MODE_LPM;
+		return MCP16502_REG_BASE(rdev_get_id(rdev), LPM);
 	case MCP16502_OPMODE_HIB:
-		return reg + MCP16502_OFFSET_MODE_HIB;
+		return MCP16502_REG_BASE(rdev_get_id(rdev), HIB);
 	default:
 		return -EINVAL;
 	}
@@ -179,7 +190,7 @@ static unsigned int mcp16502_get_mode(struct regulator_dev *rdev)
 	unsigned int val;
 	int ret, reg;
 
-	reg = mcp16502_get_reg(rdev, MCP16502_OPMODE_ACTIVE);
+	reg = mcp16502_get_state_reg(rdev, MCP16502_OPMODE_ACTIVE);
 	if (reg < 0)
 		return reg;
 
@@ -210,7 +221,7 @@ static int _mcp16502_set_mode(struct regulator_dev *rdev, unsigned int mode,
 	int val;
 	int reg;
 
-	reg = mcp16502_get_reg(rdev, op_mode);
+	reg = mcp16502_get_state_reg(rdev, op_mode);
 	if (reg < 0)
 		return reg;
 
@@ -269,10 +280,10 @@ static int mcp16502_suspend_get_target_reg(struct regulator_dev *rdev)
 {
 	switch (pm_suspend_target_state) {
 	case PM_SUSPEND_STANDBY:
-		return mcp16502_get_reg(rdev, MCP16502_OPMODE_LPM);
+		return mcp16502_get_state_reg(rdev, MCP16502_OPMODE_LPM);
 	case PM_SUSPEND_ON:
 	case PM_SUSPEND_MEM:
-		return mcp16502_get_reg(rdev, MCP16502_OPMODE_HIB);
+		return mcp16502_get_state_reg(rdev, MCP16502_OPMODE_HIB);
 	default:
 		dev_err(&rdev->dev, "invalid suspend target: %d\n",
 			pm_suspend_target_state);
-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 4/6] regulator: mcp16502: adapt for get/set on other registers
@ 2020-11-11  9:06   ` Claudiu Beznea
  0 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: axel.lin, s.hauer, linux-kernel, Claudiu Beznea, ttynkkynen,
	linus.walleij, linux-arm-kernel

MCP16502 have multiple registers for each regulator (as described
in enum mcp16502_reg). Adapt the code to be able to get/set all these
registers. This is necessary for the following commits.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/mcp16502.c | 43 +++++++++++++++++++++++++++----------------
 1 file changed, 27 insertions(+), 16 deletions(-)

diff --git a/drivers/regulator/mcp16502.c b/drivers/regulator/mcp16502.c
index ab78f831f5bf..48eb64bc4018 100644
--- a/drivers/regulator/mcp16502.c
+++ b/drivers/regulator/mcp16502.c
@@ -54,13 +54,9 @@
  * This function is useful for iterating over all regulators and accessing their
  * registers in a generic way or accessing a regulator device by its id.
  */
-#define MCP16502_BASE(i) (((i) + 1) << 4)
+#define MCP16502_REG_BASE(i, r) ((((i) + 1) << 4) + MCP16502_REG_##r)
 #define MCP16502_STAT_BASE(i) ((i) + 5)
 
-#define MCP16502_OFFSET_MODE_A 0
-#define MCP16502_OFFSET_MODE_LPM 1
-#define MCP16502_OFFSET_MODE_HIB 2
-
 #define MCP16502_OPMODE_ACTIVE REGULATOR_MODE_NORMAL
 #define MCP16502_OPMODE_LPM REGULATOR_MODE_IDLE
 #define MCP16502_OPMODE_HIB REGULATOR_MODE_STANDBY
@@ -75,6 +71,23 @@
 #define MCP16502_MIN_REG 0x0
 #define MCP16502_MAX_REG 0x65
 
+/**
+ * enum mcp16502_reg - MCP16502 regulators's registers
+ * @MCP16502_REG_A: active state register
+ * @MCP16502_REG_LPM: low power mode state register
+ * @MCP16502_REG_HIB: hibernate state register
+ * @MCP16502_REG_SEQ: startup sequence register
+ * @MCP16502_REG_CFG: configuration register
+ */
+enum mcp16502_reg {
+	MCP16502_REG_A,
+	MCP16502_REG_LPM,
+	MCP16502_REG_HIB,
+	MCP16502_REG_HPM,
+	MCP16502_REG_SEQ,
+	MCP16502_REG_CFG,
+};
+
 static unsigned int mcp16502_of_map_mode(unsigned int mode)
 {
 	if (mode == REGULATOR_MODE_NORMAL || mode == REGULATOR_MODE_IDLE)
@@ -144,22 +157,20 @@ static void mcp16502_gpio_set_mode(struct mcp16502 *mcp, int mode)
 }
 
 /*
- * mcp16502_get_reg() - get the PMIC's configuration register for opmode
+ * mcp16502_get_reg() - get the PMIC's state configuration register for opmode
  *
  * @rdev: the regulator whose register we are searching
  * @opmode: the PMIC's operating mode ACTIVE, Low-power, Hibernate
  */
-static int mcp16502_get_reg(struct regulator_dev *rdev, int opmode)
+static int mcp16502_get_state_reg(struct regulator_dev *rdev, int opmode)
 {
-	int reg = MCP16502_BASE(rdev_get_id(rdev));
-
 	switch (opmode) {
 	case MCP16502_OPMODE_ACTIVE:
-		return reg + MCP16502_OFFSET_MODE_A;
+		return MCP16502_REG_BASE(rdev_get_id(rdev), A);
 	case MCP16502_OPMODE_LPM:
-		return reg + MCP16502_OFFSET_MODE_LPM;
+		return MCP16502_REG_BASE(rdev_get_id(rdev), LPM);
 	case MCP16502_OPMODE_HIB:
-		return reg + MCP16502_OFFSET_MODE_HIB;
+		return MCP16502_REG_BASE(rdev_get_id(rdev), HIB);
 	default:
 		return -EINVAL;
 	}
@@ -179,7 +190,7 @@ static unsigned int mcp16502_get_mode(struct regulator_dev *rdev)
 	unsigned int val;
 	int ret, reg;
 
-	reg = mcp16502_get_reg(rdev, MCP16502_OPMODE_ACTIVE);
+	reg = mcp16502_get_state_reg(rdev, MCP16502_OPMODE_ACTIVE);
 	if (reg < 0)
 		return reg;
 
@@ -210,7 +221,7 @@ static int _mcp16502_set_mode(struct regulator_dev *rdev, unsigned int mode,
 	int val;
 	int reg;
 
-	reg = mcp16502_get_reg(rdev, op_mode);
+	reg = mcp16502_get_state_reg(rdev, op_mode);
 	if (reg < 0)
 		return reg;
 
@@ -269,10 +280,10 @@ static int mcp16502_suspend_get_target_reg(struct regulator_dev *rdev)
 {
 	switch (pm_suspend_target_state) {
 	case PM_SUSPEND_STANDBY:
-		return mcp16502_get_reg(rdev, MCP16502_OPMODE_LPM);
+		return mcp16502_get_state_reg(rdev, MCP16502_OPMODE_LPM);
 	case PM_SUSPEND_ON:
 	case PM_SUSPEND_MEM:
-		return mcp16502_get_reg(rdev, MCP16502_OPMODE_HIB);
+		return mcp16502_get_state_reg(rdev, MCP16502_OPMODE_HIB);
 	default:
 		dev_err(&rdev->dev, "invalid suspend target: %d\n",
 			pm_suspend_target_state);
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 5/6] regulator: mcp16502: add support for ramp delay
  2020-11-11  9:06 ` Claudiu Beznea
@ 2020-11-11  9:06   ` Claudiu Beznea
  -1 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: s.hauer, ttynkkynen, linus.walleij, axel.lin, linux-kernel,
	linux-arm-kernel, Claudiu Beznea

MCP16502 have configurable ramp delay support (via DVSR bits in
regulators' CFG register).

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/mcp16502.c | 89 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 87 insertions(+), 2 deletions(-)

diff --git a/drivers/regulator/mcp16502.c b/drivers/regulator/mcp16502.c
index 48eb64bc4018..777d1a6cd1c5 100644
--- a/drivers/regulator/mcp16502.c
+++ b/drivers/regulator/mcp16502.c
@@ -22,8 +22,9 @@
 #define VDD_LOW_SEL 0x0D
 #define VDD_HIGH_SEL 0x3F
 
-#define MCP16502_FLT BIT(7)
-#define MCP16502_ENS BIT(0)
+#define MCP16502_FLT		BIT(7)
+#define MCP16502_DVSR		GENMASK(3, 2)
+#define MCP16502_ENS		BIT(0)
 
 /*
  * The PMIC has four sets of registers corresponding to four power modes:
@@ -88,6 +89,12 @@ enum mcp16502_reg {
 	MCP16502_REG_CFG,
 };
 
+/* Ramp delay (uV/us) for buck1, ldo1, ldo2. */
+static const int mcp16502_ramp_b1l12[] = { 6250, 3125, 2083, 1563 };
+
+/* Ramp delay (uV/us) for buck2, buck3, buck4. */
+static const int mcp16502_ramp_b234[] = { 3125, 1563, 1042, 781 };
+
 static unsigned int mcp16502_of_map_mode(unsigned int mode)
 {
 	if (mode == REGULATOR_MODE_NORMAL || mode == REGULATOR_MODE_IDLE)
@@ -271,6 +278,80 @@ static int mcp16502_get_status(struct regulator_dev *rdev)
 	return REGULATOR_STATUS_UNDEFINED;
 }
 
+static int mcp16502_set_voltage_time_sel(struct regulator_dev *rdev,
+					 unsigned int old_sel,
+					 unsigned int new_sel)
+{
+	static const u8 us_ramp[] = { 8, 16, 24, 32 };
+	int id = rdev_get_id(rdev);
+	unsigned int uV_delta, val;
+	int ret;
+
+	ret = regmap_read(rdev->regmap, MCP16502_REG_BASE(id, CFG), &val);
+	if (ret)
+		return ret;
+
+	val = (val & MCP16502_DVSR) >> 2;
+	uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
+		       old_sel * rdev->desc->linear_ranges->uV_step);
+	switch (id) {
+	case BUCK1:
+	case LDO1:
+	case LDO2:
+		ret = DIV_ROUND_CLOSEST(uV_delta * us_ramp[val],
+					mcp16502_ramp_b1l12[val]);
+		break;
+
+	case BUCK2:
+	case BUCK3:
+	case BUCK4:
+		ret = DIV_ROUND_CLOSEST(uV_delta * us_ramp[val],
+					mcp16502_ramp_b234[val]);
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	return ret;
+}
+
+static int mcp16502_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
+{
+	const int *ramp;
+	int id = rdev_get_id(rdev);
+	unsigned int i, size;
+
+	switch (id) {
+	case BUCK1:
+	case LDO1:
+	case LDO2:
+		ramp = mcp16502_ramp_b1l12;
+		size = ARRAY_SIZE(mcp16502_ramp_b1l12);
+		break;
+
+	case BUCK2:
+	case BUCK3:
+	case BUCK4:
+		ramp = mcp16502_ramp_b234;
+		size = ARRAY_SIZE(mcp16502_ramp_b234);
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	for (i = 0; i < size; i++) {
+		if (ramp[i] == ramp_delay)
+			break;
+	}
+	if (i == size)
+		return -EINVAL;
+
+	return regmap_update_bits(rdev->regmap, MCP16502_REG_BASE(id, CFG),
+				  MCP16502_DVSR, (i << 2));
+}
+
 #ifdef CONFIG_SUSPEND
 /*
  * mcp16502_suspend_get_target_reg() - get the reg of the target suspend PMIC
@@ -365,6 +446,8 @@ static const struct regulator_ops mcp16502_buck_ops = {
 	.disable			= regulator_disable_regmap,
 	.is_enabled			= regulator_is_enabled_regmap,
 	.get_status			= mcp16502_get_status,
+	.set_voltage_time_sel		= mcp16502_set_voltage_time_sel,
+	.set_ramp_delay			= mcp16502_set_ramp_delay,
 
 	.set_mode			= mcp16502_set_mode,
 	.get_mode			= mcp16502_get_mode,
@@ -389,6 +472,8 @@ static const struct regulator_ops mcp16502_ldo_ops = {
 	.disable			= regulator_disable_regmap,
 	.is_enabled			= regulator_is_enabled_regmap,
 	.get_status			= mcp16502_get_status,
+	.set_voltage_time_sel		= mcp16502_set_voltage_time_sel,
+	.set_ramp_delay			= mcp16502_set_ramp_delay,
 
 #ifdef CONFIG_SUSPEND
 	.set_suspend_voltage		= mcp16502_set_suspend_voltage,
-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 5/6] regulator: mcp16502: add support for ramp delay
@ 2020-11-11  9:06   ` Claudiu Beznea
  0 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: axel.lin, s.hauer, linux-kernel, Claudiu Beznea, ttynkkynen,
	linus.walleij, linux-arm-kernel

MCP16502 have configurable ramp delay support (via DVSR bits in
regulators' CFG register).

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/mcp16502.c | 89 +++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 87 insertions(+), 2 deletions(-)

diff --git a/drivers/regulator/mcp16502.c b/drivers/regulator/mcp16502.c
index 48eb64bc4018..777d1a6cd1c5 100644
--- a/drivers/regulator/mcp16502.c
+++ b/drivers/regulator/mcp16502.c
@@ -22,8 +22,9 @@
 #define VDD_LOW_SEL 0x0D
 #define VDD_HIGH_SEL 0x3F
 
-#define MCP16502_FLT BIT(7)
-#define MCP16502_ENS BIT(0)
+#define MCP16502_FLT		BIT(7)
+#define MCP16502_DVSR		GENMASK(3, 2)
+#define MCP16502_ENS		BIT(0)
 
 /*
  * The PMIC has four sets of registers corresponding to four power modes:
@@ -88,6 +89,12 @@ enum mcp16502_reg {
 	MCP16502_REG_CFG,
 };
 
+/* Ramp delay (uV/us) for buck1, ldo1, ldo2. */
+static const int mcp16502_ramp_b1l12[] = { 6250, 3125, 2083, 1563 };
+
+/* Ramp delay (uV/us) for buck2, buck3, buck4. */
+static const int mcp16502_ramp_b234[] = { 3125, 1563, 1042, 781 };
+
 static unsigned int mcp16502_of_map_mode(unsigned int mode)
 {
 	if (mode == REGULATOR_MODE_NORMAL || mode == REGULATOR_MODE_IDLE)
@@ -271,6 +278,80 @@ static int mcp16502_get_status(struct regulator_dev *rdev)
 	return REGULATOR_STATUS_UNDEFINED;
 }
 
+static int mcp16502_set_voltage_time_sel(struct regulator_dev *rdev,
+					 unsigned int old_sel,
+					 unsigned int new_sel)
+{
+	static const u8 us_ramp[] = { 8, 16, 24, 32 };
+	int id = rdev_get_id(rdev);
+	unsigned int uV_delta, val;
+	int ret;
+
+	ret = regmap_read(rdev->regmap, MCP16502_REG_BASE(id, CFG), &val);
+	if (ret)
+		return ret;
+
+	val = (val & MCP16502_DVSR) >> 2;
+	uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
+		       old_sel * rdev->desc->linear_ranges->uV_step);
+	switch (id) {
+	case BUCK1:
+	case LDO1:
+	case LDO2:
+		ret = DIV_ROUND_CLOSEST(uV_delta * us_ramp[val],
+					mcp16502_ramp_b1l12[val]);
+		break;
+
+	case BUCK2:
+	case BUCK3:
+	case BUCK4:
+		ret = DIV_ROUND_CLOSEST(uV_delta * us_ramp[val],
+					mcp16502_ramp_b234[val]);
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	return ret;
+}
+
+static int mcp16502_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
+{
+	const int *ramp;
+	int id = rdev_get_id(rdev);
+	unsigned int i, size;
+
+	switch (id) {
+	case BUCK1:
+	case LDO1:
+	case LDO2:
+		ramp = mcp16502_ramp_b1l12;
+		size = ARRAY_SIZE(mcp16502_ramp_b1l12);
+		break;
+
+	case BUCK2:
+	case BUCK3:
+	case BUCK4:
+		ramp = mcp16502_ramp_b234;
+		size = ARRAY_SIZE(mcp16502_ramp_b234);
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	for (i = 0; i < size; i++) {
+		if (ramp[i] == ramp_delay)
+			break;
+	}
+	if (i == size)
+		return -EINVAL;
+
+	return regmap_update_bits(rdev->regmap, MCP16502_REG_BASE(id, CFG),
+				  MCP16502_DVSR, (i << 2));
+}
+
 #ifdef CONFIG_SUSPEND
 /*
  * mcp16502_suspend_get_target_reg() - get the reg of the target suspend PMIC
@@ -365,6 +446,8 @@ static const struct regulator_ops mcp16502_buck_ops = {
 	.disable			= regulator_disable_regmap,
 	.is_enabled			= regulator_is_enabled_regmap,
 	.get_status			= mcp16502_get_status,
+	.set_voltage_time_sel		= mcp16502_set_voltage_time_sel,
+	.set_ramp_delay			= mcp16502_set_ramp_delay,
 
 	.set_mode			= mcp16502_set_mode,
 	.get_mode			= mcp16502_get_mode,
@@ -389,6 +472,8 @@ static const struct regulator_ops mcp16502_ldo_ops = {
 	.disable			= regulator_disable_regmap,
 	.is_enabled			= regulator_is_enabled_regmap,
 	.get_status			= mcp16502_get_status,
+	.set_voltage_time_sel		= mcp16502_set_voltage_time_sel,
+	.set_ramp_delay			= mcp16502_set_ramp_delay,
 
 #ifdef CONFIG_SUSPEND
 	.set_suspend_voltage		= mcp16502_set_suspend_voltage,
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 6/6] regulator: mcp16502: remove void documentation of struct mcp16502
  2020-11-11  9:06 ` Claudiu Beznea
@ 2020-11-11  9:06   ` Claudiu Beznea
  -1 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: s.hauer, ttynkkynen, linus.walleij, axel.lin, linux-kernel,
	linux-arm-kernel, Claudiu Beznea

struct mcp16502 has no members called rdev or rmap. Remove the
documentation.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/mcp16502.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/regulator/mcp16502.c b/drivers/regulator/mcp16502.c
index 777d1a6cd1c5..c6b72d1d38a9 100644
--- a/drivers/regulator/mcp16502.c
+++ b/drivers/regulator/mcp16502.c
@@ -135,8 +135,6 @@ enum {
 
 /*
  * struct mcp16502 - PMIC representation
- * @rdev: the regulators belonging to this chip
- * @rmap: regmap to be used for I2C communication
  * @lpm: LPM GPIO descriptor
  */
 struct mcp16502 {
-- 
2.7.4


^ permalink raw reply	[flat|nested] 18+ messages in thread

* [PATCH v2 6/6] regulator: mcp16502: remove void documentation of struct mcp16502
@ 2020-11-11  9:06   ` Claudiu Beznea
  0 siblings, 0 replies; 18+ messages in thread
From: Claudiu Beznea @ 2020-11-11  9:06 UTC (permalink / raw)
  To: lgirdwood, broonie
  Cc: axel.lin, s.hauer, linux-kernel, Claudiu Beznea, ttynkkynen,
	linus.walleij, linux-arm-kernel

struct mcp16502 has no members called rdev or rmap. Remove the
documentation.

Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com>
---
 drivers/regulator/mcp16502.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/regulator/mcp16502.c b/drivers/regulator/mcp16502.c
index 777d1a6cd1c5..c6b72d1d38a9 100644
--- a/drivers/regulator/mcp16502.c
+++ b/drivers/regulator/mcp16502.c
@@ -135,8 +135,6 @@ enum {
 
 /*
  * struct mcp16502 - PMIC representation
- * @rdev: the regulators belonging to this chip
- * @rmap: regmap to be used for I2C communication
  * @lpm: LPM GPIO descriptor
  */
 struct mcp16502 {
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 5/6] regulator: mcp16502: add support for ramp delay
  2020-11-11  9:06   ` Claudiu Beznea
@ 2020-11-13  7:41     ` kernel test robot
  -1 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2020-11-13  7:41 UTC (permalink / raw)
  To: Claudiu Beznea, lgirdwood, broonie
  Cc: kbuild-all, s.hauer, ttynkkynen, linus.walleij, axel.lin,
	linux-kernel, linux-arm-kernel, Claudiu Beznea

[-- Attachment #1: Type: text/plain, Size: 43972 bytes --]

Hi Claudiu,

I love your patch! Yet something to improve:

[auto build test ERROR on regulator/for-next]
[also build test ERROR on linus/master linux/master v5.10-rc3 next-20201112]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Claudiu-Beznea/regulator-mcp16502-add-support-for-ramp-delay/20201111-170928
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next
config: nios2-randconfig-r034-20201111 (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/d97d6b70286fa3a28e744a55da1b7eb6a026cee3
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Claudiu-Beznea/regulator-mcp16502-add-support-for-ramp-delay/20201111-170928
        git checkout d97d6b70286fa3a28e744a55da1b7eb6a026cee3
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nios2 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/asm-generic/bug.h:20,
                    from ./arch/nios2/include/generated/asm/bug.h:1,
                    from include/linux/bug.h:5,
                    from include/linux/thread_info.h:12,
                    from include/asm-generic/current.h:5,
                    from ./arch/nios2/include/generated/asm/current.h:1,
                    from include/linux/sched.h:12,
                    from include/linux/ratelimit.h:6,
                    from include/linux/dev_printk.h:16,
                    from include/linux/device.h:15,
                    from include/linux/gpio/driver.h:5,
                    from include/asm-generic/gpio.h:11,
                    from include/linux/gpio.h:62,
                    from drivers/regulator/mcp16502.c:11:
   drivers/regulator/mcp16502.c: In function 'mcp16502_set_voltage_time_sel':
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:287:38: note: in definition of macro '__abs_choose_expr'
     287 |  __builtin_types_compatible_p(typeof(x),   signed type) || \
         |                                      ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:287:38: note: in definition of macro '__abs_choose_expr'
     287 |  __builtin_types_compatible_p(typeof(x),   signed type) || \
         |                                      ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:288:38: note: in definition of macro '__abs_choose_expr'
     288 |  __builtin_types_compatible_p(typeof(x), unsigned type),  \
         |                                      ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:288:38: note: in definition of macro '__abs_choose_expr'
     288 |  __builtin_types_compatible_p(typeof(x), unsigned type),  \
         |                                      ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:24: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                        ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:24: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                        ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> include/linux/kernel.h:281:3: error: first argument to '__builtin_choose_expr' not a constant
     281 |   __builtin_choose_expr(     \
         |   ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:276:16: note: in expansion of macro '__abs_choose_expr'
     276 | #define abs(x) __abs_choose_expr(x, long long,    \
         |                ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~

vim +295 drivers/regulator/mcp16502.c

   280	
   281	static int mcp16502_set_voltage_time_sel(struct regulator_dev *rdev,
   282						 unsigned int old_sel,
   283						 unsigned int new_sel)
   284	{
   285		static const u8 us_ramp[] = { 8, 16, 24, 32 };
   286		int id = rdev_get_id(rdev);
   287		unsigned int uV_delta, val;
   288		int ret;
   289	
   290		ret = regmap_read(rdev->regmap, MCP16502_REG_BASE(id, CFG), &val);
   291		if (ret)
   292			return ret;
   293	
   294		val = (val & MCP16502_DVSR) >> 2;
 > 295		uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
   296			       old_sel * rdev->desc->linear_ranges->uV_step);
   297		switch (id) {
   298		case BUCK1:
   299		case LDO1:
   300		case LDO2:
   301			ret = DIV_ROUND_CLOSEST(uV_delta * us_ramp[val],
   302						mcp16502_ramp_b1l12[val]);
   303			break;
   304	
   305		case BUCK2:
   306		case BUCK3:
   307		case BUCK4:
   308			ret = DIV_ROUND_CLOSEST(uV_delta * us_ramp[val],
   309						mcp16502_ramp_b234[val]);
   310			break;
   311	
   312		default:
   313			return -EINVAL;
   314		}
   315	
   316		return ret;
   317	}
   318	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 25020 bytes --]

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 5/6] regulator: mcp16502: add support for ramp delay
@ 2020-11-13  7:41     ` kernel test robot
  0 siblings, 0 replies; 18+ messages in thread
From: kernel test robot @ 2020-11-13  7:41 UTC (permalink / raw)
  To: Claudiu Beznea, lgirdwood, broonie
  Cc: axel.lin, s.hauer, linux-kernel, Claudiu Beznea, ttynkkynen,
	kbuild-all, linus.walleij, linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 43972 bytes --]

Hi Claudiu,

I love your patch! Yet something to improve:

[auto build test ERROR on regulator/for-next]
[also build test ERROR on linus/master linux/master v5.10-rc3 next-20201112]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/0day-ci/linux/commits/Claudiu-Beznea/regulator-mcp16502-add-support-for-ramp-delay/20201111-170928
base:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next
config: nios2-randconfig-r034-20201111 (attached as .config)
compiler: nios2-linux-gcc (GCC) 9.3.0
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # https://github.com/0day-ci/linux/commit/d97d6b70286fa3a28e744a55da1b7eb6a026cee3
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review Claudiu-Beznea/regulator-mcp16502-add-support-for-ramp-delay/20201111-170928
        git checkout d97d6b70286fa3a28e744a55da1b7eb6a026cee3
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=nios2 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/asm-generic/bug.h:20,
                    from ./arch/nios2/include/generated/asm/bug.h:1,
                    from include/linux/bug.h:5,
                    from include/linux/thread_info.h:12,
                    from include/asm-generic/current.h:5,
                    from ./arch/nios2/include/generated/asm/current.h:1,
                    from include/linux/sched.h:12,
                    from include/linux/ratelimit.h:6,
                    from include/linux/dev_printk.h:16,
                    from include/linux/device.h:15,
                    from include/linux/gpio/driver.h:5,
                    from include/asm-generic/gpio.h:11,
                    from include/linux/gpio.h:62,
                    from drivers/regulator/mcp16502.c:11:
   drivers/regulator/mcp16502.c: In function 'mcp16502_set_voltage_time_sel':
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:287:38: note: in definition of macro '__abs_choose_expr'
     287 |  __builtin_types_compatible_p(typeof(x),   signed type) || \
         |                                      ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:287:38: note: in definition of macro '__abs_choose_expr'
     287 |  __builtin_types_compatible_p(typeof(x),   signed type) || \
         |                                      ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:288:38: note: in definition of macro '__abs_choose_expr'
     288 |  __builtin_types_compatible_p(typeof(x), unsigned type),  \
         |                                      ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:288:38: note: in definition of macro '__abs_choose_expr'
     288 |  __builtin_types_compatible_p(typeof(x), unsigned type),  \
         |                                      ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:24: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                        ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:24: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                        ^
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> drivers/regulator/mcp16502.c:295:54: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |                                                      ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   drivers/regulator/mcp16502.c:296:47: error: 'const struct linear_range' has no member named 'uV_step'; did you mean 'step'?
     296 |          old_sel * rdev->desc->linear_ranges->uV_step);
         |                                               ^~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
>> include/linux/kernel.h:281:3: error: first argument to '__builtin_choose_expr' not a constant
     281 |   __builtin_choose_expr(     \
         |   ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:280:3: note: in expansion of macro '__abs_choose_expr'
     280 |   __abs_choose_expr(x, char,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:279:3: note: in expansion of macro '__abs_choose_expr'
     279 |   __abs_choose_expr(x, short,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   include/linux/kernel.h:278:3: note: in expansion of macro '__abs_choose_expr'
     278 |   __abs_choose_expr(x, int,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:289:54: note: in definition of macro '__abs_choose_expr'
     289 |  ({ signed type __x = (x); __x < 0 ? -__x : __x; }), other)
         |                                                      ^~~~~
   include/linux/kernel.h:277:3: note: in expansion of macro '__abs_choose_expr'
     277 |   __abs_choose_expr(x, long,    \
         |   ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~
   include/linux/kernel.h:286:43: error: first argument to '__builtin_choose_expr' not a constant
     286 | #define __abs_choose_expr(x, type, other) __builtin_choose_expr( \
         |                                           ^~~~~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:276:16: note: in expansion of macro '__abs_choose_expr'
     276 | #define abs(x) __abs_choose_expr(x, long long,    \
         |                ^~~~~~~~~~~~~~~~~
   drivers/regulator/mcp16502.c:295:13: note: in expansion of macro 'abs'
     295 |  uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
         |             ^~~

vim +295 drivers/regulator/mcp16502.c

   280	
   281	static int mcp16502_set_voltage_time_sel(struct regulator_dev *rdev,
   282						 unsigned int old_sel,
   283						 unsigned int new_sel)
   284	{
   285		static const u8 us_ramp[] = { 8, 16, 24, 32 };
   286		int id = rdev_get_id(rdev);
   287		unsigned int uV_delta, val;
   288		int ret;
   289	
   290		ret = regmap_read(rdev->regmap, MCP16502_REG_BASE(id, CFG), &val);
   291		if (ret)
   292			return ret;
   293	
   294		val = (val & MCP16502_DVSR) >> 2;
 > 295		uV_delta = abs(new_sel * rdev->desc->linear_ranges->uV_step -
   296			       old_sel * rdev->desc->linear_ranges->uV_step);
   297		switch (id) {
   298		case BUCK1:
   299		case LDO1:
   300		case LDO2:
   301			ret = DIV_ROUND_CLOSEST(uV_delta * us_ramp[val],
   302						mcp16502_ramp_b1l12[val]);
   303			break;
   304	
   305		case BUCK2:
   306		case BUCK3:
   307		case BUCK4:
   308			ret = DIV_ROUND_CLOSEST(uV_delta * us_ramp[val],
   309						mcp16502_ramp_b234[val]);
   310			break;
   311	
   312		default:
   313			return -EINVAL;
   314		}
   315	
   316		return ret;
   317	}
   318	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 25020 bytes --]

[-- Attachment #3: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 0/6] regulator: mcp16502: add support for ramp delay
  2020-11-11  9:06 ` Claudiu Beznea
@ 2020-11-13 17:14   ` Mark Brown
  -1 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2020-11-13 17:14 UTC (permalink / raw)
  To: Claudiu Beznea, lgirdwood
  Cc: axel.lin, linus.walleij, ttynkkynen, linux-kernel, s.hauer,
	linux-arm-kernel

On Wed, 11 Nov 2020 11:06:12 +0200, Claudiu Beznea wrote:
> This series adds support for ramp delay on mcp16502. It also adds
> some cleanup on mcp16502.
> 
> Apart from that patches 1/6 fixes the selector validation in case
> the regulator::desc::linear_min_sel is not zero.
> 
> Thank you,
> Claudiu Beznea
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next

Thanks!

[1/6] regulator: core: validate selector against linear_min_sel
      commit: bdcd1177578cd5556f7494da86d5038db8203a16
[2/6] regulator: core: do not continue if selector match
      (no commit info)
[3/6] regulator: mcp16502: add linear_min_sel
      commit: 478f8089161e9a8f487ef3f560e59d1423b81c05
[4/6] regulator: mcp16502: adapt for get/set on other registers
      commit: 3e5532a011b09861abc2da3aa518b9aafc250570
[5/6] regulator: mcp16502: add support for ramp delay
      commit: 322eb8666d2f50556e89d73b54cf2dad8703c4e0
[6/6] regulator: mcp16502: remove void documentation of struct mcp16502
      commit: 842f44806efaddfae5ecff8f143c2607a4fa65d7

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

^ permalink raw reply	[flat|nested] 18+ messages in thread

* Re: [PATCH v2 0/6] regulator: mcp16502: add support for ramp delay
@ 2020-11-13 17:14   ` Mark Brown
  0 siblings, 0 replies; 18+ messages in thread
From: Mark Brown @ 2020-11-13 17:14 UTC (permalink / raw)
  To: Claudiu Beznea, lgirdwood
  Cc: axel.lin, linus.walleij, linux-kernel, ttynkkynen, s.hauer,
	linux-arm-kernel

On Wed, 11 Nov 2020 11:06:12 +0200, Claudiu Beznea wrote:
> This series adds support for ramp delay on mcp16502. It also adds
> some cleanup on mcp16502.
> 
> Apart from that patches 1/6 fixes the selector validation in case
> the regulator::desc::linear_min_sel is not zero.
> 
> Thank you,
> Claudiu Beznea
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-next

Thanks!

[1/6] regulator: core: validate selector against linear_min_sel
      commit: bdcd1177578cd5556f7494da86d5038db8203a16
[2/6] regulator: core: do not continue if selector match
      (no commit info)
[3/6] regulator: mcp16502: add linear_min_sel
      commit: 478f8089161e9a8f487ef3f560e59d1423b81c05
[4/6] regulator: mcp16502: adapt for get/set on other registers
      commit: 3e5532a011b09861abc2da3aa518b9aafc250570
[5/6] regulator: mcp16502: add support for ramp delay
      commit: 322eb8666d2f50556e89d73b54cf2dad8703c4e0
[6/6] regulator: mcp16502: remove void documentation of struct mcp16502
      commit: 842f44806efaddfae5ecff8f143c2607a4fa65d7

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2020-11-13 17:15 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-11-11  9:06 [PATCH v2 0/6] regulator: mcp16502: add support for ramp delay Claudiu Beznea
2020-11-11  9:06 ` Claudiu Beznea
2020-11-11  9:06 ` [PATCH v2 1/6] regulator: core: validate selector against linear_min_sel Claudiu Beznea
2020-11-11  9:06   ` Claudiu Beznea
2020-11-11  9:06 ` [PATCH v2 2/6] regulator: core: do not continue if selector match Claudiu Beznea
2020-11-11  9:06   ` Claudiu Beznea
2020-11-11  9:06 ` [PATCH v2 3/6] regulator: mcp16502: add linear_min_sel Claudiu Beznea
2020-11-11  9:06   ` Claudiu Beznea
2020-11-11  9:06 ` [PATCH v2 4/6] regulator: mcp16502: adapt for get/set on other registers Claudiu Beznea
2020-11-11  9:06   ` Claudiu Beznea
2020-11-11  9:06 ` [PATCH v2 5/6] regulator: mcp16502: add support for ramp delay Claudiu Beznea
2020-11-11  9:06   ` Claudiu Beznea
2020-11-13  7:41   ` kernel test robot
2020-11-13  7:41     ` kernel test robot
2020-11-11  9:06 ` [PATCH v2 6/6] regulator: mcp16502: remove void documentation of struct mcp16502 Claudiu Beznea
2020-11-11  9:06   ` Claudiu Beznea
2020-11-13 17:14 ` [PATCH v2 0/6] regulator: mcp16502: add support for ramp delay Mark Brown
2020-11-13 17:14   ` Mark Brown

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.