Message ID | cover.1677620677.git.jahau@rocketmail.com |
---|---|
Headers | show |
Series | Add RT5033 charger device driver | expand |
On Tue, 28 Feb 2023 23:32:27 +0100, Jakob Hauser wrote: > Add device tree binding documentation for rt5033 multifunction device, voltage > regulator and battery charger. > > Cc: Beomho Seo <beomho.seo@samsung.com> > Cc: Chanwoo Choi <cw00.choi@samsung.com> > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > --- > .../bindings/mfd/richtek,rt5033.yaml | 102 ++++++++++++++++++ > .../power/supply/richtek,rt5033-charger.yaml | 76 +++++++++++++ > .../regulator/richtek,rt5033-regulator.yaml | 45 ++++++++ > 3 files changed, 223 insertions(+) > create mode 100644 Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml > create mode 100644 Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml > create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.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: ./Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml: Error in referenced schema matching $id: http://devicetree.org/schemas/power/supply/richtek,rt5033-charger.yaml /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,pre-threshold-uvolt: 'oneOf' conditional failed, one must be fixed: 'type' is a required property hint: A vendor boolean property can use "type: boolean" Additional properties are not allowed ('maxItems' was unexpected) hint: A vendor boolean property can use "type: boolean" /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,pre-threshold-uvolt: 'oneOf' conditional failed, one must be fixed: 'enum' is a required property 'const' is a required property hint: A vendor string property with exact values has an implicit type from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,pre-threshold-uvolt: 'oneOf' conditional failed, one must be fixed: '$ref' is a required property 'allOf' is a required property hint: A vendor property needs a $ref to types.yaml from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# hint: Vendor specific properties must have a type and description unless they have a defined, common suffix. from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,const-uvolt: 'oneOf' conditional failed, one must be fixed: 'type' is a required property hint: A vendor boolean property can use "type: boolean" Additional properties are not allowed ('maxItems' was unexpected) hint: A vendor boolean property can use "type: boolean" /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,const-uvolt: 'oneOf' conditional failed, one must be fixed: 'enum' is a required property 'const' is a required property hint: A vendor string property with exact values has an implicit type from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,const-uvolt: 'oneOf' conditional failed, one must be fixed: '$ref' is a required property 'allOf' is a required property hint: A vendor property needs a $ref to types.yaml from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# hint: Vendor specific properties must have a type and description unless they have a defined, common suffix. from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,eoc-uamp: 'oneOf' conditional failed, one must be fixed: 'type' is a required property hint: A vendor boolean property can use "type: boolean" Additional properties are not allowed ('maxItems' was unexpected) hint: A vendor boolean property can use "type: boolean" /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,eoc-uamp: 'oneOf' conditional failed, one must be fixed: 'enum' is a required property 'const' is a required property hint: A vendor string property with exact values has an implicit type from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,eoc-uamp: 'oneOf' conditional failed, one must be fixed: '$ref' is a required property 'allOf' is a required property hint: A vendor property needs a $ref to types.yaml from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# hint: Vendor specific properties must have a type and description unless they have a defined, common suffix. from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,fast-uamp: 'oneOf' conditional failed, one must be fixed: 'type' is a required property hint: A vendor boolean property can use "type: boolean" Additional properties are not allowed ('maxItems' was unexpected) hint: A vendor boolean property can use "type: boolean" /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,fast-uamp: 'oneOf' conditional failed, one must be fixed: 'enum' is a required property 'const' is a required property hint: A vendor string property with exact values has an implicit type from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,fast-uamp: 'oneOf' conditional failed, one must be fixed: '$ref' is a required property 'allOf' is a required property hint: A vendor property needs a $ref to types.yaml from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# hint: Vendor specific properties must have a type and description unless they have a defined, common suffix. from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,pre-uamp: 'oneOf' conditional failed, one must be fixed: 'type' is a required property hint: A vendor boolean property can use "type: boolean" Additional properties are not allowed ('maxItems' was unexpected) hint: A vendor boolean property can use "type: boolean" /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,pre-uamp: 'oneOf' conditional failed, one must be fixed: 'enum' is a required property 'const' is a required property hint: A vendor string property with exact values has an implicit type from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# /builds/robherring/dt-review-ci/linux/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml: properties:richtek,pre-uamp: 'oneOf' conditional failed, one must be fixed: '$ref' is a required property 'allOf' is a required property hint: A vendor property needs a $ref to types.yaml from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# hint: Vendor specific properties must have a type and description unless they have a defined, common suffix. from schema $id: http://devicetree.org/meta-schemas/vendor-props.yaml# Documentation/devicetree/bindings/mfd/richtek,rt5033.example.dts:23.15-66.11: Warning (unit_address_vs_reg): /example-0/i2c@0: node has a unit name, but no reg or ranges property Documentation/devicetree/bindings/mfd/richtek,rt5033.example.dts:68.15-78.11: Warning (unit_address_vs_reg): /example-0/i2c@1: node has a unit name, but no reg or ranges property doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/a698f524106e0eb7db5cbd7e73e77ecd5ac8ad7f.1677620677.git.jahau@rocketmail.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.
On Tue, Feb 28, 2023 at 11:32:27PM +0100, Jakob Hauser wrote: > Add device tree binding documentation for rt5033 multifunction device, voltage > regulator and battery charger. > > Cc: Beomho Seo <beomho.seo@samsung.com> > Cc: Chanwoo Choi <cw00.choi@samsung.com> > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > --- > .../bindings/mfd/richtek,rt5033.yaml | 102 ++++++++++++++++++ > .../power/supply/richtek,rt5033-charger.yaml | 76 +++++++++++++ > .../regulator/richtek,rt5033-regulator.yaml | 45 ++++++++ > 3 files changed, 223 insertions(+) > create mode 100644 Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml > create mode 100644 Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml > create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml > > diff --git a/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml b/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml > new file mode 100644 > index 000000000000..f1a58694c81e > --- /dev/null > +++ b/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml > @@ -0,0 +1,102 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/mfd/richtek,rt5033.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Richtek RT5033 Power Management Integrated Circuit > + > +maintainers: > + - Jakob Hauser <jahau@rocketmail.com> > + > +description: | Don't need '|' unless you care about line endings. > + RT5033 is a multifunction device which includes battery charger, fuel gauge, > + flash LED current source, LDO and synchronous Buck converter for portable > + applications. It is interfaced to host controller using I2C interface. The > + battery fuel gauge uses a separate I2C bus. > + > +properties: > + compatible: > + const: richtek,rt5033 > + > + reg: > + maxItems: 1 > + > + interrupts: > + maxItems: 1 > + > + regulators: > + type: object > + $ref: /schemas/regulator/richtek,rt5033-regulator.yaml# > + > + charger: > + type: object > + $ref: /schemas/power/supply/richtek,rt5033-charger.yaml# > + > +required: > + - compatible > + - reg > + - interrupts > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/interrupt-controller/irq.h> > + > + i2c@0 { i2c { > + #address-cells = <1>; > + #size-cells = <0>; > + > + pmic@34 { > + compatible = "richtek,rt5033"; > + reg = <0x34>; > + > + interrupt-parent = <&msmgpio>; > + interrupts = <62 IRQ_TYPE_EDGE_FALLING>; > + > + pinctrl-names = "default"; > + pinctrl-0 = <&pmic_int_default>; > + > + regulators { > + safe_ldo_reg: SAFE_LDO { > + regulator-name = "SAFE_LDO"; > + regulator-min-microvolt = <4900000>; > + regulator-max-microvolt = <4900000>; > + regulator-always-on; > + }; > + ldo_reg: LDO { > + regulator-name = "LDO"; > + regulator-min-microvolt = <2800000>; > + regulator-max-microvolt = <2800000>; > + }; > + buck_reg: BUCK { > + regulator-name = "BUCK"; > + regulator-min-microvolt = <1200000>; > + regulator-max-microvolt = <1200000>; > + }; > + }; > + > + charger { > + compatible = "richtek,rt5033-charger"; > + richtek,pre-uamp = <450000>; > + richtek,fast-uamp = <1000000>; > + richtek,eoc-uamp = <150000>; > + richtek,pre-threshold-uvolt = <3500000>; > + richtek,const-uvolt = <4350000>; > + extcon = <&muic>; > + }; > + }; > + }; > + > + i2c@1 { This should be a separate example entry. > + #address-cells = <1>; > + #size-cells = <0>; > + > + battery@35 { > + compatible = "richtek,rt5033-battery"; > + reg = <0x35>; > + interrupt-parent = <&msmgpio>; > + interrupts = <121 IRQ_TYPE_EDGE_FALLING>; > + }; > + }; > diff --git a/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml b/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml > new file mode 100644 > index 000000000000..996c2932927d > --- /dev/null > +++ b/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml > @@ -0,0 +1,76 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/power/supply/richtek,rt5033-charger.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Richtek RT5033 PIMC Battery Charger > + > +maintainers: > + - Jakob Hauser <jahau@rocketmail.com> > + > +description: | > + The battery charger of the multifunction device RT5033 has to be instantiated > + under sub-node named "charger" using the following format. > + > +properties: > + compatible: > + const: richtek,rt5033-charger > + > + richtek,pre-uamp: Use defined standard unit type suffixes. > + description: | > + Current of pre-charge mode. The pre-charge current levels are 350 mA to > + 650 mA programmed by I2C per 100 mA. > + maxItems: 1 > + > + richtek,fast-uamp: > + description: | > + Current of fast-charge mode. The fast-charge current levels are 700 mA > + to 2000 mA programmed by I2C per 100 mA. > + maxItems: 1 > + > + richtek,eoc-uamp: > + description: | > + This property is end of charge current. Its level ranges from 150 mA to > + 600 mA. Between 150 mA and 300 mA in 50 mA steps, between 300 mA and 600 mA > + in 100 mA steps. > + maxItems: 1 > + > + richtek,pre-threshold-uvolt: > + description: | > + Voltage of pre-charge mode. If the battery voltage is below the pre-charge > + threshold voltage, the charger is in pre-charge mode with pre-charge current. > + Its levels are 2.3 V to 3.8 V programmed by I2C per 0.1 V. > + maxItems: 1 > + > + richtek,const-uvolt: > + description: | > + Battery regulation voltage of constant voltage mode. This voltage levels from > + 3.65 V to 4.4 V by I2C per 0.025 V. > + maxItems: 1 > + > + extcon: This is deprecated. There's standard connector bindings now. > + description: | > + Phandle to the extcon device. > + maxItems: 1 > + > +required: > + - richtek,pre-uamp > + - richtek,fast-uamp > + - richtek,eoc-uamp > + - richtek,pre-threshold-uvolt > + - richtek,const-uvolt > + > +additionalProperties: false > + > +examples: > + - | > + charger { > + compatible = "richtek,rt5033-charger"; > + richtek,pre-uamp = <450000>; > + richtek,fast-uamp = <1000000>; > + richtek,eoc-uamp = <150000>; > + richtek,pre-threshold-uvolt = <3500000>; > + richtek,const-uvolt = <4350000>; > + extcon = <&muic>; > + }; > diff --git a/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml b/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml > new file mode 100644 > index 000000000000..61b074488db4 > --- /dev/null > +++ b/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml > @@ -0,0 +1,45 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/regulator/richtek,rt5033-regulator.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Richtek RT5033 PIMC Voltage Regulator > + > +maintainers: > + - Jakob Hauser <jahau@rocketmail.com> > + > +description: | > + The regulators of RT5033 have to be instantiated under a sub-node named > + "regulators". For SAFE_LDO voltage there is only one value of 4.9 V. LDO > + voltage ranges from 1.2 V to 3.0 V in 0.1 V steps. BUCK voltage ranges from > + 1.0 V to 3.0 V in 0.1 V steps. > + > +patternProperties: > + "^(SAFE_LDO|LDO|BUCK)$": Lowercase preferred for node names. > + type: object > + $ref: /schemas/regulator/regulator.yaml# > + unevaluatedProperties: false > + > +additionalProperties: false > + > +examples: > + - | > + regulators { Just 1 complete example in the MFD binding please. > + safe_ldo_reg: SAFE_LDO { > + regulator-name = "SAFE_LDO"; > + regulator-min-microvolt = <4900000>; > + regulator-max-microvolt = <4900000>; > + regulator-always-on; > + }; > + ldo_reg: LDO { > + regulator-name = "LDO"; > + regulator-min-microvolt = <2800000>; > + regulator-max-microvolt = <2800000>; > + }; > + buck_reg: BUCK { > + regulator-name = "BUCK"; > + regulator-min-microvolt = <1200000>; > + regulator-max-microvolt = <1200000>; > + }; > + }; > -- > 2.39.1 >
On Tue, 28 Feb 2023, Jakob Hauser wrote: > Fix comments and remove some empty lines in rt5033-private.h. Align struct > rt5033_charger in rt5033.h. > > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > --- > include/linux/mfd/rt5033-private.h | 17 +++++++---------- > include/linux/mfd/rt5033.h | 7 +++---- > 2 files changed, 10 insertions(+), 14 deletions(-) Applied, thanks
On Tue, 28 Feb 2023, Jakob Hauser wrote: > The charger state mask RT5033_CHG_STAT_MASK should be 0x30 [1][2]. > > The high impedance mask RT5033_RT_HZ_MASK is actually value 0x02 [3] and is > assosiated to the RT5033 CHGCTRL1 register [4]. Accordingly also change > RT5033_CHARGER_HZ_ENABLE to 0x02 to avoid the need of a bit shift upon > application. > > For input current limiting AICR mode, the define for the 1000 mA step was > missing [5]. Additionally add the define for DISABLE option. Concerning the > mask, remove RT5033_AICR_MODE_MASK because there is already > RT5033_CHGCTRL1_IAICR_MASK further up. They are redundant and the upper one > makes more sense to have the masks of a register colleted there as an > overview. > > [1] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L669-L682 > [2] https://github.com/torvalds/linux/blob/v6.0/include/linux/mfd/rt5033-private.h#L59-L62 > [3] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/include/linux/battery/charger/rt5033_charger.h#L44 > [4] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L223 > [5] https://github.com/msm8916-mainline/linux-downstream/blob/GT-I9195I/drivers/battery/rt5033_charger.c#L278 > > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > --- > include/linux/mfd/rt5033-private.h | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) For my own reference (apply this as-is to your sign-off block): Acked-for-MFD-by: Lee Jones <lee@kernel.org>
Hi Rob, thanks for the remarks and sorry for not running 'make dt_binding_check'. I'm not familiar with devicetree bindings and obviously missed to read the file Documentation/devicetree/bindings/submitting-patches.rst. On 01.03.23 03:35, Rob Herring wrote: > On Tue, Feb 28, 2023 at 11:32:27PM +0100, Jakob Hauser wrote: >> Add device tree binding documentation for rt5033 multifunction device, voltage >> regulator and battery charger. >> >> Cc: Beomho Seo <beomho.seo@samsung.com> >> Cc: Chanwoo Choi <cw00.choi@samsung.com> >> Signed-off-by: Jakob Hauser <jahau@rocketmail.com> >> --- >> .../bindings/mfd/richtek,rt5033.yaml | 102 ++++++++++++++++++ >> .../power/supply/richtek,rt5033-charger.yaml | 76 +++++++++++++ >> .../regulator/richtek,rt5033-regulator.yaml | 45 ++++++++ >> 3 files changed, 223 insertions(+) >> create mode 100644 Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml >> create mode 100644 Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml >> create mode 100644 Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml >> >> diff --git a/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml b/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml >> new file mode 100644 >> index 000000000000..f1a58694c81e >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/mfd/richtek,rt5033.yaml >> @@ -0,0 +1,102 @@ >> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/mfd/richtek,rt5033.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: Richtek RT5033 Power Management Integrated Circuit >> + >> +maintainers: >> + - Jakob Hauser <jahau@rocketmail.com> >> + >> +description: | > > Don't need '|' unless you care about line endings. OK >> + RT5033 is a multifunction device which includes battery charger, fuel gauge, >> + flash LED current source, LDO and synchronous Buck converter for portable >> + applications. It is interfaced to host controller using I2C interface. The >> + battery fuel gauge uses a separate I2C bus. >> + >> +properties: >> + compatible: >> + const: richtek,rt5033 >> + >> + reg: >> + maxItems: 1 >> + >> + interrupts: >> + maxItems: 1 >> + >> + regulators: >> + type: object >> + $ref: /schemas/regulator/richtek,rt5033-regulator.yaml# >> + >> + charger: >> + type: object >> + $ref: /schemas/power/supply/richtek,rt5033-charger.yaml# >> + >> +required: >> + - compatible >> + - reg >> + - interrupts >> + >> +additionalProperties: false >> + >> +examples: >> + - | >> + #include <dt-bindings/interrupt-controller/irq.h> >> + >> + i2c@0 { > > i2c { OK >> + #address-cells = <1>; >> + #size-cells = <0>; >> + >> + pmic@34 { >> + compatible = "richtek,rt5033"; >> + reg = <0x34>; >> + >> + interrupt-parent = <&msmgpio>; >> + interrupts = <62 IRQ_TYPE_EDGE_FALLING>; >> + >> + pinctrl-names = "default"; >> + pinctrl-0 = <&pmic_int_default>; >> + >> + regulators { >> + safe_ldo_reg: SAFE_LDO { >> + regulator-name = "SAFE_LDO"; >> + regulator-min-microvolt = <4900000>; >> + regulator-max-microvolt = <4900000>; >> + regulator-always-on; >> + }; >> + ldo_reg: LDO { >> + regulator-name = "LDO"; >> + regulator-min-microvolt = <2800000>; >> + regulator-max-microvolt = <2800000>; >> + }; >> + buck_reg: BUCK { >> + regulator-name = "BUCK"; >> + regulator-min-microvolt = <1200000>; >> + regulator-max-microvolt = <1200000>; >> + }; >> + }; >> + >> + charger { >> + compatible = "richtek,rt5033-charger"; >> + richtek,pre-uamp = <450000>; >> + richtek,fast-uamp = <1000000>; >> + richtek,eoc-uamp = <150000>; >> + richtek,pre-threshold-uvolt = <3500000>; >> + richtek,const-uvolt = <4350000>; >> + extcon = <&muic>; >> + }; >> + }; >> + }; >> + >> + i2c@1 { > > This should be a separate example entry. I'll skip it then. The battery fuel gauge is not handled as a part of the MFD, it has a separate I2C line. Accordingly, it has a separate documentation including examples [1]. I had implemented into the MFD example to make clear this is separated. But as it is not part of the MFD, I guess it shouldn't show up in the MFD documentation. In the description of the MFD there is the statement "The battery fuel gauge uses a separate I2C bus." I hope this is clear enough, I'm not sure if I should modify/extent that statement or add some kind of reference to the battery fuel gauge after removing it from the example. [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/power/supply/richtek,rt5033-battery.yaml?h=v6.2 >> + #address-cells = <1>; >> + #size-cells = <0>; >> + >> + battery@35 { >> + compatible = "richtek,rt5033-battery"; >> + reg = <0x35>; >> + interrupt-parent = <&msmgpio>; >> + interrupts = <121 IRQ_TYPE_EDGE_FALLING>; >> + }; >> + }; >> diff --git a/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml b/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml >> new file mode 100644 >> index 000000000000..996c2932927d >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/power/supply/richtek,rt5033-charger.yaml >> @@ -0,0 +1,76 @@ >> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/power/supply/richtek,rt5033-charger.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: Richtek RT5033 PIMC Battery Charger >> + >> +maintainers: >> + - Jakob Hauser <jahau@rocketmail.com> >> + >> +description: | >> + The battery charger of the multifunction device RT5033 has to be instantiated >> + under sub-node named "charger" using the following format. >> + >> +properties: >> + compatible: >> + const: richtek,rt5033-charger >> + >> + richtek,pre-uamp: > > Use defined standard unit type suffixes. That makes sense. I took the current names from the 2015 patchset and wasn't aware of the standard suffixes. Just for the record: Chaning the names will also impact patch 06 "power: supply: rt5033_charger: Add RT5033 charger device driver", as the names are parsed there. >> + description: | >> + Current of pre-charge mode. The pre-charge current levels are 350 mA to >> + 650 mA programmed by I2C per 100 mA. >> + maxItems: 1 >> + >> + richtek,fast-uamp: >> + description: | >> + Current of fast-charge mode. The fast-charge current levels are 700 mA >> + to 2000 mA programmed by I2C per 100 mA. >> + maxItems: 1 >> + >> + richtek,eoc-uamp: >> + description: | >> + This property is end of charge current. Its level ranges from 150 mA to >> + 600 mA. Between 150 mA and 300 mA in 50 mA steps, between 300 mA and 600 mA >> + in 100 mA steps. >> + maxItems: 1 >> + >> + richtek,pre-threshold-uvolt: >> + description: | >> + Voltage of pre-charge mode. If the battery voltage is below the pre-charge >> + threshold voltage, the charger is in pre-charge mode with pre-charge current. >> + Its levels are 2.3 V to 3.8 V programmed by I2C per 0.1 V. >> + maxItems: 1 >> + >> + richtek,const-uvolt: >> + description: | >> + Battery regulation voltage of constant voltage mode. This voltage levels from >> + 3.65 V to 4.4 V by I2C per 0.025 V. >> + maxItems: 1 >> + >> + extcon: > > This is deprecated. There's standard connector bindings now. How does this work? I couldn't find an example. I found Documentation/devicetree/bindings/connector/usb-connector.yaml [2] but I don't see how this would be applied here. The extcon device entry in the samsung-serranove devicetree [3] looks like: i2c-muic { compatible = "i2c-gpio"; sda-gpios = <&msmgpio 105 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; scl-gpios = <&msmgpio 106 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; pinctrl-names = "default"; pinctrl-0 = <&muic_i2c_default>; #address-cells = <1>; #size-cells = <0>; muic: extcon@14 { compatible = "siliconmitus,sm5504-muic"; reg = <0x14>; interrupt-parent = <&msmgpio>; interrupts = <12 IRQ_TYPE_EDGE_FALLING>; pinctrl-names = "default"; pinctrl-0 = <&muic_irq_default>; }; }; [2] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/connector/usb-connector.yaml?h=v6.2 [3] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/qcom/msm8916-samsung-serranove.dts?h=v6.2#n123 >> + description: | >> + Phandle to the extcon device. >> + maxItems: 1 >> + >> +required: >> + - richtek,pre-uamp >> + - richtek,fast-uamp >> + - richtek,eoc-uamp >> + - richtek,pre-threshold-uvolt >> + - richtek,const-uvolt >> + >> +additionalProperties: false >> + >> +examples: >> + - | >> + charger { >> + compatible = "richtek,rt5033-charger"; >> + richtek,pre-uamp = <450000>; >> + richtek,fast-uamp = <1000000>; >> + richtek,eoc-uamp = <150000>; >> + richtek,pre-threshold-uvolt = <3500000>; >> + richtek,const-uvolt = <4350000>; >> + extcon = <&muic>; >> + }; >> diff --git a/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml b/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml >> new file mode 100644 >> index 000000000000..61b074488db4 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/regulator/richtek,rt5033-regulator.yaml >> @@ -0,0 +1,45 @@ >> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) >> +%YAML 1.2 >> +--- >> +$id: http://devicetree.org/schemas/regulator/richtek,rt5033-regulator.yaml# >> +$schema: http://devicetree.org/meta-schemas/core.yaml# >> + >> +title: Richtek RT5033 PIMC Voltage Regulator >> + >> +maintainers: >> + - Jakob Hauser <jahau@rocketmail.com> >> + >> +description: | >> + The regulators of RT5033 have to be instantiated under a sub-node named >> + "regulators". For SAFE_LDO voltage there is only one value of 4.9 V. LDO >> + voltage ranges from 1.2 V to 3.0 V in 0.1 V steps. BUCK voltage ranges from >> + 1.0 V to 3.0 V in 0.1 V steps. >> + >> +patternProperties: >> + "^(SAFE_LDO|LDO|BUCK)$": > > Lowercase preferred for node names. OK, I can change to lowercase. Though I have to change the already existing driver rt5033-regulator as well then [4]. I'm not sure if this has an impact on already existing implementations. Although within the upstream kernel I think there is no usage of the rt5033-regulator driver yet. [4] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/regulator/rt5033-regulator.c?h=v6.2#n42 >> + type: object >> + $ref: /schemas/regulator/regulator.yaml# >> + unevaluatedProperties: false >> + >> +additionalProperties: false >> + >> +examples: >> + - | >> + regulators { > > Just 1 complete example in the MFD binding please. OK, I'll skip the examples part here then. >> + safe_ldo_reg: SAFE_LDO { >> + regulator-name = "SAFE_LDO"; >> + regulator-min-microvolt = <4900000>; >> + regulator-max-microvolt = <4900000>; >> + regulator-always-on; >> + }; >> + ldo_reg: LDO { >> + regulator-name = "LDO"; >> + regulator-min-microvolt = <2800000>; >> + regulator-max-microvolt = <2800000>; >> + }; >> + buck_reg: BUCK { >> + regulator-name = "BUCK"; >> + regulator-min-microvolt = <1200000>; >> + regulator-max-microvolt = <1200000>; >> + }; >> + }; >> -- >> 2.39.1 >> I'll wait with implementing the changes as there will be likely further comments on the other patches. Kind regards, Jakob
Hi Lee, On 05.03.23 11:48, Lee Jones wrote: > On Tue, 28 Feb 2023, Jakob Hauser wrote: > >> Fix comments and remove some empty lines in rt5033-private.h. Align struct >> rt5033_charger in rt5033.h. >> >> Signed-off-by: Jakob Hauser <jahau@rocketmail.com> >> --- >> include/linux/mfd/rt5033-private.h | 17 +++++++---------- >> include/linux/mfd/rt5033.h | 7 +++---- >> 2 files changed, 10 insertions(+), 14 deletions(-) > > Applied, thanks > Thanks! Does this mean I should skip this patch in the next versions of the patchset? Or should I just add the Acked-for-MFD-by tag of yours? In the first case I'm not sure what base to use for the next versions of the patchset. Sorry, I'm not so much familiar with the procedures. Kind regards, Jakob
On Sun, 05 Mar 2023, Jakob Hauser wrote: > Hi Lee, > > On 05.03.23 11:48, Lee Jones wrote: > > On Tue, 28 Feb 2023, Jakob Hauser wrote: > > > > > Fix comments and remove some empty lines in rt5033-private.h. Align struct > > > rt5033_charger in rt5033.h. > > > > > > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > > > --- > > > include/linux/mfd/rt5033-private.h | 17 +++++++---------- > > > include/linux/mfd/rt5033.h | 7 +++---- > > > 2 files changed, 10 insertions(+), 14 deletions(-) > > > > Applied, thanks > > > > Thanks! Does this mean I should skip this patch in the next versions of the > patchset? Or should I just add the Acked-for-MFD-by tag of yours? In the > first case I'm not sure what base to use for the next versions of the > patchset. Sorry, I'm not so much familiar with the procedures. You should rebase onto -next before sending out your next submission. This patch should vanish from the set. If it doesn't, please wait another 24hrs and try again.
Hi! > Some comments on the end-of-charge behavior. The rt5033 chip offers three > options. In the Android driver, a forth option was implemented. Hmm. I'm working on that on motorola-cpcap driver, and I guess this is going to be common problem for many drivers. > - By default, the rt5033 chip charges indefinitely. The current goes down but > there is always a charge voltage to the battery, which might not be too good > for the battery lifetime. > - There is the possibility to enable a fast charge timer. The timer can be > set to 4, 6, 8... 16 hours. After that time has elapsed, charging stops > and the battery gets discharged. This option with a timer of 4 hours was > chosen by Beomho Seo in the patchset of March 2015. However, that option > is confusing to the user. It doesn't initiate a re-charge cycle. So when > keeping plugged in the device over night, I find it discharging on the > next morning. > - The third option of the rt5033 chip is enabling charging termination. This > also enables a re-charge cycle. When the charging current sinks below the > end-of-charge current, the chip stops charging. The sysfs state changes to > "not charging". When the voltage gets 0.1 V below the end-of-charge constant > voltage, re-charging starts. Then again, when charging current sinks below > the end-of-charge current, the chip stops charging. And so on, going up and > down in re-charge cycles. In case the power consumption is high (e.g. tuning > on the display of the mobile device), the current goes into an equilibrium. > The downside of this charging termination option: When reaching the end-of- > charge current, the capacity might not have reached 100 % yet. The capacity > to reach probably depends on power consumption and battery wear. On my mobile > device, capacity reaches 98 %, drops to 96 % until re-charging kicks in, > climbs to 98 %, drops to 96 %, and so on. Not reaching 100 % is a bit > confusing to the user, too. Is the system powered from the battery in the not-charging case? Anyway, we should teach userspace that "full battery" does not neccessary mean 100%, as keeping battery at 4.3V wears it down quickly. Best regards, Pavel
Hi Sebastian, On 28.02.23 23:32, Jakob Hauser wrote: > Enable high impedance mode to reduce power consumption. However, it needs to be > disabled in case of charging or OTG mode. > > Tested-by: Raymond Hackley <raymondhackley@protonmail.com> > Signed-off-by: Jakob Hauser <jahau@rocketmail.com> > --- > drivers/power/supply/rt5033_charger.c | 47 ++++++++++++++++++++++++++- > 1 file changed, 46 insertions(+), 1 deletion(-) ... Raymond (in copy) did some tests on the flash LEDs, which are also managed by the rt5033 chip. There is no driver for leds-rt5033 yet but Raymond got the rt5033 LEDs running via the similar driver leds-sgm3140. However, to get the flash LEDs working, he had to disable the high impedance mode of rt5033. I implemented the use of high impedance mode by this patch to improve power saving. It's kind of a sleep mode. Although it's not clear how much power it does save, it's generally worth trying to improve power saving on mobile devices as far as possible. As it now turns out that the use of high impedance mode might complicate the handling of the flash LEDs, I would drop this patch in the next version v2 of the patchset. Let's skip this power saving attempt for now. It still can be added at a later date as an improvement. Kind regards, Jakob
Hi Rob, On 05.03.23 16:54, Jakob Hauser wrote: ... > On 01.03.23 03:35, Rob Herring wrote: >> On Tue, Feb 28, 2023 at 11:32:27PM +0100, Jakob Hauser wrote: ... >>> + richtek,pre-threshold-uvolt: >>> + description: | >>> + Voltage of pre-charge mode. If the battery voltage is below >>> the pre-charge >>> + threshold voltage, the charger is in pre-charge mode with >>> pre-charge current. >>> + Its levels are 2.3 V to 3.8 V programmed by I2C per 0.1 V. >>> + maxItems: 1 >>> + >>> + richtek,const-uvolt: >>> + description: | >>> + Battery regulation voltage of constant voltage mode. This >>> voltage levels from >>> + 3.65 V to 4.4 V by I2C per 0.025 V. >>> + maxItems: 1 >>> + >>> + extcon: >> >> This is deprecated. There's standard connector bindings now. > > How does this work? I couldn't find an example. > > I found Documentation/devicetree/bindings/connector/usb-connector.yaml > [2] but I don't see how this would be applied here. > > The extcon device entry in the samsung-serranove devicetree [3] looks like: > > i2c-muic { > compatible = "i2c-gpio"; > sda-gpios = <&msmgpio 105 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; > scl-gpios = <&msmgpio 106 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>; > > pinctrl-names = "default"; > pinctrl-0 = <&muic_i2c_default>; > > #address-cells = <1>; > #size-cells = <0>; > > muic: extcon@14 { > compatible = "siliconmitus,sm5504-muic"; > reg = <0x14>; > > interrupt-parent = <&msmgpio>; > interrupts = <12 IRQ_TYPE_EDGE_FALLING>; > > pinctrl-names = "default"; > pinctrl-0 = <&muic_irq_default>; > }; > }; > > [2] > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/connector/usb-connector.yaml?h=v6.2 > [3] > https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/boot/dts/qcom/msm8916-samsung-serranove.dts?h=v6.2#n123 Could you add more information on what you mean by standard connector bindings? It's not clear to me. >>> + description: | >>> + Phandle to the extcon device. >>> + maxItems: 1 >>> + >>> +required: >>> + - richtek,pre-uamp >>> + - richtek,fast-uamp >>> + - richtek,eoc-uamp >>> + - richtek,pre-threshold-uvolt >>> + - richtek,const-uvolt >>> + >>> +additionalProperties: false >>> + >>> +examples: >>> + - | >>> + charger { >>> + compatible = "richtek,rt5033-charger"; >>> + richtek,pre-uamp = <450000>; >>> + richtek,fast-uamp = <1000000>; >>> + richtek,eoc-uamp = <150000>; >>> + richtek,pre-threshold-uvolt = <3500000>; >>> + richtek,const-uvolt = <4350000>; >>> + extcon = <&muic>; >>> + }; ... Kind regards, Jakob