All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v1 0/2] Add MAX77857/MAX77831 Regulator Support
@ 2023-06-13  8:05 Okan Sahin
  2023-06-13  8:05 ` [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator Okan Sahin
  2023-06-13  8:05 ` [PATCH v1 2/2] regulator: max77857: Add ADI MAX77857/MAX77831 Regulator Support Okan Sahin
  0 siblings, 2 replies; 7+ messages in thread
From: Okan Sahin @ 2023-06-13  8:05 UTC (permalink / raw)
  To: okan.sahin
  Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Ibrahim Tilki, linux-kernel, devicetree

High efficiency buck-boost regulator driver and bindings for
MAX77857/MAX77831. The patches are required to be applied
in sequence.

Okan Sahin (2):
  dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator
  regulator: max77857: Add ADI MAX77857/MAX77831 Regulator Support

 .../bindings/regulator/adi,max77857.yaml      |  83 ++++
 drivers/regulator/Kconfig                     |   9 +
 drivers/regulator/Makefile                    |   1 +
 drivers/regulator/max77857-regulator.c        | 382 ++++++++++++++++++
 4 files changed, 475 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/regulator/adi,max77857.yaml
 create mode 100644 drivers/regulator/max77857-regulator.c

-- 
2.30.2


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

* [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator
  2023-06-13  8:05 [PATCH v1 0/2] Add MAX77857/MAX77831 Regulator Support Okan Sahin
@ 2023-06-13  8:05 ` Okan Sahin
  2023-06-13  9:18   ` Rob Herring
  2023-06-13 13:39   ` Rob Herring
  2023-06-13  8:05 ` [PATCH v1 2/2] regulator: max77857: Add ADI MAX77857/MAX77831 Regulator Support Okan Sahin
  1 sibling, 2 replies; 7+ messages in thread
From: Okan Sahin @ 2023-06-13  8:05 UTC (permalink / raw)
  To: okan.sahin
  Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Ibrahim Tilki, linux-kernel, devicetree

Add ADI MAX77857 and MAX77831 Regulator device tree document.

Signed-off-by: Okan Sahin <okan.sahin@analog.com>
---
 .../bindings/regulator/adi,max77857.yaml      | 83 +++++++++++++++++++
 1 file changed, 83 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/regulator/adi,max77857.yaml

diff --git a/Documentation/devicetree/bindings/regulator/adi,max77857.yaml b/Documentation/devicetree/bindings/regulator/adi,max77857.yaml
new file mode 100644
index 000000000000..f07c60a3eda1
--- /dev/null
+++ b/Documentation/devicetree/bindings/regulator/adi,max77857.yaml
@@ -0,0 +1,83 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+# Copyright 2022 Analog Devices Inc.
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/regulator/adi,max77857.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices MAX77857 Buck-Boost Converter
+
+maintainers:
+  - Ibrahim Tilki <Ibrahim.Tilki@analog.com>
+
+description: Analog Devices MAX77857 Buck-Boost Converter
+
+properties:
+  compatible:
+    enum:
+      - adi,max77831
+      - adi,max77857
+
+  reg:
+    description: I2C address of the device
+    items:
+      - enum: [0x66, 0x67, 0x6E, 0x6F]
+
+  interrupts:
+    maxItems: 1
+
+  adi,switch-frequency-hz:
+    description: Switching frequency of the Buck-Boost converter in Hz.
+    items:
+      - enum: [1200000, 1500000, 1800000, 2100000]
+
+  adi,rtop-ohms:
+    description: Top feedback resistor value in ohms for external feedback.
+    minimum: 150000
+    maximum: 330000
+
+  adi,rbot-ohms:
+    description: Bottom feedback resistor value in ohms for external feedback.
+
+dependencies:
+  adi,rtop-ohms: [ 'adi,rbot-ohms' ]
+  adi,rbot-ohms: [ 'adi,rtop-ohms' ]
+
+required:
+  - compatible
+  - reg
+
+allOf:
+  - $ref: regulator.yaml#
+  - if:
+      properties:
+        compatible:
+          contains:
+            enum:
+              - adi,max77831
+
+    then:
+      properties:
+        adi,switch-frequency-hz:
+          items:
+            enum: [1200000, 1500000, 1800000]
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        regulator@66 {
+            reg = <0x66>;
+            compatible = "adi,max77857";
+            interrupt-parent = <&gpio>;
+            interrupts = <26 IRQ_TYPE_EDGE_FALLING>;
+
+            adi,rtop-ohms = <312000>;
+            adi,rbot-ohms = <12000>;
+        };
+    };
-- 
2.30.2


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

* [PATCH v1 2/2] regulator: max77857: Add ADI MAX77857/MAX77831 Regulator Support
  2023-06-13  8:05 [PATCH v1 0/2] Add MAX77857/MAX77831 Regulator Support Okan Sahin
  2023-06-13  8:05 ` [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator Okan Sahin
@ 2023-06-13  8:05 ` Okan Sahin
  2023-06-13 14:22   ` Mark Brown
  1 sibling, 1 reply; 7+ messages in thread
From: Okan Sahin @ 2023-06-13  8:05 UTC (permalink / raw)
  To: okan.sahin
  Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Ibrahim Tilki, linux-kernel, devicetree

Regulator driver for both MAX77857 and MAX77831.
The MAX77857 is a high-efficiency, high-performance
buck-boost converter targeted for systems requiring
a wide input voltage range (2.5V to 16V).

The MAX77831 is a high-efficiency, high-performance
buck-boost converter targeted for systems requiring
wide input voltage range (2.5V to 16V).

Signed-off-by: Okan Sahin <okan.sahin@analog.com>
---
 drivers/regulator/Kconfig              |   9 +
 drivers/regulator/Makefile             |   1 +
 drivers/regulator/max77857-regulator.c | 382 +++++++++++++++++++++++++
 3 files changed, 392 insertions(+)
 create mode 100644 drivers/regulator/max77857-regulator.c

diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index e5f3613c15fa..68c9ef61ae52 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -573,6 +573,15 @@ config REGULATOR_MAX77650
 	  Semiconductor. This device has a SIMO with three independent
 	  power rails and an LDO.
 
+config REGULATOR_MAX77857
+	tristate "ADI MAX77857/MAX77831 regulator support"
+	depends on I2C
+	help
+	  This driver controls a ADI MAX77857 and MAX77831 regulators.
+	  via I2C bus. MAX77857 and MAX77831 are high efficiency buck-boost
+	  converters with input voltage range (2.5V to 16V). Say Y here to
+	  enable the regulator driver
+
 config REGULATOR_MAX8649
 	tristate "Maxim 8649 voltage regulator"
 	depends on I2C
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index 58dfe0147cd4..e7230846b680 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -85,6 +85,7 @@ obj-$(CONFIG_REGULATOR_MAX77686) += max77686-regulator.o
 obj-$(CONFIG_REGULATOR_MAX77693) += max77693-regulator.o
 obj-$(CONFIG_REGULATOR_MAX77802) += max77802-regulator.o
 obj-$(CONFIG_REGULATOR_MAX77826) += max77826-regulator.o
+obj-$(CONFIG_REGULATOR_MAX77857) += max77857-regulator.o
 obj-$(CONFIG_REGULATOR_MC13783) += mc13783-regulator.o
 obj-$(CONFIG_REGULATOR_MC13892) += mc13892-regulator.o
 obj-$(CONFIG_REGULATOR_MC13XXX_CORE) +=  mc13xxx-regulator-core.o
diff --git a/drivers/regulator/max77857-regulator.c b/drivers/regulator/max77857-regulator.c
new file mode 100644
index 000000000000..66b3dc98ff23
--- /dev/null
+++ b/drivers/regulator/max77857-regulator.c
@@ -0,0 +1,382 @@
+// SPDX-License-Identifier: GPL-2.0-only
+#include <linux/bitfield.h>
+#include <linux/i2c.h>
+#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/regmap.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/machine.h>
+#include <linux/regulator/of_regulator.h>
+#include <linux/util_macros.h>
+
+#define MAX77857_REG_INT_SRC		0x10
+#define MAX77857_REG_INT_MASK		0x11
+#define MAX77857_REG_CONT1		0x12
+#define MAX77857_REG_CONT2		0x13
+#define MAX77857_REG_CONT3		0x14
+
+#define MAX77857_INT_SRC_OCP		BIT(0)
+#define MAX77857_INT_SRC_THS		BIT(1)
+#define MAX77857_INT_SRC_HARDSHORT	BIT(2)
+#define MAX77857_INT_SRC_OVP		BIT(3)
+#define MAX77857_INT_SRC_POK		BIT(4)
+
+#define MAX77857_ILIM_MASK		GENMASK(2, 0)
+#define MAX77857_CONT1_FREQ		GENMASK(4, 3)
+#define MAX77857_CONT3_FPWM		BIT(5)
+
+enum max77857_id {
+	ID_MAX77831 = 1,
+	ID_MAX77857,
+};
+
+static bool max77857_volatile_reg(struct device *dev, unsigned int reg)
+{
+	enum max77857_id id = (enum max77857_id)dev_get_drvdata(dev);
+
+	switch (id) {
+	case ID_MAX77831:
+	case ID_MAX77857:
+		return reg == MAX77857_REG_INT_SRC;
+	default:
+		return true;
+	}
+}
+
+struct regmap_config max77857_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.cache_type = REGCACHE_RBTREE,
+	.volatile_reg = max77857_volatile_reg,
+};
+
+static int max77857_get_status(struct regulator_dev *rdev)
+{
+	unsigned int val;
+	int ret;
+
+	ret = regmap_read(rdev->regmap, MAX77857_REG_INT_SRC, &val);
+	if (ret)
+		return ret;
+
+	if (FIELD_GET(MAX77857_INT_SRC_POK, val))
+		return REGULATOR_STATUS_ON;
+
+	return REGULATOR_STATUS_ERROR;
+}
+
+static unsigned int max77857_get_mode(struct regulator_dev *rdev)
+{
+	enum max77857_id id = (enum max77857_id)rdev_get_drvdata(rdev);
+	unsigned int regval;
+	int ret;
+
+	switch (id) {
+	case ID_MAX77831:
+	case ID_MAX77857:
+		ret = regmap_read(rdev->regmap, MAX77857_REG_CONT3, &regval);
+		if (ret)
+			return ret;
+
+		if (FIELD_GET(MAX77857_CONT3_FPWM, regval))
+			return REGULATOR_MODE_FAST;
+
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return REGULATOR_MODE_NORMAL;
+}
+
+static int max77857_set_mode(struct regulator_dev *rdev, unsigned int mode)
+{
+	enum max77857_id id = (enum max77857_id)rdev_get_drvdata(rdev);
+	unsigned int reg, val;
+
+	switch (id) {
+	case ID_MAX77831:
+	case ID_MAX77857:
+		reg = MAX77857_REG_CONT3;
+		val = MAX77857_CONT3_FPWM;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	switch (mode) {
+	case REGULATOR_MODE_FAST:
+		return regmap_set_bits(rdev->regmap, reg, val);
+	case REGULATOR_MODE_NORMAL:
+		return regmap_clear_bits(rdev->regmap, reg, val);
+	default:
+		return -EINVAL;
+	}
+}
+
+static int max77857_get_error_flags(struct regulator_dev *rdev,
+				    unsigned int *flags)
+{
+	unsigned int val;
+	int ret;
+
+	ret = regmap_read(rdev->regmap, MAX77857_REG_INT_SRC, &val);
+	if (ret)
+		return ret;
+
+	*flags = 0;
+
+	if (FIELD_GET(MAX77857_INT_SRC_OVP, val))
+		*flags |= REGULATOR_ERROR_OVER_VOLTAGE_WARN;
+
+	if (FIELD_GET(MAX77857_INT_SRC_OCP, val) ||
+	    FIELD_GET(MAX77857_INT_SRC_HARDSHORT, val))
+		*flags |= REGULATOR_ERROR_OVER_CURRENT;
+
+	if (FIELD_GET(MAX77857_INT_SRC_THS, val))
+		*flags |= REGULATOR_ERROR_OVER_TEMP;
+
+	if (!FIELD_GET(MAX77857_INT_SRC_POK, val))
+		*flags |= REGULATOR_ERROR_FAIL;
+
+	return 0;
+}
+
+static const struct regulator_ops max77857_regulator_ops = {
+	.list_voltage = regulator_list_voltage_linear_range,
+	.set_voltage_sel = regulator_set_voltage_sel_regmap,
+	.get_voltage_sel = regulator_get_voltage_sel_regmap,
+	.set_ramp_delay = regulator_set_ramp_delay_regmap,
+	.get_status = max77857_get_status,
+	.set_mode = max77857_set_mode,
+	.get_mode = max77857_get_mode,
+	.get_error_flags = max77857_get_error_flags,
+};
+
+static struct linear_range max77857_lin_ranges[] = {
+	REGULATOR_LINEAR_RANGE(4485000, 0x3D, 0xCC, 73500)
+};
+
+static const unsigned int max77857_switch_freq[] = {
+	1200000, 1500000, 1800000, 2100000
+};
+
+static const unsigned int max77857_ramp_table[2][4] = {
+	{ 1333, 667, 333, 227 }, /* when switch freq is 1.8MHz or 2.1MHz */
+	{ 1166, 667, 333, 167 }, /* when switch freq is 1.2MHz or 1.5MHz */
+};
+
+static struct regulator_desc max77857_regulator_desc = {
+	.ops = &max77857_regulator_ops,
+	.name = "max77857",
+	.linear_ranges = max77857_lin_ranges,
+	.n_linear_ranges = ARRAY_SIZE(max77857_lin_ranges),
+	.vsel_mask = 0xFF,
+	.vsel_reg = MAX77857_REG_CONT2,
+	.ramp_delay_table = max77857_ramp_table[0],
+	.n_ramp_values = ARRAY_SIZE(max77857_ramp_table[0]),
+	.ramp_reg = MAX77857_REG_CONT3,
+	.ramp_mask = GENMASK(1, 0),
+	.ramp_delay = max77857_ramp_table[0][0],
+	.owner = THIS_MODULE,
+};
+
+static irqreturn_t max77857_irq_handler(int irq, void *data)
+{
+	struct regulator_dev *rdev = data;
+	enum max77857_id id = (enum max77857_id)rdev_get_drvdata(rdev);
+	struct device *dev = &rdev->dev;
+	unsigned long flags = 0;
+	unsigned int status;
+	int ret;
+
+	switch (id) {
+	case ID_MAX77831:
+	case ID_MAX77857:
+		ret = regmap_read(rdev->regmap, MAX77857_REG_INT_SRC, &status);
+		break;
+	default:
+		return IRQ_HANDLED;
+	}
+
+	if (ret) {
+		dev_err(dev, "cannot read status\n");
+		return IRQ_HANDLED;
+	}
+
+	if (FIELD_GET(MAX77857_INT_SRC_OCP, status)) {
+		flags |= REGULATOR_EVENT_OVER_CURRENT;
+		dev_dbg(dev, "regulator has been latched off due to overcurrent\n");
+	}
+
+	if (FIELD_GET(MAX77857_INT_SRC_THS, status)) {
+		flags |= REGULATOR_EVENT_OVER_TEMP;
+		dev_dbg(dev, "regulator has been latched off due to thermal shutdown\n");
+	}
+
+	if (FIELD_GET(MAX77857_INT_SRC_HARDSHORT, status)) {
+		flags |= REGULATOR_EVENT_OVER_CURRENT;
+		dev_dbg(dev, "regulator has been latched off due to output hardshort\n");
+	}
+
+	if (id == ID_MAX77831 || id == ID_MAX77857) {
+		if (FIELD_GET(MAX77857_INT_SRC_OVP, status)) {
+			flags |= REGULATOR_EVENT_OVER_VOLTAGE_WARN;
+			dev_dbg(dev, "output overvoltage detected\n");
+		}
+
+		if (FIELD_GET(MAX77857_INT_SRC_POK, status)) {
+			flags |= REGULATOR_EVENT_ENABLE;
+			dev_dbg(dev, "output power OK\n");
+		} else {
+			flags |= REGULATOR_EVENT_FAIL;
+			dev_err(dev, "regulator failed\n");
+		}
+	} else {
+		if (flags != 0)
+			flags |= REGULATOR_EVENT_FAIL;
+	}
+
+	regulator_notifier_call_chain(rdev, flags, NULL);
+
+	return IRQ_HANDLED;
+}
+
+static void max77857_calc_range(struct device *dev, enum max77857_id id)
+{
+	struct linear_range *range;
+	unsigned long vref_step;
+	u32 rtop = 0;
+	u32 rbot = 0;
+
+	device_property_read_u32(dev, "adi,rtop-ohms", &rtop);
+	device_property_read_u32(dev, "adi,rbot-ohms", &rbot);
+
+	if (!rbot || !rtop)
+		return;
+
+	switch (id) {
+	case ID_MAX77831:
+	case ID_MAX77857:
+		range = max77857_lin_ranges;
+		vref_step = 4900UL;
+		break;
+	}
+
+	range->step = DIV_ROUND_CLOSEST(vref_step * (rbot + rtop), rbot);
+	range->min = range->step * range->min_sel;
+}
+
+static int max77857_probe(struct i2c_client *client)
+{
+	const struct i2c_device_id *i2c_id;
+	struct device *dev = &client->dev;
+	struct regulator_config cfg = {};
+	struct regulator_dev *rdev;
+	struct regmap *regmap;
+	enum max77857_id id;
+	u32 switch_freq = 0;
+	int ret;
+
+	i2c_id = i2c_client_get_device_id(client);
+	if (!i2c_id)
+		return -EINVAL;
+
+	id = i2c_id->driver_data;
+
+	dev_set_drvdata(dev, (void *)id);
+
+	max77857_calc_range(dev, id);
+
+	regmap = devm_regmap_init_i2c(client, &max77857_regmap_config);
+	if (IS_ERR(regmap))
+		return dev_err_probe(dev, PTR_ERR(regmap),
+				     "cannot initialize regmap\n");
+
+	device_property_read_u32(dev, "adi,switch-frequency-hz", &switch_freq);
+	if (switch_freq) {
+		switch_freq = find_closest(switch_freq, max77857_switch_freq,
+					   ARRAY_SIZE(max77857_switch_freq));
+
+		if (id == ID_MAX77831 && switch_freq == 3)
+			switch_freq = 2;
+
+		switch (id) {
+		case ID_MAX77831:
+		case ID_MAX77857:
+			ret = regmap_update_bits(regmap, MAX77857_REG_CONT1,
+						 MAX77857_CONT1_FREQ, switch_freq);
+
+			if (switch_freq >= 2)
+				break;
+
+			max77857_regulator_desc.ramp_delay_table = max77857_ramp_table[1];
+			max77857_regulator_desc.ramp_delay = max77857_ramp_table[1][0];
+			break;
+		}
+		if (ret)
+			return ret;
+	}
+
+	cfg.dev = dev;
+	cfg.driver_data = (void *)id;
+	cfg.regmap = regmap;
+	cfg.init_data = of_get_regulator_init_data(dev, dev->of_node,
+						   &max77857_regulator_desc);
+	if (!cfg.init_data)
+		return -ENOMEM;
+
+	rdev = devm_regulator_register(dev, &max77857_regulator_desc, &cfg);
+	if (IS_ERR(rdev))
+		return dev_err_probe(dev, PTR_ERR(rdev),
+				     "cannot register regulator\n");
+
+	if (client->irq) {
+		ret = devm_request_threaded_irq(dev, client->irq, NULL,
+						max77857_irq_handler,
+						IRQF_ONESHOT,
+						client->name, rdev);
+		if (ret)
+			return dev_err_probe(dev, ret, "cannot request irq\n");
+
+		/* enable interrupts */
+		switch (id) {
+		case ID_MAX77831:
+		case ID_MAX77857:
+			ret = regmap_write(regmap, MAX77857_REG_INT_MASK, 0x00);
+			break;
+		}
+
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
+const struct i2c_device_id max77857_id[] = {
+	{ "max77831", ID_MAX77831 },
+	{ "max77857", ID_MAX77857 },
+	{}
+};
+
+static const struct of_device_id max77857_of_id[] = {
+	{ .compatible = "adi,max77831", .data = (void *)ID_MAX77831 },
+	{ .compatible = "adi,max77857", .data = (void *)ID_MAX77857 },
+	{ }
+};
+
+struct i2c_driver max77857_driver = {
+	.driver = {
+		.name = "max77857",
+		.of_match_table = max77857_of_id,
+	},
+	.id_table = max77857_id,
+	.probe_new = max77857_probe,
+};
+module_i2c_driver(max77857_driver);
+
+MODULE_DESCRIPTION("Analog Devices MAX77857 Buck-Boost Converter Driver");
+MODULE_AUTHOR("Ibrahim Tilki <Ibrahim.Tilki@analog.com>");
+MODULE_AUTHOR("Okan Sahin <Okan.Sahin@analog.com>");
+MODULE_LICENSE("GPL");
-- 
2.30.2


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

* Re: [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator
  2023-06-13  8:05 ` [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator Okan Sahin
@ 2023-06-13  9:18   ` Rob Herring
  2023-06-13 13:39     ` Rob Herring
  2023-06-13 13:39   ` Rob Herring
  1 sibling, 1 reply; 7+ messages in thread
From: Rob Herring @ 2023-06-13  9:18 UTC (permalink / raw)
  To: Okan Sahin
  Cc: Liam Girdwood, Krzysztof Kozlowski, Mark Brown, Rob Herring,
	Conor Dooley, Ibrahim Tilki, devicetree, linux-kernel


On Tue, 13 Jun 2023 11:05:49 +0300, Okan Sahin wrote:
> Add ADI MAX77857 and MAX77831 Regulator device tree document.
> 
> Signed-off-by: Okan Sahin <okan.sahin@analog.com>
> ---
>  .../bindings/regulator/adi,max77857.yaml      | 83 +++++++++++++++++++
>  1 file changed, 83 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/regulator/adi,max77857.yaml
> 

My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
on your patch (DT_CHECKER_FLAGS is new in v5.13):

yamllint warnings/errors:

dtschema/dtc warnings/errors:
/builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/pinctrl/qcom,pmic-mpp.yaml: $defs:qcom-pmic-mpp-state:properties:qcom,paired: [{'description': 'Indicates that the pin should be operating in paired mode.'}] is not of type 'object', 'boolean'
	from schema $id: http://devicetree.org/meta-schemas/core.yaml#

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20230613080552.4492-2-okan.sahin@analog.com

The base for the series is generally the latest rc1. A different dependency
should be noted in *this* patch.

If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:

pip3 install dtschema --upgrade

Please check and re-submit after running the above command yourself. Note
that DT_SCHEMA_FILES can be set to your schema file to speed up checking
your schema. However, it must be unset to test all examples with your schema.


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

* Re: [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator
  2023-06-13  9:18   ` Rob Herring
@ 2023-06-13 13:39     ` Rob Herring
  0 siblings, 0 replies; 7+ messages in thread
From: Rob Herring @ 2023-06-13 13:39 UTC (permalink / raw)
  To: Okan Sahin
  Cc: Liam Girdwood, Krzysztof Kozlowski, Mark Brown, Conor Dooley,
	Ibrahim Tilki, devicetree, linux-kernel

On Tue, Jun 13, 2023 at 03:18:49AM -0600, Rob Herring wrote:
> 
> On Tue, 13 Jun 2023 11:05:49 +0300, Okan Sahin wrote:
> > Add ADI MAX77857 and MAX77831 Regulator device tree document.
> > 
> > Signed-off-by: Okan Sahin <okan.sahin@analog.com>
> > ---
> >  .../bindings/regulator/adi,max77857.yaml      | 83 +++++++++++++++++++
> >  1 file changed, 83 insertions(+)
> >  create mode 100644 Documentation/devicetree/bindings/regulator/adi,max77857.yaml
> > 
> 
> My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check'
> on your patch (DT_CHECKER_FLAGS is new in v5.13):
> 
> yamllint warnings/errors:
> 
> dtschema/dtc warnings/errors:
> /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/pinctrl/qcom,pmic-mpp.yaml: $defs:qcom-pmic-mpp-state:properties:qcom,paired: [{'description': 'Indicates that the pin should be operating in paired mode.'}] is not of type 'object', 'boolean'
> 	from schema $id: http://devicetree.org/meta-schemas/core.yaml#

Unrelated, this can be ignored.

Rob

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

* Re: [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator
  2023-06-13  8:05 ` [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator Okan Sahin
  2023-06-13  9:18   ` Rob Herring
@ 2023-06-13 13:39   ` Rob Herring
  1 sibling, 0 replies; 7+ messages in thread
From: Rob Herring @ 2023-06-13 13:39 UTC (permalink / raw)
  To: Okan Sahin
  Cc: Rob Herring, Liam Girdwood, Mark Brown, Krzysztof Kozlowski,
	Ibrahim Tilki, linux-kernel, devicetree, Conor Dooley


On Tue, 13 Jun 2023 11:05:49 +0300, Okan Sahin wrote:
> Add ADI MAX77857 and MAX77831 Regulator device tree document.
> 
> Signed-off-by: Okan Sahin <okan.sahin@analog.com>
> ---
>  .../bindings/regulator/adi,max77857.yaml      | 83 +++++++++++++++++++
>  1 file changed, 83 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/regulator/adi,max77857.yaml
> 

Reviewed-by: Rob Herring <robh@kernel.org>


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

* Re: [PATCH v1 2/2] regulator: max77857: Add ADI MAX77857/MAX77831 Regulator Support
  2023-06-13  8:05 ` [PATCH v1 2/2] regulator: max77857: Add ADI MAX77857/MAX77831 Regulator Support Okan Sahin
@ 2023-06-13 14:22   ` Mark Brown
  0 siblings, 0 replies; 7+ messages in thread
From: Mark Brown @ 2023-06-13 14:22 UTC (permalink / raw)
  To: Okan Sahin
  Cc: Liam Girdwood, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	Ibrahim Tilki, linux-kernel, devicetree

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

On Tue, Jun 13, 2023 at 11:05:50AM +0300, Okan Sahin wrote:

> +struct regmap_config max77857_regmap_config = {
> +	.reg_bits = 8,
> +	.val_bits = 8,
> +	.cache_type = REGCACHE_RBTREE,

Please use the more modern REGCACHE_MAPLE for new devices.

> +static irqreturn_t max77857_irq_handler(int irq, void *data)
> +{
> +	struct regulator_dev *rdev = data;
> +	enum max77857_id id = (enum max77857_id)rdev_get_drvdata(rdev);
> +	struct device *dev = &rdev->dev;
> +	unsigned long flags = 0;
> +	unsigned int status;
> +	int ret;
> +
> +	switch (id) {
> +	case ID_MAX77831:
> +	case ID_MAX77857:
> +		ret = regmap_read(rdev->regmap, MAX77857_REG_INT_SRC, &status);
> +		break;
> +	default:
> +		return IRQ_HANDLED;
> +	}

We just completely ignore the interrupt if it's not one of the supported
devices, that seems wrong - it looks likee those devices don't have the
support for interrupts at all and so should never get here?  If the
interrupt does go off then this is likely to lead to problems.  I think
it'd be better if the driver just didn't request the interrupt for
devices that it doesn't support interrupts for, if there's no interrupt
support in the hardware for those it could also complain if one is
specified though that's optional.

> +	if (ret) {
> +		dev_err(dev, "cannot read status\n");
> +		return IRQ_HANDLED;
> +	}

IRQ_NONE.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2023-06-13 14:22 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-06-13  8:05 [PATCH v1 0/2] Add MAX77857/MAX77831 Regulator Support Okan Sahin
2023-06-13  8:05 ` [PATCH v1 1/2] dt-bindings: regulator: max77857: Add ADI MAX77831/MAX77831 Regulator Okan Sahin
2023-06-13  9:18   ` Rob Herring
2023-06-13 13:39     ` Rob Herring
2023-06-13 13:39   ` Rob Herring
2023-06-13  8:05 ` [PATCH v1 2/2] regulator: max77857: Add ADI MAX77857/MAX77831 Regulator Support Okan Sahin
2023-06-13 14:22   ` 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.