Skip to contentSkip to conversation

Add Richtek RT5759 buck converter support

PATCH Superseded cy_huang 3 participants 21 messages Mar 25, 2022 – Mar 26, 2022

Subsystems (2)

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

cy_huang

author
#0 lore raw

cover Add Richtek RT5759 buck converter support

From: ChiYuan Huang <[email protected]>

This patch series add Richtek RT5759 buck coverter support.

ChiYuan Huang (2):
dt-bindings: regulator: Add binding for Richtek RT5759 DCDC converter
regulator: rt5759: Add support for Richtek RT5759 DCDC converter

 .../regulator/richtek,rt5759-regulator.yaml        |  90 +++++
 drivers/regulator/Kconfig                          |  10 +
 drivers/regulator/Makefile                         |   1 +
 drivers/regulator/rt5759-regulator.c               | 372 +++++++++++++++++++++
 4 files changed, 473 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml
 create mode 100644 drivers/regulator/rt5759-regulator.c
Signature · 1 line
2.7.4
author
#1 lore raw

PATCH 1/2 dt-bindings: regulator: Add binding for Richtek RT5759 DCDC converter

From: ChiYuan Huang <[email protected]>

Add bindings for Richtek RT5759 high-performance DCDC converter.

---
 .../regulator/richtek,rt5759-regulator.yaml        | 90 ++++++++++++++++++++++
 1 file changed, 90 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +90 -0
new file mode 100644
index 00000000..c24b583
@@ -0,0 +1,90 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/regulator/richtek,rt5759-regulator.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Richtek RT5759 High Performance DCDC Concverter
+
+maintainers:
+  - ChiYuan Huang <[email protected]>
+
+description: |
+  The RT5759 is a high-performance, synchronous step-down DC-DC converter that
+  can deliver up to 9A output current from 3V to 6.5V input supply, The output
+  voltage can be programmable with I2C controlled 7-Bit VID.
+
+  Datasheet is available at
+  https://www.richtek.com/assets/product_file/RT5759/DS5759-00.pdf
+
+allOf:
+  - $ref: regulator.yaml#
+
+properties:
+  compatible:
+    enum:
+      - richtek,rt5759
+      - richtek,rt5759a
+
+  reg:
+    maxItems: 1
+
+  regulator-allowed-modes:
+    description: |
+      buck allowed operating mode
+        0: auto mode (PSKIP: pulse skipping)
+        1: force pwm mode
+    items:
+      enum: [0, 1]
+
+  richtek,watchdog-enable:
+    description: enable the external watchdog reset pin listening
+    type: boolean
+
+if:
+  properties:
+    compatible:
+      contains:
+        const: richtek,rt5759
+then:
+  properties:
+    richtek,watchdog-enable: false
+
+required:
+  - compatible
+  - reg
+
+unevaluatedProperties: false
+
+examples:
+  # example 1 for RT5759
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt5759@62 {
+        compatible = "richtek,rt5759";
+        reg = <0x62>;
+        regulator-name = "rt5759-buck";
+        regulator-min-microvolt = <600000>;
+        regulator-max-microvolt = <1500000>;
+        regulator-boot-on;
+      };
+    };
+  # example 2 for RT5759A
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt5759a@62 {
+        compatible = "richtek,rt5759a";
+        reg = <0x62>;
+        regulator-name = "rt5759a-buck";
+        regulator-min-microvolt = <600000>;
+        regulator-max-microvolt = <1725000>;
+        regulator-boot-on;
+        richtek,watchdog-enable;
+      };
+    };
Signature · 1 line
2.7.4
#2 lore raw

Re: [PATCH 1/2] dt-bindings: regulator: Add binding for Richtek RT5759 DCDC converter

Quoted 16 lines · cy_huang

From: ChiYuan Huang <[email protected]>

Add bindings for Richtek RT5759 high-performance DCDC converter.

---
 .../regulator/richtek,rt5759-regulator.yaml        | 90 ++++++++++++++++++++++
 1 file changed, 90 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +0 -0
new file mode 100644
index 00000000..c24b583

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 7

Quoted 7 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +7 -0
@@ -0,0 +1,90 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/regulator/richtek,rt5759-regulator.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Richtek RT5759 High Performance DCDC Concverter

typo: Converter

Quoted 27 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +27 -0
+
+maintainers:
+  - ChiYuan Huang <[email protected]>
+
+description: |
+  The RT5759 is a high-performance, synchronous step-down DC-DC converter that
+  can deliver up to 9A output current from 3V to 6.5V input supply, The output
+  voltage can be programmable with I2C controlled 7-Bit VID.
+
+  Datasheet is available at
+  https://www.richtek.com/assets/product_file/RT5759/DS5759-00.pdf
+
+allOf:
+  - $ref: regulator.yaml#
+
+properties:
+  compatible:
+    enum:
+      - richtek,rt5759
+      - richtek,rt5759a
+
+  reg:
+    maxItems: 1
+
+  regulator-allowed-modes:
+    description: |
+      buck allowed operating mode

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 44

Quoted 10 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +10 -0
+        0: auto mode (PSKIP: pulse skipping)
+        1: force pwm mode
+    items:
+      enum: [0, 1]
+
+  richtek,watchdog-enable:
+    description: enable the external watchdog reset pin listening
+    type: boolean
+
+if:

This should be inside allOf. Move allOf here,

Quoted 12 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +12 -0
+  properties:
+    compatible:
+      contains:
+        const: richtek,rt5759
+then:
+  properties:
+    richtek,watchdog-enable: false
+
+required:
+  - compatible
+  - reg
+

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 66

Quoted 10 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +10 -0
+unevaluatedProperties: false
+
+examples:
+  # example 1 for RT5759
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt5759@62 {

Generic node name, so pmic.

Quoted 5 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +5 -0
+        compatible = "richtek,rt5759";
+        reg = <0x62>;
+        regulator-name = "rt5759-buck";
+        regulator-min-microvolt = <600000>;
+        regulator-max-microvolt = <1500000>;

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 81

Quoted 10 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +10 -0
+        regulator-boot-on;
+      };
+    };
+  # example 2 for RT5759A
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt5759a@62 {

Ditto

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 90

Quoted 9 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +9 -0
+        compatible = "richtek,rt5759a";
+        reg = <0x62>;
+        regulator-name = "rt5759a-buck";
+        regulator-min-microvolt = <600000>;
+        regulator-max-microvolt = <1725000>;
+        regulator-boot-on;
+        richtek,watchdog-enable;
+      };
+    };

Best regards,
Krzysztof

#3 lore raw

Re: [PATCH 1/2] dt-bindings: regulator: Add binding for Richtek RT5759 DCDC converter

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午8:14寫道:

Quoted 12 lines · cy_huang
Quoted 10 lines

From: ChiYuan Huang <[email protected]>

Add bindings for Richtek RT5759 high-performance DCDC converter.

---
 .../regulator/richtek,rt5759-regulator.yaml        | 90 ++++++++++++++++++++++
 1 file changed, 90 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml
Quoted 16 lines

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 7

Quoted 13 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +7 -0
new file mode 100644
index 00000000..c24b583
@@ -0,0 +1,90 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/regulator/richtek,rt5759-regulator.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Richtek RT5759 High Performance DCDC Concverter

typo: Converter

Ack in next.

Quoted 31 lines
Quoted 31 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +31 -0
+
+maintainers:
+  - ChiYuan Huang <[email protected]>
+
+description: |
+  The RT5759 is a high-performance, synchronous step-down DC-DC converter that
+  can deliver up to 9A output current from 3V to 6.5V input supply, The output
+  voltage can be programmable with I2C controlled 7-Bit VID.
+
+  Datasheet is available at
+  https://www.richtek.com/assets/product_file/RT5759/DS5759-00.pdf
+
+allOf:
+  - $ref: regulator.yaml#
+
+properties:
+  compatible:
+    enum:
+      - richtek,rt5759
+      - richtek,rt5759a
+
+  reg:
+    maxItems: 1
+
+  regulator-allowed-modes:
+    description: |
+      buck allowed operating mode
+        0: auto mode (PSKIP: pulse skipping)
+        1: force pwm mode
+    items:
+      enum: [0, 1]
Quoted 9 lines

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 44

Quoted 6 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +6 -0
+
+  richtek,watchdog-enable:
+    description: enable the external watchdog reset pin listening
+    type: boolean
+
+if:

This should be inside allOf. Move allOf here,

Ack in next.

Quoted 16 lines
Quoted 16 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +16 -0
+  properties:
+    compatible:
+      contains:
+        const: richtek,rt5759
+then:
+  properties:
+    richtek,watchdog-enable: false
+
+required:
+  - compatible
+  - reg
+
+unevaluatedProperties: false
+
+examples:
+  # example 1 for RT5759
Quoted 9 lines

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 66

Quoted 6 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +6 -0
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt5759@62 {

Generic node name, so pmic.

As my understanding, 'pmic' means there must be multiple channels of buck or ldo.
But rt5759 is only one channel buck converter.

Quoted 31 lines
Quoted 5 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +5 -0
+        compatible = "richtek,rt5759";
+        reg = <0x62>;
+        regulator-name = "rt5759-buck";
+        regulator-min-microvolt = <600000>;
+        regulator-max-microvolt = <1500000>;

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 81

Quoted 10 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +10 -0
+        regulator-boot-on;
+      };
+    };
+  # example 2 for RT5759A
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt5759a@62 {

Ditto

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 90

Quoted 9 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +9 -0
+        compatible = "richtek,rt5759a";
+        reg = <0x62>;
+        regulator-name = "rt5759a-buck";
+        regulator-min-microvolt = <600000>;
+        regulator-max-microvolt = <1725000>;
+        regulator-boot-on;
+        richtek,watchdog-enable;
+      };
+    };

Best regards,
Krzysztof

#4 lore raw

Re: [PATCH 1/2] dt-bindings: regulator: Add binding for Richtek RT5759 DCDC converter

On 25/03/2022 14:44, ChiYuan Huang wrote:

(...)

Quoted 13 lines
Quoted 4 lines
Quoted 4 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +4 -0
+unevaluatedProperties: false
+
+examples:
+  # example 1 for RT5759
Quoted 9 lines

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 66

Quoted 6 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +6 -0
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt5759@62 {

Generic node name, so pmic.

Quoted 3 lines

As my understanding, 'pmic' means there must be multiple channels of buck or ldo.
But rt5759 is only one channel buck converter.

Then "regulator". rt5759 is not a generic name but specific.

Best regards,
Krzysztof

#5 lore raw

Re: [PATCH 1/2] dt-bindings: regulator: Add binding for Richtek RT5759 DCDC converter

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午10:46寫道:

Quoted 18 lines · ChiYuan Huang

(...)

Quoted 13 lines
Quoted 13 lines

Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml line 66

Quoted 10 lines
Documentation/devicetree/bindings/regulator/richtek,rt5759-regulator.yaml new file +10 -0
+unevaluatedProperties: false
+
+examples:
+  # example 1 for RT5759
+  - |
+    i2c {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt5759@62 {

Generic node name, so pmic.

Quoted 6 lines
Quoted 3 lines

As my understanding, 'pmic' means there must be multiple channels of buck or ldo.
But rt5759 is only one channel buck converter.

Then "regulator". rt5759 is not a generic name but specific.

OK, it's more generic node name for this kind of single channel buck.

Quoted 2 lines

Best regards,
Krzysztof

author
#6 lore raw

PATCH 2/2 regulator: rt5759: Add support for Richtek RT5759 DCDC converter

In reply to cy_huang

From: ChiYuan Huang <[email protected]>

Add support for Richtek RT5759 high-performance DCDC converter.

---
 drivers/regulator/Kconfig            |  10 +
 drivers/regulator/Makefile           |   1 +
 drivers/regulator/rt5759-regulator.c | 372 +++++++++++++++++++++++++++++++++++
 3 files changed, 383 insertions(+)
 create mode 100644 drivers/regulator/rt5759-regulator.c
drivers/regulator/Kconfig +10 -0
index 1c35fed2..72e0318 100644
@@ -1046,6 +1046,16 @@ config REGULATOR_RT5033
 	  RT5033 PMIC. The device supports multiple regulators like
 	  current source, LDO and Buck.
 
+config REGULATOR_RT5759
+	tristate "Richtek RT5759 Regulator"
+	depends on I2C
+	select REGMAP_I2C
+	help
+	  This adds support for voltage regulator in Richtek RT5759.
+	  The RT5759 is a high-performance, synchronous step-down DC-DC
+	  converter that can deliver up to 9A output current from 3V to 6.5V
+	  input supply.
+
 config REGULATOR_RT6160
 	tristate "Richtek RT6160 BuckBoost voltage regulator"
 	depends on I2C
drivers/regulator/Makefile +1 -0
index 2e1b087..239a3a3 100644
@@ -126,6 +126,7 @@ obj-$(CONFIG_REGULATOR_ROHM)	+= rohm-regulator.o
 obj-$(CONFIG_REGULATOR_RT4801)	+= rt4801-regulator.o
 obj-$(CONFIG_REGULATOR_RT4831)	+= rt4831-regulator.o
 obj-$(CONFIG_REGULATOR_RT5033)	+= rt5033-regulator.o
+obj-$(CONFIG_REGULATOR_RT5759)	+= rt5759-regulator.o
 obj-$(CONFIG_REGULATOR_RT6160)	+= rt6160-regulator.o
 obj-$(CONFIG_REGULATOR_RT6245)	+= rt6245-regulator.o
 obj-$(CONFIG_REGULATOR_RTMV20)	+= rtmv20-regulator.o
drivers/regulator/rt5759-regulator.c new file +372 -0

372 lines not on this page · raw message

Signature · 1 line
2.7.4
#7 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Quoted 12 lines · cy_huang

From: ChiYuan Huang <[email protected]>

Add support for Richtek RT5759 high-performance DCDC converter.

---
 drivers/regulator/Kconfig            |  10 +
 drivers/regulator/Makefile           |   1 +
 drivers/regulator/rt5759-regulator.c | 372 +++++++++++++++++++++++++++++++++++
 3 files changed, 383 insertions(+)
 create mode 100644 drivers/regulator/rt5759-regulator.c

(...)

Quoted 4 lines
drivers/regulator/rt5759-regulator.c new file +4 -0
+static int rt5759_init_device_property(struct rt5759_priv *priv)
+{
+	unsigned int val = 0;
+	bool wdt_enable;

drivers/regulator/rt5759-regulator.c line 274

Quoted 10 lines
drivers/regulator/rt5759-regulator.c new file +10 -0
+
+	/*
+	 * Only RT5759A support external watchdog input
+	 */
+	if (priv->chip_type != CHIP_TYPE_RT5759A)
+		return 0;
+
+	wdt_enable = device_property_read_bool(priv->dev,
+					       "richtek,watchdog-enable");
+	if (wdt_enable)

No need for separate wdt_enable variable.

Quoted 70 lines
drivers/regulator/rt5759-regulator.c new file +70 -0
+		val = RT5759A_WDTEN_MASK;
+
+	return regmap_update_bits(priv->regmap, RT5759A_REG_WDTEN,
+				  RT5759A_WDTEN_MASK, val);
+}
+
+static int rt5759_manufacturer_check(struct rt5759_priv *priv)
+{
+	unsigned int vendor;
+	int ret;
+
+	ret = regmap_read(priv->regmap, RT5759_REG_VENDORINFO, &vendor);
+	if (ret)
+		return ret;
+
+	if (vendor != RT5759_MANUFACTURER_ID) {
+		dev_err(priv->dev, "vendor info not correct (%d)\n", vendor);
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static bool rt5759_is_accessible_reg(struct device *dev, unsigned int reg)
+{
+	struct rt5759_priv *priv = dev_get_drvdata(dev);
+
+	if (reg <= RT5759_REG_DCDCSET)
+		return true;
+
+	if (priv->chip_type == CHIP_TYPE_RT5759A && reg == RT5759A_REG_WDTEN)
+		return true;
+
+	return false;
+}
+
+static const struct regmap_config rt5759_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+	.max_register = RT5759A_REG_WDTEN,
+	.readable_reg = rt5759_is_accessible_reg,
+	.writeable_reg = rt5759_is_accessible_reg,
+};
+
+static int rt5759_probe(struct i2c_client *i2c)
+{
+	struct rt5759_priv *priv;
+	int ret;
+
+	priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL);
+	if (!priv)
+		return -ENOMEM;
+
+	priv->dev = &i2c->dev;
+	priv->chip_type = (unsigned long)of_device_get_match_data(&i2c->dev);
+	i2c_set_clientdata(i2c, priv);
+
+	priv->regmap = devm_regmap_init_i2c(i2c, &rt5759_regmap_config);
+	if (IS_ERR(priv->regmap)) {
+		ret = PTR_ERR(priv->regmap);
+		dev_err(&i2c->dev, "Failed to allocate regmap (%d)\n", ret);
+		return ret;
+	}
+
+	ret = rt5759_manufacturer_check(priv);
+	if (ret) {
+		dev_err(&i2c->dev, "Failed to check device (%d)\n", ret);
+		return ret;
+	}
+

drivers/regulator/rt5759-regulator.c line 354

Quoted 10 lines
drivers/regulator/rt5759-regulator.c new file +10 -0
+	ret = rt5759_init_device_property(priv);
+	if (ret) {
+		dev_err(&i2c->dev, "Failed to init device (%d)\n", ret);
+		return ret;
+	}
+
+	return rt5759_regulator_register(priv);
+}
+
+static const struct of_device_id __maybe_unused rt5759_device_table[] = {

I don't think this can be __maybe_unused. It is always referenced via of_match_table, isn't it?

Quoted 8 lines
drivers/regulator/rt5759-regulator.c new file +8 -0
+	{ .compatible = "richtek,rt5759", .data = (void *)CHIP_TYPE_RT5759 },
+	{ .compatible = "richtek,rt5759a", .data = (void *)CHIP_TYPE_RT5759A },
+	{}
+};
+MODULE_DEVICE_TABLE(of, rt5759_device_table);
+
+static struct i2c_driver rt5759_driver = {
+	.driver = {

drivers/regulator/rt5759-regulator.c line 372

Quoted 10 lines
drivers/regulator/rt5759-regulator.c new file +10 -0
+		.name = "rt5759",
+		.of_match_table = rt5759_device_table,
+	},
+	.probe_new = rt5759_probe,
+};
+module_i2c_driver(rt5759_driver);
+
+MODULE_AUTHOR("ChiYuan Huang <[email protected]>");
+MODULE_DESCRIPTION("Richtek RT5759 Regulator Driver");
+MODULE_LICENSE("GPL v2");

Best regards,
Krzysztof

#8 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午8:17寫道:

Quoted 17 lines · cy_huang
Quoted 12 lines

From: ChiYuan Huang <[email protected]>

Add support for Richtek RT5759 high-performance DCDC converter.

---
 drivers/regulator/Kconfig            |  10 +
 drivers/regulator/Makefile           |   1 +
 drivers/regulator/rt5759-regulator.c | 372 +++++++++++++++++++++++++++++++++++
 3 files changed, 383 insertions(+)
 create mode 100644 drivers/regulator/rt5759-regulator.c

(...)

Quoted 17 lines
Quoted 4 lines
drivers/regulator/rt5759-regulator.c new file +4 -0
+static int rt5759_init_device_property(struct rt5759_priv *priv)
+{
+     unsigned int val = 0;
+     bool wdt_enable;

drivers/regulator/rt5759-regulator.c line 274

Quoted 10 lines
drivers/regulator/rt5759-regulator.c new file +10 -0
+
+     /*
+      * Only RT5759A support external watchdog input
+      */
+     if (priv->chip_type != CHIP_TYPE_RT5759A)
+             return 0;
+
+     wdt_enable = device_property_read_bool(priv->dev,
+                                            "richtek,watchdog-enable");
+     if (wdt_enable)

No need for separate wdt_enable variable.

Ack in next.

Quoted 75 lines
Quoted 75 lines
drivers/regulator/rt5759-regulator.c new file +75 -0
+             val = RT5759A_WDTEN_MASK;
+
+     return regmap_update_bits(priv->regmap, RT5759A_REG_WDTEN,
+                               RT5759A_WDTEN_MASK, val);
+}
+
+static int rt5759_manufacturer_check(struct rt5759_priv *priv)
+{
+     unsigned int vendor;
+     int ret;
+
+     ret = regmap_read(priv->regmap, RT5759_REG_VENDORINFO, &vendor);
+     if (ret)
+             return ret;
+
+     if (vendor != RT5759_MANUFACTURER_ID) {
+             dev_err(priv->dev, "vendor info not correct (%d)\n", vendor);
+             return -EINVAL;
+     }
+
+     return 0;
+}
+
+static bool rt5759_is_accessible_reg(struct device *dev, unsigned int reg)
+{
+     struct rt5759_priv *priv = dev_get_drvdata(dev);
+
+     if (reg <= RT5759_REG_DCDCSET)
+             return true;
+
+     if (priv->chip_type == CHIP_TYPE_RT5759A && reg == RT5759A_REG_WDTEN)
+             return true;
+
+     return false;
+}
+
+static const struct regmap_config rt5759_regmap_config = {
+     .reg_bits = 8,
+     .val_bits = 8,
+     .max_register = RT5759A_REG_WDTEN,
+     .readable_reg = rt5759_is_accessible_reg,
+     .writeable_reg = rt5759_is_accessible_reg,
+};
+
+static int rt5759_probe(struct i2c_client *i2c)
+{
+     struct rt5759_priv *priv;
+     int ret;
+
+     priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL);
+     if (!priv)
+             return -ENOMEM;
+
+     priv->dev = &i2c->dev;
+     priv->chip_type = (unsigned long)of_device_get_match_data(&i2c->dev);
+     i2c_set_clientdata(i2c, priv);
+
+     priv->regmap = devm_regmap_init_i2c(i2c, &rt5759_regmap_config);
+     if (IS_ERR(priv->regmap)) {
+             ret = PTR_ERR(priv->regmap);
+             dev_err(&i2c->dev, "Failed to allocate regmap (%d)\n", ret);
+             return ret;
+     }
+
+     ret = rt5759_manufacturer_check(priv);
+     if (ret) {
+             dev_err(&i2c->dev, "Failed to check device (%d)\n", ret);
+             return ret;
+     }
+
+     ret = rt5759_init_device_property(priv);
+     if (ret) {
+             dev_err(&i2c->dev, "Failed to init device (%d)\n", ret);
+             return ret;
+     }
Quoted 9 lines

drivers/regulator/rt5759-regulator.c line 354

Quoted 5 lines
drivers/regulator/rt5759-regulator.c new file +5 -0
+
+     return rt5759_regulator_register(priv);
+}
+
+static const struct of_device_id __maybe_unused rt5759_device_table[] = {

I don't think this can be __maybe_unused. It is always referenced via of_match_table, isn't it?

I think it can declared as '__maybe_unused'.
If 'of_device_id' is unused, then in probe stage, 'of_device_get_match_data' will return NULL.
priv->chip_type will get zero as the return value. And it will be treated as rt5759, not rt5759a.
The difference between these two are only watchdog function supported or not.

Quoted 22 lines
Quoted 8 lines
drivers/regulator/rt5759-regulator.c new file +8 -0
+     { .compatible = "richtek,rt5759", .data = (void *)CHIP_TYPE_RT5759 },
+     { .compatible = "richtek,rt5759a", .data = (void *)CHIP_TYPE_RT5759A },
+     {}
+};
+MODULE_DEVICE_TABLE(of, rt5759_device_table);
+
+static struct i2c_driver rt5759_driver = {
+     .driver = {

drivers/regulator/rt5759-regulator.c line 372

Quoted 10 lines
drivers/regulator/rt5759-regulator.c new file +10 -0
+             .name = "rt5759",
+             .of_match_table = rt5759_device_table,
+     },
+     .probe_new = rt5759_probe,
+};
+module_i2c_driver(rt5759_driver);
+
+MODULE_AUTHOR("ChiYuan Huang <[email protected]>");
+MODULE_DESCRIPTION("Richtek RT5759 Regulator Driver");
+MODULE_LICENSE("GPL v2");

Best regards,
Krzysztof

#9 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Quoted 120 lines · ChiYuan Huang

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午8:17寫道:

Quoted 17 lines · cy_huang
Quoted 12 lines

From: ChiYuan Huang <[email protected]>

Add support for Richtek RT5759 high-performance DCDC converter.

---
 drivers/regulator/Kconfig            |  10 +
 drivers/regulator/Makefile           |   1 +
 drivers/regulator/rt5759-regulator.c | 372 +++++++++++++++++++++++++++++++++++
 3 files changed, 383 insertions(+)
 create mode 100644 drivers/regulator/rt5759-regulator.c

(...)

Quoted 17 lines
Quoted 4 lines
drivers/regulator/rt5759-regulator.c new file +4 -0
+static int rt5759_init_device_property(struct rt5759_priv *priv)
+{
+     unsigned int val = 0;
+     bool wdt_enable;

drivers/regulator/rt5759-regulator.c line 274

Quoted 10 lines
drivers/regulator/rt5759-regulator.c new file +10 -0
+
+     /*
+      * Only RT5759A support external watchdog input
+      */
+     if (priv->chip_type != CHIP_TYPE_RT5759A)
+             return 0;
+
+     wdt_enable = device_property_read_bool(priv->dev,
+                                            "richtek,watchdog-enable");
+     if (wdt_enable)

No need for separate wdt_enable variable.

Ack in next.

Quoted 75 lines
Quoted 75 lines
drivers/regulator/rt5759-regulator.c new file +75 -0
+             val = RT5759A_WDTEN_MASK;
+
+     return regmap_update_bits(priv->regmap, RT5759A_REG_WDTEN,
+                               RT5759A_WDTEN_MASK, val);
+}
+
+static int rt5759_manufacturer_check(struct rt5759_priv *priv)
+{
+     unsigned int vendor;
+     int ret;
+
+     ret = regmap_read(priv->regmap, RT5759_REG_VENDORINFO, &vendor);
+     if (ret)
+             return ret;
+
+     if (vendor != RT5759_MANUFACTURER_ID) {
+             dev_err(priv->dev, "vendor info not correct (%d)\n", vendor);
+             return -EINVAL;
+     }
+
+     return 0;
+}
+
+static bool rt5759_is_accessible_reg(struct device *dev, unsigned int reg)
+{
+     struct rt5759_priv *priv = dev_get_drvdata(dev);
+
+     if (reg <= RT5759_REG_DCDCSET)
+             return true;
+
+     if (priv->chip_type == CHIP_TYPE_RT5759A && reg == RT5759A_REG_WDTEN)
+             return true;
+
+     return false;
+}
+
+static const struct regmap_config rt5759_regmap_config = {
+     .reg_bits = 8,
+     .val_bits = 8,
+     .max_register = RT5759A_REG_WDTEN,
+     .readable_reg = rt5759_is_accessible_reg,
+     .writeable_reg = rt5759_is_accessible_reg,
+};
+
+static int rt5759_probe(struct i2c_client *i2c)
+{
+     struct rt5759_priv *priv;
+     int ret;
+
+     priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL);
+     if (!priv)
+             return -ENOMEM;
+
+     priv->dev = &i2c->dev;
+     priv->chip_type = (unsigned long)of_device_get_match_data(&i2c->dev);
+     i2c_set_clientdata(i2c, priv);
+
+     priv->regmap = devm_regmap_init_i2c(i2c, &rt5759_regmap_config);
+     if (IS_ERR(priv->regmap)) {
+             ret = PTR_ERR(priv->regmap);
+             dev_err(&i2c->dev, "Failed to allocate regmap (%d)\n", ret);
+             return ret;
+     }
+
+     ret = rt5759_manufacturer_check(priv);
+     if (ret) {
+             dev_err(&i2c->dev, "Failed to check device (%d)\n", ret);
+             return ret;
+     }
+
+     ret = rt5759_init_device_property(priv);
+     if (ret) {
+             dev_err(&i2c->dev, "Failed to init device (%d)\n", ret);
+             return ret;
+     }
Quoted 9 lines

drivers/regulator/rt5759-regulator.c line 354

Quoted 5 lines
drivers/regulator/rt5759-regulator.c new file +5 -0
+
+     return rt5759_regulator_register(priv);
+}
+
+static const struct of_device_id __maybe_unused rt5759_device_table[] = {

I don't think this can be __maybe_unused. It is always referenced via of_match_table, isn't it?

Quoted 3 lines

I think it can declared as '__maybe_unused'.
If 'of_device_id' is unused, then in probe stage,
'of_device_get_match_data' will return NULL.

But your of_device_id cannot be unused. It is always referenced.

Quoted 3 lines

priv->chip_type will get zero as the return value. And it will be treated as rt5759, not rt5759a.
The difference between these two are only watchdog function supported or not.

Best regards,
Krzysztof

#10 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午10:47寫道:

Quoted 122 lines · ChiYuan Huang
Quoted 120 lines

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午8:17寫道:

Quoted 17 lines · cy_huang
Quoted 12 lines

From: ChiYuan Huang <[email protected]>

Add support for Richtek RT5759 high-performance DCDC converter.

---
 drivers/regulator/Kconfig            |  10 +
 drivers/regulator/Makefile           |   1 +
 drivers/regulator/rt5759-regulator.c | 372 +++++++++++++++++++++++++++++++++++
 3 files changed, 383 insertions(+)
 create mode 100644 drivers/regulator/rt5759-regulator.c

(...)

Quoted 17 lines
Quoted 4 lines
drivers/regulator/rt5759-regulator.c new file +4 -0
+static int rt5759_init_device_property(struct rt5759_priv *priv)
+{
+     unsigned int val = 0;
+     bool wdt_enable;

drivers/regulator/rt5759-regulator.c line 274

Quoted 10 lines
drivers/regulator/rt5759-regulator.c new file +10 -0
+
+     /*
+      * Only RT5759A support external watchdog input
+      */
+     if (priv->chip_type != CHIP_TYPE_RT5759A)
+             return 0;
+
+     wdt_enable = device_property_read_bool(priv->dev,
+                                            "richtek,watchdog-enable");
+     if (wdt_enable)

No need for separate wdt_enable variable.

Ack in next.

Quoted 84 lines
Quoted 70 lines
drivers/regulator/rt5759-regulator.c new file +70 -0
+             val = RT5759A_WDTEN_MASK;
+
+     return regmap_update_bits(priv->regmap, RT5759A_REG_WDTEN,
+                               RT5759A_WDTEN_MASK, val);
+}
+
+static int rt5759_manufacturer_check(struct rt5759_priv *priv)
+{
+     unsigned int vendor;
+     int ret;
+
+     ret = regmap_read(priv->regmap, RT5759_REG_VENDORINFO, &vendor);
+     if (ret)
+             return ret;
+
+     if (vendor != RT5759_MANUFACTURER_ID) {
+             dev_err(priv->dev, "vendor info not correct (%d)\n", vendor);
+             return -EINVAL;
+     }
+
+     return 0;
+}
+
+static bool rt5759_is_accessible_reg(struct device *dev, unsigned int reg)
+{
+     struct rt5759_priv *priv = dev_get_drvdata(dev);
+
+     if (reg <= RT5759_REG_DCDCSET)
+             return true;
+
+     if (priv->chip_type == CHIP_TYPE_RT5759A && reg == RT5759A_REG_WDTEN)
+             return true;
+
+     return false;
+}
+
+static const struct regmap_config rt5759_regmap_config = {
+     .reg_bits = 8,
+     .val_bits = 8,
+     .max_register = RT5759A_REG_WDTEN,
+     .readable_reg = rt5759_is_accessible_reg,
+     .writeable_reg = rt5759_is_accessible_reg,
+};
+
+static int rt5759_probe(struct i2c_client *i2c)
+{
+     struct rt5759_priv *priv;
+     int ret;
+
+     priv = devm_kzalloc(&i2c->dev, sizeof(*priv), GFP_KERNEL);
+     if (!priv)
+             return -ENOMEM;
+
+     priv->dev = &i2c->dev;
+     priv->chip_type = (unsigned long)of_device_get_match_data(&i2c->dev);
+     i2c_set_clientdata(i2c, priv);
+
+     priv->regmap = devm_regmap_init_i2c(i2c, &rt5759_regmap_config);
+     if (IS_ERR(priv->regmap)) {
+             ret = PTR_ERR(priv->regmap);
+             dev_err(&i2c->dev, "Failed to allocate regmap (%d)\n", ret);
+             return ret;
+     }
+
+     ret = rt5759_manufacturer_check(priv);
+     if (ret) {
+             dev_err(&i2c->dev, "Failed to check device (%d)\n", ret);
+             return ret;
+     }
+

drivers/regulator/rt5759-regulator.c line 354

Quoted 10 lines
drivers/regulator/rt5759-regulator.c new file +10 -0
+     ret = rt5759_init_device_property(priv);
+     if (ret) {
+             dev_err(&i2c->dev, "Failed to init device (%d)\n", ret);
+             return ret;
+     }
+
+     return rt5759_regulator_register(priv);
+}
+
+static const struct of_device_id __maybe_unused rt5759_device_table[] = {

I don't think this can be __maybe_unused. It is always referenced via of_match_table, isn't it?

Quoted 6 lines
Quoted 3 lines

I think it can declared as '__maybe_unused'.
If 'of_device_id' is unused, then in probe stage,
'of_device_get_match_data' will return NULL.

But your of_device_id cannot be unused. It is always referenced.

I'm not sure, but your assumption is based on 'CONFIG_OF', right? Only if 'CONFIG_OF' is not defined, then it'll be really unused.

Quoted 7 lines
Quoted 3 lines

priv->chip_type will get zero as the return value. And it will be treated as rt5759, not rt5759a.
The difference between these two are only watchdog function supported or not.

Best regards,
Krzysztof

#11 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Quoted 8 lines · ChiYuan Huang

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午10:47寫道:

Quoted 7 lines
Quoted 7 lines
Quoted 7 lines

drivers/regulator/rt5759-regulator.c line 354

Quoted 3 lines
drivers/regulator/rt5759-regulator.c new file +2 -0
+
+static const struct of_device_id __maybe_unused rt5759_device_table[] = {

I don't think this can be __maybe_unused. It is always referenced via of_match_table, isn't it?

Quoted 8 lines
Quoted 6 lines
Quoted 3 lines

I think it can declared as '__maybe_unused'.
If 'of_device_id' is unused, then in probe stage,
'of_device_get_match_data' will return NULL.

But your of_device_id cannot be unused. It is always referenced.

I'm not sure, but your assumption is based on 'CONFIG_OF', right? Only if 'CONFIG_OF' is not defined, then it'll be really unused.

Is it possible to build this driver without CONFIG_OF? Did you try it?

Best regards,
Krzysztof

#12 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午11:37寫道:

Quoted 14 lines · ChiYuan Huang
Quoted 12 lines

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午10:47寫道:

Quoted 11 lines
Quoted 10 lines
Quoted 7 lines

drivers/regulator/rt5759-regulator.c line 354

Quoted 3 lines
drivers/regulator/rt5759-regulator.c new file +2 -0
+
+static const struct of_device_id __maybe_unused rt5759_device_table[] = {

I don't think this can be __maybe_unused. It is always referenced via of_match_table, isn't it?

I think it can declared as '__maybe_unused'.
If 'of_device_id' is unused, then in probe stage,
'of_device_get_match_data' will return NULL.

Quoted 7 lines
Quoted 4 lines
Quoted 2 lines

But your of_device_id cannot be unused. It is always referenced.

I'm not sure, but your assumption is based on 'CONFIG_OF', right? Only if 'CONFIG_OF' is not defined, then it'll be really unused.

Is it possible to build this driver without CONFIG_OF? Did you try it?

No, my development board always use device tree that's defined CONFIG_OF.

But theoretically, you can also check of_device.h, if CONFIG_OF is not defined, 'of_device_get_match_data' always return NULL.
If so, my usage is still right.

Quoted 2 lines

Best regards,
Krzysztof

#13 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Quoted 20 lines · ChiYuan Huang

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午11:37寫道:

Quoted 19 lines · ChiYuan Huang
Quoted 16 lines

Krzysztof Kozlowski <[email protected]> 於 2022年3月25日 週五 下午10:47寫道:

Quoted 7 lines
Quoted 7 lines
Quoted 7 lines

Review

Quoted 3 lines
(quoted diff) +2 -0
+
+static const struct of_device_id __maybe_unused rt5759_device_table[] = {

I don't think this can be __maybe_unused. It is always referenced via of_match_table, isn't it?

Quoted 6 lines
Quoted 3 lines

I think it can declared as '__maybe_unused'.
If 'of_device_id' is unused, then in probe stage,
'of_device_get_match_data' will return NULL.

But your of_device_id cannot be unused. It is always referenced.

I'm not sure, but your assumption is based on 'CONFIG_OF', right? Only if 'CONFIG_OF' is not defined, then it'll be really unused.

Quoted 7 lines
Quoted 2 lines

Is it possible to build this driver without CONFIG_OF? Did you try it?

No, my development board always use device tree that's defined CONFIG_OF.

But theoretically, you can also check of_device.h, if CONFIG_OF is not defined, 'of_device_get_match_data' always return NULL.
If so, my usage is still right.

No, it does not look right and your arguments are not even related to the topic. I don't think we talk about the same thing.

You mention board, some of_device_get_match_data() so you talk about runtime. maybe_unused is not about runtime. It is about build time.

The code you sent cannot have this structure unused. If you think otherwise, please provide argument, but not about runtime (again). You can for example build it without OF and see...

Best regards,
Krzysztof

maintainer
#14 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Quoted 6 lines · Krzysztof Kozlowski

You mention board, some of_device_get_match_data() so you talk about runtime. maybe_unused is not about runtime. It is about build time.

The code you sent cannot have this structure unused. If you think otherwise, please provide argument, but not about runtime (again). You can for example build it without OF and see...

If you use of_match_ptr() in the struct device (which is good practice, didn't check if this driver does it) then that causes the ID table to be unreferenced as of_match_ptr() compiles to NULL when !OF.

#15 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Quoted 5 lines · Mark Brown
Quoted 2 lines · Krzysztof Kozlowski

You mention board, some of_device_get_match_data() so you talk about runtime. maybe_unused is not about runtime. It is about build time.

Quoted 7 lines
Quoted 3 lines

The code you sent cannot have this structure unused. If you think otherwise, please provide argument, but not about runtime (again). You can for example build it without OF and see...

If you use of_match_ptr() in the struct device (which is good practice, didn't check if this driver does it) then that causes the ID table to be unreferenced as of_match_ptr() compiles to NULL when !OF.

Yep, then the case is obvious, but the driver does not use it.

+static struct i2c_driver rt5759_driver = {
+ .driver = {
+ .name = "rt5759",
+ .of_match_table = rt5759_device_table,

Therefore the of_device_id cannot be unused, so __maybe_unused is not correct. This can be fixed in two different ways, which we did not discuss yet...

Best regards,
Krzysztof

#16 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Krzysztof Kozlowski <[email protected]> 於 2022年3月26日 週六 上午12:08寫道:

Quoted 22 lines · Mark Brown
Quoted 5 lines · Krzysztof Kozlowski
Quoted 3 lines

You mention board, some of_device_get_match_data() so you talk about runtime. maybe_unused is not about runtime. It is about build time.

Quoted 7 lines
Quoted 3 lines

The code you sent cannot have this structure unused. If you think otherwise, please provide argument, but not about runtime (again). You can for example build it without OF and see...

If you use of_match_ptr() in the struct device (which is good practice, didn't check if this driver does it) then that causes the ID table to be unreferenced as of_match_ptr() compiles to NULL when !OF.

Yep, then the case is obvious, but the driver does not use it.

(quoted diff) +4 -0
+static struct i2c_driver rt5759_driver = {
+       .driver = {
+               .name = "rt5759",
+               .of_match_table = rt5759_device_table,
Quoted 4 lines

Therefore the of_device_id cannot be unused, so __maybe_unused is not correct. This can be fixed in two different ways, which we did not discuss yet...

As my past experience, '__maybe_unused' must be added to fix W=1 build warning when OF=n
You can refer to the below link.
https://lore.kernel.org/lkml/[email protected]/

And it's based on 'of_match_ptr' is used.

I tried to remove only __maybe_unused and build with x86 config that CONFIG_OF=n.
There's no warning or error message when compiling the rt5759 source code.

If so, I will remove only '__maybe_unused'.
May I ask whether 'of_match_ptr' need to be added or not?

Quoted 2 lines

Best regards,
Krzysztof

maintainer
#17 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Quoted 6 lines · ChiYuan Huang

I tried to remove only __maybe_unused and build with x86 config that CONFIG_OF=n.
There's no warning or error message when compiling the rt5759 source code.

If so, I will remove only '__maybe_unused'.
May I ask whether 'of_match_ptr' need to be added or not?

If you add of_match_ptr() (which is a little better, though it's a tiny different either way) then you shouldn't remove __maybe_unused - the thing here is that the __maybe_unused is needed because of_match_ptr() is used.

#18 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Mark Brown <[email protected]> 於 2022年3月26日 週六 上午9:07寫道:

Quoted 7 lines · ChiYuan Huang
Quoted 4 lines

I tried to remove only __maybe_unused and build with x86 config that CONFIG_OF=n.
There's no warning or error message when compiling the rt5759 source code.

Quoted 7 lines
Quoted 2 lines

If so, I will remove only '__maybe_unused'.
May I ask whether 'of_match_ptr' need to be added or not?

If you add of_match_ptr() (which is a little better, though it's a tiny different either way) then you shouldn't remove __maybe_unused - the thing here is that the __maybe_unused is needed because of_match_ptr() is used.

Sorry, I'm confused.
Originally, Krzysztof's opinion is to tell me why 'of_device_id' is declared as '__maybe_unused'.
That's why I mentioned that the return value about of_device_get_match_data' And now we're talking about to add 'of_match_ptr' in struct driver of_match_table.

Back to the original topic, two ways can solve this.
1) only remove '__maybe_unused' in of_device_id
2) keep '__maybe_unused' in of_device_id, and add of_match_ptr for of_match_table.
But option 2 seems conflict with Krzysztof's gueestion.

May I ask which option you suggested?

#19 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Quoted 16 lines · ChiYuan Huang

Mark Brown <[email protected]> 於 2022年3月26日 週六 上午9:07寫道:

Quoted 7 lines · ChiYuan Huang
Quoted 4 lines

I tried to remove only __maybe_unused and build with x86 config that CONFIG_OF=n.
There's no warning or error message when compiling the rt5759 source code.

Quoted 7 lines
Quoted 2 lines

If so, I will remove only '__maybe_unused'.
May I ask whether 'of_match_ptr' need to be added or not?

If you add of_match_ptr() (which is a little better, though it's a tiny different either way) then you shouldn't remove __maybe_unused - the thing here is that the __maybe_unused is needed because of_match_ptr() is used.

Quoted 4 lines

Sorry, I'm confused.
Originally, Krzysztof's opinion is to tell me why 'of_device_id' is declared as '__maybe_unused'.
That's why I mentioned that the return value about of_device_get_match_data'

Your answer is not related to my question. of_device_get_match_data() has nothing to do with __maybe_unused...

Quoted 2 lines

And now we're talking about to add 'of_match_ptr' in struct driver of_match_table.

Because this is one of the solutions.

Quoted 8 lines

Back to the original topic, two ways can solve this.
1) only remove '__maybe_unused' in of_device_id
2) keep '__maybe_unused' in of_device_id, and add of_match_ptr for of_match_table.
But option 2 seems conflict with Krzysztof's gueestion.

May I ask which option you suggested?

Option two does not conflict my suggestion. I pointed out that having ONLY maybe_unused is incorrect. I pointed the mistake. Nothing more... I said that there are two ways to solve it later, just choose one. I don't know why do we talk about such basic issue for so long. This should be one email from my side and one confirmation from you...

Obviously maybe_unused it has to be removed if you do not add of_match_ptr. But if you intend to add of_match_ptr, then things change...

Just for the record of choosing between options (which I also mentioned that there are two solutions) - having no of_match_ptr allows to match with ACPI PRP0001 (AFAIU also when !OF).

Best regards,
Krzysztof

#20 lore raw

Re: [PATCH 2/2] regulator: rt5759: Add support for Richtek RT5759 DCDC converter

Krzysztof Kozlowski <[email protected]> 於 2022年3月26日 週六 下午4:13寫道:

Quoted 46 lines · ChiYuan Huang
Quoted 16 lines

Mark Brown <[email protected]> 於 2022年3月26日 週六 上午9:07寫道:

Quoted 7 lines · ChiYuan Huang
Quoted 4 lines

I tried to remove only __maybe_unused and build with x86 config that CONFIG_OF=n.
There's no warning or error message when compiling the rt5759 source code.

Quoted 7 lines
Quoted 2 lines

If so, I will remove only '__maybe_unused'.
May I ask whether 'of_match_ptr' need to be added or not?

If you add of_match_ptr() (which is a little better, though it's a tiny different either way) then you shouldn't remove __maybe_unused - the thing here is that the __maybe_unused is needed because of_match_ptr() is used.

Quoted 4 lines

Sorry, I'm confused.
Originally, Krzysztof's opinion is to tell me why 'of_device_id' is declared as '__maybe_unused'.
That's why I mentioned that the return value about of_device_get_match_data'

Your answer is not related to my question. of_device_get_match_data() has nothing to do with __maybe_unused...

Quoted 2 lines

And now we're talking about to add 'of_match_ptr' in struct driver of_match_table.

Because this is one of the solutions.

Quoted 8 lines

Back to the original topic, two ways can solve this.
1) only remove '__maybe_unused' in of_device_id
2) keep '__maybe_unused' in of_device_id, and add of_match_ptr for of_match_table.
But option 2 seems conflict with Krzysztof's gueestion.

May I ask which option you suggested?

Option two does not conflict my suggestion. I pointed out that having ONLY maybe_unused is incorrect. I pointed the mistake. Nothing more... I said that there are two ways to solve it later, just choose one. I don't know why do we talk about such basic issue for so long. This should be one email from my side and one confirmation from you...

Quoted 7 lines

Obviously maybe_unused it has to be removed if you do not add of_match_ptr. But if you intend to add of_match_ptr, then things change...

Just for the record of choosing between options (which I also mentioned that there are two solutions) - having no of_match_ptr allows to match with ACPI PRP0001 (AFAIU also when !OF).

Ok, I think the way to add 'of_match_ptr' and keep '__maybe_unused' is more formal.
I'll choose that one.

Ack in next.
Thanks.

Quoted 3 lines

Best regards,
Krzysztof