You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
Merge remote-tracking branch 'regulator/for-5.14' into regulator-next
This commit is contained in:
@@ -21,6 +21,7 @@ Required properties:
|
||||
compatible:
|
||||
"mediatek,mt6323" for PMIC MT6323
|
||||
"mediatek,mt6358" for PMIC MT6358
|
||||
"mediatek,mt6359" for PMIC MT6359
|
||||
"mediatek,mt6397" for PMIC MT6397
|
||||
|
||||
Optional subnodes:
|
||||
|
||||
88
Documentation/devicetree/bindings/regulator/max8893.yaml
Normal file
88
Documentation/devicetree/bindings/regulator/max8893.yaml
Normal file
@@ -0,0 +1,88 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/regulator/max8893.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Regulator driver for MAX8893 PMIC from Maxim Integrated.
|
||||
|
||||
maintainers:
|
||||
- Sergey Larin <cerg2010cerg2010@mail.ru>
|
||||
|
||||
description: |
|
||||
The device has 5 LDO regulators and a single BUCK regulator.
|
||||
Programming is done through I2C bus.
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
const: maxim,max8893
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
regulators:
|
||||
type: object
|
||||
|
||||
patternProperties:
|
||||
"^(ldo[1-5]|buck)$":
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
- regulators
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
pmic@3e {
|
||||
compatible = "maxim,max8893";
|
||||
reg = <0x3e>;
|
||||
|
||||
regulators {
|
||||
/* Front camera - s5k6aafx, back - m5mo */
|
||||
/* Numbers used to indicate the sequence */
|
||||
front_1_back_1: buck {
|
||||
regulator-name = "cam_isp_core_1v2";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <1200000>;
|
||||
};
|
||||
|
||||
front_4_back_5: ldo1 {
|
||||
regulator-name = "vt_io_1v8,cam_isp_1v8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
|
||||
front_3_back_4: ldo2 {
|
||||
regulator-name = "vt_core_1v5";
|
||||
regulator-min-microvolt = <1500000>;
|
||||
regulator-max-microvolt = <1500000>;
|
||||
};
|
||||
|
||||
front_5_back_6: ldo3 {
|
||||
regulator-name = "vt_cam_1v8,vt_sensor_io_1v8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
|
||||
ldo4 {
|
||||
/* not used */
|
||||
};
|
||||
|
||||
back_7: ldo5 {
|
||||
regulator-name = "cam_sensor_io_1v8";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
...
|
||||
@@ -0,0 +1,385 @@
|
||||
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/regulator/mt6359-regulator.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: MT6359 Regulator from MediaTek Integrated
|
||||
|
||||
maintainers:
|
||||
- Hsin-Hsiung Wang <hsin-hsiung.wang@mediatek.com>
|
||||
|
||||
description: |
|
||||
List of regulators provided by this controller. It is named
|
||||
according to its regulator type, buck_<name> and ldo_<name>.
|
||||
MT6359 regulators node should be sub node of the MT6397 MFD node.
|
||||
|
||||
patternProperties:
|
||||
"^buck_v(s1|gpu11|modem|pu|core|s2|pa|proc2|proc1|core_sshub)$":
|
||||
type: object
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
regulator-name:
|
||||
pattern: "^v(s1|gpu11|modem|pu|core|s2|pa|proc2|proc1|core_sshub)$"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
"^ldo_v(ibr|rf12|usb|camio|efuse|xo22)$":
|
||||
type: object
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
regulator-name:
|
||||
pattern: "^v(ibr|rf12|usb|camio|efuse|xo22)$"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
"^ldo_v(rfck|emc|a12|a09|ufs|bbck)$":
|
||||
type: object
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
regulator-name:
|
||||
pattern: "^v(rfck|emc|a12|a09|ufs|bbck)$"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
"^ldo_vcn(18|13|33_1_bt|13_1_wifi|33_2_bt|33_2_wifi)$":
|
||||
type: object
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
regulator-name:
|
||||
pattern: "^vcn(18|13|33_1_bt|13_1_wifi|33_2_bt|33_2_wifi)$"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
"^ldo_vsram_(proc2|others|md|proc1|others_sshub)$":
|
||||
type: object
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
regulator-name:
|
||||
pattern: "^vsram_(proc2|others|md|proc1|others_sshub)$"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
"^ldo_v(fe|bif|io)28$":
|
||||
type: object
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
regulator-name:
|
||||
pattern: "^v(fe|bif|io)28$"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
"^ldo_v(aud|io|aux|rf|m)18$":
|
||||
type: object
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
regulator-name:
|
||||
pattern: "^v(aud|io|aux|rf|m)18$"
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
"^ldo_vsim[12]$":
|
||||
type: object
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
regulator-name:
|
||||
pattern: "^vsim[12]$"
|
||||
|
||||
required:
|
||||
- regulator-name
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
additionalProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
pmic {
|
||||
regulators {
|
||||
mt6359_vs1_buck_reg: buck_vs1 {
|
||||
regulator-name = "vs1";
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <2200000>;
|
||||
regulator-enable-ramp-delay = <0>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vgpu11_buck_reg: buck_vgpu11 {
|
||||
regulator-name = "vgpu11";
|
||||
regulator-min-microvolt = <400000>;
|
||||
regulator-max-microvolt = <1193750>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-enable-ramp-delay = <200>;
|
||||
regulator-allowed-modes = <0 1 2>;
|
||||
};
|
||||
mt6359_vmodem_buck_reg: buck_vmodem {
|
||||
regulator-name = "vmodem";
|
||||
regulator-min-microvolt = <400000>;
|
||||
regulator-max-microvolt = <1100000>;
|
||||
regulator-ramp-delay = <10760>;
|
||||
regulator-enable-ramp-delay = <200>;
|
||||
};
|
||||
mt6359_vpu_buck_reg: buck_vpu {
|
||||
regulator-name = "vpu";
|
||||
regulator-min-microvolt = <400000>;
|
||||
regulator-max-microvolt = <1193750>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-enable-ramp-delay = <200>;
|
||||
regulator-allowed-modes = <0 1 2>;
|
||||
};
|
||||
mt6359_vcore_buck_reg: buck_vcore {
|
||||
regulator-name = "vcore";
|
||||
regulator-min-microvolt = <400000>;
|
||||
regulator-max-microvolt = <1300000>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-enable-ramp-delay = <200>;
|
||||
regulator-allowed-modes = <0 1 2>;
|
||||
};
|
||||
mt6359_vs2_buck_reg: buck_vs2 {
|
||||
regulator-name = "vs2";
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <1600000>;
|
||||
regulator-enable-ramp-delay = <0>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vpa_buck_reg: buck_vpa {
|
||||
regulator-name = "vpa";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <3650000>;
|
||||
regulator-enable-ramp-delay = <300>;
|
||||
};
|
||||
mt6359_vproc2_buck_reg: buck_vproc2 {
|
||||
regulator-name = "vproc2";
|
||||
regulator-min-microvolt = <400000>;
|
||||
regulator-max-microvolt = <1193750>;
|
||||
regulator-ramp-delay = <7500>;
|
||||
regulator-enable-ramp-delay = <200>;
|
||||
regulator-allowed-modes = <0 1 2>;
|
||||
};
|
||||
mt6359_vproc1_buck_reg: buck_vproc1 {
|
||||
regulator-name = "vproc1";
|
||||
regulator-min-microvolt = <400000>;
|
||||
regulator-max-microvolt = <1193750>;
|
||||
regulator-ramp-delay = <7500>;
|
||||
regulator-enable-ramp-delay = <200>;
|
||||
regulator-allowed-modes = <0 1 2>;
|
||||
};
|
||||
mt6359_vcore_sshub_buck_reg: buck_vcore_sshub {
|
||||
regulator-name = "vcore_sshub";
|
||||
regulator-min-microvolt = <400000>;
|
||||
regulator-max-microvolt = <1193750>;
|
||||
};
|
||||
mt6359_vgpu11_sshub_buck_reg: buck_vgpu11_sshub {
|
||||
regulator-name = "vgpu11_sshub";
|
||||
regulator-min-microvolt = <400000>;
|
||||
regulator-max-microvolt = <1193750>;
|
||||
};
|
||||
mt6359_vaud18_ldo_reg: ldo_vaud18 {
|
||||
regulator-name = "vaud18";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-enable-ramp-delay = <240>;
|
||||
};
|
||||
mt6359_vsim1_ldo_reg: ldo_vsim1 {
|
||||
regulator-name = "vsim1";
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <3100000>;
|
||||
};
|
||||
mt6359_vibr_ldo_reg: ldo_vibr {
|
||||
regulator-name = "vibr";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
mt6359_vrf12_ldo_reg: ldo_vrf12 {
|
||||
regulator-name = "vrf12";
|
||||
regulator-min-microvolt = <1100000>;
|
||||
regulator-max-microvolt = <1300000>;
|
||||
};
|
||||
mt6359_vusb_ldo_reg: ldo_vusb {
|
||||
regulator-name = "vusb";
|
||||
regulator-min-microvolt = <3000000>;
|
||||
regulator-max-microvolt = <3000000>;
|
||||
regulator-enable-ramp-delay = <960>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vsram_proc2_ldo_reg: ldo_vsram_proc2 {
|
||||
regulator-name = "vsram_proc2";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1293750>;
|
||||
regulator-ramp-delay = <7500>;
|
||||
regulator-enable-ramp-delay = <240>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vio18_ldo_reg: ldo_vio18 {
|
||||
regulator-name = "vio18";
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1900000>;
|
||||
regulator-enable-ramp-delay = <960>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vcamio_ldo_reg: ldo_vcamio {
|
||||
regulator-name = "vcamio";
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1900000>;
|
||||
};
|
||||
mt6359_vcn18_ldo_reg: ldo_vcn18 {
|
||||
regulator-name = "vcn18";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-enable-ramp-delay = <240>;
|
||||
};
|
||||
mt6359_vfe28_ldo_reg: ldo_vfe28 {
|
||||
regulator-name = "vfe28";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-enable-ramp-delay = <120>;
|
||||
};
|
||||
mt6359_vcn13_ldo_reg: ldo_vcn13 {
|
||||
regulator-name = "vcn13";
|
||||
regulator-min-microvolt = <900000>;
|
||||
regulator-max-microvolt = <1300000>;
|
||||
};
|
||||
mt6359_vcn33_1_bt_ldo_reg: ldo_vcn33_1_bt {
|
||||
regulator-name = "vcn33_1_bt";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <3500000>;
|
||||
};
|
||||
mt6359_vcn33_1_wifi_ldo_reg: ldo_vcn33_1_wifi {
|
||||
regulator-name = "vcn33_1_wifi";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <3500000>;
|
||||
};
|
||||
mt6359_vaux18_ldo_reg: ldo_vaux18 {
|
||||
regulator-name = "vaux18";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <1800000>;
|
||||
regulator-enable-ramp-delay = <240>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vsram_others_ldo_reg: ldo_vsram_others {
|
||||
regulator-name = "vsram_others";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1293750>;
|
||||
regulator-ramp-delay = <5000>;
|
||||
regulator-enable-ramp-delay = <240>;
|
||||
};
|
||||
mt6359_vefuse_ldo_reg: ldo_vefuse {
|
||||
regulator-name = "vefuse";
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <2000000>;
|
||||
};
|
||||
mt6359_vxo22_ldo_reg: ldo_vxo22 {
|
||||
regulator-name = "vxo22";
|
||||
regulator-min-microvolt = <1800000>;
|
||||
regulator-max-microvolt = <2200000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vrfck_ldo_reg: ldo_vrfck {
|
||||
regulator-name = "vrfck";
|
||||
regulator-min-microvolt = <1500000>;
|
||||
regulator-max-microvolt = <1700000>;
|
||||
};
|
||||
mt6359_vrfck_1_ldo_reg: ldo_vrfck_1 {
|
||||
regulator-name = "vrfck";
|
||||
regulator-min-microvolt = <1240000>;
|
||||
regulator-max-microvolt = <1600000>;
|
||||
};
|
||||
mt6359_vbif28_ldo_reg: ldo_vbif28 {
|
||||
regulator-name = "vbif28";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <2800000>;
|
||||
regulator-enable-ramp-delay = <240>;
|
||||
};
|
||||
mt6359_vio28_ldo_reg: ldo_vio28 {
|
||||
regulator-name = "vio28";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vemc_ldo_reg: ldo_vemc {
|
||||
regulator-name = "vemc";
|
||||
regulator-min-microvolt = <2900000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
mt6359_vemc_1_ldo_reg: ldo_vemc_1 {
|
||||
regulator-name = "vemc";
|
||||
regulator-min-microvolt = <2500000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
};
|
||||
mt6359_vcn33_2_bt_ldo_reg: ldo_vcn33_2_bt {
|
||||
regulator-name = "vcn33_2_bt";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <3500000>;
|
||||
};
|
||||
mt6359_vcn33_2_wifi_ldo_reg: ldo_vcn33_2_wifi {
|
||||
regulator-name = "vcn33_2_wifi";
|
||||
regulator-min-microvolt = <2800000>;
|
||||
regulator-max-microvolt = <3500000>;
|
||||
};
|
||||
mt6359_va12_ldo_reg: ldo_va12 {
|
||||
regulator-name = "va12";
|
||||
regulator-min-microvolt = <1200000>;
|
||||
regulator-max-microvolt = <1300000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_va09_ldo_reg: ldo_va09 {
|
||||
regulator-name = "va09";
|
||||
regulator-min-microvolt = <800000>;
|
||||
regulator-max-microvolt = <1200000>;
|
||||
};
|
||||
mt6359_vrf18_ldo_reg: ldo_vrf18 {
|
||||
regulator-name = "vrf18";
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1810000>;
|
||||
};
|
||||
mt6359_vsram_md_ldo_reg: ldo_vsram_md {
|
||||
regulator-name = "vsram_md";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1293750>;
|
||||
regulator-ramp-delay = <10760>;
|
||||
regulator-enable-ramp-delay = <240>;
|
||||
};
|
||||
mt6359_vufs_ldo_reg: ldo_vufs {
|
||||
regulator-name = "vufs";
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1900000>;
|
||||
};
|
||||
mt6359_vm18_ldo_reg: ldo_vm18 {
|
||||
regulator-name = "vm18";
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <1900000>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vbbck_ldo_reg: ldo_vbbck {
|
||||
regulator-name = "vbbck";
|
||||
regulator-min-microvolt = <1100000>;
|
||||
regulator-max-microvolt = <1200000>;
|
||||
};
|
||||
mt6359_vsram_proc1_ldo_reg: ldo_vsram_proc1 {
|
||||
regulator-name = "vsram_proc1";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1293750>;
|
||||
regulator-ramp-delay = <7500>;
|
||||
regulator-enable-ramp-delay = <240>;
|
||||
regulator-always-on;
|
||||
};
|
||||
mt6359_vsim2_ldo_reg: ldo_vsim2 {
|
||||
regulator-name = "vsim2";
|
||||
regulator-min-microvolt = <1700000>;
|
||||
regulator-max-microvolt = <3100000>;
|
||||
};
|
||||
mt6359_vsram_others_sshub_ldo: ldo_vsram_others_sshub {
|
||||
regulator-name = "vsram_others_sshub";
|
||||
regulator-min-microvolt = <500000>;
|
||||
regulator-max-microvolt = <1293750>;
|
||||
};
|
||||
};
|
||||
};
|
||||
...
|
||||
@@ -33,6 +33,9 @@ description: |
|
||||
|
||||
The names used for regulator nodes must match those supported by a given
|
||||
PMIC. Supported regulator node names are
|
||||
For PM6150, smps1 - smps5, ldo1 - ldo19
|
||||
For PM6150L, smps1 - smps8, ldo1 - ldo11, bob
|
||||
For PM7325, smps1 - smps8, ldo1 - ldo19
|
||||
For PM8005, smps1 - smps4
|
||||
For PM8009, smps1 - smps2, ldo1 - ldo7
|
||||
For PM8150, smps1 - smps10, ldo1 - ldo18
|
||||
@@ -41,15 +44,15 @@ description: |
|
||||
For PM8350C, smps1 - smps10, ldo1 - ldo13, bob
|
||||
For PM8998, smps1 - smps13, ldo1 - ldo28, lvs1 - lvs2
|
||||
For PMI8998, bob
|
||||
For PM6150, smps1 - smps5, ldo1 - ldo19
|
||||
For PM6150L, smps1 - smps8, ldo1 - ldo11, bob
|
||||
For PMX55, smps1 - smps7, ldo1 - ldo16
|
||||
For PM7325, smps1 - smps8, ldo1 - ldo19
|
||||
For PMR735A, smps1 - smps3, ldo1 - ldo7
|
||||
For PMX55, smps1 - smps7, ldo1 - ldo16
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,pm6150-rpmh-regulators
|
||||
- qcom,pm6150l-rpmh-regulators
|
||||
- qcom,pm7325-rpmh-regulators
|
||||
- qcom,pm8005-rpmh-regulators
|
||||
- qcom,pm8009-rpmh-regulators
|
||||
- qcom,pm8009-1-rpmh-regulators
|
||||
@@ -59,11 +62,9 @@ properties:
|
||||
- qcom,pm8350c-rpmh-regulators
|
||||
- qcom,pm8998-rpmh-regulators
|
||||
- qcom,pmi8998-rpmh-regulators
|
||||
- qcom,pm6150-rpmh-regulators
|
||||
- qcom,pm6150l-rpmh-regulators
|
||||
- qcom,pmx55-rpmh-regulators
|
||||
- qcom,pm7325-rpmh-regulators
|
||||
- qcom,pmm8155au-rpmh-regulators
|
||||
- qcom,pmr735a-rpmh-regulators
|
||||
- qcom,pmx55-rpmh-regulators
|
||||
|
||||
qcom,pmic-id:
|
||||
description: |
|
||||
|
||||
@@ -24,6 +24,10 @@ description:
|
||||
|
||||
For mp5496, s2
|
||||
|
||||
For pm8226, s1, s2, s3, s4, s5, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10,
|
||||
l11, l12, l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24, l25,
|
||||
l26, l27, l28, lvs1
|
||||
|
||||
For pm8841, s1, s2, s3, s4, s5, s6, s7, s8
|
||||
|
||||
For pm8916, s1, s2, s3, s4, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11,
|
||||
@@ -68,6 +72,7 @@ properties:
|
||||
compatible:
|
||||
enum:
|
||||
- qcom,rpm-mp5496-regulators
|
||||
- qcom,rpm-pm8226-regulators
|
||||
- qcom,rpm-pm8841-regulators
|
||||
- qcom,rpm-pm8916-regulators
|
||||
- qcom,rpm-pm8941-regulators
|
||||
|
||||
@@ -117,6 +117,88 @@ properties:
|
||||
description: Enable over current protection.
|
||||
type: boolean
|
||||
|
||||
regulator-oc-protection-microamp:
|
||||
description: Set over current protection limit. This is a limit where
|
||||
hardware performs emergency shutdown. Zero can be passed to disable
|
||||
protection and value '1' indicates that protection should be enabled but
|
||||
limit setting can be omitted.
|
||||
|
||||
regulator-oc-error-microamp:
|
||||
description: Set over current error limit. This is a limit where part of
|
||||
the hardware propably is malfunctional and damage prevention is requested.
|
||||
Zero can be passed to disable error detection and value '1' indicates
|
||||
that detection should be enabled but limit setting can be omitted.
|
||||
|
||||
regulator-oc-warn-microamp:
|
||||
description: Set over current warning limit. This is a limit where hardware
|
||||
is assumed still to be functional but approaching limit where it gets
|
||||
damaged. Recovery actions should be initiated. Zero can be passed to
|
||||
disable detection and value '1' indicates that detection should
|
||||
be enabled but limit setting can be omitted.
|
||||
|
||||
regulator-ov-protection-microvolt:
|
||||
description: Set over voltage protection limit. This is a limit where
|
||||
hardware performs emergency shutdown. Zero can be passed to disable
|
||||
protection and value '1' indicates that protection should be enabled but
|
||||
limit setting can be omitted. Limit is given as microvolt offset from
|
||||
voltage set to regulator.
|
||||
|
||||
regulator-ov-error-microvolt:
|
||||
description: Set over voltage error limit. This is a limit where part of
|
||||
the hardware propably is malfunctional and damage prevention is requested
|
||||
Zero can be passed to disable error detection and value '1' indicates
|
||||
that detection should be enabled but limit setting can be omitted. Limit
|
||||
is given as microvolt offset from voltage set to regulator.
|
||||
|
||||
regulator-ov-warn-microvolt:
|
||||
description: Set over voltage warning limit. This is a limit where hardware
|
||||
is assumed still to be functional but approaching limit where it gets
|
||||
damaged. Recovery actions should be initiated. Zero can be passed to
|
||||
disable detection and value '1' indicates that detection should
|
||||
be enabled but limit setting can be omitted. Limit is given as microvolt
|
||||
offset from voltage set to regulator.
|
||||
|
||||
regulator-uv-protection-microvolt:
|
||||
description: Set over under voltage protection limit. This is a limit where
|
||||
hardware performs emergency shutdown. Zero can be passed to disable
|
||||
protection and value '1' indicates that protection should be enabled but
|
||||
limit setting can be omitted. Limit is given as microvolt offset from
|
||||
voltage set to regulator.
|
||||
|
||||
regulator-uv-error-microvolt:
|
||||
description: Set under voltage error limit. This is a limit where part of
|
||||
the hardware propably is malfunctional and damage prevention is requested
|
||||
Zero can be passed to disable error detection and value '1' indicates
|
||||
that detection should be enabled but limit setting can be omitted. Limit
|
||||
is given as microvolt offset from voltage set to regulator.
|
||||
|
||||
regulator-uv-warn-microvolt:
|
||||
description: Set over under voltage warning limit. This is a limit where
|
||||
hardware is assumed still to be functional but approaching limit where
|
||||
it gets damaged. Recovery actions should be initiated. Zero can be passed
|
||||
to disable detection and value '1' indicates that detection should
|
||||
be enabled but limit setting can be omitted. Limit is given as microvolt
|
||||
offset from voltage set to regulator.
|
||||
|
||||
regulator-temp-protection-kelvin:
|
||||
description: Set over temperature protection limit. This is a limit where
|
||||
hardware performs emergency shutdown. Zero can be passed to disable
|
||||
protection and value '1' indicates that protection should be enabled but
|
||||
limit setting can be omitted.
|
||||
|
||||
regulator-temp-error-kelvin:
|
||||
description: Set over temperature error limit. This is a limit where part of
|
||||
the hardware propably is malfunctional and damage prevention is requested
|
||||
Zero can be passed to disable error detection and value '1' indicates
|
||||
that detection should be enabled but limit setting can be omitted.
|
||||
|
||||
regulator-temp-warn-kelvin:
|
||||
description: Set over temperature warning limit. This is a limit where
|
||||
hardware is assumed still to be functional but approaching limit where it
|
||||
gets damaged. Recovery actions should be initiated. Zero can be passed to
|
||||
disable detection and value '1' indicates that detection should
|
||||
be enabled but limit setting can be omitted.
|
||||
|
||||
regulator-active-discharge:
|
||||
description: |
|
||||
tristate, enable/disable active discharge of regulators. The values are:
|
||||
|
||||
@@ -0,0 +1,61 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/regulator/richtek,rt6160-regulator.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Richtek RT6160 BuckBoost converter
|
||||
|
||||
maintainers:
|
||||
- ChiYuan Huang <cy_huang@richtek.com>
|
||||
|
||||
description: |
|
||||
The RT6160 is a high-efficiency buck-boost converter that can provide
|
||||
up to 3A output current from 2025mV to 5200mV. And it support the wide
|
||||
input voltage range from 2200mV to 5500mV.
|
||||
|
||||
Datasheet is available at
|
||||
https://www.richtek.com/assets/product_file/RT6160A/DS6160A-00.pdf
|
||||
|
||||
allOf:
|
||||
- $ref: regulator.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- richtek,rt6160
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
enable-gpios:
|
||||
description: A connection of the 'enable' gpio line.
|
||||
maxItems: 1
|
||||
|
||||
richtek,vsel-active-low:
|
||||
description: |
|
||||
Used to indicate the 'vsel' pin active level. if not specified, use
|
||||
high active level as the default.
|
||||
type: boolean
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
rt6160@75 {
|
||||
compatible = "richtek,rt6160";
|
||||
reg = <0x75>;
|
||||
enable-gpios = <&gpio26 2 0>;
|
||||
regulator-name = "rt6160-buckboost";
|
||||
regulator-min-microvolt = <2025000>;
|
||||
regulator-max-microvolt = <5200000>;
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,89 @@
|
||||
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
|
||||
%YAML 1.2
|
||||
---
|
||||
$id: http://devicetree.org/schemas/regulator/richtek,rt6245-regulator.yaml#
|
||||
$schema: http://devicetree.org/meta-schemas/core.yaml#
|
||||
|
||||
title: Richtek RT6245 High Current Voltage Regulator
|
||||
|
||||
maintainers:
|
||||
- ChiYuan Huang <cy_huang@richtek.com>
|
||||
|
||||
description: |
|
||||
The RT6245 is a high-performance, synchronous step-down converter
|
||||
that can deliver up to 14A output current with an input supply
|
||||
voltage range of 4.5V to 17V.
|
||||
|
||||
allOf:
|
||||
- $ref: regulator.yaml#
|
||||
|
||||
properties:
|
||||
compatible:
|
||||
enum:
|
||||
- richtek,rt6245
|
||||
|
||||
reg:
|
||||
maxItems: 1
|
||||
|
||||
enable-gpios:
|
||||
description: |
|
||||
A connection of the chip 'enable' gpio line. If not provided,
|
||||
it will be treat as a default-on power.
|
||||
maxItems: 1
|
||||
|
||||
richtek,oc-level-select:
|
||||
$ref: "/schemas/types.yaml#/definitions/uint8"
|
||||
enum: [0, 1, 2, 3]
|
||||
description: |
|
||||
Over current level selection. Each respective value means the current
|
||||
limit 8A, 14A, 12A, 10A. If this property is missing then keep in
|
||||
in chip default.
|
||||
|
||||
richtek,ot-level-select:
|
||||
$ref: "/schemas/types.yaml#/definitions/uint8"
|
||||
enum: [0, 1, 2]
|
||||
description: |
|
||||
Over temperature level selection. Each respective value means the degree
|
||||
150'c, 130'c, 170'c. If this property is missing then keep in chip
|
||||
default.
|
||||
|
||||
richtek,pgdly-time-select:
|
||||
$ref: "/schemas/types.yaml#/definitions/uint8"
|
||||
enum: [0, 1, 2, 3]
|
||||
description: |
|
||||
Power good signal delay time selection. Each respective value means the
|
||||
delay time 0us, 10us, 20us, 40us. If this property is missing then keep
|
||||
in chip default.
|
||||
|
||||
|
||||
richtek,switch-freq-select:
|
||||
$ref: "/schemas/types.yaml#/definitions/uint8"
|
||||
enum: [0, 1, 2]
|
||||
description: |
|
||||
Buck switch frequency selection. Each respective value means 400KHz,
|
||||
800KHz, 1200KHz. If this property is missing then keep in chip default.
|
||||
|
||||
required:
|
||||
- compatible
|
||||
- reg
|
||||
|
||||
unevaluatedProperties: false
|
||||
|
||||
examples:
|
||||
- |
|
||||
i2c {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
rt6245@34 {
|
||||
compatible = "richtek,rt6245";
|
||||
status = "okay";
|
||||
reg = <0x34>;
|
||||
enable-gpios = <&gpio26 2 0>;
|
||||
|
||||
regulator-name = "rt6245-regulator";
|
||||
regulator-min-microvolt = <437500>;
|
||||
regulator-max-microvolt = <1387500>;
|
||||
regulator-boot-on;
|
||||
};
|
||||
};
|
||||
@@ -27,6 +27,12 @@ patternProperties:
|
||||
Properties for single regulator.
|
||||
$ref: "regulator.yaml#"
|
||||
|
||||
properties:
|
||||
rohm,ocw-fet-ron-micro-ohms:
|
||||
description: |
|
||||
External FET's ON-resistance. Required if VoutS1 OCP/OCW is
|
||||
to be set.
|
||||
|
||||
required:
|
||||
- regulator-name
|
||||
|
||||
|
||||
@@ -740,21 +740,15 @@ possible.
|
||||
5. thermal_emergency_poweroff
|
||||
=============================
|
||||
|
||||
On an event of critical trip temperature crossing. Thermal framework
|
||||
allows the system to shutdown gracefully by calling orderly_poweroff().
|
||||
In the event of a failure of orderly_poweroff() to shut down the system
|
||||
we are in danger of keeping the system alive at undesirably high
|
||||
temperatures. To mitigate this high risk scenario we program a work
|
||||
queue to fire after a pre-determined number of seconds to start
|
||||
an emergency shutdown of the device using the kernel_power_off()
|
||||
function. In case kernel_power_off() fails then finally
|
||||
emergency_restart() is called in the worst case.
|
||||
On an event of critical trip temperature crossing the thermal framework
|
||||
shuts down the system by calling hw_protection_shutdown(). The
|
||||
hw_protection_shutdown() first attempts to perform an orderly shutdown
|
||||
but accepts a delay after which it proceeds doing a forced power-off
|
||||
or as last resort an emergency_restart.
|
||||
|
||||
The delay should be carefully profiled so as to give adequate time for
|
||||
orderly_poweroff(). In case of failure of an orderly_poweroff() the
|
||||
emergency poweroff kicks in after the delay has elapsed and shuts down
|
||||
the system.
|
||||
orderly poweroff.
|
||||
|
||||
If set to 0 emergency poweroff will not be supported. So a carefully
|
||||
profiled non-zero positive value is a must for emergency poweroff to be
|
||||
triggered.
|
||||
If the delay is set to 0 emergency poweroff will not be supported. So a
|
||||
carefully profiled non-zero positive value is a must for emergency
|
||||
poweroff to be triggered.
|
||||
|
||||
@@ -19578,6 +19578,10 @@ F: include/dt-bindings/regulator/
|
||||
F: include/linux/regulator/
|
||||
K: regulator_get_optional
|
||||
|
||||
VOLTAGE AND CURRENT REGULATOR IRQ HELPERS
|
||||
R: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>
|
||||
F: drivers/regulator/irq_helpers.c
|
||||
|
||||
VRF
|
||||
M: David Ahern <dsahern@kernel.org>
|
||||
L: netdev@vger.kernel.org
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/mfd/mt6358/core.h>
|
||||
#include <linux/mfd/mt6358/registers.h>
|
||||
#include <linux/mfd/mt6359/core.h>
|
||||
#include <linux/mfd/mt6359/registers.h>
|
||||
#include <linux/mfd/mt6397/core.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
@@ -13,7 +15,9 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
|
||||
static struct irq_top_t mt6358_ints[] = {
|
||||
#define MTK_PMIC_REG_WIDTH 16
|
||||
|
||||
static const struct irq_top_t mt6358_ints[] = {
|
||||
MT6358_TOP_GEN(BUCK),
|
||||
MT6358_TOP_GEN(LDO),
|
||||
MT6358_TOP_GEN(PSC),
|
||||
@@ -24,6 +28,31 @@ static struct irq_top_t mt6358_ints[] = {
|
||||
MT6358_TOP_GEN(MISC),
|
||||
};
|
||||
|
||||
static const struct irq_top_t mt6359_ints[] = {
|
||||
MT6359_TOP_GEN(BUCK),
|
||||
MT6359_TOP_GEN(LDO),
|
||||
MT6359_TOP_GEN(PSC),
|
||||
MT6359_TOP_GEN(SCK),
|
||||
MT6359_TOP_GEN(BM),
|
||||
MT6359_TOP_GEN(HK),
|
||||
MT6359_TOP_GEN(AUD),
|
||||
MT6359_TOP_GEN(MISC),
|
||||
};
|
||||
|
||||
static struct pmic_irq_data mt6358_irqd = {
|
||||
.num_top = ARRAY_SIZE(mt6358_ints),
|
||||
.num_pmic_irqs = MT6358_IRQ_NR,
|
||||
.top_int_status_reg = MT6358_TOP_INT_STATUS0,
|
||||
.pmic_ints = mt6358_ints,
|
||||
};
|
||||
|
||||
static struct pmic_irq_data mt6359_irqd = {
|
||||
.num_top = ARRAY_SIZE(mt6359_ints),
|
||||
.num_pmic_irqs = MT6359_IRQ_NR,
|
||||
.top_int_status_reg = MT6359_TOP_INT_STATUS0,
|
||||
.pmic_ints = mt6359_ints,
|
||||
};
|
||||
|
||||
static void pmic_irq_enable(struct irq_data *data)
|
||||
{
|
||||
unsigned int hwirq = irqd_to_hwirq(data);
|
||||
@@ -62,15 +91,15 @@ static void pmic_irq_sync_unlock(struct irq_data *data)
|
||||
/* Find out the IRQ group */
|
||||
top_gp = 0;
|
||||
while ((top_gp + 1) < irqd->num_top &&
|
||||
i >= mt6358_ints[top_gp + 1].hwirq_base)
|
||||
i >= irqd->pmic_ints[top_gp + 1].hwirq_base)
|
||||
top_gp++;
|
||||
|
||||
/* Find the IRQ registers */
|
||||
gp_offset = i - mt6358_ints[top_gp].hwirq_base;
|
||||
int_regs = gp_offset / MT6358_REG_WIDTH;
|
||||
shift = gp_offset % MT6358_REG_WIDTH;
|
||||
en_reg = mt6358_ints[top_gp].en_reg +
|
||||
(mt6358_ints[top_gp].en_reg_shift * int_regs);
|
||||
gp_offset = i - irqd->pmic_ints[top_gp].hwirq_base;
|
||||
int_regs = gp_offset / MTK_PMIC_REG_WIDTH;
|
||||
shift = gp_offset % MTK_PMIC_REG_WIDTH;
|
||||
en_reg = irqd->pmic_ints[top_gp].en_reg +
|
||||
(irqd->pmic_ints[top_gp].en_reg_shift * int_regs);
|
||||
|
||||
regmap_update_bits(chip->regmap, en_reg, BIT(shift),
|
||||
irqd->enable_hwirq[i] << shift);
|
||||
@@ -95,10 +124,11 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip,
|
||||
unsigned int irq_status, sta_reg, status;
|
||||
unsigned int hwirq, virq;
|
||||
int i, j, ret;
|
||||
struct pmic_irq_data *irqd = chip->irq_data;
|
||||
|
||||
for (i = 0; i < mt6358_ints[top_gp].num_int_regs; i++) {
|
||||
sta_reg = mt6358_ints[top_gp].sta_reg +
|
||||
mt6358_ints[top_gp].sta_reg_shift * i;
|
||||
for (i = 0; i < irqd->pmic_ints[top_gp].num_int_regs; i++) {
|
||||
sta_reg = irqd->pmic_ints[top_gp].sta_reg +
|
||||
irqd->pmic_ints[top_gp].sta_reg_shift * i;
|
||||
|
||||
ret = regmap_read(chip->regmap, sta_reg, &irq_status);
|
||||
if (ret) {
|
||||
@@ -114,8 +144,8 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip,
|
||||
do {
|
||||
j = __ffs(status);
|
||||
|
||||
hwirq = mt6358_ints[top_gp].hwirq_base +
|
||||
MT6358_REG_WIDTH * i + j;
|
||||
hwirq = irqd->pmic_ints[top_gp].hwirq_base +
|
||||
MTK_PMIC_REG_WIDTH * i + j;
|
||||
|
||||
virq = irq_find_mapping(chip->irq_domain, hwirq);
|
||||
if (virq)
|
||||
@@ -131,12 +161,12 @@ static void mt6358_irq_sp_handler(struct mt6397_chip *chip,
|
||||
static irqreturn_t mt6358_irq_handler(int irq, void *data)
|
||||
{
|
||||
struct mt6397_chip *chip = data;
|
||||
struct pmic_irq_data *mt6358_irq_data = chip->irq_data;
|
||||
struct pmic_irq_data *irqd = chip->irq_data;
|
||||
unsigned int bit, i, top_irq_status = 0;
|
||||
int ret;
|
||||
|
||||
ret = regmap_read(chip->regmap,
|
||||
mt6358_irq_data->top_int_status_reg,
|
||||
irqd->top_int_status_reg,
|
||||
&top_irq_status);
|
||||
if (ret) {
|
||||
dev_err(chip->dev,
|
||||
@@ -144,8 +174,8 @@ static irqreturn_t mt6358_irq_handler(int irq, void *data)
|
||||
return IRQ_NONE;
|
||||
}
|
||||
|
||||
for (i = 0; i < mt6358_irq_data->num_top; i++) {
|
||||
bit = BIT(mt6358_ints[i].top_offset);
|
||||
for (i = 0; i < irqd->num_top; i++) {
|
||||
bit = BIT(irqd->pmic_ints[i].top_offset);
|
||||
if (top_irq_status & bit) {
|
||||
mt6358_irq_sp_handler(chip, i);
|
||||
top_irq_status &= ~bit;
|
||||
@@ -180,17 +210,22 @@ int mt6358_irq_init(struct mt6397_chip *chip)
|
||||
int i, j, ret;
|
||||
struct pmic_irq_data *irqd;
|
||||
|
||||
irqd = devm_kzalloc(chip->dev, sizeof(*irqd), GFP_KERNEL);
|
||||
if (!irqd)
|
||||
return -ENOMEM;
|
||||
switch (chip->chip_id) {
|
||||
case MT6358_CHIP_ID:
|
||||
chip->irq_data = &mt6358_irqd;
|
||||
break;
|
||||
|
||||
chip->irq_data = irqd;
|
||||
case MT6359_CHIP_ID:
|
||||
chip->irq_data = &mt6359_irqd;
|
||||
break;
|
||||
|
||||
default:
|
||||
dev_err(chip->dev, "unsupported chip: 0x%x\n", chip->chip_id);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
mutex_init(&chip->irqlock);
|
||||
irqd->top_int_status_reg = MT6358_TOP_INT_STATUS0;
|
||||
irqd->num_pmic_irqs = MT6358_IRQ_NR;
|
||||
irqd->num_top = ARRAY_SIZE(mt6358_ints);
|
||||
|
||||
irqd = chip->irq_data;
|
||||
irqd->enable_hwirq = devm_kcalloc(chip->dev,
|
||||
irqd->num_pmic_irqs,
|
||||
sizeof(*irqd->enable_hwirq),
|
||||
@@ -207,10 +242,10 @@ int mt6358_irq_init(struct mt6397_chip *chip)
|
||||
|
||||
/* Disable all interrupts for initializing */
|
||||
for (i = 0; i < irqd->num_top; i++) {
|
||||
for (j = 0; j < mt6358_ints[i].num_int_regs; j++)
|
||||
for (j = 0; j < irqd->pmic_ints[i].num_int_regs; j++)
|
||||
regmap_write(chip->regmap,
|
||||
mt6358_ints[i].en_reg +
|
||||
mt6358_ints[i].en_reg_shift * j, 0);
|
||||
irqd->pmic_ints[i].en_reg +
|
||||
irqd->pmic_ints[i].en_reg_shift * j, 0);
|
||||
}
|
||||
|
||||
chip->irq_domain = irq_domain_add_linear(chip->dev->of_node,
|
||||
|
||||
@@ -13,9 +13,11 @@
|
||||
#include <linux/mfd/core.h>
|
||||
#include <linux/mfd/mt6323/core.h>
|
||||
#include <linux/mfd/mt6358/core.h>
|
||||
#include <linux/mfd/mt6359/core.h>
|
||||
#include <linux/mfd/mt6397/core.h>
|
||||
#include <linux/mfd/mt6323/registers.h>
|
||||
#include <linux/mfd/mt6358/registers.h>
|
||||
#include <linux/mfd/mt6359/registers.h>
|
||||
#include <linux/mfd/mt6397/registers.h>
|
||||
|
||||
#define MT6323_RTC_BASE 0x8000
|
||||
@@ -99,6 +101,17 @@ static const struct mfd_cell mt6358_devs[] = {
|
||||
},
|
||||
};
|
||||
|
||||
static const struct mfd_cell mt6359_devs[] = {
|
||||
{ .name = "mt6359-regulator", },
|
||||
{
|
||||
.name = "mt6359-rtc",
|
||||
.num_resources = ARRAY_SIZE(mt6358_rtc_resources),
|
||||
.resources = mt6358_rtc_resources,
|
||||
.of_compatible = "mediatek,mt6358-rtc",
|
||||
},
|
||||
{ .name = "mt6359-sound", },
|
||||
};
|
||||
|
||||
static const struct mfd_cell mt6397_devs[] = {
|
||||
{
|
||||
.name = "mt6397-rtc",
|
||||
@@ -149,6 +162,14 @@ static const struct chip_data mt6358_core = {
|
||||
.irq_init = mt6358_irq_init,
|
||||
};
|
||||
|
||||
static const struct chip_data mt6359_core = {
|
||||
.cid_addr = MT6359_SWCID,
|
||||
.cid_shift = 8,
|
||||
.cells = mt6359_devs,
|
||||
.cell_size = ARRAY_SIZE(mt6359_devs),
|
||||
.irq_init = mt6358_irq_init,
|
||||
};
|
||||
|
||||
static const struct chip_data mt6397_core = {
|
||||
.cid_addr = MT6397_CID,
|
||||
.cid_shift = 0,
|
||||
@@ -218,6 +239,9 @@ static const struct of_device_id mt6397_of_match[] = {
|
||||
}, {
|
||||
.compatible = "mediatek,mt6358",
|
||||
.data = &mt6358_core,
|
||||
}, {
|
||||
.compatible = "mediatek,mt6359",
|
||||
.data = &mt6359_core,
|
||||
}, {
|
||||
.compatible = "mediatek,mt6397",
|
||||
.data = &mt6397_core,
|
||||
|
||||
@@ -193,20 +193,10 @@ config REGULATOR_BCM590XX
|
||||
BCM590xx PMUs. This will enable support for the software
|
||||
controllable LDO/Switching regulators.
|
||||
|
||||
config REGULATOR_BD70528
|
||||
tristate "ROHM BD70528 Power Regulator"
|
||||
depends on MFD_ROHM_BD70528
|
||||
help
|
||||
This driver supports voltage regulators on ROHM BD70528 PMIC.
|
||||
This will enable support for the software controllable buck
|
||||
and LDO regulators.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called bd70528-regulator.
|
||||
|
||||
config REGULATOR_BD71815
|
||||
tristate "ROHM BD71815 Power Regulator"
|
||||
depends on MFD_ROHM_BD71828
|
||||
select REGULATOR_ROHM
|
||||
help
|
||||
This driver supports voltage regulators on ROHM BD71815 PMIC.
|
||||
This will enable support for the software controllable buck
|
||||
@@ -588,6 +578,14 @@ config REGULATOR_MAX8660
|
||||
This driver controls a Maxim 8660/8661 voltage output
|
||||
regulator via I2C bus.
|
||||
|
||||
config REGULATOR_MAX8893
|
||||
tristate "Maxim 8893 voltage regulator"
|
||||
depends on I2C
|
||||
select REGMAP_I2C
|
||||
help
|
||||
This driver controls a Maxim 8893 voltage output
|
||||
regulator via I2C bus.
|
||||
|
||||
config REGULATOR_MAX8907
|
||||
tristate "Maxim 8907 voltage regulator"
|
||||
depends on MFD_MAX8907 || COMPILE_TEST
|
||||
@@ -779,6 +777,15 @@ config REGULATOR_MT6358
|
||||
This driver supports the control of different power rails of device
|
||||
through regulator interface.
|
||||
|
||||
config REGULATOR_MT6359
|
||||
tristate "MediaTek MT6359 PMIC"
|
||||
depends on MFD_MT6397
|
||||
help
|
||||
Say y here to select this option to enable the power regulator of
|
||||
MediaTek MT6359 PMIC.
|
||||
This driver supports the control of different power rails of device
|
||||
through regulator interface.
|
||||
|
||||
config REGULATOR_MT6360
|
||||
tristate "MT6360 SubPMIC Regulator"
|
||||
depends on MFD_MT6360
|
||||
@@ -1030,6 +1037,26 @@ config REGULATOR_RT5033
|
||||
RT5033 PMIC. The device supports multiple regulators like
|
||||
current source, LDO and Buck.
|
||||
|
||||
config REGULATOR_RT6160
|
||||
tristate "Richtek RT6160 BuckBoost voltage regulator"
|
||||
depends on I2C
|
||||
select REGMAP_I2C
|
||||
help
|
||||
This adds support for voltage regulator in Richtek RT6160.
|
||||
This device automatically change voltage output mode from
|
||||
Buck or Boost. The mode transistion depend on the input source voltage.
|
||||
The wide output range is from 2025mV to 5200mV and can be used on most
|
||||
common application scenario.
|
||||
|
||||
config REGULATOR_RT6245
|
||||
tristate "Richtek RT6245 voltage regulator"
|
||||
depends on I2C
|
||||
select REGMAP_I2C
|
||||
help
|
||||
This adds supprot for Richtek RT6245 voltage regulator.
|
||||
It can support up to 14A output current and adjustable output voltage
|
||||
from 0.4375V to 1.3875V, per step 12.5mV.
|
||||
|
||||
config REGULATOR_RTMV20
|
||||
tristate "Richtek RTMV20 Laser Diode Regulator"
|
||||
depends on I2C
|
||||
@@ -1150,6 +1177,12 @@ config REGULATOR_STW481X_VMMC
|
||||
This driver supports the internal VMMC regulator in the STw481x
|
||||
PMIC chips.
|
||||
|
||||
config REGULATOR_SY7636A
|
||||
tristate "Silergy SY7636A voltage regulator"
|
||||
depends on MFD_SY7636A
|
||||
help
|
||||
This driver supports Silergy SY3686A voltage regulator.
|
||||
|
||||
config REGULATOR_SY8106A
|
||||
tristate "Silergy SY8106A regulator"
|
||||
depends on I2C && (OF || COMPILE_TEST)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#
|
||||
|
||||
|
||||
obj-$(CONFIG_REGULATOR) += core.o dummy.o fixed-helper.o helpers.o devres.o
|
||||
obj-$(CONFIG_REGULATOR) += core.o dummy.o fixed-helper.o helpers.o devres.o irq_helpers.o
|
||||
obj-$(CONFIG_OF) += of_regulator.o
|
||||
obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += fixed.o
|
||||
obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o
|
||||
@@ -29,7 +29,6 @@ obj-$(CONFIG_REGULATOR_AS3722) += as3722-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_ATC260X) += atc260x-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_AXP20X) += axp20x-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_BCM590XX) += bcm590xx-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_BD70528) += bd70528-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_BD71815) += bd71815-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_BD71828) += bd71828-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_BD718XX) += bd718x7-regulator.o
|
||||
@@ -72,6 +71,7 @@ obj-$(CONFIG_REGULATOR_MAX77620) += max77620-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MAX77650) += max77650-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MAX8649) += max8649.o
|
||||
obj-$(CONFIG_REGULATOR_MAX8660) += max8660.o
|
||||
obj-$(CONFIG_REGULATOR_MAX8893) += max8893.o
|
||||
obj-$(CONFIG_REGULATOR_MAX8907) += max8907-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MAX8925) += max8925-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MAX8952) += max8952.o
|
||||
@@ -94,6 +94,7 @@ obj-$(CONFIG_REGULATOR_MT6311) += mt6311-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MT6315) += mt6315-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MT6323) += mt6323-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MT6358) += mt6358-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MT6359) += mt6359-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MT6360) += mt6360-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MT6380) += mt6380-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_MT6397) += mt6397-regulator.o
|
||||
@@ -124,6 +125,8 @@ obj-$(CONFIG_REGULATOR_ROHM) += rohm-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_RT4801) += rt4801-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_RT4831) += rt4831-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_RT5033) += rt5033-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_RT6160) += rt6160-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_RT6245) += rt6245-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_RTMV20) += rtmv20-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_S2MPA01) += s2mpa01.o
|
||||
obj-$(CONFIG_REGULATOR_S2MPS11) += s2mps11.o
|
||||
@@ -136,6 +139,7 @@ obj-$(CONFIG_REGULATOR_STM32_VREFBUF) += stm32-vrefbuf.o
|
||||
obj-$(CONFIG_REGULATOR_STM32_PWR) += stm32-pwr.o
|
||||
obj-$(CONFIG_REGULATOR_STPMIC1) += stpmic1_regulator.o
|
||||
obj-$(CONFIG_REGULATOR_STW481X_VMMC) += stw481x-vmmc.o
|
||||
obj-$(CONFIG_REGULATOR_SY7636A) += sy7636a-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_SY8106A) += sy8106a-regulator.o
|
||||
obj-$(CONFIG_REGULATOR_SY8824X) += sy8824x.o
|
||||
obj-$(CONFIG_REGULATOR_SY8827N) += sy8827n.o
|
||||
|
||||
@@ -1,283 +0,0 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
// Copyright (C) 2018 ROHM Semiconductors
|
||||
// bd70528-regulator.c ROHM BD70528MWV regulator driver
|
||||
|
||||
#include <linux/delay.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mfd/rohm-bd70528.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/regulator/driver.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/of_regulator.h>
|
||||
#include <linux/slab.h>
|
||||
|
||||
#define BUCK_RAMPRATE_250MV 0
|
||||
#define BUCK_RAMPRATE_125MV 1
|
||||
#define BUCK_RAMP_MAX 250
|
||||
|
||||
static const struct linear_range bd70528_buck1_volts[] = {
|
||||
REGULATOR_LINEAR_RANGE(1200000, 0x00, 0x1, 600000),
|
||||
REGULATOR_LINEAR_RANGE(2750000, 0x2, 0xf, 50000),
|
||||
};
|
||||
static const struct linear_range bd70528_buck2_volts[] = {
|
||||
REGULATOR_LINEAR_RANGE(1200000, 0x00, 0x1, 300000),
|
||||
REGULATOR_LINEAR_RANGE(1550000, 0x2, 0xd, 50000),
|
||||
REGULATOR_LINEAR_RANGE(3000000, 0xe, 0xf, 300000),
|
||||
};
|
||||
static const struct linear_range bd70528_buck3_volts[] = {
|
||||
REGULATOR_LINEAR_RANGE(800000, 0x00, 0xd, 50000),
|
||||
REGULATOR_LINEAR_RANGE(1800000, 0xe, 0xf, 0),
|
||||
};
|
||||
|
||||
/* All LDOs have same voltage ranges */
|
||||
static const struct linear_range bd70528_ldo_volts[] = {
|
||||
REGULATOR_LINEAR_RANGE(1650000, 0x0, 0x07, 50000),
|
||||
REGULATOR_LINEAR_RANGE(2100000, 0x8, 0x0f, 100000),
|
||||
REGULATOR_LINEAR_RANGE(2850000, 0x10, 0x19, 50000),
|
||||
REGULATOR_LINEAR_RANGE(3300000, 0x19, 0x1f, 0),
|
||||
};
|
||||
|
||||
/* Also both LEDs support same voltages */
|
||||
static const unsigned int led_volts[] = {
|
||||
20000, 30000
|
||||
};
|
||||
|
||||
static int bd70528_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
|
||||
{
|
||||
if (ramp_delay > 0 && ramp_delay <= BUCK_RAMP_MAX) {
|
||||
unsigned int ramp_value = BUCK_RAMPRATE_250MV;
|
||||
|
||||
if (ramp_delay <= 125)
|
||||
ramp_value = BUCK_RAMPRATE_125MV;
|
||||
|
||||
return regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg,
|
||||
BD70528_MASK_BUCK_RAMP,
|
||||
ramp_value << BD70528_SIFT_BUCK_RAMP);
|
||||
}
|
||||
dev_err(&rdev->dev, "%s: ramp_delay: %d not supported\n",
|
||||
rdev->desc->name, ramp_delay);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int bd70528_led_set_voltage_sel(struct regulator_dev *rdev,
|
||||
unsigned int sel)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = regulator_is_enabled_regmap(rdev);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (ret == 0)
|
||||
return regulator_set_voltage_sel_regmap(rdev, sel);
|
||||
|
||||
dev_err(&rdev->dev,
|
||||
"LED voltage change not allowed when led is enabled\n");
|
||||
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
static const struct regulator_ops bd70528_buck_ops = {
|
||||
.enable = regulator_enable_regmap,
|
||||
.disable = regulator_disable_regmap,
|
||||
.is_enabled = regulator_is_enabled_regmap,
|
||||
.list_voltage = regulator_list_voltage_linear_range,
|
||||
.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,
|
||||
.set_ramp_delay = bd70528_set_ramp_delay,
|
||||
};
|
||||
|
||||
static const struct regulator_ops bd70528_ldo_ops = {
|
||||
.enable = regulator_enable_regmap,
|
||||
.disable = regulator_disable_regmap,
|
||||
.is_enabled = regulator_is_enabled_regmap,
|
||||
.list_voltage = regulator_list_voltage_linear_range,
|
||||
.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,
|
||||
};
|
||||
|
||||
static const struct regulator_ops bd70528_led_ops = {
|
||||
.enable = regulator_enable_regmap,
|
||||
.disable = regulator_disable_regmap,
|
||||
.is_enabled = regulator_is_enabled_regmap,
|
||||
.list_voltage = regulator_list_voltage_table,
|
||||
.set_voltage_sel = bd70528_led_set_voltage_sel,
|
||||
.get_voltage_sel = regulator_get_voltage_sel_regmap,
|
||||
};
|
||||
|
||||
static const struct regulator_desc bd70528_desc[] = {
|
||||
{
|
||||
.name = "buck1",
|
||||
.of_match = of_match_ptr("BUCK1"),
|
||||
.regulators_node = of_match_ptr("regulators"),
|
||||
.id = BD70528_BUCK1,
|
||||
.ops = &bd70528_buck_ops,
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.linear_ranges = bd70528_buck1_volts,
|
||||
.n_linear_ranges = ARRAY_SIZE(bd70528_buck1_volts),
|
||||
.n_voltages = BD70528_BUCK_VOLTS,
|
||||
.enable_reg = BD70528_REG_BUCK1_EN,
|
||||
.enable_mask = BD70528_MASK_RUN_EN,
|
||||
.vsel_reg = BD70528_REG_BUCK1_VOLT,
|
||||
.vsel_mask = BD70528_MASK_BUCK_VOLT,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
{
|
||||
.name = "buck2",
|
||||
.of_match = of_match_ptr("BUCK2"),
|
||||
.regulators_node = of_match_ptr("regulators"),
|
||||
.id = BD70528_BUCK2,
|
||||
.ops = &bd70528_buck_ops,
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.linear_ranges = bd70528_buck2_volts,
|
||||
.n_linear_ranges = ARRAY_SIZE(bd70528_buck2_volts),
|
||||
.n_voltages = BD70528_BUCK_VOLTS,
|
||||
.enable_reg = BD70528_REG_BUCK2_EN,
|
||||
.enable_mask = BD70528_MASK_RUN_EN,
|
||||
.vsel_reg = BD70528_REG_BUCK2_VOLT,
|
||||
.vsel_mask = BD70528_MASK_BUCK_VOLT,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
{
|
||||
.name = "buck3",
|
||||
.of_match = of_match_ptr("BUCK3"),
|
||||
.regulators_node = of_match_ptr("regulators"),
|
||||
.id = BD70528_BUCK3,
|
||||
.ops = &bd70528_buck_ops,
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.linear_ranges = bd70528_buck3_volts,
|
||||
.n_linear_ranges = ARRAY_SIZE(bd70528_buck3_volts),
|
||||
.n_voltages = BD70528_BUCK_VOLTS,
|
||||
.enable_reg = BD70528_REG_BUCK3_EN,
|
||||
.enable_mask = BD70528_MASK_RUN_EN,
|
||||
.vsel_reg = BD70528_REG_BUCK3_VOLT,
|
||||
.vsel_mask = BD70528_MASK_BUCK_VOLT,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
{
|
||||
.name = "ldo1",
|
||||
.of_match = of_match_ptr("LDO1"),
|
||||
.regulators_node = of_match_ptr("regulators"),
|
||||
.id = BD70528_LDO1,
|
||||
.ops = &bd70528_ldo_ops,
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.linear_ranges = bd70528_ldo_volts,
|
||||
.n_linear_ranges = ARRAY_SIZE(bd70528_ldo_volts),
|
||||
.n_voltages = BD70528_LDO_VOLTS,
|
||||
.enable_reg = BD70528_REG_LDO1_EN,
|
||||
.enable_mask = BD70528_MASK_RUN_EN,
|
||||
.vsel_reg = BD70528_REG_LDO1_VOLT,
|
||||
.vsel_mask = BD70528_MASK_LDO_VOLT,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
{
|
||||
.name = "ldo2",
|
||||
.of_match = of_match_ptr("LDO2"),
|
||||
.regulators_node = of_match_ptr("regulators"),
|
||||
.id = BD70528_LDO2,
|
||||
.ops = &bd70528_ldo_ops,
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.linear_ranges = bd70528_ldo_volts,
|
||||
.n_linear_ranges = ARRAY_SIZE(bd70528_ldo_volts),
|
||||
.n_voltages = BD70528_LDO_VOLTS,
|
||||
.enable_reg = BD70528_REG_LDO2_EN,
|
||||
.enable_mask = BD70528_MASK_RUN_EN,
|
||||
.vsel_reg = BD70528_REG_LDO2_VOLT,
|
||||
.vsel_mask = BD70528_MASK_LDO_VOLT,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
{
|
||||
.name = "ldo3",
|
||||
.of_match = of_match_ptr("LDO3"),
|
||||
.regulators_node = of_match_ptr("regulators"),
|
||||
.id = BD70528_LDO3,
|
||||
.ops = &bd70528_ldo_ops,
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.linear_ranges = bd70528_ldo_volts,
|
||||
.n_linear_ranges = ARRAY_SIZE(bd70528_ldo_volts),
|
||||
.n_voltages = BD70528_LDO_VOLTS,
|
||||
.enable_reg = BD70528_REG_LDO3_EN,
|
||||
.enable_mask = BD70528_MASK_RUN_EN,
|
||||
.vsel_reg = BD70528_REG_LDO3_VOLT,
|
||||
.vsel_mask = BD70528_MASK_LDO_VOLT,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
{
|
||||
.name = "ldo_led1",
|
||||
.of_match = of_match_ptr("LDO_LED1"),
|
||||
.regulators_node = of_match_ptr("regulators"),
|
||||
.id = BD70528_LED1,
|
||||
.ops = &bd70528_led_ops,
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.volt_table = &led_volts[0],
|
||||
.n_voltages = ARRAY_SIZE(led_volts),
|
||||
.enable_reg = BD70528_REG_LED_EN,
|
||||
.enable_mask = BD70528_MASK_LED1_EN,
|
||||
.vsel_reg = BD70528_REG_LED_VOLT,
|
||||
.vsel_mask = BD70528_MASK_LED1_VOLT,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
{
|
||||
.name = "ldo_led2",
|
||||
.of_match = of_match_ptr("LDO_LED2"),
|
||||
.regulators_node = of_match_ptr("regulators"),
|
||||
.id = BD70528_LED2,
|
||||
.ops = &bd70528_led_ops,
|
||||
.type = REGULATOR_VOLTAGE,
|
||||
.volt_table = &led_volts[0],
|
||||
.n_voltages = ARRAY_SIZE(led_volts),
|
||||
.enable_reg = BD70528_REG_LED_EN,
|
||||
.enable_mask = BD70528_MASK_LED2_EN,
|
||||
.vsel_reg = BD70528_REG_LED_VOLT,
|
||||
.vsel_mask = BD70528_MASK_LED2_VOLT,
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
static int bd70528_probe(struct platform_device *pdev)
|
||||
{
|
||||
int i;
|
||||
struct regulator_config config = {
|
||||
.dev = pdev->dev.parent,
|
||||
};
|
||||
|
||||
config.regmap = dev_get_regmap(pdev->dev.parent, NULL);
|
||||
if (!config.regmap)
|
||||
return -ENODEV;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(bd70528_desc); i++) {
|
||||
struct regulator_dev *rdev;
|
||||
|
||||
rdev = devm_regulator_register(&pdev->dev, &bd70528_desc[i],
|
||||
&config);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(&pdev->dev,
|
||||
"failed to register %s regulator\n",
|
||||
bd70528_desc[i].name);
|
||||
return PTR_ERR(rdev);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver bd70528_regulator = {
|
||||
.driver = {
|
||||
.name = "bd70528-pmic"
|
||||
},
|
||||
.probe = bd70528_probe,
|
||||
};
|
||||
|
||||
module_platform_driver(bd70528_regulator);
|
||||
|
||||
MODULE_AUTHOR("Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com>");
|
||||
MODULE_DESCRIPTION("BD70528 voltage regulator driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
MODULE_ALIAS("platform:bd70528-pmic");
|
||||
@@ -13,6 +13,8 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/of.h>
|
||||
#include <linux/gpio/consumer.h>
|
||||
#include <linux/regulator/driver.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/slab.h>
|
||||
@@ -26,14 +28,6 @@ struct bd71815_regulator {
|
||||
const struct rohm_dvs_config *dvs;
|
||||
};
|
||||
|
||||
struct bd71815_pmic {
|
||||
struct bd71815_regulator descs[BD71815_REGULATOR_CNT];
|
||||
struct regmap *regmap;
|
||||
struct device *dev;
|
||||
struct gpio_descs *gps;
|
||||
struct regulator_dev *rdev[BD71815_REGULATOR_CNT];
|
||||
};
|
||||
|
||||
static const int bd7181x_wled_currents[] = {
|
||||
10, 20, 30, 50, 70, 100, 200, 300, 500, 700, 1000, 2000, 3000, 4000,
|
||||
5000, 6000, 7000, 8000, 9000, 10000, 11000, 12000, 13000, 14000, 15000,
|
||||
@@ -300,14 +294,13 @@ static int bd7181x_led_set_current_limit(struct regulator_dev *rdev,
|
||||
|
||||
static int bd7181x_buck12_get_voltage_sel(struct regulator_dev *rdev)
|
||||
{
|
||||
struct bd71815_pmic *pmic = rdev_get_drvdata(rdev);
|
||||
int rid = rdev_get_id(rdev);
|
||||
int ret, regh, regl, val;
|
||||
|
||||
regh = BD71815_REG_BUCK1_VOLT_H + rid * 0x2;
|
||||
regl = BD71815_REG_BUCK1_VOLT_L + rid * 0x2;
|
||||
|
||||
ret = regmap_read(pmic->regmap, regh, &val);
|
||||
ret = regmap_read(rdev->regmap, regh, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -319,7 +312,7 @@ static int bd7181x_buck12_get_voltage_sel(struct regulator_dev *rdev)
|
||||
* by BD71815_BUCK_DVSSEL bit
|
||||
*/
|
||||
if ((!(val & BD71815_BUCK_STBY_DVS)) && (!(val & BD71815_BUCK_DVSSEL)))
|
||||
ret = regmap_read(pmic->regmap, regl, &val);
|
||||
ret = regmap_read(rdev->regmap, regl, &val);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -333,14 +326,13 @@ static int bd7181x_buck12_get_voltage_sel(struct regulator_dev *rdev)
|
||||
static int bd7181x_buck12_set_voltage_sel(struct regulator_dev *rdev,
|
||||
unsigned int sel)
|
||||
{
|
||||
struct bd71815_pmic *pmic = rdev_get_drvdata(rdev);
|
||||
int rid = rdev_get_id(rdev);
|
||||
int ret, val, reg, regh, regl;
|
||||
|
||||
regh = BD71815_REG_BUCK1_VOLT_H + rid*0x2;
|
||||
regl = BD71815_REG_BUCK1_VOLT_L + rid*0x2;
|
||||
|
||||
ret = regmap_read(pmic->regmap, regh, &val);
|
||||
ret = regmap_read(rdev->regmap, regh, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -350,7 +342,7 @@ static int bd7181x_buck12_set_voltage_sel(struct regulator_dev *rdev,
|
||||
* voltages at runtime is not supported by this driver.
|
||||
*/
|
||||
if (((val & BD71815_BUCK_STBY_DVS))) {
|
||||
return regmap_update_bits(pmic->regmap, regh, BD71815_VOLT_MASK,
|
||||
return regmap_update_bits(rdev->regmap, regh, BD71815_VOLT_MASK,
|
||||
sel);
|
||||
}
|
||||
/* Update new voltage to the register which is not selected now */
|
||||
@@ -359,12 +351,13 @@ static int bd7181x_buck12_set_voltage_sel(struct regulator_dev *rdev,
|
||||
else
|
||||
reg = regh;
|
||||
|
||||
ret = regmap_update_bits(pmic->regmap, reg, BD71815_VOLT_MASK, sel);
|
||||
ret = regmap_update_bits(rdev->regmap, reg, BD71815_VOLT_MASK, sel);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Select the other DVS register to be used */
|
||||
return regmap_update_bits(pmic->regmap, regh, BD71815_BUCK_DVSSEL, ~val);
|
||||
return regmap_update_bits(rdev->regmap, regh, BD71815_BUCK_DVSSEL,
|
||||
~val);
|
||||
}
|
||||
|
||||
static const struct regulator_ops bd7181x_ldo_regulator_ops = {
|
||||
@@ -522,7 +515,7 @@ static const struct regulator_ops bd7181x_led_regulator_ops = {
|
||||
.dvs = (_dvs), \
|
||||
}
|
||||
|
||||
static struct bd71815_regulator bd71815_regulators[] = {
|
||||
static const struct bd71815_regulator bd71815_regulators[] = {
|
||||
BD71815_BUCK12_REG(buck1, BD71815_BUCK1, BD71815_REG_BUCK1_VOLT_H,
|
||||
BD71815_REG_BUCK1_MODE, 800000, 2000000, 25000,
|
||||
&buck1_dvs),
|
||||
@@ -568,24 +561,16 @@ static struct bd71815_regulator bd71815_regulators[] = {
|
||||
|
||||
static int bd7181x_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct bd71815_pmic *pmic;
|
||||
struct regulator_config config = {};
|
||||
int i, ret;
|
||||
struct gpio_desc *ldo4_en;
|
||||
struct regmap *regmap;
|
||||
|
||||
pmic = devm_kzalloc(&pdev->dev, sizeof(*pmic), GFP_KERNEL);
|
||||
if (!pmic)
|
||||
return -ENOMEM;
|
||||
|
||||
memcpy(pmic->descs, bd71815_regulators, sizeof(pmic->descs));
|
||||
|
||||
pmic->dev = &pdev->dev;
|
||||
pmic->regmap = dev_get_regmap(pdev->dev.parent, NULL);
|
||||
if (!pmic->regmap) {
|
||||
dev_err(pmic->dev, "No parent regmap\n");
|
||||
regmap = dev_get_regmap(pdev->dev.parent, NULL);
|
||||
if (!regmap) {
|
||||
dev_err(&pdev->dev, "No parent regmap\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
platform_set_drvdata(pdev, pmic);
|
||||
ldo4_en = devm_gpiod_get_from_of_node(&pdev->dev,
|
||||
pdev->dev.parent->of_node,
|
||||
"rohm,vsel-gpios", 0,
|
||||
@@ -599,23 +584,23 @@ static int bd7181x_probe(struct platform_device *pdev)
|
||||
}
|
||||
|
||||
/* Disable to go to ship-mode */
|
||||
ret = regmap_update_bits(pmic->regmap, BD71815_REG_PWRCTRL,
|
||||
RESTARTEN, 0);
|
||||
ret = regmap_update_bits(regmap, BD71815_REG_PWRCTRL, RESTARTEN, 0);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
config.dev = pdev->dev.parent;
|
||||
config.regmap = pmic->regmap;
|
||||
config.regmap = regmap;
|
||||
|
||||
for (i = 0; i < BD71815_REGULATOR_CNT; i++) {
|
||||
struct regulator_desc *desc;
|
||||
const struct regulator_desc *desc;
|
||||
struct regulator_dev *rdev;
|
||||
|
||||
desc = &pmic->descs[i].desc;
|
||||
desc = &bd71815_regulators[i].desc;
|
||||
|
||||
if (i == BD71815_LDO4)
|
||||
config.ena_gpiod = ldo4_en;
|
||||
|
||||
config.driver_data = pmic;
|
||||
else
|
||||
config.ena_gpiod = NULL;
|
||||
|
||||
rdev = devm_regulator_register(&pdev->dev, desc, &config);
|
||||
if (IS_ERR(rdev)) {
|
||||
@@ -624,8 +609,6 @@ static int bd7181x_probe(struct platform_device *pdev)
|
||||
desc->name);
|
||||
return PTR_ERR(rdev);
|
||||
}
|
||||
config.ena_gpiod = NULL;
|
||||
pmic->rdev[i] = rdev;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -639,7 +622,6 @@ MODULE_DEVICE_TABLE(platform, bd7181x_pmic_id);
|
||||
static struct platform_driver bd7181x_regulator = {
|
||||
.driver = {
|
||||
.name = "bd7181x-pmic",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.probe = bd7181x_probe,
|
||||
.id_table = bd7181x_pmic_id,
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -250,7 +250,8 @@ static int da9052_regulator_set_voltage_time_sel(struct regulator_dev *rdev,
|
||||
case DA9052_ID_BUCK3:
|
||||
case DA9052_ID_LDO2:
|
||||
case DA9052_ID_LDO3:
|
||||
ret = (new_sel - old_sel) * info->step_uV / 6250;
|
||||
ret = DIV_ROUND_UP(abs(new_sel - old_sel) * info->step_uV,
|
||||
6250);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user