2022-11-08 19:06:28

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 0/9] Add MediaTek MT6357 PMIC support

Hi,
This patch series adds MFD, PMIC keys, and regulator support for MT6357.
MT6357 is a MediaTek PMIC very similar to MT6358.

Currently, MTK bindings related to the PMICs are not converted yet (still .txt):

soc/mediatek/pwrap.txt (all PMIC parent)
|
V
mfd/mt6397.txt (support lot of mt63XX PMIC)
+---------------+----------------+---...
V V V
regulator/... rtc/... codec/...

1) Convert pwrap to yaml is ok.

2) For the PMIC bindings, there are two option:
- Convert mt6397.txt to mediatek,mt6397.yaml and continue to support multiple
PMIC with only one file. IMO, the file will be hard to read because
the supported features aren't the same for each PMIC.

- Make a binding file for each PMIC ref:
- mfd/mediatek,mt6357.yaml
- mfd/mediatek,mt6358.yaml
- ...

3) All PMIC daughter bindings (regulator, rtc, codec, led, ...) aren't fully
converted yet. Refering to the two PMIC convertion options above:
- To be clean, all daughter bindings should be converted. This is hard because
a good understanding of each device is requiered to write efficient bindings.
- Only daughter bindings supported by the added PMIC should be converted, that
allows to do the task conversion step by step.

In the V4 of this serie, I chose the second option.

Regards,
Alex

Changes in v4:
- "dt-bindings: mfd: mt6397: add binding for MT6357" has been applied
by Lee Jones
- All fixed regulator are now refering to fixed-regulator.yaml
- vfe28 and vcamio18 regulators have been added
- pwrap binding has been converted and mt8365 support has been added
- Change node names for mt8173 and mt6358 SoC to be consistent with
pwrap documentation.
- mt6357 PMIC binding has been created
- mt6397 RTC binding has been converted and mt6357 support has been added
- Link to v3: https://lore.kernel.org/r/[email protected]

Changes in v3:
- To be consistent with regulator/driver.h and helper.c, shift
variables have been removed and the mask values have been directly shifted.
- Remove index tables and rework volt tables to use set/get helper functions.
- Add comment to structure and function.
- Fix Fabien Parent mail address.
- Link to v2: https://lore.kernel.org/r/[email protected]

Changes in v2:
- Rebase
- Fix typo
- Remove dependencies with https://lore.kernel.org/all/[email protected]/
which is no longer relevant.

Previous versions:
v1 - https://lore.kernel.org/all/[email protected]/

To: Lee Jones <[email protected]>
To: Rob Herring <[email protected]>
To: Krzysztof Kozlowski <[email protected]>
To: Matthias Brugger <[email protected]>
To: Dmitry Torokhov <[email protected]>
To: Chen Zhong <[email protected]>
To: Liam Girdwood <[email protected]>
To: Mark Brown <[email protected]>
To: Fabien Parent <[email protected]>
To: Alessandro Zummo <[email protected]>
To: Alexandre Belloni <[email protected]>
To: Sean Wang <[email protected]>
To: Pavel Machek <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: Fabien Parent <[email protected]>
Cc: Rob Herring <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: AngeloGioacchino Del Regno <[email protected]>
Cc: Mattijs Korpershoek <[email protected]>
Signed-off-by: Alexandre Mergnat <[email protected]>

---
Alexandre Mergnat (5):
dt-bindings: rtc: mediatek: convert MT6397 rtc documentation
dt-bindings: mfd: mediatek: Add bindings for MT6357 PMIC
dt-bindings: soc: mediatek: convert pwrap documentation
arm64: dts: mt6358: change node names
arm64: dts: mt8173: change node name

Fabien Parent (4):
dt-bindings: input: mtk-pmic-keys: add binding for MT6357 PMIC
dt-bindings: regulator: Add binding schema for mt6357 regulators
regulator: add mt6357 regulator
Input: mtk-pmic-keys: add MT6357 support

.../bindings/input/mediatek,pmic-keys.yaml | 1 +
.../devicetree/bindings/leds/leds-mt6323.txt | 2 +-
.../devicetree/bindings/mfd/mediatek,mt6357.yaml | 102 +++++
Documentation/devicetree/bindings/mfd/mt6397.txt | 4 +-
.../regulator/mediatek,mt6357-regulator.yaml | 292 +++++++++++++
.../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++
.../devicetree/bindings/rtc/rtc-mt6397.txt | 31 --
.../bindings/soc/mediatek/mediatek,pwrap.yaml | 158 +++++++
.../devicetree/bindings/soc/mediatek/pwrap.txt | 75 ----
arch/arm64/boot/dts/mediatek/mt6358.dtsi | 6 +-
arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi | 2 +-
arch/arm64/boot/dts/mediatek/mt8173-evb.dts | 2 +-
drivers/input/keyboard/mtk-pmic-keys.c | 17 +
drivers/regulator/Kconfig | 9 +
drivers/regulator/Makefile | 1 +
drivers/regulator/mt6357-regulator.c | 453 +++++++++++++++++++++
include/linux/regulator/mt6357-regulator.h | 51 +++
17 files changed, 1132 insertions(+), 114 deletions(-)
---
base-commit: e7f535c0775b896befb4f6765c02bc065fd26156
change-id: 20221005-mt6357-support-55308b82e33f

Best regards,
--
Alexandre Mergnat <[email protected]>


2022-11-08 19:08:47

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 1/9] dt-bindings: input: mtk-pmic-keys: add binding for MT6357 PMIC

From: Fabien Parent <[email protected]>

Add binding documentation for the PMIC keys on MT6357.

Signed-off-by: Fabien Parent <[email protected]>
Acked-by: Rob Herring <[email protected]>
Acked-by: Dmitry Torokhov <[email protected]>
Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
Signed-off-by: Alexandre Mergnat <[email protected]>
---
Documentation/devicetree/bindings/input/mediatek,pmic-keys.yaml | 1 +
1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/input/mediatek,pmic-keys.yaml b/Documentation/devicetree/bindings/input/mediatek,pmic-keys.yaml
index 2f72ec418415..037c3ae9f1c3 100644
--- a/Documentation/devicetree/bindings/input/mediatek,pmic-keys.yaml
+++ b/Documentation/devicetree/bindings/input/mediatek,pmic-keys.yaml
@@ -26,6 +26,7 @@ properties:
enum:
- mediatek,mt6323-keys
- mediatek,mt6331-keys
+ - mediatek,mt6357-keys
- mediatek,mt6358-keys
- mediatek,mt6397-keys


--
b4 0.10.1

2022-11-08 19:10:48

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 4/9] dt-bindings: mfd: mediatek: Add bindings for MT6357 PMIC

Currently, almost all MT63XX PMIC are documented mfd/mt6397.txt.
Unfortunately, the PMICs haven't always similar HW sub-features.
To have a better human readable schema, I chose to make one PMIC schema
to match the exact HW capabilities instead of convert mt6397.txt to
mediatek,mt63xx.yaml and put a bunch of properties behind
"if contain ... then ..."

- add interrupt property
- change property refs to match with new yaml documentation

Signed-off-by: Alexandre Mergnat <[email protected]>
---
.../devicetree/bindings/mfd/mediatek,mt6357.yaml | 102 +++++++++++++++++++++
1 file changed, 102 insertions(+)

diff --git a/Documentation/devicetree/bindings/mfd/mediatek,mt6357.yaml b/Documentation/devicetree/bindings/mfd/mediatek,mt6357.yaml
new file mode 100644
index 000000000000..7b421f21d3f5
--- /dev/null
+++ b/Documentation/devicetree/bindings/mfd/mediatek,mt6357.yaml
@@ -0,0 +1,102 @@
+# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mfd/mediatek,mt6357.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek MT6357 Multifunction Device Driver
+
+maintainers:
+ - Alexandre Mergnat <[email protected]>
+
+description: |
+ MT6357 is a power management system chip containing 5 buck
+ converters and 29 LDOs. Supported features are audio codec,
+ USB battery charging, fuel gauge, RTC
+
+ This is a multifunction device with the following sub modules:
+ - Regulator
+ - RTC
+ - Keys
+
+ It is interfaced to host controller using SPI interface by a proprietary hardware
+ called PMIC wrapper or pwrap. This MFD is a child device of pwrap.
+ See the following for pwrap node definitions:
+ ../soc/mediatek/mediatek,pwrap.yaml
+
+properties:
+ compatible:
+ const: mediatek,mt6357
+
+ interrupts:
+ maxItems: 1
+
+ interrupt-controller: true
+
+ "#interrupt-cells":
+ const: 2
+
+ regulators:
+ type: object
+ $ref: ../regulator/mediatek,mt6357-regulator.yaml
+ description:
+ Child node that specify the regulator.
+
+ rtc:
+ type: object
+ $ref: ../rtc/mediatek,mt6397-rtc.yaml
+ description:
+ Child node that specify the RTC.
+
+ keys:
+ type: object
+ $ref: ../input/mediatek,pmic-keys.yaml
+ description:
+ Child node that specify the keys.
+
+required:
+ - compatible
+ - regulators
+
+additionalProperties: false
+
+examples:
+ - |
+ pwrap {
+ pmic {
+ compatible = "mediatek,mt6357";
+
+ interrupt-parent = <&pio>;
+ interrupts = <145 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-controller;
+ #interrupt-cells = <2>;
+
+ regulators {
+ mt6357_vproc_reg: buck-vproc {
+ regulator-name = "vproc";
+ regulator-min-microvolt = <518750>;
+ regulator-max-microvolt = <1312500>;
+ regulator-ramp-delay = <6250>;
+ regulator-enable-ramp-delay = <220>;
+ regulator-always-on;
+ };
+
+ // ...
+
+ mt6357_vusb33_reg: ldo-vusb33 {
+ regulator-name = "vusb33";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3100000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ };
+
+ rtc {
+ compatible = "mediatek,mt6357-rtc";
+ };
+
+ keys {
+ compatible = "mediatek,mt6357-keys";
+ };
+ };
+ };

--
b4 0.10.1

2022-11-08 19:11:05

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 7/9] arm64: dts: mt8173: change node name

- Change the node name from "mt6397" to "pmic" to be consistent
with mediatek,pwrap.yaml documentation.

Signed-off-by: Alexandre Mergnat <[email protected]>
---
arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi | 2 +-
arch/arm64/boot/dts/mediatek/mt8173-evb.dts | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi b/arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi
index e21feb85d822..a8f5c48e1782 100644
--- a/arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8173-elm.dtsi
@@ -913,7 +913,7 @@ &pwm0 {
};

&pwrap {
- pmic: mt6397 {
+ pmic: pmic {
compatible = "mediatek,mt6397";
#address-cells = <1>;
#size-cells = <1>;
diff --git a/arch/arm64/boot/dts/mediatek/mt8173-evb.dts b/arch/arm64/boot/dts/mediatek/mt8173-evb.dts
index 0b5f154007be..755df5694234 100644
--- a/arch/arm64/boot/dts/mediatek/mt8173-evb.dts
+++ b/arch/arm64/boot/dts/mediatek/mt8173-evb.dts
@@ -300,7 +300,7 @@ &pwrap {
/* Only MT8173 E1 needs USB power domain */
power-domains = <&spm MT8173_POWER_DOMAIN_USB>;

- pmic: mt6397 {
+ pmic: pmic {
compatible = "mediatek,mt6397";
interrupt-parent = <&pio>;
interrupts = <11 IRQ_TYPE_LEVEL_HIGH>;

--
b4 0.10.1

2022-11-08 19:11:11

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 3/9] dt-bindings: regulator: Add binding schema for mt6357 regulators

From: Fabien Parent <[email protected]>

Add YAML schema for the MediaTek MT6357 regulators.

Signed-off-by: Fabien Parent <[email protected]>
Signed-off-by: Alexandre Mergnat <[email protected]>
---
.../regulator/mediatek,mt6357-regulator.yaml | 292 +++++++++++++++++++++
1 file changed, 292 insertions(+)

diff --git a/Documentation/devicetree/bindings/regulator/mediatek,mt6357-regulator.yaml b/Documentation/devicetree/bindings/regulator/mediatek,mt6357-regulator.yaml
new file mode 100644
index 000000000000..3997a70a8b6c
--- /dev/null
+++ b/Documentation/devicetree/bindings/regulator/mediatek,mt6357-regulator.yaml
@@ -0,0 +1,292 @@
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/regulator/mediatek,mt6357-regulator.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek MT6357 Regulators
+
+maintainers:
+ - Fabien Parent <[email protected]>
+ - Alexandre Mergnat <[email protected]>
+
+description: |
+ The MT6357 PMIC provides 5 BUCK and 29 LDO.
+ Regulators and nodes are named according to the regulator type:
+ buck-<name> and ldo-<name>.
+ MT6357 regulators node should be sub node of the MT6397 MFD node.
+
+patternProperties:
+ "^buck-v(core|modem|pa|proc|s1)$":
+ type: object
+ $ref: regulator.yaml#
+ unevaluatedProperties: false
+ description:
+ Properties for single BUCK regulator.
+
+ required:
+ - regulator-name
+ - regulator-min-microvolt
+ - regulator-max-microvolt
+
+ "^ldo-v(camio18|aud28|aux18|io18|io28|rf12|rf18|cn18|cn28|fe28)$":
+ type: object
+ $ref: fixed-regulator.yaml#
+ unevaluatedProperties: false
+ description:
+ Properties for single fixed LDO regulator.
+
+ required:
+ - regulator-name
+ - regulator-min-microvolt
+ - regulator-max-microvolt
+
+ "^ldo-v(efuse|ibr|ldo28|mch|cama|camd|cn33-bt|cn33-wifi)$":
+ type: object
+ $ref: regulator.yaml#
+ unevaluatedProperties: false
+ description:
+ Properties for single LDO regulator.
+
+ required:
+ - regulator-name
+ - regulator-min-microvolt
+ - regulator-max-microvolt
+
+ "^ldo-v(xo22|emc|mc|sim1|sim2|sram-others|sram-proc|dram|usb33)$":
+ type: object
+ $ref: regulator.yaml#
+ unevaluatedProperties: false
+ description:
+ Properties for single LDO regulator.
+
+ required:
+ - regulator-name
+ - regulator-min-microvolt
+ - regulator-max-microvolt
+
+additionalProperties: false
+
+examples:
+ - |
+ pmic {
+ regulators {
+ mt6357_vproc_reg: buck-vproc {
+ regulator-name = "vproc";
+ regulator-min-microvolt = <518750>;
+ regulator-max-microvolt = <1312500>;
+ regulator-ramp-delay = <6250>;
+ regulator-enable-ramp-delay = <220>;
+ regulator-always-on;
+ };
+ mt6357_vcore_reg: buck-vcore {
+ regulator-name = "vcore";
+ regulator-min-microvolt = <518750>;
+ regulator-max-microvolt = <1312500>;
+ regulator-ramp-delay = <6250>;
+ regulator-enable-ramp-delay = <220>;
+ regulator-always-on;
+ };
+ mt6357_vmodem_reg: buck-vmodem {
+ regulator-name = "vmodem";
+ regulator-min-microvolt = <500000>;
+ regulator-max-microvolt = <1193750>;
+ regulator-ramp-delay = <6250>;
+ regulator-enable-ramp-delay = <220>;
+ };
+ mt6357_vs1_reg: buck-vs1 {
+ regulator-name = "vs1";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <2200000>;
+ regulator-ramp-delay = <12500>;
+ regulator-enable-ramp-delay = <220>;
+ regulator-always-on;
+ };
+ mt6357_vpa_reg: buck-vpa {
+ regulator-name = "vpa";
+ regulator-min-microvolt = <500000>;
+ regulator-max-microvolt = <3650000>;
+ regulator-ramp-delay = <50000>;
+ regulator-enable-ramp-delay = <220>;
+ };
+ mt6357_vfe28_reg: ldo-vfe28 {
+ compatible = "regulator-fixed";
+ regulator-name = "vfe28";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vxo22_reg: ldo-vxo22 {
+ regulator-name = "vxo22";
+ regulator-min-microvolt = <2200000>;
+ regulator-max-microvolt = <2400000>;
+ regulator-enable-ramp-delay = <110>;
+ };
+ mt6357_vrf18_reg: ldo-vrf18 {
+ compatible = "regulator-fixed";
+ regulator-name = "vrf18";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <110>;
+ };
+ mt6357_vrf12_reg: ldo-vrf12 {
+ compatible = "regulator-fixed";
+ regulator-name = "vrf12";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-enable-ramp-delay = <110>;
+ };
+ mt6357_vefuse_reg: ldo-vefuse {
+ regulator-name = "vefuse";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vcn33_bt_reg: ldo-vcn33-bt {
+ regulator-name = "vcn33-bt";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3500000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vcn33_wifi_reg: ldo-vcn33-wifi {
+ regulator-name = "vcn33-wifi";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3500000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vcn28_reg: ldo-vcn28 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcn28";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vcn18_reg: ldo-vcn18 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcn18";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vcama_reg: ldo-vcama {
+ regulator-name = "vcama";
+ regulator-min-microvolt = <2500000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vcamd_reg: ldo-vcamd {
+ regulator-name = "vcamd";
+ regulator-min-microvolt = <1000000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vcamio_reg: ldo-vcamio18 {
+ compatible = "regulator-fixed";
+ regulator-name = "vcamio";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vldo28_reg: ldo-vldo28 {
+ regulator-name = "vldo28";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <3000000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vsram_others_reg: ldo-vsram-others {
+ regulator-name = "vsram-others";
+ regulator-min-microvolt = <518750>;
+ regulator-max-microvolt = <1312500>;
+ regulator-ramp-delay = <6250>;
+ regulator-enable-ramp-delay = <110>;
+ regulator-always-on;
+ };
+ mt6357_vsram_proc_reg: ldo-vsram-proc {
+ regulator-name = "vsram-proc";
+ regulator-min-microvolt = <518750>;
+ regulator-max-microvolt = <1312500>;
+ regulator-ramp-delay = <6250>;
+ regulator-enable-ramp-delay = <110>;
+ regulator-always-on;
+ };
+ mt6357_vaux18_reg: ldo-vaux18 {
+ compatible = "regulator-fixed";
+ regulator-name = "vaux18";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vaud28_reg: ldo-vaud28 {
+ compatible = "regulator-fixed";
+ regulator-name = "vaud28";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vio28_reg: ldo-vio28 {
+ compatible = "regulator-fixed";
+ regulator-name = "vio28";
+ regulator-min-microvolt = <2800000>;
+ regulator-max-microvolt = <2800000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vio18_reg: ldo-vio18 {
+ compatible = "regulator-fixed";
+ regulator-name = "vio18";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ regulator-enable-ramp-delay = <264>;
+ regulator-always-on;
+ };
+ mt6357_vdram_reg: ldo-vdram {
+ regulator-name = "vdram";
+ regulator-min-microvolt = <1100000>;
+ regulator-max-microvolt = <1200000>;
+ regulator-enable-ramp-delay = <3300>;
+ };
+ mt6357_vmc_reg: ldo-vmc {
+ regulator-name = "vmc";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-enable-ramp-delay = <44>;
+ };
+ mt6357_vmch_reg: ldo-vmch {
+ regulator-name = "vmch";
+ regulator-min-microvolt = <2900000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-enable-ramp-delay = <44>;
+ };
+ mt6357_vemc_reg: ldo-vemc {
+ regulator-name = "vemc";
+ regulator-min-microvolt = <2900000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-enable-ramp-delay = <44>;
+ regulator-always-on;
+ };
+ mt6357_vsim1_reg: ldo-vsim1 {
+ regulator-name = "vsim1";
+ regulator-min-microvolt = <1700000>;
+ regulator-max-microvolt = <3100000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vsim2_reg: ldo-vsim2 {
+ regulator-name = "vsim2";
+ regulator-min-microvolt = <1700000>;
+ regulator-max-microvolt = <3100000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ mt6357_vibr_reg: ldo-vibr {
+ regulator-name = "vibr";
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <3300000>;
+ regulator-enable-ramp-delay = <44>;
+ };
+ mt6357_vusb33_reg: ldo-vusb33 {
+ regulator-name = "vusb33";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3100000>;
+ regulator-enable-ramp-delay = <264>;
+ };
+ };
+ };
+...

--
b4 0.10.1

2022-11-08 19:11:16

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 6/9] arm64: dts: mt6358: change node names

- Change the node name from "mt6358" to "pmic" to be consistent
with mediatek,pwrap.yaml documentation.

- Change the node name from "mt6358rtc" to "rtc" to be consistent
with mediatek,mt6397-rtc.yaml documentation.

- Change the node name from "mt6358keys" to "keys" to be consistent
with mediatek,pmic-keys.yaml documentation.

Signed-off-by: Alexandre Mergnat <[email protected]>
---
arch/arm64/boot/dts/mediatek/mt6358.dtsi | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/arch/arm64/boot/dts/mediatek/mt6358.dtsi b/arch/arm64/boot/dts/mediatek/mt6358.dtsi
index 98f3b0e0c9f6..b605313bed99 100644
--- a/arch/arm64/boot/dts/mediatek/mt6358.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt6358.dtsi
@@ -5,7 +5,7 @@
#include <dt-bindings/input/input.h>

&pwrap {
- pmic: mt6358 {
+ pmic: pmic {
compatible = "mediatek,mt6358";
interrupt-controller;
interrupt-parent = <&pio>;
@@ -355,11 +355,11 @@ mt6358_vsim2_reg: ldo_vsim2 {
};
};

- mt6358rtc: mt6358rtc {
+ mt6358rtc: rtc {
compatible = "mediatek,mt6358-rtc";
};

- mt6358keys: mt6358keys {
+ mt6358keys: keys {
compatible = "mediatek,mt6358-keys";
power {
linux,keycodes = <KEY_POWER>;

--
b4 0.10.1

2022-11-08 19:14:35

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

- Convert rtc/rtc-mt6397.txt to rtc/mt6397-rtc.yaml
- Add mediatek,mt6357-rtc compatible.
- Add maintainer
- Remove the .txt binding file

Signed-off-by: Alexandre Mergnat <[email protected]>
---
Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
.../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++++++++++++++++++++++
.../devicetree/bindings/rtc/rtc-mt6397.txt | 31 -----------------
3 files changed, 41 insertions(+), 32 deletions(-)

diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
index 0088442efca1..79aaf21af8e9 100644
--- a/Documentation/devicetree/bindings/mfd/mt6397.txt
+++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
@@ -33,7 +33,7 @@ Optional subnodes:
- compatible: "mediatek,mt6331-rtc"
- compatible: "mediatek,mt6358-rtc"
- compatible: "mediatek,mt6397-rtc"
- For details, see ../rtc/rtc-mt6397.txt
+ For details, see ../rtc/mediatek,mt6397-rtc.yaml
- regulators
Required properties:
- compatible: "mediatek,mt6323-regulator"
diff --git a/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
new file mode 100644
index 000000000000..bb48c0150f95
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
@@ -0,0 +1,40 @@
+ # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/rtc/mediatek,mt6397-rtc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: MediaTek MT6397/MT6366/MT6358/MT6357/MT6323 RTC
+
+maintainers:
+ - Alexandre Mergnat <[email protected]>
+
+description: |
+ MediaTek PMIC based RTC is an independent function of MediaTek PMIC that works
+ as a type of multi-function device (MFD). The RTC can be configured and set up
+ with PMIC wrapper bus which is a common resource shared with the other
+ functions found on the same PMIC.
+
+properties:
+ compatible:
+ enum:
+ - mediatek,mt6323-rtc
+ - mediatek,mt6357-rtc
+ - mediatek,mt6358-rtc
+ - mediatek,mt6366-rtc
+ - mediatek,mt6397-rtc
+
+additionalProperties: false
+
+required:
+ - compatible
+
+examples:
+ - |
+ pmic {
+ compatible = "mediatek,mt6397";
+
+ rtc {
+ compatible = "mediatek,mt6397-rtc";
+ };
+ };
diff --git a/Documentation/devicetree/bindings/rtc/rtc-mt6397.txt b/Documentation/devicetree/bindings/rtc/rtc-mt6397.txt
deleted file mode 100644
index 7212076a8f1b..000000000000
--- a/Documentation/devicetree/bindings/rtc/rtc-mt6397.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-Device-Tree bindings for MediaTek PMIC based RTC
-
-MediaTek PMIC based RTC is an independent function of MediaTek PMIC that works
-as a type of multi-function device (MFD). The RTC can be configured and set up
-with PMIC wrapper bus which is a common resource shared with the other
-functions found on the same PMIC.
-
-For MediaTek PMIC MFD bindings, see:
-../mfd/mt6397.txt
-
-For MediaTek PMIC wrapper bus bindings, see:
-../soc/mediatek/pwrap.txt
-
-Required properties:
-- compatible: Should be one of follows
- "mediatek,mt6323-rtc": for MT6323 PMIC
- "mediatek,mt6358-rtc": for MT6358 PMIC
- "mediatek,mt6366-rtc", "mediatek,mt6358-rtc": for MT6366 PMIC
- "mediatek,mt6397-rtc": for MT6397 PMIC
-
-Example:
-
- pmic {
- compatible = "mediatek,mt6323";
-
- ...
-
- rtc {
- compatible = "mediatek,mt6323-rtc";
- };
- };

--
b4 0.10.1

2022-11-08 19:29:44

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 9/9] Input: mtk-pmic-keys: add MT6357 support

From: Fabien Parent <[email protected]>

Add PMIC Keys support on MT6357 SoC.

Signed-off-by: Fabien Parent <[email protected]>
Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
Reviewed-by: Mattijs Korpershoek <[email protected]>
Acked-by: Dmitry Torokhov <[email protected]>
Signed-off-by: Alexandre Mergnat <[email protected]>
---
drivers/input/keyboard/mtk-pmic-keys.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)

diff --git a/drivers/input/keyboard/mtk-pmic-keys.c b/drivers/input/keyboard/mtk-pmic-keys.c
index 9b34da0ec260..2a63e0718eb6 100644
--- a/drivers/input/keyboard/mtk-pmic-keys.c
+++ b/drivers/input/keyboard/mtk-pmic-keys.c
@@ -10,6 +10,7 @@
#include <linux/kernel.h>
#include <linux/mfd/mt6323/registers.h>
#include <linux/mfd/mt6331/registers.h>
+#include <linux/mfd/mt6357/registers.h>
#include <linux/mfd/mt6358/registers.h>
#include <linux/mfd/mt6397/core.h>
#include <linux/mfd/mt6397/registers.h>
@@ -90,6 +91,19 @@ static const struct mtk_pmic_regs mt6331_regs = {
.rst_lprst_mask = MTK_PMIC_MT6331_RST_DU_MASK,
};

+static const struct mtk_pmic_regs mt6357_regs = {
+ .keys_regs[MTK_PMIC_PWRKEY_INDEX] =
+ MTK_PMIC_KEYS_REGS(MT6357_TOPSTATUS,
+ 0x2, MT6357_PSC_TOP_INT_CON0, 0x5,
+ MTK_PMIC_PWRKEY_RST),
+ .keys_regs[MTK_PMIC_HOMEKEY_INDEX] =
+ MTK_PMIC_KEYS_REGS(MT6357_TOPSTATUS,
+ 0x8, MT6357_PSC_TOP_INT_CON0, 0xa,
+ MTK_PMIC_HOMEKEY_INDEX),
+ .pmic_rst_reg = MT6357_TOP_RST_MISC,
+ .rst_lprst_mask = MTK_PMIC_RST_DU_MASK,
+};
+
static const struct mtk_pmic_regs mt6358_regs = {
.keys_regs[MTK_PMIC_PWRKEY_INDEX] =
MTK_PMIC_KEYS_REGS(MT6358_TOPSTATUS,
@@ -276,6 +290,9 @@ static const struct of_device_id of_mtk_pmic_keys_match_tbl[] = {
}, {
.compatible = "mediatek,mt6331-keys",
.data = &mt6331_regs,
+ }, {
+ .compatible = "mediatek,mt6357-keys",
+ .data = &mt6357_regs,
}, {
.compatible = "mediatek,mt6358-keys",
.data = &mt6358_regs,

--
b4 0.10.1

2022-11-08 19:30:32

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 8/9] regulator: add mt6357 regulator

From: Fabien Parent <[email protected]>

Add regulator driver for the MT6357 PMIC.

Signed-off-by: Fabien Parent <[email protected]>
Reviewed-by: AngeloGioacchino Del Regno <[email protected]>
Signed-off-by: Alexandre Mergnat <[email protected]>
---
drivers/regulator/Kconfig | 9 +
drivers/regulator/Makefile | 1 +
drivers/regulator/mt6357-regulator.c | 453 +++++++++++++++++++++++++++++
include/linux/regulator/mt6357-regulator.h | 51 ++++
4 files changed, 514 insertions(+)

diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 070e4403c6c2..a659a57438f4 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -805,6 +805,15 @@ config REGULATOR_MT6332
This driver supports the control of different power rails of device
through regulator interface

+config REGULATOR_MT6357
+ tristate "MediaTek MT6357 PMIC"
+ depends on MFD_MT6397
+ help
+ Say y here to select this option to enable the power regulator of
+ MediaTek MT6357 PMIC.
+ This driver supports the control of different power rails of device
+ through regulator interface.
+
config REGULATOR_MT6358
tristate "MediaTek MT6358 PMIC"
depends on MFD_MT6397
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index 5962307e1130..e4d67b7b1af6 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -97,6 +97,7 @@ obj-$(CONFIG_REGULATOR_MT6315) += mt6315-regulator.o
obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o
obj-$(CONFIG_REGULATOR_MT6331) += mt6331-regulator.o
obj-$(CONFIG_REGULATOR_MT6332) += mt6332-regulator.o
+obj-$(CONFIG_REGULATOR_MT6357) += mt6357-regulator.o
obj-$(CONFIG_REGULATOR_MT6358) += mt6358-regulator.o
obj-$(CONFIG_REGULATOR_MT6359) += mt6359-regulator.o
obj-$(CONFIG_REGULATOR_MT6360) += mt6360-regulator.o
diff --git a/drivers/regulator/mt6357-regulator.c b/drivers/regulator/mt6357-regulator.c
new file mode 100644
index 000000000000..4e5aee47392c
--- /dev/null
+++ b/drivers/regulator/mt6357-regulator.c
@@ -0,0 +1,453 @@
+// SPDX-License-Identifier: GPL-2.0
+//
+// Copyright (c) 2022 MediaTek Inc.
+// Copyright (c) 2022 BayLibre, SAS.
+// Author: Chen Zhong <[email protected]>
+// Author: Fabien Parent <[email protected]>
+// Author: Alexandre Mergnat <[email protected]>
+//
+// Based on mt6397-regulator.c
+//
+
+#include <linux/module.h>
+#include <linux/linear_range.h>
+#include <linux/of.h>
+#include <linux/platform_device.h>
+#include <linux/regmap.h>
+#include <linux/mfd/mt6397/core.h>
+#include <linux/mfd/mt6357/registers.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/machine.h>
+#include <linux/regulator/mt6357-regulator.h>
+#include <linux/regulator/of_regulator.h>
+
+/*
+ * MT6357 regulators' information
+ *
+ * @desc: standard fields of regulator description.
+ * @da_vsel_reg: Monitor register for query buck's voltage.
+ * @da_vsel_mask: Mask for query buck's voltage.
+ */
+struct mt6357_regulator_info {
+ struct regulator_desc desc;
+ u32 da_vsel_reg;
+ u32 da_vsel_mask;
+};
+
+#define MT6357_BUCK(match, vreg, min, max, step, \
+ volt_ranges, vosel_reg, vosel_mask, _da_vsel_mask) \
+[MT6357_ID_##vreg] = { \
+ .desc = { \
+ .name = #vreg, \
+ .of_match = of_match_ptr(match), \
+ .regulators_node = "regulators", \
+ .ops = &mt6357_volt_range_ops, \
+ .type = REGULATOR_VOLTAGE, \
+ .id = MT6357_ID_##vreg, \
+ .owner = THIS_MODULE, \
+ .n_voltages = ((max) - (min)) / (step) + 1, \
+ .linear_ranges = volt_ranges, \
+ .n_linear_ranges = ARRAY_SIZE(volt_ranges), \
+ .vsel_reg = vosel_reg, \
+ .vsel_mask = vosel_mask, \
+ .enable_reg = MT6357_BUCK_##vreg##_CON0, \
+ .enable_mask = BIT(0), \
+ }, \
+ .da_vsel_reg = MT6357_BUCK_##vreg##_DBG0, \
+ .da_vsel_mask = vosel_mask, \
+}
+
+#define MT6357_LDO(match, vreg, ldo_volt_table, \
+ enreg, vosel, vosel_mask) \
+[MT6357_ID_##vreg] = { \
+ .desc = { \
+ .name = #vreg, \
+ .of_match = of_match_ptr(match), \
+ .regulators_node = "regulators", \
+ .ops = &mt6357_volt_table_ops, \
+ .type = REGULATOR_VOLTAGE, \
+ .id = MT6357_ID_##vreg, \
+ .owner = THIS_MODULE, \
+ .n_voltages = ARRAY_SIZE(ldo_volt_table), \
+ .volt_table = ldo_volt_table, \
+ .vsel_reg = vosel, \
+ .vsel_mask = vosel_mask, \
+ .enable_reg = enreg, \
+ .enable_mask = BIT(0), \
+ }, \
+}
+
+#define MT6357_LDO1(match, vreg, min, max, step, volt_ranges, \
+ enreg, vosel, vosel_mask) \
+[MT6357_ID_##vreg] = { \
+ .desc = { \
+ .name = #vreg, \
+ .of_match = of_match_ptr(match), \
+ .regulators_node = "regulators", \
+ .ops = &mt6357_volt_range_ops, \
+ .type = REGULATOR_VOLTAGE, \
+ .id = MT6357_ID_##vreg, \
+ .owner = THIS_MODULE, \
+ .n_voltages = ((max) - (min)) / (step) + 1, \
+ .linear_ranges = volt_ranges, \
+ .n_linear_ranges = ARRAY_SIZE(volt_ranges), \
+ .vsel_reg = vosel, \
+ .vsel_mask = vosel_mask, \
+ .enable_reg = enreg, \
+ .enable_mask = BIT(0), \
+ }, \
+ .da_vsel_reg = MT6357_LDO_##vreg##_DBG0, \
+ .da_vsel_mask = 0x7f00, \
+}
+
+#define MT6357_REG_FIXED(match, vreg, volt) \
+[MT6357_ID_##vreg] = { \
+ .desc = { \
+ .name = #vreg, \
+ .of_match = of_match_ptr(match), \
+ .regulators_node = "regulators", \
+ .ops = &mt6357_volt_fixed_ops, \
+ .type = REGULATOR_VOLTAGE, \
+ .id = MT6357_ID_##vreg, \
+ .owner = THIS_MODULE, \
+ .n_voltages = 1, \
+ .enable_reg = MT6357_LDO_##vreg##_CON0, \
+ .enable_mask = BIT(0), \
+ .min_uV = volt, \
+ }, \
+}
+
+/**
+ * mt6357_get_buck_voltage_sel - get_voltage_sel for regmap users
+ *
+ * @rdev: regulator to operate on
+ *
+ * Regulators that use regmap for their register I/O can set the
+ * da_vsel_reg and da_vsel_mask fields in the info structure and
+ * then use this as their get_voltage_vsel operation.
+ */
+static int mt6357_get_buck_voltage_sel(struct regulator_dev *rdev)
+{
+ int ret, regval;
+ struct mt6357_regulator_info *info = rdev_get_drvdata(rdev);
+
+ ret = regmap_read(rdev->regmap, info->da_vsel_reg, &regval);
+ if (ret != 0) {
+ dev_err(&rdev->dev,
+ "Failed to get mt6357 Buck %s vsel reg: %d\n",
+ info->desc.name, ret);
+ return ret;
+ }
+
+ regval &= info->da_vsel_mask;
+ regval >>= ffs(info->da_vsel_mask) - 1;
+
+ return regval;
+}
+
+static const struct regulator_ops mt6357_volt_range_ops = {
+ .list_voltage = regulator_list_voltage_linear_range,
+ .map_voltage = regulator_map_voltage_linear_range,
+ .set_voltage_sel = regulator_set_voltage_sel_regmap,
+ .get_voltage_sel = mt6357_get_buck_voltage_sel,
+ .set_voltage_time_sel = regulator_set_voltage_time_sel,
+ .enable = regulator_enable_regmap,
+ .disable = regulator_disable_regmap,
+ .is_enabled = regulator_is_enabled_regmap,
+};
+
+static const struct regulator_ops mt6357_volt_table_ops = {
+ .list_voltage = regulator_list_voltage_table,
+ .map_voltage = regulator_map_voltage_iterate,
+ .set_voltage_sel = regulator_set_voltage_sel_regmap,
+ .get_voltage_sel = regulator_get_voltage_sel_regmap,
+ .set_voltage_time_sel = regulator_set_voltage_time_sel,
+ .enable = regulator_enable_regmap,
+ .disable = regulator_disable_regmap,
+ .is_enabled = regulator_is_enabled_regmap,
+};
+
+static const struct regulator_ops mt6357_volt_fixed_ops = {
+ .list_voltage = regulator_list_voltage_linear,
+ .enable = regulator_enable_regmap,
+ .disable = regulator_disable_regmap,
+ .is_enabled = regulator_is_enabled_regmap,
+};
+
+static const int vxo22_voltages[] = {
+ 2200000,
+ 0,
+ 2400000,
+};
+
+static const int vefuse_voltages[] = {
+ 1200000,
+ 1300000,
+ 1500000,
+ 0,
+ 1800000,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2800000,
+ 2900000,
+ 3000000,
+ 0,
+ 3300000,
+};
+
+static const int vcn33_voltages[] = {
+ 0,
+ 3300000,
+ 3400000,
+ 3500000,
+};
+
+static const int vcama_voltages[] = {
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2500000,
+ 0,
+ 0,
+ 2800000,
+};
+
+static const int vcamd_voltages[] = {
+ 0,
+ 0,
+ 0,
+ 0,
+ 1000000,
+ 1100000,
+ 1200000,
+ 1300000,
+ 0,
+ 1500000,
+ 0,
+ 0,
+ 1800000,
+};
+
+static const int vldo28_voltages[] = {
+ 0,
+ 2800000,
+ 0,
+ 3000000,
+};
+
+static const int vdram_voltages[] = {
+ 0,
+ 1100000,
+ 1200000,
+};
+
+static const int vsim_voltages[] = {
+ 0,
+ 0,
+ 0,
+ 1700000,
+ 1800000,
+ 0,
+ 0,
+ 0,
+ 2700000,
+ 0,
+ 0,
+ 3000000,
+ 3100000,
+};
+
+static const int vibr_voltages[] = {
+ 1200000,
+ 1300000,
+ 1500000,
+ 0,
+ 1800000,
+ 2000000,
+ 0,
+ 0,
+ 0,
+ 2800000,
+ 0,
+ 3000000,
+ 0,
+ 3300000,
+};
+
+static const int vmc_voltages[] = {
+ 0,
+ 0,
+ 0,
+ 0,
+ 1800000,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 2900000,
+ 3000000,
+ 0,
+ 3300000,
+};
+
+static const int vmch_voltages[] = {
+ 0,
+ 0,
+ 2900000,
+ 3000000,
+ 0,
+ 3300000,
+};
+
+static const int vemc_voltages[] = {
+ 0,
+ 0,
+ 2900000,
+ 3000000,
+ 0,
+ 3300000,
+};
+
+static const int vusb_voltages[] = {
+ 0,
+ 0,
+ 0,
+ 3000000,
+ 3100000,
+};
+
+static const struct linear_range buck_volt_range1[] = {
+ REGULATOR_LINEAR_RANGE(518750, 0, 0x7f, 6250),
+};
+
+static const struct linear_range buck_volt_range2[] = {
+ REGULATOR_LINEAR_RANGE(500000, 0, 0x7f, 6250),
+};
+
+static const struct linear_range buck_volt_range3[] = {
+ REGULATOR_LINEAR_RANGE(500000, 0, 0x3f, 50000),
+};
+
+static const struct linear_range buck_volt_range4[] = {
+ REGULATOR_LINEAR_RANGE(1200000, 0, 0x7f, 12500),
+};
+
+/* The array is indexed by id(MT6357_ID_XXX) */
+static struct mt6357_regulator_info mt6357_regulators[] = {
+ /* Bucks */
+ MT6357_BUCK("buck-vcore", VCORE, 518750, 1312500, 6250,
+ buck_volt_range1, MT6357_BUCK_VCORE_ELR0, 0x7f, 0x7f),
+ MT6357_BUCK("buck-vproc", VPROC, 518750, 1312500, 6250,
+ buck_volt_range1, MT6357_BUCK_VPROC_ELR0, 0x7f, 0x7f),
+ MT6357_BUCK("buck-vmodem", VMODEM, 500000, 1293750, 6250,
+ buck_volt_range2, MT6357_BUCK_VMODEM_ELR0, 0x7f, 0x7f),
+ MT6357_BUCK("buck-vpa", VPA, 500000, 3650000, 50000,
+ buck_volt_range3, MT6357_BUCK_VPA_CON1, 0x3f, 0x3f),
+ MT6357_BUCK("buck-vs1", VS1, 1200000, 2787500, 12500,
+ buck_volt_range4, MT6357_BUCK_VS1_ELR0, 0x7f, 0x7f),
+
+ /* LDOs */
+ MT6357_LDO("ldo-vcama", VCAMA, vcama_voltages,
+ MT6357_LDO_VCAMA_CON0, MT6357_VCAMA_ANA_CON0, 0xf00),
+ MT6357_LDO("ldo-vcamd", VCAMD, vcamd_voltages,
+ MT6357_LDO_VCAMD_CON0, MT6357_VCAMD_ANA_CON0, 0xf00),
+ MT6357_LDO("ldo-vcn33-bt", VCN33_BT, vcn33_voltages,
+ MT6357_LDO_VCN33_CON0_0, MT6357_VCN33_ANA_CON0, 0x300),
+ MT6357_LDO("ldo-vcn33-wifi", VCN33_WIFI, vcn33_voltages,
+ MT6357_LDO_VCN33_CON0_1, MT6357_VCN33_ANA_CON0, 0x300),
+ MT6357_LDO("ldo-vdram", VDRAM, vdram_voltages,
+ MT6357_LDO_VDRAM_CON0, MT6357_VDRAM_ELR_2, 0x300),
+ MT6357_LDO("ldo-vefuse", VEFUSE, vefuse_voltages,
+ MT6357_LDO_VEFUSE_CON0, MT6357_VEFUSE_ANA_CON0, 0xf00),
+ MT6357_LDO("ldo-vemc", VEMC, vemc_voltages,
+ MT6357_LDO_VEMC_CON0, MT6357_VEMC_ANA_CON0, 0x700),
+ MT6357_LDO("ldo-vibr", VIBR, vibr_voltages,
+ MT6357_LDO_VIBR_CON0, MT6357_VIBR_ANA_CON0, 0xf00),
+ MT6357_LDO("ldo-vldo28", VLDO28, vldo28_voltages,
+ MT6357_LDO_VLDO28_CON0_0, MT6357_VLDO28_ANA_CON0, 0x300),
+ MT6357_LDO("ldo-vmc", VMC, vmc_voltages,
+ MT6357_LDO_VMC_CON0, MT6357_VMC_ANA_CON0, 0xf00),
+ MT6357_LDO("ldo-vmch", VMCH, vmch_voltages,
+ MT6357_LDO_VMCH_CON0, MT6357_VMCH_ANA_CON0, 0x700),
+ MT6357_LDO("ldo-vsim1", VSIM1, vsim_voltages,
+ MT6357_LDO_VSIM1_CON0, MT6357_VSIM1_ANA_CON0, 0xf00),
+ MT6357_LDO("ldo-vsim2", VSIM2, vsim_voltages,
+ MT6357_LDO_VSIM2_CON0, MT6357_VSIM2_ANA_CON0, 0xf00),
+ MT6357_LDO("ldo-vusb33", VUSB33, vusb_voltages,
+ MT6357_LDO_VUSB33_CON0_0, MT6357_VUSB33_ANA_CON0, 0x700),
+ MT6357_LDO("ldo-vxo22", VXO22, vxo22_voltages,
+ MT6357_LDO_VXO22_CON0, MT6357_VXO22_ANA_CON0, 0x300),
+
+ MT6357_LDO1("ldo-vsram-proc", VSRAM_PROC, 518750, 1312500, 6250,
+ buck_volt_range1, MT6357_LDO_VSRAM_PROC_CON0,
+ MT6357_LDO_VSRAM_CON0, 0x7f00),
+ MT6357_LDO1("ldo-vsram-others", VSRAM_OTHERS, 518750, 1312500, 6250,
+ buck_volt_range1, MT6357_LDO_VSRAM_OTHERS_CON0,
+ MT6357_LDO_VSRAM_CON1, 0x7f00),
+
+ MT6357_REG_FIXED("ldo-vaud28", VAUD28, 2800000),
+ MT6357_REG_FIXED("ldo-vaux18", VAUX18, 1800000),
+ MT6357_REG_FIXED("ldo-vcamio18", VCAMIO, 1800000),
+ MT6357_REG_FIXED("ldo-vcn18", VCN18, 1800000),
+ MT6357_REG_FIXED("ldo-vcn28", VCN28, 2800000),
+ MT6357_REG_FIXED("ldo-vfe28", VFE28, 2800000),
+ MT6357_REG_FIXED("ldo-vio18", VIO18, 1800000),
+ MT6357_REG_FIXED("ldo-vio28", VIO28, 2800000),
+ MT6357_REG_FIXED("ldo-vrf12", VRF12, 1200000),
+ MT6357_REG_FIXED("ldo-vrf18", VRF18, 1800000),
+};
+
+static int mt6357_regulator_probe(struct platform_device *pdev)
+{
+ struct mt6397_chip *mt6357 = dev_get_drvdata(pdev->dev.parent);
+ struct regulator_config config = {};
+ struct regulator_dev *rdev;
+ int i;
+
+ pdev->dev.of_node = pdev->dev.parent->of_node;
+
+ for (i = 0; i < MT6357_MAX_REGULATOR; i++) {
+ config.dev = &pdev->dev;
+ config.driver_data = &mt6357_regulators[i];
+ config.regmap = mt6357->regmap;
+
+ rdev = devm_regulator_register(&pdev->dev,
+ &mt6357_regulators[i].desc,
+ &config);
+ if (IS_ERR(rdev)) {
+ dev_err(&pdev->dev, "failed to register %s\n",
+ mt6357_regulators[i].desc.name);
+ return PTR_ERR(rdev);
+ }
+ }
+
+ return 0;
+}
+
+static const struct platform_device_id mt6357_platform_ids[] = {
+ { "mt6357-regulator" },
+ { /* sentinel */ },
+};
+MODULE_DEVICE_TABLE(platform, mt6357_platform_ids);
+
+static struct platform_driver mt6357_regulator_driver = {
+ .driver = {
+ .name = "mt6357-regulator",
+ },
+ .probe = mt6357_regulator_probe,
+ .id_table = mt6357_platform_ids,
+};
+
+module_platform_driver(mt6357_regulator_driver);
+
+MODULE_AUTHOR("Fabien Parent <[email protected]>");
+MODULE_AUTHOR("Alexandre Mergnat <[email protected]>");
+MODULE_DESCRIPTION("Regulator Driver for MediaTek MT6357 PMIC");
+MODULE_LICENSE("GPL");
diff --git a/include/linux/regulator/mt6357-regulator.h b/include/linux/regulator/mt6357-regulator.h
new file mode 100644
index 000000000000..238b1ee77ea6
--- /dev/null
+++ b/include/linux/regulator/mt6357-regulator.h
@@ -0,0 +1,51 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2022 MediaTek Inc.
+ */
+
+#ifndef __LINUX_REGULATOR_MT6357_H
+#define __LINUX_REGULATOR_MT6357_H
+
+enum {
+ /* Bucks */
+ MT6357_ID_VCORE,
+ MT6357_ID_VMODEM,
+ MT6357_ID_VPA,
+ MT6357_ID_VPROC,
+ MT6357_ID_VS1,
+
+ /* LDOs */
+ MT6357_ID_VAUX18,
+ MT6357_ID_VAUD28,
+ MT6357_ID_VCAMA,
+ MT6357_ID_VCAMD,
+ MT6357_ID_VCAMIO,
+ MT6357_ID_VCN18,
+ MT6357_ID_VCN28,
+ MT6357_ID_VCN33_BT,
+ MT6357_ID_VCN33_WIFI,
+ MT6357_ID_VDRAM,
+ MT6357_ID_VEFUSE,
+ MT6357_ID_VEMC,
+ MT6357_ID_VFE28,
+ MT6357_ID_VIBR,
+ MT6357_ID_VIO18,
+ MT6357_ID_VIO28,
+ MT6357_ID_VLDO28,
+ MT6357_ID_VMC,
+ MT6357_ID_VMCH,
+ MT6357_ID_VRF12,
+ MT6357_ID_VRF18,
+ MT6357_ID_VSIM1,
+ MT6357_ID_VSIM2,
+ MT6357_ID_VSRAM_OTHERS,
+ MT6357_ID_VSRAM_PROC,
+ MT6357_ID_VUSB33,
+ MT6357_ID_VXO22,
+
+ MT6357_ID_RG_MAX,
+};
+
+#define MT6357_MAX_REGULATOR MT6357_ID_RG_MAX
+
+#endif /* __LINUX_REGULATOR_MT6357_H */

--
b4 0.10.1

2022-11-08 19:32:08

by Alexandre Mergnat

[permalink] [raw]
Subject: [PATCH v4 5/9] dt-bindings: soc: mediatek: convert pwrap documentation

- Convert soc/mediatek/pwrap.txt to soc/mediatek/mediatek,pwrap.yaml
- MT8365 SoC has 2 additional clock items and a yaml schema for its PMIC
- Remove pwrap.txt file

Signed-off-by: Alexandre Mergnat <[email protected]>
---
.../devicetree/bindings/leds/leds-mt6323.txt | 2 +-
Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
.../bindings/soc/mediatek/mediatek,pwrap.yaml | 158 +++++++++++++++++++++
.../devicetree/bindings/soc/mediatek/pwrap.txt | 75 ----------
4 files changed, 160 insertions(+), 77 deletions(-)

diff --git a/Documentation/devicetree/bindings/leds/leds-mt6323.txt b/Documentation/devicetree/bindings/leds/leds-mt6323.txt
index 45bf9f7d85f3..73353692efa1 100644
--- a/Documentation/devicetree/bindings/leds/leds-mt6323.txt
+++ b/Documentation/devicetree/bindings/leds/leds-mt6323.txt
@@ -9,7 +9,7 @@ MT6323 PMIC hardware.
For MT6323 MFD bindings see:
Documentation/devicetree/bindings/mfd/mt6397.txt
For MediaTek PMIC wrapper bindings see:
-Documentation/devicetree/bindings/soc/mediatek/pwrap.txt
+Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml

Required properties:
- compatible : Must be "mediatek,mt6323-led"
diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
index 79aaf21af8e9..3bee4a42555d 100644
--- a/Documentation/devicetree/bindings/mfd/mt6397.txt
+++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
@@ -13,7 +13,7 @@ MT6397/MT6323 is a multifunction device with the following sub modules:
It is interfaced to host controller using SPI interface by a proprietary hardware
called PMIC wrapper or pwrap. MT6397/MT6323 MFD is a child device of pwrap.
See the following for pwarp node definitions:
-../soc/mediatek/pwrap.txt
+../soc/mediatek/mediatek,pwrap.yaml

This document describes the binding for MFD device and its sub module.

diff --git a/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml b/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml
new file mode 100644
index 000000000000..fe83458b801a
--- /dev/null
+++ b/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml
@@ -0,0 +1,158 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/soc/mediatek/mediatek,pwrap.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Mediatek PMIC Wrapper
+
+maintainers:
+ - Alexandre Mergnat <[email protected]>
+
+description: |
+ On MediaTek SoCs the PMIC is connected via SPI. The SPI master interface
+ is not directly visible to the CPU, but only through the PMIC wrapper
+ inside the SoC. The communication between the SoC and the PMIC can
+ optionally be encrypted. Also a non standard Dual IO SPI mode can be
+ used to increase speed.
+
+ IP Pairing
+
+ On MT8135 the pins of some SoC internal peripherals can be on the PMIC.
+ The signals of these pins are routed over the SPI bus using the pwrap
+ bridge. In the binding description below the properties needed for bridging
+ are marked with "IP Pairing". These are optional on SoCs which do not support
+ IP Pairing
+
+properties:
+ compatible:
+ oneOf:
+ - items:
+ - enum:
+ - mediatek,mt2701-pwrap
+ - mediatek,mt6765-pwrap
+ - mediatek,mt6779-pwrap
+ - mediatek,mt6797-pwrap
+ - mediatek,mt6873-pwrap
+ - mediatek,mt7622-pwrap
+ - mediatek,mt8135-pwrap
+ - mediatek,mt8173-pwrap
+ - mediatek,mt8183-pwrap
+ - mediatek,mt8188-pwrap
+ - mediatek,mt8365-pwrap
+ - mediatek,mt8516-pwrap
+ - items:
+ - enum:
+ - mediatek,mt8186-pwrap
+ - mediatek,mt8195-pwrap
+ - const: syscon
+
+ reg:
+ minItems: 1
+ items:
+ - description: PMIC wrapper registers (mandatory)
+ - description: IP pairing registers
+
+ reg-names:
+ minItems: 1
+ items:
+ - const: pwrap
+ - const: pwrap-bridge
+
+ interrupts:
+ maxItems: 1
+ description: IRQ for pwrap in SOC
+
+ clocks: true
+
+ clock-names: true
+
+ resets:
+ minItems: 1
+ items:
+ - description: PMIC wrapper reset
+ - description: IP pairing reset
+
+ reset-names:
+ minItems: 1
+ items:
+ - const: pwrap
+ - const: pwrap-bridge
+
+ pmic:
+ type: object
+
+allOf:
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: mediatek,mt8365-pwrap
+ then:
+ properties:
+ pmic:
+ $ref: /schemas/mfd/mediatek,mt6357.yaml#
+
+ clocks:
+ items:
+ - description: SPI bus clock
+ - description: Main module clock
+ - description: System module clock
+ - description: Timer module clock
+ clock-names:
+ items:
+ - const: spi
+ - const: wrap
+ - const: sys
+ - const: tmr
+ else:
+ properties:
+ pmic:
+ description: |
+ List of child nodes that specify the regulators.
+ See ../../mfd/mt6397.txt for more details.
+
+ clocks:
+ items:
+ - description: SPI bus clock
+ - description: Main module clock
+ clock-names:
+ items:
+ - const: spi
+ - const: wrap
+
+required:
+ - compatible
+ - reg
+ - reg-names
+ - interrupts
+ - clocks
+ - clock-names
+
+additionalProperties: true
+
+examples:
+ - |
+ #include <dt-bindings/interrupt-controller/irq.h>
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
+ #include <dt-bindings/reset/mt8135-resets.h>
+
+ soc {
+ #address-cells = <2>;
+ #size-cells = <2>;
+ pwrap@1000f000 {
+ compatible = "mediatek,mt8135-pwrap";
+ reg = <0 0x1000f000 0 0x1000>, <0 0x11017000 0 0x1000>;
+ reg-names = "pwrap", "pwrap-bridge";
+ interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>;
+ resets = <&infracfg MT8135_INFRA_PMIC_WRAP_RST>,
+ <&pericfg MT8135_PERI_PWRAP_BRIDGE_SW_RST>;
+ reset-names = "pwrap", "pwrap-bridge";
+ clocks = <&clk26m>, <&clk26m>;
+ clock-names = "spi", "wrap";
+
+ pmic {
+ compatible = "mediatek,mt6397";
+ };
+ };
+ };
diff --git a/Documentation/devicetree/bindings/soc/mediatek/pwrap.txt b/Documentation/devicetree/bindings/soc/mediatek/pwrap.txt
deleted file mode 100644
index 8424b93c432e..000000000000
--- a/Documentation/devicetree/bindings/soc/mediatek/pwrap.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-MediaTek PMIC Wrapper Driver
-
-This document describes the binding for the MediaTek PMIC wrapper.
-
-On MediaTek SoCs the PMIC is connected via SPI. The SPI master interface
-is not directly visible to the CPU, but only through the PMIC wrapper
-inside the SoC. The communication between the SoC and the PMIC can
-optionally be encrypted. Also a non standard Dual IO SPI mode can be
-used to increase speed.
-
-IP Pairing
-
-on MT8135 the pins of some SoC internal peripherals can be on the PMIC.
-The signals of these pins are routed over the SPI bus using the pwrap
-bridge. In the binding description below the properties needed for bridging
-are marked with "IP Pairing". These are optional on SoCs which do not support
-IP Pairing
-
-Required properties in pwrap device node.
-- compatible:
- "mediatek,mt2701-pwrap" for MT2701/7623 SoCs
- "mediatek,mt6765-pwrap" for MT6765 SoCs
- "mediatek,mt6779-pwrap" for MT6779 SoCs
- "mediatek,mt6797-pwrap" for MT6797 SoCs
- "mediatek,mt6873-pwrap" for MT6873/8192 SoCs
- "mediatek,mt7622-pwrap" for MT7622 SoCs
- "mediatek,mt8135-pwrap" for MT8135 SoCs
- "mediatek,mt8173-pwrap" for MT8173 SoCs
- "mediatek,mt8183-pwrap" for MT8183 SoCs
- "mediatek,mt8186-pwrap" for MT8186 SoCs
- "mediatek,mt8188-pwrap", "mediatek,mt8195-pwrap" for MT8188 SoCs
- "mediatek,mt8195-pwrap" for MT8195 SoCs
- "mediatek,mt8365-pwrap" for MT8365 SoCs
- "mediatek,mt8516-pwrap" for MT8516 SoCs
-- interrupts: IRQ for pwrap in SOC
-- reg-names: "pwrap" is required; "pwrap-bridge" is optional.
- "pwrap": Main registers base
- "pwrap-bridge": bridge base (IP Pairing)
-- reg: Must contain an entry for each entry in reg-names.
-- clock-names: Must include the following entries:
- "spi": SPI bus clock
- "wrap": Main module clock
- "sys": System module clock (for MT8365 SoC)
- "tmr": Timer module clock (for MT8365 SoC)
-- clocks: Must contain an entry for each entry in clock-names.
-
-Optional properities:
-- reset-names: Some SoCs include the following entries:
- "pwrap"
- "pwrap-bridge" (IP Pairing)
-- resets: Must contain an entry for each entry in reset-names.
-- pmic: Using either MediaTek PMIC MFD as the child device of pwrap
- See the following for child node definitions:
- Documentation/devicetree/bindings/mfd/mt6397.txt
- or the regulator-only device as the child device of pwrap, such as MT6380.
- See the following definitions for such kinds of devices.
- Documentation/devicetree/bindings/regulator/mt6380-regulator.txt
-
-Example:
- pwrap: pwrap@1000f000 {
- compatible = "mediatek,mt8135-pwrap";
- reg = <0 0x1000f000 0 0x1000>,
- <0 0x11017000 0 0x1000>;
- reg-names = "pwrap", "pwrap-bridge";
- interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>;
- resets = <&infracfg MT8135_INFRA_PMIC_WRAP_RST>,
- <&pericfg MT8135_PERI_PWRAP_BRIDGE_SW_RST>;
- reset-names = "pwrap", "pwrap-bridge";
- clocks = <&clk26m>, <&clk26m>;
- clock-names = "spi", "wrap";
-
- pmic {
- compatible = "mediatek,mt6397";
- };
- };

--
b4 0.10.1

2022-11-08 22:42:20

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation


On Tue, 08 Nov 2022 19:43:37 +0100, Alexandre Mergnat wrote:
> - Convert rtc/rtc-mt6397.txt to rtc/mt6397-rtc.yaml
> - Add mediatek,mt6357-rtc compatible.
> - Add maintainer
> - Remove the .txt binding file
>
> Signed-off-by: Alexandre Mergnat <[email protected]>
> ---
> Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
> .../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++++++++++++++++++++++
> .../devicetree/bindings/rtc/rtc-mt6397.txt | 31 -----------------
> 3 files changed, 41 insertions(+), 32 deletions(-)
>

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/rtc/mediatek,mt6397-rtc.example.dtb:0:0: /example-0/pmic: failed to match any schema with compatible: ['mediatek,mt6397']

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/patch/

This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.

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.


2022-11-08 22:42:21

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v4 4/9] dt-bindings: mfd: mediatek: Add bindings for MT6357 PMIC


On Tue, 08 Nov 2022 19:43:39 +0100, Alexandre Mergnat wrote:
> Currently, almost all MT63XX PMIC are documented mfd/mt6397.txt.
> Unfortunately, the PMICs haven't always similar HW sub-features.
> To have a better human readable schema, I chose to make one PMIC schema
> to match the exact HW capabilities instead of convert mt6397.txt to
> mediatek,mt63xx.yaml and put a bunch of properties behind
> "if contain ... then ..."
>
> - add interrupt property
> - change property refs to match with new yaml documentation
>
> Signed-off-by: Alexandre Mergnat <[email protected]>
> ---
> .../devicetree/bindings/mfd/mediatek,mt6357.yaml | 102 +++++++++++++++++++++
> 1 file changed, 102 insertions(+)
>

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/mediatek,mt6357.yaml: Unable to find schema file matching $id: http://devicetree.org/schemas/rtc/mediatek,mt6397-rtc.yaml
Error: Documentation/devicetree/bindings/mfd/mediatek,mt6357.example.dts:26.35-36 syntax error
FATAL ERROR: Unable to parse input tree
make[1]: *** [scripts/Makefile.lib:406: Documentation/devicetree/bindings/mfd/mediatek,mt6357.example.dtb] Error 1
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:1492: dt_binding_check] Error 2

doc reference errors (make refcheckdocs):

See https://patchwork.ozlabs.org/patch/

This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.

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.


Subject: Re: [PATCH v4 5/9] dt-bindings: soc: mediatek: convert pwrap documentation

Il 08/11/22 19:43, Alexandre Mergnat ha scritto:
> - Convert soc/mediatek/pwrap.txt to soc/mediatek/mediatek,pwrap.yaml
> - MT8365 SoC has 2 additional clock items and a yaml schema for its PMIC
> - Remove pwrap.txt file
>
> Signed-off-by: Alexandre Mergnat <[email protected]>
> ---
> .../devicetree/bindings/leds/leds-mt6323.txt | 2 +-
> Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
> .../bindings/soc/mediatek/mediatek,pwrap.yaml | 158 +++++++++++++++++++++
> .../devicetree/bindings/soc/mediatek/pwrap.txt | 75 ----------
> 4 files changed, 160 insertions(+), 77 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/leds/leds-mt6323.txt b/Documentation/devicetree/bindings/leds/leds-mt6323.txt
> index 45bf9f7d85f3..73353692efa1 100644
> --- a/Documentation/devicetree/bindings/leds/leds-mt6323.txt
> +++ b/Documentation/devicetree/bindings/leds/leds-mt6323.txt
> @@ -9,7 +9,7 @@ MT6323 PMIC hardware.
> For MT6323 MFD bindings see:
> Documentation/devicetree/bindings/mfd/mt6397.txt
> For MediaTek PMIC wrapper bindings see:
> -Documentation/devicetree/bindings/soc/mediatek/pwrap.txt
> +Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml
>
> Required properties:
> - compatible : Must be "mediatek,mt6323-led"
> diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
> index 79aaf21af8e9..3bee4a42555d 100644
> --- a/Documentation/devicetree/bindings/mfd/mt6397.txt
> +++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
> @@ -13,7 +13,7 @@ MT6397/MT6323 is a multifunction device with the following sub modules:
> It is interfaced to host controller using SPI interface by a proprietary hardware
> called PMIC wrapper or pwrap. MT6397/MT6323 MFD is a child device of pwrap.
> See the following for pwarp node definitions:
> -../soc/mediatek/pwrap.txt
> +../soc/mediatek/mediatek,pwrap.yaml
>
> This document describes the binding for MFD device and its sub module.
>
> diff --git a/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml b/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml
> new file mode 100644
> index 000000000000..fe83458b801a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml
> @@ -0,0 +1,158 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/soc/mediatek/mediatek,pwrap.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Mediatek PMIC Wrapper
> +
> +maintainers:
> + - Alexandre Mergnat <[email protected]>

I say that the maintainer for pwrap is Flora Fu <[email protected]>....

> +
> +description: |
> + On MediaTek SoCs the PMIC is connected via SPI. The SPI master interface
> + is not directly visible to the CPU, but only through the PMIC wrapper
> + inside the SoC. The communication between the SoC and the PMIC can
> + optionally be encrypted. Also a non standard Dual IO SPI mode can be
> + used to increase speed.
> +
> + IP Pairing
> +
> + On MT8135 the pins of some SoC internal peripherals can be on the PMIC.
> + The signals of these pins are routed over the SPI bus using the pwrap
> + bridge. In the binding description below the properties needed for bridging
> + are marked with "IP Pairing". These are optional on SoCs which do not support
> + IP Pairing
> +
> +properties:
> + compatible:
> + oneOf:
> + - items:
> + - enum:
> + - mediatek,mt2701-pwrap

..snip..

> + interrupts:
> + maxItems: 1
> + description: IRQ for pwrap in SOC

description: PMIC Wrapper interrupt

> +
> + clocks: true
> +
> + clock-names: true
> +
> + resets:
> + minItems: 1
> + items:
> + - description: PMIC wrapper reset
> + - description: IP pairing reset
> +
> + reset-names:
> + minItems: 1
> + items:
> + - const: pwrap
> + - const: pwrap-bridge
> +
> + pmic:
> + type: object
> +
> +allOf:
> + - if:

if `resets` is present, reset-names is *required*...

> + properties:
> + compatible:
> + contains:
> + const: mediatek,mt8365-pwrap
> + then:
> + properties:
> + pmic:
> + $ref: /schemas/mfd/mediatek,mt6357.yaml#
> +
> + clocks:
> + items:
> + - description: SPI bus clock
> + - description: Main module clock
> + - description: System module clock
> + - description: Timer module clock
> + clock-names:
> + items:
> + - const: spi
> + - const: wrap
> + - const: sys
> + - const: tmr

For clocks and clock-names... you can declare that globally and set
`minItems: 2` for both: this means that the first two items are mandatory,
but the last two are not.

If you really want to force a validation error when using mediatek,mt8365-pwrap
and not providing `sys` and `tmr` clocks, you can just override minItems.

> + else:
> + properties:
> + pmic:
> + description: |

You don't need this '|'.

> + List of child nodes that specify the regulators.
> + See ../../mfd/mt6397.txt for more details.
> +
> + clocks:
> + items:
> + - description: SPI bus clock
> + - description: Main module clock
> + clock-names:
> + items:
> + - const: spi
> + - const: wrap
> +
> +required:
> + - compatible
> + - reg
> + - reg-names
> + - interrupts
> + - clocks
> + - clock-names
> +
> +additionalProperties: true
> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/reset/mt8135-resets.h>
> +
> + soc {
> + #address-cells = <2>;
> + #size-cells = <2>;
> + pwrap@1000f000 {
> + compatible = "mediatek,mt8135-pwrap";
> + reg = <0 0x1000f000 0 0x1000>, <0 0x11017000 0 0x1000>;
> + reg-names = "pwrap", "pwrap-bridge";
> + interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>;
> + resets = <&infracfg MT8135_INFRA_PMIC_WRAP_RST>,
> + <&pericfg MT8135_PERI_PWRAP_BRIDGE_SW_RST>;

Fix indentation please

resets = <&infracfg MT8135_INFRA_PMIC_WRAP_RST>,
<&pericfg MT8135_PERI_PWRAP_BRIDGE_SW_RST>;

> + reset-names = "pwrap", "pwrap-bridge";
> + clocks = <&clk26m>, <&clk26m>;

...and also, clocks/clock-names before resets/reset-names please.

> + clock-names = "spi", "wrap";
> +
> + pmic {
> + compatible = "mediatek,mt6397";
> + };
> + };
> + };

Regards,
Angelo


Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

Il 08/11/22 19:43, Alexandre Mergnat ha scritto:
> - Convert rtc/rtc-mt6397.txt to rtc/mt6397-rtc.yaml
> - Add mediatek,mt6357-rtc compatible.
> - Add maintainer
> - Remove the .txt binding file
>
> Signed-off-by: Alexandre Mergnat <[email protected]>
> ---
> Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
> .../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++++++++++++++++++++++
> .../devicetree/bindings/rtc/rtc-mt6397.txt | 31 -----------------
> 3 files changed, 41 insertions(+), 32 deletions(-)
>

Please split the txt->yaml conversion in one commit and the addition of the
new mt6357-rtc compatible in another commit.

Also, isn't the original maintainer of rtc-mt6397 supposed to be...
Tianping Fang <[email protected]> ?

You can add yourself to the list of maintainers, though, unless Tianping
explicitly says that he doesn't want to maintain this driver anymore?

Regards,
Angelo


2022-11-09 18:02:53

by Alexandre Belloni

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On 09/11/2022 10:40:39+0100, AngeloGioacchino Del Regno wrote:
> Il 08/11/22 19:43, Alexandre Mergnat ha scritto:
> > - Convert rtc/rtc-mt6397.txt to rtc/mt6397-rtc.yaml
> > - Add mediatek,mt6357-rtc compatible.
> > - Add maintainer
> > - Remove the .txt binding file
> >
> > Signed-off-by: Alexandre Mergnat <[email protected]>
> > ---
> > Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
> > .../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++++++++++++++++++++++
> > .../devicetree/bindings/rtc/rtc-mt6397.txt | 31 -----------------
> > 3 files changed, 41 insertions(+), 32 deletions(-)
> >
>
> Please split the txt->yaml conversion in one commit and the addition of the
> new mt6357-rtc compatible in another commit.
>
> Also, isn't the original maintainer of rtc-mt6397 supposed to be...
> Tianping Fang <[email protected]> ?
>
> You can add yourself to the list of maintainers, though, unless Tianping
> explicitly says that he doesn't want to maintain this driver anymore?
>

This is not about the maintenance of the driver but of the device tree
bindings for the IP

> Regards,
> Angelo
>

--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

2022-11-09 23:10:31

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On Tue, Nov 08, 2022 at 07:43:37PM +0100, Alexandre Mergnat wrote:
> - Convert rtc/rtc-mt6397.txt to rtc/mt6397-rtc.yaml
> - Add mediatek,mt6357-rtc compatible.
> - Add maintainer
> - Remove the .txt binding file
>
> Signed-off-by: Alexandre Mergnat <[email protected]>
> ---
> Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
> .../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++++++++++++++++++++++
> .../devicetree/bindings/rtc/rtc-mt6397.txt | 31 -----------------
> 3 files changed, 41 insertions(+), 32 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
> index 0088442efca1..79aaf21af8e9 100644
> --- a/Documentation/devicetree/bindings/mfd/mt6397.txt
> +++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
> @@ -33,7 +33,7 @@ Optional subnodes:
> - compatible: "mediatek,mt6331-rtc"
> - compatible: "mediatek,mt6358-rtc"
> - compatible: "mediatek,mt6397-rtc"
> - For details, see ../rtc/rtc-mt6397.txt
> + For details, see ../rtc/mediatek,mt6397-rtc.yaml
> - regulators
> Required properties:
> - compatible: "mediatek,mt6323-regulator"
> diff --git a/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
> new file mode 100644
> index 000000000000..bb48c0150f95
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
> @@ -0,0 +1,40 @@
> + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/rtc/mediatek,mt6397-rtc.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek MT6397/MT6366/MT6358/MT6357/MT6323 RTC
> +
> +maintainers:
> + - Alexandre Mergnat <[email protected]>
> +
> +description: |
> + MediaTek PMIC based RTC is an independent function of MediaTek PMIC that works
> + as a type of multi-function device (MFD). The RTC can be configured and set up
> + with PMIC wrapper bus which is a common resource shared with the other
> + functions found on the same PMIC.
> +
> +properties:
> + compatible:
> + enum:
> + - mediatek,mt6323-rtc
> + - mediatek,mt6357-rtc
> + - mediatek,mt6358-rtc
> + - mediatek,mt6366-rtc
> + - mediatek,mt6397-rtc

As this is only a compatible string, just fold this into the MFD schema
doc.

> +
> +additionalProperties: false
> +
> +required:
> + - compatible
> +
> +examples:
> + - |
> + pmic {
> + compatible = "mediatek,mt6397";
> +
> + rtc {
> + compatible = "mediatek,mt6397-rtc";
> + };
> + };

2022-11-09 23:32:31

by Alexandre Belloni

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On 09/11/2022 16:29:16-0600, Rob Herring wrote:
> On Tue, Nov 08, 2022 at 07:43:37PM +0100, Alexandre Mergnat wrote:
> > - Convert rtc/rtc-mt6397.txt to rtc/mt6397-rtc.yaml
> > - Add mediatek,mt6357-rtc compatible.
> > - Add maintainer
> > - Remove the .txt binding file
> >
> > Signed-off-by: Alexandre Mergnat <[email protected]>
> > ---
> > Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
> > .../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++++++++++++++++++++++
> > .../devicetree/bindings/rtc/rtc-mt6397.txt | 31 -----------------
> > 3 files changed, 41 insertions(+), 32 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
> > index 0088442efca1..79aaf21af8e9 100644
> > --- a/Documentation/devicetree/bindings/mfd/mt6397.txt
> > +++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
> > @@ -33,7 +33,7 @@ Optional subnodes:
> > - compatible: "mediatek,mt6331-rtc"
> > - compatible: "mediatek,mt6358-rtc"
> > - compatible: "mediatek,mt6397-rtc"
> > - For details, see ../rtc/rtc-mt6397.txt
> > + For details, see ../rtc/mediatek,mt6397-rtc.yaml
> > - regulators
> > Required properties:
> > - compatible: "mediatek,mt6323-regulator"
> > diff --git a/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
> > new file mode 100644
> > index 000000000000..bb48c0150f95
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
> > @@ -0,0 +1,40 @@
> > + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/rtc/mediatek,mt6397-rtc.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: MediaTek MT6397/MT6366/MT6358/MT6357/MT6323 RTC
> > +
> > +maintainers:
> > + - Alexandre Mergnat <[email protected]>
> > +
> > +description: |
> > + MediaTek PMIC based RTC is an independent function of MediaTek PMIC that works
> > + as a type of multi-function device (MFD). The RTC can be configured and set up
> > + with PMIC wrapper bus which is a common resource shared with the other
> > + functions found on the same PMIC.
> > +
> > +properties:
> > + compatible:
> > + enum:
> > + - mediatek,mt6323-rtc
> > + - mediatek,mt6357-rtc
> > + - mediatek,mt6358-rtc
> > + - mediatek,mt6366-rtc
> > + - mediatek,mt6397-rtc
>
> As this is only a compatible string, just fold this into the MFD schema
> doc.

Actually, it probably also supports the start-year property

>
> > +
> > +additionalProperties: false
> > +
> > +required:
> > + - compatible
> > +
> > +examples:
> > + - |
> > + pmic {
> > + compatible = "mediatek,mt6397";
> > +
> > + rtc {
> > + compatible = "mediatek,mt6397-rtc";
> > + };
> > + };

--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

2022-11-10 14:18:18

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On 09/11/2022 23:57, Alexandre Belloni wrote:
> On 09/11/2022 16:29:16-0600, Rob Herring wrote:
>> On Tue, Nov 08, 2022 at 07:43:37PM +0100, Alexandre Mergnat wrote:
>>> - Convert rtc/rtc-mt6397.txt to rtc/mt6397-rtc.yaml
>>> - Add mediatek,mt6357-rtc compatible.
>>> - Add maintainer
>>> - Remove the .txt binding file
>>>
>>> Signed-off-by: Alexandre Mergnat <[email protected]>
>>> ---
>>> Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
>>> .../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++++++++++++++++++++++
>>> .../devicetree/bindings/rtc/rtc-mt6397.txt | 31 -----------------
>>> 3 files changed, 41 insertions(+), 32 deletions(-)
>>>
>>> diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
>>> index 0088442efca1..79aaf21af8e9 100644
>>> --- a/Documentation/devicetree/bindings/mfd/mt6397.txt
>>> +++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
>>> @@ -33,7 +33,7 @@ Optional subnodes:
>>> - compatible: "mediatek,mt6331-rtc"
>>> - compatible: "mediatek,mt6358-rtc"
>>> - compatible: "mediatek,mt6397-rtc"
>>> - For details, see ../rtc/rtc-mt6397.txt
>>> + For details, see ../rtc/mediatek,mt6397-rtc.yaml
>>> - regulators
>>> Required properties:
>>> - compatible: "mediatek,mt6323-regulator"
>>> diff --git a/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
>>> new file mode 100644
>>> index 000000000000..bb48c0150f95
>>> --- /dev/null
>>> +++ b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
>>> @@ -0,0 +1,40 @@
>>> + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
>>> +%YAML 1.2
>>> +---
>>> +$id: http://devicetree.org/schemas/rtc/mediatek,mt6397-rtc.yaml#
>>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>>> +
>>> +title: MediaTek MT6397/MT6366/MT6358/MT6357/MT6323 RTC
>>> +
>>> +maintainers:
>>> + - Alexandre Mergnat <[email protected]>
>>> +
>>> +description: |
>>> + MediaTek PMIC based RTC is an independent function of MediaTek PMIC that works
>>> + as a type of multi-function device (MFD). The RTC can be configured and set up
>>> + with PMIC wrapper bus which is a common resource shared with the other
>>> + functions found on the same PMIC.
>>> +
>>> +properties:
>>> + compatible:
>>> + enum:
>>> + - mediatek,mt6323-rtc
>>> + - mediatek,mt6357-rtc
>>> + - mediatek,mt6358-rtc
>>> + - mediatek,mt6366-rtc
>>> + - mediatek,mt6397-rtc
>>
>> As this is only a compatible string, just fold this into the MFD schema
>> doc.
>
> Actually, it probably also supports the start-year property

What about rest of rtc.yaml schema?

Best regards,
Krzysztof


2022-11-11 15:02:03

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 4/9] dt-bindings: mfd: mediatek: Add bindings for MT6357 PMIC

On 08/11/2022 19:43, Alexandre Mergnat wrote:
> Currently, almost all MT63XX PMIC are documented mfd/mt6397.txt.
> Unfortunately, the PMICs haven't always similar HW sub-features.
> To have a better human readable schema, I chose to make one PMIC schema
> to match the exact HW capabilities instead of convert mt6397.txt to
> mediatek,mt63xx.yaml and put a bunch of properties behind
> "if contain ... then ..."
>
> - add interrupt property
> - change property refs to match with new yaml documentation
>
> Signed-off-by: Alexandre Mergnat <[email protected]>
> ---
> .../devicetree/bindings/mfd/mediatek,mt6357.yaml | 102 +++++++++++++++++++++
> 1 file changed, 102 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/mfd/mediatek,mt6357.yaml b/Documentation/devicetree/bindings/mfd/mediatek,mt6357.yaml
> new file mode 100644
> index 000000000000..7b421f21d3f5
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/mfd/mediatek,mt6357.yaml
> @@ -0,0 +1,102 @@
> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/mfd/mediatek,mt6357.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: MediaTek MT6357 Multifunction Device Driver

Multifunction Device is Linux specific, drop.
Driver is not hardware related, drop.

Instead describe the hardware. It's PMIC right? So call it a PMIC.

> +
> +maintainers:
> + - Alexandre Mergnat <[email protected]>
> +
> +description: |
> + MT6357 is a power management system chip containing 5 buck
> + converters and 29 LDOs. Supported features are audio codec,
> + USB battery charging, fuel gauge, RTC
> +
> + This is a multifunction device with the following sub modules:
> + - Regulator
> + - RTC
> + - Keys
> +
> + It is interfaced to host controller using SPI interface by a proprietary hardware
> + called PMIC wrapper or pwrap. This MFD is a child device of pwrap.
> + See the following for pwrap node definitions:
> + ../soc/mediatek/mediatek,pwrap.yaml
> +
> +properties:
> + compatible:
> + const: mediatek,mt6357
> +
> + interrupts:
> + maxItems: 1
> +
> + interrupt-controller: true
> +
> + "#interrupt-cells":
> + const: 2
> +
> + regulators:
> + type: object
> + $ref: ../regulator/mediatek,mt6357-regulator.yaml

Full path, so /schemas/regulator/......

> + description:
> + Child node that specify the regulator.

Improve your descriptions. "Child node" - it is obvious, it's an object.
"Specify" - no need.
"the regulator" one regulator?

> +
> + rtc:
> + type: object
> + $ref: ../rtc/mediatek,mt6397-rtc.yaml

Ditto

> + description:
> + Child node that specify the RTC.

MT6357 Real Time Clock

> +
> + keys:
> + type: object
> + $ref: ../input/mediatek,pmic-keys.yaml

ditto

> + description:
> + Child node that specify the keys.

MT6357 ...

> +
> +required:
> + - compatible
> + - regulators
> +
Best regards,
Krzysztof


2022-11-11 15:26:42

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 3/9] dt-bindings: regulator: Add binding schema for mt6357 regulators

On 08/11/2022 19:43, Alexandre Mergnat wrote:
> From: Fabien Parent <[email protected]>
>
> Add YAML schema for the MediaTek MT6357 regulators.

Use subject prefixes matching the subsystem (git log --oneline -- ...).
regulator: dt-bindings:

>
> Signed-off-by: Fabien Parent <[email protected]>
> Signed-off-by: Alexandre Mergnat <[email protected]>
> ---
> .../regulator/mediatek,mt6357-regulator.yaml | 292 +++++++++++++++++++++
> 1 file changed, 292 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/regulator/mediatek,mt6357-regulator.yaml b/Documentation/devicetree/bindings/regulator/mediatek,mt6357-regulator.yaml
> new file mode 100644
> index 000000000000..3997a70a8b6c
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/regulator/mediatek,mt6357-regulator.yaml
> @@ -0,0 +1,292 @@
> +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/regulator/mediatek,mt6357-regulator.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#


Reviewed-by: Krzysztof Kozlowski <[email protected]>

Best regards,
Krzysztof


2022-11-11 16:15:53

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 5/9] dt-bindings: soc: mediatek: convert pwrap documentation

On 08/11/2022 19:43, Alexandre Mergnat wrote:
> - Convert soc/mediatek/pwrap.txt to soc/mediatek/mediatek,pwrap.yaml
> - MT8365 SoC has 2 additional clock items and a yaml schema for its PMIC
> - Remove pwrap.txt file
>
> Signed-off-by: Alexandre Mergnat <[email protected]>
> ---
> .../devicetree/bindings/leds/leds-mt6323.txt | 2 +-
> Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
> .../bindings/soc/mediatek/mediatek,pwrap.yaml | 158 +++++++++++++++++++++
> .../devicetree/bindings/soc/mediatek/pwrap.txt | 75 ----------
> 4 files changed, 160 insertions(+), 77 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/leds/leds-mt6323.txt b/Documentation/devicetree/bindings/leds/leds-mt6323.txt
> index 45bf9f7d85f3..73353692efa1 100644
> --- a/Documentation/devicetree/bindings/leds/leds-mt6323.txt
> +++ b/Documentation/devicetree/bindings/leds/leds-mt6323.txt
> @@ -9,7 +9,7 @@ MT6323 PMIC hardware.
> For MT6323 MFD bindings see:
> Documentation/devicetree/bindings/mfd/mt6397.txt
> For MediaTek PMIC wrapper bindings see:
> -Documentation/devicetree/bindings/soc/mediatek/pwrap.txt
> +Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml
>
> Required properties:
> - compatible : Must be "mediatek,mt6323-led"
> diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
> index 79aaf21af8e9..3bee4a42555d 100644
> --- a/Documentation/devicetree/bindings/mfd/mt6397.txt
> +++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
> @@ -13,7 +13,7 @@ MT6397/MT6323 is a multifunction device with the following sub modules:
> It is interfaced to host controller using SPI interface by a proprietary hardware
> called PMIC wrapper or pwrap. MT6397/MT6323 MFD is a child device of pwrap.
> See the following for pwarp node definitions:
> -../soc/mediatek/pwrap.txt
> +../soc/mediatek/mediatek,pwrap.yaml
>
> This document describes the binding for MFD device and its sub module.
>
> diff --git a/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml b/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml
> new file mode 100644
> index 000000000000..fe83458b801a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/soc/mediatek/mediatek,pwrap.yaml
> @@ -0,0 +1,158 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/soc/mediatek/mediatek,pwrap.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Mediatek PMIC Wrapper
> +
> +maintainers:
> + - Alexandre Mergnat <[email protected]>
> +
> +description: |
> + On MediaTek SoCs the PMIC is connected via SPI. The SPI master interface
> + is not directly visible to the CPU, but only through the PMIC wrapper
> + inside the SoC. The communication between the SoC and the PMIC can
> + optionally be encrypted. Also a non standard Dual IO SPI mode can be
> + used to increase speed.
> +
> + IP Pairing
> +
> + On MT8135 the pins of some SoC internal peripherals can be on the PMIC.
> + The signals of these pins are routed over the SPI bus using the pwrap
> + bridge. In the binding description below the properties needed for bridging
> + are marked with "IP Pairing". These are optional on SoCs which do not support
> + IP Pairing
> +
> +properties:
> + compatible:
> + oneOf:
> + - items:
> + - enum:
> + - mediatek,mt2701-pwrap
> + - mediatek,mt6765-pwrap
> + - mediatek,mt6779-pwrap
> + - mediatek,mt6797-pwrap
> + - mediatek,mt6873-pwrap
> + - mediatek,mt7622-pwrap
> + - mediatek,mt8135-pwrap
> + - mediatek,mt8173-pwrap
> + - mediatek,mt8183-pwrap
> + - mediatek,mt8188-pwrap

Why no mt8195?

> + - mediatek,mt8365-pwrap
> + - mediatek,mt8516-pwrap
> + - items:
> + - enum:
> + - mediatek,mt8186-pwrap
> + - mediatek,mt8195-pwrap
> + - const: syscon
> +
> + reg:
> + minItems: 1
> + items:
> + - description: PMIC wrapper registers (mandatory)

Drop "(mandatory)"

> + - description: IP pairing registers
> +
> + reg-names:
> + minItems: 1
> + items:
> + - const: pwrap
> + - const: pwrap-bridge
> +
> + interrupts:
> + maxItems: 1
> + description: IRQ for pwrap in SOC

Drop description.

> +
> + clocks: true

minItems:2
maxItems: 4

> +
> + clock-names: true

Ditto

> +
> + resets:
> + minItems: 1
> + items:
> + - description: PMIC wrapper reset
> + - description: IP pairing reset
> +
> + reset-names:
> + minItems: 1
> + items:
> + - const: pwrap
> + - const: pwrap-bridge
> +
> + pmic:
> + type: object
> +

Required properties go here.

> +allOf:
> + - if:
> + properties:
> + compatible:
> + contains:
> + const: mediatek,mt8365-pwrap
> + then:
> + properties:
> + pmic:
> + $ref: /schemas/mfd/mediatek,mt6357.yaml#
> +
> + clocks:
> + items:
> + - description: SPI bus clock
> + - description: Main module clock
> + - description: System module clock
> + - description: Timer module clock
> + clock-names:
> + items:
> + - const: spi
> + - const: wrap
> + - const: sys
> + - const: tmr
> + else:
> + properties:
> + pmic:
> + description: |
> + List of child nodes that specify the regulators.

This is not correct description.

> + See ../../mfd/mt6397.txt for more details.
> +
> + clocks:
> + items:
> + - description: SPI bus clock
> + - description: Main module clock
> + clock-names:
> + items:
> + - const: spi
> + - const: wrap
> +
> +required:
> + - compatible
> + - reg
> + - reg-names
> + - interrupts
> + - clocks
> + - clock-names
> +
> +additionalProperties: true

This must be false.

> +
> +examples:
> + - |
> + #include <dt-bindings/interrupt-controller/irq.h>
> + #include <dt-bindings/interrupt-controller/arm-gic.h>
> + #include <dt-bindings/reset/mt8135-resets.h>
> +
> + soc {
> + #address-cells = <2>;
> + #size-cells = <2>;
> + pwrap@1000f000 {
> + compatible = "mediatek,mt8135-pwrap";
> + reg = <0 0x1000f000 0 0x1000>, <0 0x11017000 0 0x1000>;
> + reg-names = "pwrap", "pwrap-bridge";
> + interrupts = <GIC_SPI 128 IRQ_TYPE_LEVEL_HIGH>;
> + resets = <&infracfg MT8135_INFRA_PMIC_WRAP_RST>,
> + <&pericfg MT8135_PERI_PWRAP_BRIDGE_SW_RST>;

Align.

> + reset-names = "pwrap", "pwrap-bridge";
> + clocks = <&clk26m>, <&clk26m>;
> + clock-names = "spi", "wrap";
> +
> + pmic {
> + compatible = "mediatek,mt6397";

Messed up indentation.

> + };

Best regards,
Krzysztof


2022-11-14 23:04:25

by Alexandre Belloni

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On 10/11/2022 15:14:01+0100, Krzysztof Kozlowski wrote:
> On 09/11/2022 23:57, Alexandre Belloni wrote:
> > On 09/11/2022 16:29:16-0600, Rob Herring wrote:
> >> On Tue, Nov 08, 2022 at 07:43:37PM +0100, Alexandre Mergnat wrote:
> >>> - Convert rtc/rtc-mt6397.txt to rtc/mt6397-rtc.yaml
> >>> - Add mediatek,mt6357-rtc compatible.
> >>> - Add maintainer
> >>> - Remove the .txt binding file
> >>>
> >>> Signed-off-by: Alexandre Mergnat <[email protected]>
> >>> ---
> >>> Documentation/devicetree/bindings/mfd/mt6397.txt | 2 +-
> >>> .../bindings/rtc/mediatek,mt6397-rtc.yaml | 40 ++++++++++++++++++++++
> >>> .../devicetree/bindings/rtc/rtc-mt6397.txt | 31 -----------------
> >>> 3 files changed, 41 insertions(+), 32 deletions(-)
> >>>
> >>> diff --git a/Documentation/devicetree/bindings/mfd/mt6397.txt b/Documentation/devicetree/bindings/mfd/mt6397.txt
> >>> index 0088442efca1..79aaf21af8e9 100644
> >>> --- a/Documentation/devicetree/bindings/mfd/mt6397.txt
> >>> +++ b/Documentation/devicetree/bindings/mfd/mt6397.txt
> >>> @@ -33,7 +33,7 @@ Optional subnodes:
> >>> - compatible: "mediatek,mt6331-rtc"
> >>> - compatible: "mediatek,mt6358-rtc"
> >>> - compatible: "mediatek,mt6397-rtc"
> >>> - For details, see ../rtc/rtc-mt6397.txt
> >>> + For details, see ../rtc/mediatek,mt6397-rtc.yaml
> >>> - regulators
> >>> Required properties:
> >>> - compatible: "mediatek,mt6323-regulator"
> >>> diff --git a/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
> >>> new file mode 100644
> >>> index 000000000000..bb48c0150f95
> >>> --- /dev/null
> >>> +++ b/Documentation/devicetree/bindings/rtc/mediatek,mt6397-rtc.yaml
> >>> @@ -0,0 +1,40 @@
> >>> + # SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
> >>> +%YAML 1.2
> >>> +---
> >>> +$id: http://devicetree.org/schemas/rtc/mediatek,mt6397-rtc.yaml#
> >>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> >>> +
> >>> +title: MediaTek MT6397/MT6366/MT6358/MT6357/MT6323 RTC
> >>> +
> >>> +maintainers:
> >>> + - Alexandre Mergnat <[email protected]>
> >>> +
> >>> +description: |
> >>> + MediaTek PMIC based RTC is an independent function of MediaTek PMIC that works
> >>> + as a type of multi-function device (MFD). The RTC can be configured and set up
> >>> + with PMIC wrapper bus which is a common resource shared with the other
> >>> + functions found on the same PMIC.
> >>> +
> >>> +properties:
> >>> + compatible:
> >>> + enum:
> >>> + - mediatek,mt6323-rtc
> >>> + - mediatek,mt6357-rtc
> >>> + - mediatek,mt6358-rtc
> >>> + - mediatek,mt6366-rtc
> >>> + - mediatek,mt6397-rtc
> >>
> >> As this is only a compatible string, just fold this into the MFD schema
> >> doc.
> >
> > Actually, it probably also supports the start-year property
>

I checked and it doesn't support it but this needs to be fixed.

> What about rest of rtc.yaml schema?
>

wakeup-source would make sense but the driver doesn't support it yet.

--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

2022-11-15 08:06:53

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On 14/11/2022 23:57, Alexandre Belloni wrote:

>>>> As this is only a compatible string, just fold this into the MFD schema
>>>> doc.
>>>
>>> Actually, it probably also supports the start-year property
>>
>
> I checked and it doesn't support it but this needs to be fixed.
>
>> What about rest of rtc.yaml schema?
>>
>
> wakeup-source would make sense but the driver doesn't support it yet.

The question is about hardware - does hardware support waking up the
system via interrupt? This is usually a domain of PMICs which still are
powered on when system sleeps.

Best regards,
Krzysztof


2022-11-15 08:58:56

by Alexandre Belloni

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On 15/11/2022 08:56:40+0100, Krzysztof Kozlowski wrote:
> On 14/11/2022 23:57, Alexandre Belloni wrote:
>
> >>>> As this is only a compatible string, just fold this into the MFD schema
> >>>> doc.
> >>>
> >>> Actually, it probably also supports the start-year property
> >>
> >
> > I checked and it doesn't support it but this needs to be fixed.
> >
> >> What about rest of rtc.yaml schema?
> >>
> >
> > wakeup-source would make sense but the driver doesn't support it yet.
>
> The question is about hardware - does hardware support waking up the
> system via interrupt? This is usually a domain of PMICs which still are
> powered on when system sleeps.
>

I'd say that it is possible that a PMIC is able to wake up the system
with or without having an interrupt wired to the SoC so wakeup-source
makes sense. We don't need it if it is interrupt only.

--
Alexandre Belloni, co-owner and COO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com

2022-11-15 09:18:24

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On 15/11/2022 09:05, Alexandre Belloni wrote:
>>> I checked and it doesn't support it but this needs to be fixed.
>>>
>>>> What about rest of rtc.yaml schema?
>>>>
>>>
>>> wakeup-source would make sense but the driver doesn't support it yet.
>>
>> The question is about hardware - does hardware support waking up the
>> system via interrupt? This is usually a domain of PMICs which still are
>> powered on when system sleeps.
>>
>
> I'd say that it is possible that a PMIC is able to wake up the system
> with or without having an interrupt wired to the SoC so wakeup-source
> makes sense. We don't need it if it is interrupt only.

Then I propose to reference the rtc.yaml.

Best regards,
Krzysztof


2022-11-15 10:40:01

by Alexandre Mergnat

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

Hi, thanks for your help

>>>> I checked and it doesn't support it but this needs to be fixed. >>>> >>>>> What about rest of rtc.yaml schema? >>>>> >>>> >>>>
wakeup-source would make sense but the driver doesn't support it yet.
>>> >>> The question is about hardware - does hardware support waking
up the >>> system via interrupt? This is usually a domain of PMICs which
still are >>> powered on when system sleeps. >>> >> >> I'd say that it
is possible that a PMIC is able to wake up the system >> with or without
having an interrupt wired to the SoC so wakeup-source >> makes sense. We
don't need it if it is interrupt only. >
>Then I propose to reference the rtc.yaml.

I think I understand my error.
Actually, the RTC (HW) support the "start-year" feature, then I suggest
to fix the binding like that:

allOf:
- $ref: "rtc.yaml#"

properties:
  compatible:
    enum:
      - mediatek,mt6323-rtc
      - mediatek,mt6357-rtc
      - mediatek,mt6358-rtc
      - mediatek,mt6366-rtc
      - mediatek,mt6397-rtc

  start-year: true

additionalProperties: false

required:
  - compatible

examples:
- |
pmic {
rtc {
compatible = "mediatek,mt6397-rtc";
};
};


2022-11-15 13:57:49

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 2/9] dt-bindings: rtc: mediatek: convert MT6397 rtc documentation

On 15/11/2022 11:34, Alexandre Mergnat wrote:
> I think I understand my error.
> Actually, the RTC (HW) support the "start-year" feature, then I suggest
> to fix the binding like that:
>
> allOf:
> - $ref: "rtc.yaml#"

No quotes.


Best regards,
Krzysztof


2022-11-15 14:05:16

by Alexandre Mergnat

[permalink] [raw]
Subject: Re: [PATCH v4 5/9] dt-bindings: soc: mediatek: convert pwrap documentation

Hi Angelo,

Le mer. 9 nov. 2022 à 10:55, AngeloGioacchino Del Regno
<[email protected]> a écrit :
>
> Il 08/11/22 19:43, Alexandre Mergnat ha scritto:
> > +maintainers:
> > + - Alexandre Mergnat <[email protected]>
>
> I say that the maintainer for pwrap is Flora Fu <[email protected]>....

Flora Fu is the driver maintainer. As described in
Documentation/devicetree/bindings/writing-schema.rst:
maintainers
A DT specific property. Contains a list of email address(es)
for maintainers of this binding.

My understanding is this field is only for binding maintainers, but
not related driver maintainers. Are we aligned ?

Regards,
Alex

2022-11-15 14:40:05

by Krzysztof Kozlowski

[permalink] [raw]
Subject: Re: [PATCH v4 5/9] dt-bindings: soc: mediatek: convert pwrap documentation

On 15/11/2022 14:54, Alexandre Mergnat wrote:
> Hi Angelo,
>
> Le mer. 9 nov. 2022 à 10:55, AngeloGioacchino Del Regno
> <[email protected]> a écrit :
>>
>> Il 08/11/22 19:43, Alexandre Mergnat ha scritto:
>>> +maintainers:
>>> + - Alexandre Mergnat <[email protected]>
>>
>> I say that the maintainer for pwrap is Flora Fu <[email protected]>....
>
> Flora Fu is the driver maintainer. As described in
> Documentation/devicetree/bindings/writing-schema.rst:
> maintainers
> A DT specific property. Contains a list of email address(es)
> for maintainers of this binding.
>
> My understanding is this field is only for binding maintainers, but
> not related driver maintainers. Are we aligned ?

Usually driver maintainer should be also binding maintainer. You can
have more binding maintainers than drivers (and vice versa), but it's
less usual to maintain driver and do not care about its Devicetree
binding (unless driver is also for ACPI etc. but that's not the case here?).

Best regards,
Krzysztof


2022-11-15 16:46:02

by Alexandre Mergnat

[permalink] [raw]
Subject: Re: [PATCH v4 5/9] dt-bindings: soc: mediatek: convert pwrap documentation

Le mar. 15 nov. 2022 à 15:18, Krzysztof Kozlowski
<[email protected]> a écrit :
> >>> +maintainers:
> >>> + - Alexandre Mergnat <[email protected]>
> >>
> >> I say that the maintainer for pwrap is Flora Fu <[email protected]>....
> >
> > Flora Fu is the driver maintainer. As described in
> > Documentation/devicetree/bindings/writing-schema.rst:
> > maintainers
> > A DT specific property. Contains a list of email address(es)
> > for maintainers of this binding.
> >
> > My understanding is this field is only for binding maintainers, but
> > not related driver maintainers. Are we aligned ?
>
> Usually driver maintainer should be also binding maintainer. You can
> have more binding maintainers than drivers (and vice versa), but it's
> less usual to maintain driver and do not care about its Devicetree
> binding (unless driver is also for ACPI etc. but that's not the case here?).

Ok, thanks for the explanations

Regards,
Alex