Commit 6df92808 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'regulator-v6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator

Pull regulator updates from Mark Brown:
 "This release is almost all cleanup work of various kinds, while the
  diffstat for the core is quite large this is almost all cleanups and
  documentation improvments with some small fixes rather than any new
  feature work. We do have support for a couple of new devices but these
  are small additions to existing drivers rather than new drivers.

   - Removal of the SM5703 driver which does not have it's dependencies
     available.

   - Support for Allwinner AXP717, and Qualcomm WCN6855.

  The Allwinner support shares some commits with the MFD tree"

* tag 'regulator-v6.12' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (66 commits)
  regulator: sm5703: Remove because it is unused and fails to build
  regulator: Split up _regulator_get()
  regulator: update some comments ([gs]et_voltage_vsel vs [gs]et_voltage_sel)
  regulator: max8973: Use irq_get_trigger_type() helper
  regulator: core: fix the broken behavior of regulator_dev_lookup()
  regulator: max77650: Use container_of and constify static data
  regulator: hi6421v530: Use container_of and constify static data
  regulator: hi6421v530: Drop unused 'eco_microamp'
  regulator: qcom-refgen: Constify static data
  regulator: pfuze100: Constify static data
  regulator: pcap: Constify static data
  regulator: mtk-dvfsrc: Constify static data
  regulator: max77826: Constify static data
  regulator: max77826: Drop unused 'rdesc' in 'struct max77826_regulator_info'
  regulator: tps65023: Constify static data
  regulator: hi6421v600: Constify static data
  regulator: hi6421: Constify static data
  regulator: da9121: Constify static data
  regulator: da9063: Constify static data
  regulator: da9055: Constify static data
  ...
parents 9179b73a 4591a227
...@@ -274,7 +274,7 @@ properties: ...@@ -274,7 +274,7 @@ properties:
Defines the work frequency of DC-DC in kHz. Defines the work frequency of DC-DC in kHz.
patternProperties: patternProperties:
"^(([a-f])?ldo[0-9]|dcdc[0-7a-e]|ldo(_|-)io(0|1)|(dc1)?sw|rtc(_|-)ldo|cpusldo|drivevbus|dc5ldo)$": "^(([a-f])?ldo[0-9]|dcdc[0-7a-e]|ldo(_|-)io(0|1)|(dc1)?sw|rtc(_|-)ldo|cpusldo|drivevbus|dc5ldo|boost)$":
$ref: /schemas/regulator/regulator.yaml# $ref: /schemas/regulator/regulator.yaml#
type: object type: object
unevaluatedProperties: false unevaluatedProperties: false
......
# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/regulator/mediatek,mt6397-regulator.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: MediaTek MT6397 Regulator
maintainers:
- Sen Chu <sen.chu@mediatek.com>
- Macpaul Lin <macpaul.lin@mediatek.com>
description:
Regulator node of the PMIC. This node should under the PMIC's device node.
All voltage regulators provided by the PMIC are described as sub-nodes of
this node.
properties:
compatible:
items:
- const: mediatek,mt6397-regulator
patternProperties:
"^(buck_)?v(core|drm|gpu|io18|pca(7|15)|sramca(7|15))$":
description: Buck regulators
type: object
$ref: regulator.yaml#
properties:
regulator-allowed-modes:
description: |
BUCK regulators can set regulator-initial-mode and regulator-allowed-modes to
values specified in dt-bindings/regulator/mediatek,mt6397-regulator.h
items:
enum: [0, 1]
unevaluatedProperties: false
"^(ldo_)?v(tcxo|(a|io)28)$":
description: LDOs with fixed 2.8V output and 0~100/10mV tuning
type: object
$ref: regulator.yaml#
properties:
regulator-allowed-modes: false
unevaluatedProperties: false
"^(ldo_)?vusb$":
description: LDOs with fixed 3.0V output and 0~100/10mV tuning
type: object
$ref: regulator.yaml#
properties:
regulator-allowed-modes: false
unevaluatedProperties: false
"^(ldo_)?v(cama|emc3v3|gp[123456]|ibr|mc|mch)$":
description: LDOs with variable output and 0~100/10mV tuning
type: object
$ref: regulator.yaml#
properties:
regulator-allowed-modes: false
unevaluatedProperties: false
required:
- compatible
additionalProperties: false
examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
mt6397_regulators: regulators {
compatible = "mediatek,mt6397-regulator";
mt6397_vpca15_reg: buck_vpca15 {
regulator-name = "vpca15";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <200>;
};
mt6397_vpca7_reg: buck_vpca7 {
regulator-name = "vpca7";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vsramca15_reg: buck_vsramca15 {
regulator-name = "vsramca15";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vsramca7_reg: buck_vsramca7 {
regulator-name = "vsramca7";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vcore_reg: buck_vcore {
regulator-name = "vcore";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vgpu_reg: buck_vgpu {
regulator-name = "vgpu";
regulator-min-microvolt = < 700000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vdrm_reg: buck_vdrm {
regulator-name = "vdrm";
regulator-min-microvolt = < 800000>;
regulator-max-microvolt = <1400000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <500>;
};
mt6397_vio18_reg: buck_vio18 {
regulator-name = "vio18";
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <2120000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <500>;
};
mt6397_vtcxo_reg: ldo_vtcxo {
regulator-name = "vtcxo";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-enable-ramp-delay = <90>;
};
mt6397_va28_reg: ldo_va28 {
regulator-name = "va28";
/* fixed output 2.8 V */
regulator-enable-ramp-delay = <218>;
};
mt6397_vcama_reg: ldo_vcama {
regulator-name = "vcama";
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <2800000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vio28_reg: ldo_vio28 {
regulator-name = "vio28";
/* fixed output 2.8 V */
regulator-enable-ramp-delay = <240>;
};
mt6397_usb_reg: ldo_vusb {
regulator-name = "vusb";
/* fixed output 3.3 V */
regulator-enable-ramp-delay = <218>;
};
mt6397_vmc_reg: ldo_vmc {
regulator-name = "vmc";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vmch_reg: ldo_vmch {
regulator-name = "vmch";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vemc_3v3_reg: ldo_vemc3v3 {
regulator-name = "vemc_3v3";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp1_reg: ldo_vgp1 {
regulator-name = "vcamd";
regulator-min-microvolt = <1220000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <240>;
};
mt6397_vgp2_reg: ldo_vgp2 {
regulator-name = "vcamio";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp3_reg: ldo_vgp3 {
regulator-name = "vcamaf";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp4_reg: ldo_vgp4 {
regulator-name = "vgp4";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp5_reg: ldo_vgp5 {
regulator-name = "vgp5";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3000000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp6_reg: ldo_vgp6 {
regulator-name = "vgp6";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vibr_reg: ldo_vibr {
regulator-name = "vibr";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
};
...@@ -28,6 +28,21 @@ properties: ...@@ -28,6 +28,21 @@ properties:
reg: reg:
maxItems: 1 maxItems: 1
lvin-supply:
description: Input supply phandle for LDO1 and LDO2
pvin1-supply:
description: Input supply phandle for VDD_IO (BUCK1)
pvin2-supply:
description: Input supply phandle for VDD_DDR (BUCK2)
pvin3-supply:
description: Input supply phandle for VDD_CORE (BUCK3)
pvin4-supply:
description: Input supply phandle for VDD_OTHER (BUCK4)
regulators: regulators:
type: object type: object
additionalProperties: false additionalProperties: false
...@@ -68,6 +83,11 @@ examples: ...@@ -68,6 +83,11 @@ examples:
pmic@5b { pmic@5b {
compatible = "microchip,mcp16502"; compatible = "microchip,mcp16502";
reg = <0x5b>; reg = <0x5b>;
lvin-supply = <&reg_5v>;
pvin1-supply = <&reg_5v>;
pvin2-supply = <&reg_5v>;
pvin3-supply = <&reg_5v>;
pvin4-supply = <&reg_5v>;
regulators { regulators {
VDD_IO { VDD_IO {
......
Mediatek MT6397 Regulator
Required properties:
- compatible: "mediatek,mt6397-regulator"
- mt6397regulator: List of regulators provided by this controller. It is named
according to its regulator type, buck_<name> and ldo_<name>.
The definition for each of these nodes is defined using the standard binding
for regulators at Documentation/devicetree/bindings/regulator/regulator.txt.
The valid names for regulators are::
BUCK:
buck_vpca15, buck_vpca7, buck_vsramca15, buck_vsramca7, buck_vcore, buck_vgpu,
buck_vdrm, buck_vio18
LDO:
ldo_vtcxo, ldo_va28, ldo_vcama, ldo_vio28, ldo_vusb, ldo_vmc, ldo_vmch,
ldo_vemc3v3, ldo_vgp1, ldo_vgp2, ldo_vgp3, ldo_vgp4, ldo_vgp5, ldo_vgp6,
ldo_vibr
BUCK regulators can set regulator-initial-mode and regulator-allowed-modes to
values specified in dt-bindings/regulator/mediatek,mt6397-regulator.h
Example:
pmic {
compatible = "mediatek,mt6397";
mt6397regulator: mt6397regulator {
compatible = "mediatek,mt6397-regulator";
mt6397_vpca15_reg: buck_vpca15 {
regulator-compatible = "buck_vpca15";
regulator-name = "vpca15";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <200>;
};
mt6397_vpca7_reg: buck_vpca7 {
regulator-compatible = "buck_vpca7";
regulator-name = "vpca7";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vsramca15_reg: buck_vsramca15 {
regulator-compatible = "buck_vsramca15";
regulator-name = "vsramca15";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vsramca7_reg: buck_vsramca7 {
regulator-compatible = "buck_vsramca7";
regulator-name = "vsramca7";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vcore_reg: buck_vcore {
regulator-compatible = "buck_vcore";
regulator-name = "vcore";
regulator-min-microvolt = < 850000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vgpu_reg: buck_vgpu {
regulator-compatible = "buck_vgpu";
regulator-name = "vgpu";
regulator-min-microvolt = < 700000>;
regulator-max-microvolt = <1350000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <115>;
};
mt6397_vdrm_reg: buck_vdrm {
regulator-compatible = "buck_vdrm";
regulator-name = "vdrm";
regulator-min-microvolt = < 800000>;
regulator-max-microvolt = <1400000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <500>;
};
mt6397_vio18_reg: buck_vio18 {
regulator-compatible = "buck_vio18";
regulator-name = "vio18";
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <2120000>;
regulator-ramp-delay = <12500>;
regulator-enable-ramp-delay = <500>;
};
mt6397_vtcxo_reg: ldo_vtcxo {
regulator-compatible = "ldo_vtcxo";
regulator-name = "vtcxo";
regulator-min-microvolt = <2800000>;
regulator-max-microvolt = <2800000>;
regulator-enable-ramp-delay = <90>;
};
mt6397_va28_reg: ldo_va28 {
regulator-compatible = "ldo_va28";
regulator-name = "va28";
/* fixed output 2.8 V */
regulator-enable-ramp-delay = <218>;
};
mt6397_vcama_reg: ldo_vcama {
regulator-compatible = "ldo_vcama";
regulator-name = "vcama";
regulator-min-microvolt = <1500000>;
regulator-max-microvolt = <2800000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vio28_reg: ldo_vio28 {
regulator-compatible = "ldo_vio28";
regulator-name = "vio28";
/* fixed output 2.8 V */
regulator-enable-ramp-delay = <240>;
};
mt6397_usb_reg: ldo_vusb {
regulator-compatible = "ldo_vusb";
regulator-name = "vusb";
/* fixed output 3.3 V */
regulator-enable-ramp-delay = <218>;
};
mt6397_vmc_reg: ldo_vmc {
regulator-compatible = "ldo_vmc";
regulator-name = "vmc";
regulator-min-microvolt = <1800000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vmch_reg: ldo_vmch {
regulator-compatible = "ldo_vmch";
regulator-name = "vmch";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vemc_3v3_reg: ldo_vemc3v3 {
regulator-compatible = "ldo_vemc3v3";
regulator-name = "vemc_3v3";
regulator-min-microvolt = <3000000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp1_reg: ldo_vgp1 {
regulator-compatible = "ldo_vgp1";
regulator-name = "vcamd";
regulator-min-microvolt = <1220000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <240>;
};
mt6397_vgp2_reg: ldo_vgp2 {
egulator-compatible = "ldo_vgp2";
regulator-name = "vcamio";
regulator-min-microvolt = <1000000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp3_reg: ldo_vgp3 {
regulator-compatible = "ldo_vgp3";
regulator-name = "vcamaf";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp4_reg: ldo_vgp4 {
regulator-compatible = "ldo_vgp4";
regulator-name = "vgp4";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp5_reg: ldo_vgp5 {
regulator-compatible = "ldo_vgp5";
regulator-name = "vgp5";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3000000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vgp6_reg: ldo_vgp6 {
regulator-compatible = "ldo_vgp6";
regulator-name = "vgp6";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
mt6397_vibr_reg: ldo_vibr {
regulator-compatible = "ldo_vibr";
regulator-name = "vibr";
regulator-min-microvolt = <1200000>;
regulator-max-microvolt = <3300000>;
regulator-enable-ramp-delay = <218>;
};
};
};
...@@ -18,6 +18,7 @@ properties: ...@@ -18,6 +18,7 @@ properties:
compatible: compatible:
enum: enum:
- qcom,qca6390-pmu - qcom,qca6390-pmu
- qcom,wcn6855-pmu
- qcom,wcn7850-pmu - qcom,wcn7850-pmu
vdd-supply: vdd-supply:
...@@ -65,7 +66,11 @@ properties: ...@@ -65,7 +66,11 @@ properties:
bt-enable-gpios: bt-enable-gpios:
maxItems: 1 maxItems: 1
description: GPIO line enabling the ATH11K Bluetooth module supplied by the PMU description: GPIO line enabling the Bluetooth module supplied by the PMU
swctrl-gpios:
maxItems: 1
description: GPIO line indicating the state of the clock supply to the BT module
clocks: clocks:
maxItems: 1 maxItems: 1
...@@ -104,6 +109,21 @@ allOf: ...@@ -104,6 +109,21 @@ allOf:
- vddpcie1p3-supply - vddpcie1p3-supply
- vddpcie1p9-supply - vddpcie1p9-supply
- vddio-supply - vddio-supply
- if:
properties:
compatible:
contains:
const: qcom,wcn6855-pmu
then:
required:
- vddio-supply
- vddaon-supply
- vddpmu-supply
- vddrfa0p95-supply
- vddrfa1p3-supply
- vddrfa1p9-supply
- vddpcie1p3-supply
- vddpcie1p9-supply
- if: - if:
properties: properties:
compatible: compatible:
......
...@@ -209,6 +209,8 @@ static const struct regmap_access_table axp313a_volatile_table = { ...@@ -209,6 +209,8 @@ static const struct regmap_access_table axp313a_volatile_table = {
}; };
static const struct regmap_range axp717_writeable_ranges[] = { static const struct regmap_range axp717_writeable_ranges[] = {
regmap_reg_range(AXP717_MODULE_EN_CONTROL_2, AXP717_MODULE_EN_CONTROL_2),
regmap_reg_range(AXP717_BOOST_CONTROL, AXP717_BOOST_CONTROL),
regmap_reg_range(AXP717_IRQ0_EN, AXP717_IRQ4_EN), regmap_reg_range(AXP717_IRQ0_EN, AXP717_IRQ4_EN),
regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE), regmap_reg_range(AXP717_IRQ0_STATE, AXP717_IRQ4_STATE),
regmap_reg_range(AXP717_DCDC_OUTPUT_CONTROL, AXP717_CPUSLDO_CONTROL), regmap_reg_range(AXP717_DCDC_OUTPUT_CONTROL, AXP717_CPUSLDO_CONTROL),
......
...@@ -1373,13 +1373,6 @@ config REGULATOR_SLG51000 ...@@ -1373,13 +1373,6 @@ config REGULATOR_SLG51000
The SLG51000 is seven compact and customizable low dropout The SLG51000 is seven compact and customizable low dropout
regulators. regulators.
config REGULATOR_SM5703
tristate "Silicon Mitus SM5703 regulators"
depends on MFD_SM5703
help
This driver provides support for voltage regulators of SM5703
multi-function device.
config REGULATOR_STM32_BOOSTER config REGULATOR_STM32_BOOSTER
tristate "STMicroelectronics STM32 BOOSTER" tristate "STMicroelectronics STM32 BOOSTER"
depends on ARCH_STM32 || COMPILE_TEST depends on ARCH_STM32 || COMPILE_TEST
......
...@@ -160,7 +160,6 @@ obj-$(CONFIG_REGULATOR_S5M8767) += s5m8767.o ...@@ -160,7 +160,6 @@ obj-$(CONFIG_REGULATOR_S5M8767) += s5m8767.o
obj-$(CONFIG_REGULATOR_SC2731) += sc2731-regulator.o obj-$(CONFIG_REGULATOR_SC2731) += sc2731-regulator.o
obj-$(CONFIG_REGULATOR_SKY81452) += sky81452-regulator.o obj-$(CONFIG_REGULATOR_SKY81452) += sky81452-regulator.o
obj-$(CONFIG_REGULATOR_SLG51000) += slg51000-regulator.o obj-$(CONFIG_REGULATOR_SLG51000) += slg51000-regulator.o
obj-$(CONFIG_REGULATOR_SM5703) += sm5703-regulator.o
obj-$(CONFIG_REGULATOR_STM32_BOOSTER) += stm32-booster.o obj-$(CONFIG_REGULATOR_STM32_BOOSTER) += stm32-booster.o
obj-$(CONFIG_REGULATOR_STM32_VREFBUF) += stm32-vrefbuf.o obj-$(CONFIG_REGULATOR_STM32_VREFBUF) += stm32-vrefbuf.o
obj-$(CONFIG_REGULATOR_STM32_PWR) += stm32-pwr.o obj-$(CONFIG_REGULATOR_STM32_PWR) += stm32-pwr.o
......
...@@ -673,9 +673,7 @@ static int act8865_pmic_probe(struct i2c_client *client) ...@@ -673,9 +673,7 @@ static int act8865_pmic_probe(struct i2c_client *client)
type = (unsigned long) id->data; type = (unsigned long) id->data;
voltage_select = !!of_get_property(dev->of_node, voltage_select = of_property_read_bool(dev->of_node, "active-semi,vsel-high");
"active-semi,vsel-high",
NULL);
} else { } else {
type = i2c_id->driver_data; type = i2c_id->driver_data;
pdata = dev_get_platdata(dev); pdata = dev_get_platdata(dev);
......
...@@ -143,6 +143,7 @@ ...@@ -143,6 +143,7 @@
#define AXP717_DCDC3_NUM_VOLTAGES 103 #define AXP717_DCDC3_NUM_VOLTAGES 103
#define AXP717_DCDC_V_OUT_MASK GENMASK(6, 0) #define AXP717_DCDC_V_OUT_MASK GENMASK(6, 0)
#define AXP717_LDO_V_OUT_MASK GENMASK(4, 0) #define AXP717_LDO_V_OUT_MASK GENMASK(4, 0)
#define AXP717_BOOST_V_OUT_MASK GENMASK(7, 4)
#define AXP803_PWR_OUT_DCDC1_MASK BIT_MASK(0) #define AXP803_PWR_OUT_DCDC1_MASK BIT_MASK(0)
#define AXP803_PWR_OUT_DCDC2_MASK BIT_MASK(1) #define AXP803_PWR_OUT_DCDC2_MASK BIT_MASK(1)
...@@ -834,6 +835,9 @@ static const struct regulator_desc axp717_regulators[] = { ...@@ -834,6 +835,9 @@ static const struct regulator_desc axp717_regulators[] = {
AXP_DESC(AXP717, CPUSLDO, "cpusldo", "vin1", 500, 1400, 50, AXP_DESC(AXP717, CPUSLDO, "cpusldo", "vin1", 500, 1400, 50,
AXP717_CPUSLDO_CONTROL, AXP717_LDO_V_OUT_MASK, AXP717_CPUSLDO_CONTROL, AXP717_LDO_V_OUT_MASK,
AXP717_LDO1_OUTPUT_CONTROL, BIT(4)), AXP717_LDO1_OUTPUT_CONTROL, BIT(4)),
AXP_DESC(AXP717, BOOST, "boost", "vin1", 4550, 5510, 64,
AXP717_BOOST_CONTROL, AXP717_BOOST_V_OUT_MASK,
AXP717_MODULE_EN_CONTROL_2, BIT(4)),
}; };
/* DCDC ranges shared with AXP813 */ /* DCDC ranges shared with AXP813 */
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// Copyright (C) 2018 ROHM Semiconductors // Copyright (C) 2018 ROHM Semiconductors
// bd71837-regulator.c ROHM BD71837MWV/BD71847MWV regulator driver // bd71837-regulator.c ROHM BD71837MWV/BD71847MWV regulator driver
#include <linux/cleanup.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -1635,18 +1636,17 @@ static int get_special_regulators(struct device *dev, ...@@ -1635,18 +1636,17 @@ static int get_special_regulators(struct device *dev,
unsigned int num_reg_data, int *info) unsigned int num_reg_data, int *info)
{ {
int ret; int ret;
struct device_node *np;
struct device_node *nproot = dev->of_node;
int uv; int uv;
*info = 0; *info = 0;
nproot = of_get_child_by_name(nproot, "regulators"); struct device_node *nproot __free(device_node) = of_get_child_by_name(dev->of_node,
"regulators");
if (!nproot) { if (!nproot) {
dev_err(dev, "failed to find regulators node\n"); dev_err(dev, "failed to find regulators node\n");
return -ENODEV; return -ENODEV;
} }
for_each_child_of_node(nproot, np) { for_each_child_of_node_scoped(nproot, np) {
if (of_property_read_bool(np, "rohm,no-regulator-enable-control")) if (of_property_read_bool(np, "rohm,no-regulator-enable-control"))
mark_hw_controlled(dev, np, reg_data, num_reg_data, mark_hw_controlled(dev, np, reg_data, num_reg_data,
info); info);
...@@ -1656,22 +1656,15 @@ static int get_special_regulators(struct device *dev, ...@@ -1656,22 +1656,15 @@ static int get_special_regulators(struct device *dev,
if (ret == -EINVAL) if (ret == -EINVAL)
continue; continue;
else else
goto err_out; return ret;
} }
ret = setup_feedback_loop(dev, np, reg_data, num_reg_data, uv); ret = setup_feedback_loop(dev, np, reg_data, num_reg_data, uv);
if (ret) if (ret)
goto err_out; return ret;
} }
of_node_put(nproot);
return 0; return 0;
err_out:
of_node_put(np);
of_node_put(nproot);
return ret;
} }
static int bd718xx_probe(struct platform_device *pdev) static int bd718xx_probe(struct platform_device *pdev)
......
...@@ -68,25 +68,25 @@ static const struct linear_range voutL1_xvd_ranges[] = { ...@@ -68,25 +68,25 @@ static const struct linear_range voutL1_xvd_ranges[] = {
REGULATOR_LINEAR_RANGE(220000, 0x6e, 0x7f, 0), REGULATOR_LINEAR_RANGE(220000, 0x6e, 0x7f, 0),
}; };
static struct linear_range voutS1_ocw_ranges_internal[] = { static const struct linear_range voutS1_ocw_ranges_internal[] = {
REGULATOR_LINEAR_RANGE(200000, 0x01, 0x04, 0), REGULATOR_LINEAR_RANGE(200000, 0x01, 0x04, 0),
REGULATOR_LINEAR_RANGE(250000, 0x05, 0x18, 50000), REGULATOR_LINEAR_RANGE(250000, 0x05, 0x18, 50000),
REGULATOR_LINEAR_RANGE(1200000, 0x19, 0x3f, 0), REGULATOR_LINEAR_RANGE(1200000, 0x19, 0x3f, 0),
}; };
static struct linear_range voutS1_ocw_ranges[] = { static const struct linear_range voutS1_ocw_ranges[] = {
REGULATOR_LINEAR_RANGE(50000, 0x01, 0x04, 0), REGULATOR_LINEAR_RANGE(50000, 0x01, 0x04, 0),
REGULATOR_LINEAR_RANGE(60000, 0x05, 0x18, 10000), REGULATOR_LINEAR_RANGE(60000, 0x05, 0x18, 10000),
REGULATOR_LINEAR_RANGE(250000, 0x19, 0x3f, 0), REGULATOR_LINEAR_RANGE(250000, 0x19, 0x3f, 0),
}; };
static struct linear_range voutS1_ocp_ranges_internal[] = { static const struct linear_range voutS1_ocp_ranges_internal[] = {
REGULATOR_LINEAR_RANGE(300000, 0x01, 0x06, 0), REGULATOR_LINEAR_RANGE(300000, 0x01, 0x06, 0),
REGULATOR_LINEAR_RANGE(350000, 0x7, 0x1b, 50000), REGULATOR_LINEAR_RANGE(350000, 0x7, 0x1b, 50000),
REGULATOR_LINEAR_RANGE(1350000, 0x1c, 0x3f, 0), REGULATOR_LINEAR_RANGE(1350000, 0x1c, 0x3f, 0),
}; };
static struct linear_range voutS1_ocp_ranges[] = { static const struct linear_range voutS1_ocp_ranges[] = {
REGULATOR_LINEAR_RANGE(70000, 0x01, 0x06, 0), REGULATOR_LINEAR_RANGE(70000, 0x01, 0x06, 0),
REGULATOR_LINEAR_RANGE(80000, 0x7, 0x1b, 10000), REGULATOR_LINEAR_RANGE(80000, 0x7, 0x1b, 10000),
REGULATOR_LINEAR_RANGE(280000, 0x1c, 0x3f, 0), REGULATOR_LINEAR_RANGE(280000, 0x1c, 0x3f, 0),
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
* conflict in your downstream driver ;) * conflict in your downstream driver ;)
*/ */
#include <linux/cleanup.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/interrupt.h> #include <linux/interrupt.h>
...@@ -453,15 +454,14 @@ static int bd96801_walk_regulator_dt(struct device *dev, struct regmap *regmap, ...@@ -453,15 +454,14 @@ static int bd96801_walk_regulator_dt(struct device *dev, struct regmap *regmap,
int num) int num)
{ {
int i, ret; int i, ret;
struct device_node *np;
struct device_node *nproot = dev->parent->of_node;
nproot = of_get_child_by_name(nproot, "regulators"); struct device_node *nproot __free(device_node) =
of_get_child_by_name(dev->parent->of_node, "regulators");
if (!nproot) { if (!nproot) {
dev_err(dev, "failed to find regulators node\n"); dev_err(dev, "failed to find regulators node\n");
return -ENODEV; return -ENODEV;
} }
for_each_child_of_node(nproot, np) for_each_child_of_node_scoped(nproot, np) {
for (i = 0; i < num; i++) { for (i = 0; i < num; i++) {
if (!of_node_name_eq(np, data[i].desc.of_match)) if (!of_node_name_eq(np, data[i].desc.of_match))
continue; continue;
...@@ -476,11 +476,9 @@ static int bd96801_walk_regulator_dt(struct device *dev, struct regmap *regmap, ...@@ -476,11 +476,9 @@ static int bd96801_walk_regulator_dt(struct device *dev, struct regmap *regmap,
dev_err(dev, dev_err(dev,
"Initializing voltages for %s failed\n", "Initializing voltages for %s failed\n",
data[i].desc.name); data[i].desc.name);
of_node_put(np);
of_node_put(nproot);
return ret; return ret;
} }
if (of_property_read_bool(np, "rohm,keep-on-stby")) { if (of_property_read_bool(np, "rohm,keep-on-stby")) {
ret = regmap_set_bits(regmap, ret = regmap_set_bits(regmap,
BD96801_ALWAYS_ON_REG, BD96801_ALWAYS_ON_REG,
...@@ -489,14 +487,11 @@ static int bd96801_walk_regulator_dt(struct device *dev, struct regmap *regmap, ...@@ -489,14 +487,11 @@ static int bd96801_walk_regulator_dt(struct device *dev, struct regmap *regmap,
dev_err(dev, dev_err(dev,
"failed to set %s on-at-stby\n", "failed to set %s on-at-stby\n",
data[i].desc.name); data[i].desc.name);
of_node_put(np);
of_node_put(nproot);
return ret; return ret;
} }
} }
} }
of_node_put(nproot); }
return 0; return 0;
} }
...@@ -853,8 +848,6 @@ static int bd96801_probe(struct platform_device *pdev) ...@@ -853,8 +848,6 @@ static int bd96801_probe(struct platform_device *pdev)
ldo_errs_arr[temp_notif_ldos] = rdesc[i].ldo_errs; ldo_errs_arr[temp_notif_ldos] = rdesc[i].ldo_errs;
temp_notif_ldos++; temp_notif_ldos++;
} }
if (!idesc)
continue;
/* Register INTB handlers for configured protections */ /* Register INTB handlers for configured protections */
for (j = 0; j < idesc->num_irqs; j++) { for (j = 0; j < idesc->num_irqs; j++) {
......
This diff is collapsed.
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
#define DA9034_MDTV2 (0x33) #define DA9034_MDTV2 (0x33)
#define DA9034_MVRC (0x34) #define DA9034_MVRC (0x34)
/* DA9035 Registers. DA9034 Registers are comptabile to DA9035. */ /* DA9035 Registers. DA9034 Registers are compatible to DA9035. */
#define DA9035_OVER3 (0x12) #define DA9035_OVER3 (0x12)
#define DA9035_VCC2 (0x1f) #define DA9035_VCC2 (0x1f)
#define DA9035_3DTV1 (0x2c) #define DA9035_3DTV1 (0x2c)
......
...@@ -67,11 +67,11 @@ struct da9052_regulator_info { ...@@ -67,11 +67,11 @@ struct da9052_regulator_info {
struct da9052_regulator { struct da9052_regulator {
struct da9052 *da9052; struct da9052 *da9052;
struct da9052_regulator_info *info; const struct da9052_regulator_info *info;
struct regulator_dev *rdev; struct regulator_dev *rdev;
}; };
static int verify_range(struct da9052_regulator_info *info, static int verify_range(const struct da9052_regulator_info *info,
int min_uV, int max_uV) int min_uV, int max_uV)
{ {
if (min_uV > info->max_uV || max_uV < info->min_uV) if (min_uV > info->max_uV || max_uV < info->min_uV)
...@@ -151,7 +151,7 @@ static int da9052_list_voltage(struct regulator_dev *rdev, ...@@ -151,7 +151,7 @@ static int da9052_list_voltage(struct regulator_dev *rdev,
unsigned int selector) unsigned int selector)
{ {
struct da9052_regulator *regulator = rdev_get_drvdata(rdev); struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
struct da9052_regulator_info *info = regulator->info; const struct da9052_regulator_info *info = regulator->info;
int id = rdev_get_id(rdev); int id = rdev_get_id(rdev);
int volt_uV; int volt_uV;
...@@ -175,7 +175,7 @@ static int da9052_map_voltage(struct regulator_dev *rdev, ...@@ -175,7 +175,7 @@ static int da9052_map_voltage(struct regulator_dev *rdev,
int min_uV, int max_uV) int min_uV, int max_uV)
{ {
struct da9052_regulator *regulator = rdev_get_drvdata(rdev); struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
struct da9052_regulator_info *info = regulator->info; const struct da9052_regulator_info *info = regulator->info;
int id = rdev_get_id(rdev); int id = rdev_get_id(rdev);
int ret, sel; int ret, sel;
...@@ -206,7 +206,7 @@ static int da9052_regulator_set_voltage_sel(struct regulator_dev *rdev, ...@@ -206,7 +206,7 @@ static int da9052_regulator_set_voltage_sel(struct regulator_dev *rdev,
unsigned int selector) unsigned int selector)
{ {
struct da9052_regulator *regulator = rdev_get_drvdata(rdev); struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
struct da9052_regulator_info *info = regulator->info; const struct da9052_regulator_info *info = regulator->info;
int id = rdev_get_id(rdev); int id = rdev_get_id(rdev);
int ret; int ret;
...@@ -237,7 +237,7 @@ static int da9052_regulator_set_voltage_time_sel(struct regulator_dev *rdev, ...@@ -237,7 +237,7 @@ static int da9052_regulator_set_voltage_time_sel(struct regulator_dev *rdev,
unsigned int new_sel) unsigned int new_sel)
{ {
struct da9052_regulator *regulator = rdev_get_drvdata(rdev); struct da9052_regulator *regulator = rdev_get_drvdata(rdev);
struct da9052_regulator_info *info = regulator->info; const struct da9052_regulator_info *info = regulator->info;
int id = rdev_get_id(rdev); int id = rdev_get_id(rdev);
int ret = 0; int ret = 0;
...@@ -327,7 +327,7 @@ static const struct regulator_ops da9052_ldo_ops = { ...@@ -327,7 +327,7 @@ static const struct regulator_ops da9052_ldo_ops = {
.activate_bit = (abits),\ .activate_bit = (abits),\
} }
static struct da9052_regulator_info da9052_regulator_info[] = { static const struct da9052_regulator_info da9052_regulator_info[] = {
DA9052_DCDC(BUCK1, buck1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO), DA9052_DCDC(BUCK1, buck1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO),
DA9052_DCDC(BUCK2, buck2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO), DA9052_DCDC(BUCK2, buck2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO),
DA9052_DCDC(BUCK3, buck3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO), DA9052_DCDC(BUCK3, buck3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO),
...@@ -344,7 +344,7 @@ static struct da9052_regulator_info da9052_regulator_info[] = { ...@@ -344,7 +344,7 @@ static struct da9052_regulator_info da9052_regulator_info[] = {
DA9052_LDO(LDO10, ldo10, 50, 1200, 3600, 6, 6, 0), DA9052_LDO(LDO10, ldo10, 50, 1200, 3600, 6, 6, 0),
}; };
static struct da9052_regulator_info da9053_regulator_info[] = { static const struct da9052_regulator_info da9053_regulator_info[] = {
DA9052_DCDC(BUCK1, buck1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO), DA9052_DCDC(BUCK1, buck1, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBCOREGO),
DA9052_DCDC(BUCK2, buck2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO), DA9052_DCDC(BUCK2, buck2, 25, 500, 2075, 6, 6, DA9052_SUPPLY_VBPROGO),
DA9052_DCDC(BUCK3, buck3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO), DA9052_DCDC(BUCK3, buck3, 25, 950, 2525, 6, 6, DA9052_SUPPLY_VBMEMGO),
...@@ -361,10 +361,10 @@ static struct da9052_regulator_info da9053_regulator_info[] = { ...@@ -361,10 +361,10 @@ static struct da9052_regulator_info da9053_regulator_info[] = {
DA9052_LDO(LDO10, ldo10, 50, 1200, 3600, 6, 6, 0), DA9052_LDO(LDO10, ldo10, 50, 1200, 3600, 6, 6, 0),
}; };
static inline struct da9052_regulator_info *find_regulator_info(u8 chip_id, static inline const struct da9052_regulator_info *find_regulator_info(u8 chip_id,
int id) int id)
{ {
struct da9052_regulator_info *info; const struct da9052_regulator_info *info;
int i; int i;
switch (chip_id) { switch (chip_id) {
......
...@@ -73,7 +73,7 @@ struct da9055_regulator_info { ...@@ -73,7 +73,7 @@ struct da9055_regulator_info {
struct da9055_regulator { struct da9055_regulator {
struct da9055 *da9055; struct da9055 *da9055;
struct da9055_regulator_info *info; const struct da9055_regulator_info *info;
struct regulator_dev *rdev; struct regulator_dev *rdev;
enum gpio_select reg_rselect; enum gpio_select reg_rselect;
}; };
...@@ -81,7 +81,7 @@ struct da9055_regulator { ...@@ -81,7 +81,7 @@ struct da9055_regulator {
static unsigned int da9055_buck_get_mode(struct regulator_dev *rdev) static unsigned int da9055_buck_get_mode(struct regulator_dev *rdev)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
int ret, mode = 0; int ret, mode = 0;
ret = da9055_reg_read(regulator->da9055, info->mode.reg); ret = da9055_reg_read(regulator->da9055, info->mode.reg);
...@@ -107,7 +107,7 @@ static int da9055_buck_set_mode(struct regulator_dev *rdev, ...@@ -107,7 +107,7 @@ static int da9055_buck_set_mode(struct regulator_dev *rdev,
unsigned int mode) unsigned int mode)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
int val = 0; int val = 0;
switch (mode) { switch (mode) {
...@@ -129,7 +129,7 @@ static int da9055_buck_set_mode(struct regulator_dev *rdev, ...@@ -129,7 +129,7 @@ static int da9055_buck_set_mode(struct regulator_dev *rdev,
static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev) static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
int ret; int ret;
ret = da9055_reg_read(regulator->da9055, info->volt.reg_b); ret = da9055_reg_read(regulator->da9055, info->volt.reg_b);
...@@ -145,7 +145,7 @@ static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev) ...@@ -145,7 +145,7 @@ static unsigned int da9055_ldo_get_mode(struct regulator_dev *rdev)
static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode) static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
struct da9055_volt_reg volt = info->volt; struct da9055_volt_reg volt = info->volt;
int val = 0; int val = 0;
...@@ -167,7 +167,7 @@ static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode) ...@@ -167,7 +167,7 @@ static int da9055_ldo_set_mode(struct regulator_dev *rdev, unsigned int mode)
static int da9055_regulator_get_voltage_sel(struct regulator_dev *rdev) static int da9055_regulator_get_voltage_sel(struct regulator_dev *rdev)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
struct da9055_volt_reg volt = info->volt; struct da9055_volt_reg volt = info->volt;
int ret, sel; int ret, sel;
...@@ -199,7 +199,7 @@ static int da9055_regulator_set_voltage_sel(struct regulator_dev *rdev, ...@@ -199,7 +199,7 @@ static int da9055_regulator_set_voltage_sel(struct regulator_dev *rdev,
unsigned int selector) unsigned int selector)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
int ret; int ret;
/* /*
...@@ -242,7 +242,7 @@ static int da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev, ...@@ -242,7 +242,7 @@ static int da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev,
int uV) int uV)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
int ret; int ret;
/* Select register set B for suspend voltage ramping. */ /* Select register set B for suspend voltage ramping. */
...@@ -264,7 +264,7 @@ static int da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev, ...@@ -264,7 +264,7 @@ static int da9055_regulator_set_suspend_voltage(struct regulator_dev *rdev,
static int da9055_suspend_enable(struct regulator_dev *rdev) static int da9055_suspend_enable(struct regulator_dev *rdev)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
/* Select register set B for voltage ramping. */ /* Select register set B for voltage ramping. */
if (regulator->reg_rselect == NO_GPIO) if (regulator->reg_rselect == NO_GPIO)
...@@ -277,7 +277,7 @@ static int da9055_suspend_enable(struct regulator_dev *rdev) ...@@ -277,7 +277,7 @@ static int da9055_suspend_enable(struct regulator_dev *rdev)
static int da9055_suspend_disable(struct regulator_dev *rdev) static int da9055_suspend_disable(struct regulator_dev *rdev)
{ {
struct da9055_regulator *regulator = rdev_get_drvdata(rdev); struct da9055_regulator *regulator = rdev_get_drvdata(rdev);
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
/* Diselect register set B. */ /* Diselect register set B. */
if (regulator->reg_rselect == NO_GPIO) if (regulator->reg_rselect == NO_GPIO)
...@@ -396,7 +396,7 @@ static const struct regulator_ops da9055_ldo_ops = { ...@@ -396,7 +396,7 @@ static const struct regulator_ops da9055_ldo_ops = {
},\ },\
} }
static struct da9055_regulator_info da9055_regulator_info[] = { static const struct da9055_regulator_info da9055_regulator_info[] = {
DA9055_BUCK(BUCK1, 25, 725, 2075, 6, 9, 0xc, 2), DA9055_BUCK(BUCK1, 25, 725, 2075, 6, 9, 0xc, 2),
DA9055_BUCK(BUCK2, 25, 925, 2500, 6, 0, 3, 0), DA9055_BUCK(BUCK2, 25, 925, 2500, 6, 0, 3, 0),
DA9055_LDO(LDO1, 50, 900, 3300, 6, 2), DA9055_LDO(LDO1, 50, 900, 3300, 6, 2),
...@@ -417,7 +417,7 @@ static int da9055_gpio_init(struct device *dev, ...@@ -417,7 +417,7 @@ static int da9055_gpio_init(struct device *dev,
struct regulator_config *config, struct regulator_config *config,
struct da9055_pdata *pdata, int id) struct da9055_pdata *pdata, int id)
{ {
struct da9055_regulator_info *info = regulator->info; const struct da9055_regulator_info *info = regulator->info;
struct gpio_desc *ren; struct gpio_desc *ren;
struct gpio_desc *ena; struct gpio_desc *ena;
struct gpio_desc *rsel; struct gpio_desc *rsel;
...@@ -491,9 +491,9 @@ static irqreturn_t da9055_ldo5_6_oc_irq(int irq, void *data) ...@@ -491,9 +491,9 @@ static irqreturn_t da9055_ldo5_6_oc_irq(int irq, void *data)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static inline struct da9055_regulator_info *find_regulator_info(int id) static inline const struct da9055_regulator_info *find_regulator_info(int id)
{ {
struct da9055_regulator_info *info; const struct da9055_regulator_info *info;
int i; int i;
for (i = 0; i < ARRAY_SIZE(da9055_regulator_info); i++) { for (i = 0; i < ARRAY_SIZE(da9055_regulator_info); i++) {
......
...@@ -133,7 +133,7 @@ struct da9063_regulator_info { ...@@ -133,7 +133,7 @@ struct da9063_regulator_info {
.suspend_vsel_reg = DA9063_REG_V##regl_name##_B, \ .suspend_vsel_reg = DA9063_REG_V##regl_name##_B, \
.mode = BFIELD(DA9063_REG_##regl_name##_CFG, DA9063_BUCK_MODE_MASK) .mode = BFIELD(DA9063_REG_##regl_name##_CFG, DA9063_BUCK_MODE_MASK)
/* Defines asignment of regulators info table to chip model */ /* Defines assignment of regulators info table to chip model */
struct da9063_dev_model { struct da9063_dev_model {
const struct da9063_regulator_info *regulator_info; const struct da9063_regulator_info *regulator_info;
unsigned int n_regulators; unsigned int n_regulators;
...@@ -715,7 +715,7 @@ static const struct da9063_regulator_info da9063_regulator_info[] = { ...@@ -715,7 +715,7 @@ static const struct da9063_regulator_info da9063_regulator_info[] = {
}; };
/* Link chip model with regulators info table */ /* Link chip model with regulators info table */
static struct da9063_dev_model regulators_models[] = { static const struct da9063_dev_model regulators_models[] = {
{ {
.regulator_info = da9063_regulator_info, .regulator_info = da9063_regulator_info,
.n_regulators = ARRAY_SIZE(da9063_regulator_info), .n_regulators = ARRAY_SIZE(da9063_regulator_info),
......
...@@ -53,7 +53,7 @@ struct da9121_range { ...@@ -53,7 +53,7 @@ struct da9121_range {
int reg_max; int reg_max;
}; };
static struct da9121_range da9121_10A_2phase_current = { static const struct da9121_range da9121_10A_2phase_current = {
.val_min = 7000000, .val_min = 7000000,
.val_max = 20000000, .val_max = 20000000,
.val_stp = 1000000, .val_stp = 1000000,
...@@ -61,7 +61,7 @@ static struct da9121_range da9121_10A_2phase_current = { ...@@ -61,7 +61,7 @@ static struct da9121_range da9121_10A_2phase_current = {
.reg_max = 14, .reg_max = 14,
}; };
static struct da9121_range da9121_6A_2phase_current = { static const struct da9121_range da9121_6A_2phase_current = {
.val_min = 7000000, .val_min = 7000000,
.val_max = 12000000, .val_max = 12000000,
.val_stp = 1000000, .val_stp = 1000000,
...@@ -69,7 +69,7 @@ static struct da9121_range da9121_6A_2phase_current = { ...@@ -69,7 +69,7 @@ static struct da9121_range da9121_6A_2phase_current = {
.reg_max = 6, .reg_max = 6,
}; };
static struct da9121_range da9121_5A_1phase_current = { static const struct da9121_range da9121_5A_1phase_current = {
.val_min = 3500000, .val_min = 3500000,
.val_max = 10000000, .val_max = 10000000,
.val_stp = 500000, .val_stp = 500000,
...@@ -77,7 +77,7 @@ static struct da9121_range da9121_5A_1phase_current = { ...@@ -77,7 +77,7 @@ static struct da9121_range da9121_5A_1phase_current = {
.reg_max = 14, .reg_max = 14,
}; };
static struct da9121_range da9121_3A_1phase_current = { static const struct da9121_range da9121_3A_1phase_current = {
.val_min = 3500000, .val_min = 3500000,
.val_max = 6000000, .val_max = 6000000,
.val_stp = 500000, .val_stp = 500000,
...@@ -85,7 +85,7 @@ static struct da9121_range da9121_3A_1phase_current = { ...@@ -85,7 +85,7 @@ static struct da9121_range da9121_3A_1phase_current = {
.reg_max = 6, .reg_max = 6,
}; };
static struct da9121_range da914x_40A_4phase_current = { static const struct da9121_range da914x_40A_4phase_current = {
.val_min = 26000000, .val_min = 26000000,
.val_max = 78000000, .val_max = 78000000,
.val_stp = 4000000, .val_stp = 4000000,
...@@ -93,7 +93,7 @@ static struct da9121_range da914x_40A_4phase_current = { ...@@ -93,7 +93,7 @@ static struct da9121_range da914x_40A_4phase_current = {
.reg_max = 14, .reg_max = 14,
}; };
static struct da9121_range da914x_20A_2phase_current = { static const struct da9121_range da914x_20A_2phase_current = {
.val_min = 13000000, .val_min = 13000000,
.val_max = 39000000, .val_max = 39000000,
.val_stp = 2000000, .val_stp = 2000000,
...@@ -104,7 +104,7 @@ static struct da9121_range da914x_20A_2phase_current = { ...@@ -104,7 +104,7 @@ static struct da9121_range da914x_20A_2phase_current = {
struct da9121_variant_info { struct da9121_variant_info {
int num_bucks; int num_bucks;
int num_phases; int num_phases;
struct da9121_range *current_range; const struct da9121_range *current_range;
}; };
static const struct da9121_variant_info variant_parameters[] = { static const struct da9121_variant_info variant_parameters[] = {
...@@ -188,7 +188,7 @@ static int da9121_get_current_limit(struct regulator_dev *rdev) ...@@ -188,7 +188,7 @@ static int da9121_get_current_limit(struct regulator_dev *rdev)
{ {
struct da9121 *chip = rdev_get_drvdata(rdev); struct da9121 *chip = rdev_get_drvdata(rdev);
int id = rdev_get_id(rdev); int id = rdev_get_id(rdev);
struct da9121_range *range = const struct da9121_range *range =
variant_parameters[chip->variant_id].current_range; variant_parameters[chip->variant_id].current_range;
unsigned int val = 0; unsigned int val = 0;
int ret = 0; int ret = 0;
...@@ -219,7 +219,7 @@ static int da9121_ceiling_selector(struct regulator_dev *rdev, ...@@ -219,7 +219,7 @@ static int da9121_ceiling_selector(struct regulator_dev *rdev,
unsigned int *selector) unsigned int *selector)
{ {
struct da9121 *chip = rdev_get_drvdata(rdev); struct da9121 *chip = rdev_get_drvdata(rdev);
struct da9121_range *range = const struct da9121_range *range =
variant_parameters[chip->variant_id].current_range; variant_parameters[chip->variant_id].current_range;
unsigned int level; unsigned int level;
unsigned int i = 0; unsigned int i = 0;
...@@ -259,7 +259,7 @@ static int da9121_set_current_limit(struct regulator_dev *rdev, ...@@ -259,7 +259,7 @@ static int da9121_set_current_limit(struct regulator_dev *rdev,
{ {
struct da9121 *chip = rdev_get_drvdata(rdev); struct da9121 *chip = rdev_get_drvdata(rdev);
int id = rdev_get_id(rdev); int id = rdev_get_id(rdev);
struct da9121_range *range = const struct da9121_range *range =
variant_parameters[chip->variant_id].current_range; variant_parameters[chip->variant_id].current_range;
unsigned int sel = 0; unsigned int sel = 0;
int ret = 0; int ret = 0;
......
...@@ -264,7 +264,7 @@ static const struct regulator_ops da9211_buck_ops = { ...@@ -264,7 +264,7 @@ static const struct regulator_ops da9211_buck_ops = {
.of_map_mode = da9211_map_buck_mode,\ .of_map_mode = da9211_map_buck_mode,\
} }
static struct regulator_desc da9211_regulators[] = { static const struct regulator_desc da9211_regulators[] = {
DA9211_BUCK(BUCKA), DA9211_BUCK(BUCKA),
DA9211_BUCK(BUCKB), DA9211_BUCK(BUCKB),
}; };
......
...@@ -163,7 +163,7 @@ EXPORT_SYMBOL_GPL(devm_regulator_get_optional); ...@@ -163,7 +163,7 @@ EXPORT_SYMBOL_GPL(devm_regulator_get_optional);
* In cases where the supply is not strictly required, callers can check for * In cases where the supply is not strictly required, callers can check for
* -ENODEV error and handle it accordingly. * -ENODEV error and handle it accordingly.
* *
* Returns: voltage in microvolts on success, or an error code on failure. * Returns: voltage in microvolts on success, or an negative error number on failure.
*/ */
int devm_regulator_get_enable_read_voltage(struct device *dev, const char *id) int devm_regulator_get_enable_read_voltage(struct device *dev, const char *id)
{ {
...@@ -174,8 +174,8 @@ int devm_regulator_get_enable_read_voltage(struct device *dev, const char *id) ...@@ -174,8 +174,8 @@ int devm_regulator_get_enable_read_voltage(struct device *dev, const char *id)
* Since we need a real voltage, we use devm_regulator_get_optional() * Since we need a real voltage, we use devm_regulator_get_optional()
* rather than getting a dummy regulator with devm_regulator_get() and * rather than getting a dummy regulator with devm_regulator_get() and
* then letting regulator_get_voltage() fail with -EINVAL. This way, the * then letting regulator_get_voltage() fail with -EINVAL. This way, the
* caller can handle the -ENODEV error code if needed instead of the * caller can handle the -ENODEV negative error number if needed instead
* ambiguous -EINVAL. * of the ambiguous -EINVAL.
*/ */
r = devm_regulator_get_optional(dev, id); r = devm_regulator_get_optional(dev, id);
if (IS_ERR(r)) if (IS_ERR(r))
...@@ -276,7 +276,7 @@ static int _devm_regulator_bulk_get(struct device *dev, int num_consumers, ...@@ -276,7 +276,7 @@ static int _devm_regulator_bulk_get(struct device *dev, int num_consumers,
* @num_consumers: number of consumers to register * @num_consumers: number of consumers to register
* @consumers: configuration of consumers; clients are stored here. * @consumers: configuration of consumers; clients are stored here.
* *
* @return 0 on success, an errno on failure. * @return 0 on success, a negative error number on failure.
* *
* This helper function allows drivers to get several regulator * This helper function allows drivers to get several regulator
* consumers in one operation with management, the regulators will * consumers in one operation with management, the regulators will
...@@ -299,7 +299,7 @@ EXPORT_SYMBOL_GPL(devm_regulator_bulk_get); ...@@ -299,7 +299,7 @@ EXPORT_SYMBOL_GPL(devm_regulator_bulk_get);
* @num_consumers: number of consumers to register * @num_consumers: number of consumers to register
* @consumers: configuration of consumers; clients are stored here. * @consumers: configuration of consumers; clients are stored here.
* *
* @return 0 on success, an errno on failure. * @return 0 on success, a negative error number on failure.
* *
* This helper function allows drivers to exclusively get several * This helper function allows drivers to exclusively get several
* regulator consumers in one operation with management, the regulators * regulator consumers in one operation with management, the regulators
...@@ -326,7 +326,7 @@ EXPORT_SYMBOL_GPL(devm_regulator_bulk_get_exclusive); ...@@ -326,7 +326,7 @@ EXPORT_SYMBOL_GPL(devm_regulator_bulk_get_exclusive);
* This is a convenience function to allow bulk regulator configuration * This is a convenience function to allow bulk regulator configuration
* to be stored "static const" in files. * to be stored "static const" in files.
* *
* Return: 0 on success, an errno on failure. * Return: 0 on success, a negative error number on failure.
*/ */
int devm_regulator_bulk_get_const(struct device *dev, int num_consumers, int devm_regulator_bulk_get_const(struct device *dev, int num_consumers,
const struct regulator_bulk_data *in_consumers, const struct regulator_bulk_data *in_consumers,
...@@ -393,7 +393,7 @@ static void devm_regulator_bulk_disable(void *res) ...@@ -393,7 +393,7 @@ static void devm_regulator_bulk_disable(void *res)
* @num_consumers: number of consumers to register * @num_consumers: number of consumers to register
* @id: list of supply names or regulator IDs * @id: list of supply names or regulator IDs
* *
* @return 0 on success, an errno on failure. * @return 0 on success, a negative error number on failure.
* *
* This helper function allows drivers to get several regulator * This helper function allows drivers to get several regulator
* consumers in one operation with management, the regulators will * consumers in one operation with management, the regulators will
...@@ -574,7 +574,7 @@ static void devm_regulator_unregister_supply_alias(struct device *dev, ...@@ -574,7 +574,7 @@ static void devm_regulator_unregister_supply_alias(struct device *dev,
* lookup the supply * lookup the supply
* @num_id: number of aliases to register * @num_id: number of aliases to register
* *
* @return 0 on success, an errno on failure. * @return 0 on success, a negative error number on failure.
* *
* This helper function allows drivers to register several supply * This helper function allows drivers to register several supply
* aliases in one operation, the aliases will be automatically * aliases in one operation, the aliases will be automatically
...@@ -726,7 +726,7 @@ static void regulator_irq_helper_drop(void *res) ...@@ -726,7 +726,7 @@ static void regulator_irq_helper_drop(void *res)
* IRQ. * IRQ.
* @rdev_amount: Amount of regulators associated with this IRQ. * @rdev_amount: Amount of regulators associated with this IRQ.
* *
* Return: handle to irq_helper or an ERR_PTR() encoded error code. * Return: handle to irq_helper or an ERR_PTR() encoded negative error number.
*/ */
void *devm_regulator_irq_helper(struct device *dev, void *devm_regulator_irq_helper(struct device *dev,
const struct regulator_irq_desc *d, int irq, const struct regulator_irq_desc *d, int irq,
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
/* VSEL bit definitions */ /* VSEL bit definitions */
#define VSEL_BUCK_EN BIT(7) #define VSEL_BUCK_EN BIT(7)
#define VSEL_MODE BIT(6) #define VSEL_MODE BIT(6)
/* Chip ID and Verison */ /* Chip ID and Version */
#define DIE_ID 0x0F /* ID1 */ #define DIE_ID 0x0F /* ID1 */
#define DIE_REV 0x0F /* ID2 */ #define DIE_REV 0x0F /* ID2 */
/* Control bit definitions */ /* Control bit definitions */
......
...@@ -26,6 +26,8 @@ static void regulator_fixed_release(struct device *dev) ...@@ -26,6 +26,8 @@ static void regulator_fixed_release(struct device *dev)
* @supplies: consumers for this regulator * @supplies: consumers for this regulator
* @num_supplies: number of consumers * @num_supplies: number of consumers
* @uv: voltage in microvolts * @uv: voltage in microvolts
*
* Return: Pointer to registered platform device, or %NULL if memory allocation fails.
*/ */
struct platform_device *regulator_register_always_on(int id, const char *name, struct platform_device *regulator_register_always_on(int id, const char *name,
struct regulator_consumer_supply *supplies, int num_supplies, int uv) struct regulator_consumer_supply *supplies, int num_supplies, int uv)
......
...@@ -129,7 +129,7 @@ static irqreturn_t reg_fixed_under_voltage_irq_handler(int irq, void *data) ...@@ -129,7 +129,7 @@ static irqreturn_t reg_fixed_under_voltage_irq_handler(int irq, void *data)
* If it's an optional IRQ and not found, it returns 0. * If it's an optional IRQ and not found, it returns 0.
* Otherwise, it attempts to request the threaded IRQ. * Otherwise, it attempts to request the threaded IRQ.
* *
* Return: 0 on success, or error code on failure. * Return: 0 on success, or a negative error number on failure.
*/ */
static int reg_fixed_get_irqs(struct device *dev, static int reg_fixed_get_irqs(struct device *dev,
struct fixed_voltage_data *priv) struct fixed_voltage_data *priv)
...@@ -158,8 +158,10 @@ static int reg_fixed_get_irqs(struct device *dev, ...@@ -158,8 +158,10 @@ static int reg_fixed_get_irqs(struct device *dev,
* @desc: regulator description * @desc: regulator description
* *
* Populates fixed_voltage_config structure by extracting data from device * Populates fixed_voltage_config structure by extracting data from device
* tree node, returns a pointer to the populated structure of NULL if memory * tree node.
* alloc fails. *
* Return: Pointer to a populated &struct fixed_voltage_config or %NULL if
* memory allocation fails.
*/ */
static struct fixed_voltage_config * static struct fixed_voltage_config *
of_get_fixed_voltage_config(struct device *dev, of_get_fixed_voltage_config(struct device *dev,
......
...@@ -125,7 +125,7 @@ static int regulator_range_selector_to_index(struct regulator_dev *rdev, ...@@ -125,7 +125,7 @@ static int regulator_range_selector_to_index(struct regulator_dev *rdev,
* *
* Regulators that use regmap for their register I/O and use pickable * Regulators that use regmap for their register I/O and use pickable
* ranges can set the vsel_reg, vsel_mask, vsel_range_reg and vsel_range_mask * ranges can set the vsel_reg, vsel_mask, vsel_range_reg and vsel_range_mask
* fields in their descriptor and then use this as their get_voltage_vsel * fields in their descriptor and then use this as their get_voltage_sel
* operation, saving some code. * operation, saving some code.
*/ */
int regulator_get_voltage_sel_pickable_regmap(struct regulator_dev *rdev) int regulator_get_voltage_sel_pickable_regmap(struct regulator_dev *rdev)
...@@ -195,7 +195,7 @@ static int write_separate_vsel_and_range(struct regulator_dev *rdev, ...@@ -195,7 +195,7 @@ static int write_separate_vsel_and_range(struct regulator_dev *rdev,
* *
* Regulators that use regmap for their register I/O and use pickable * Regulators that use regmap for their register I/O and use pickable
* ranges can set the vsel_reg, vsel_mask, vsel_range_reg and vsel_range_mask * ranges can set the vsel_reg, vsel_mask, vsel_range_reg and vsel_range_mask
* fields in their descriptor and then use this as their set_voltage_vsel * fields in their descriptor and then use this as their set_voltage_sel
* operation, saving some code. * operation, saving some code.
*/ */
int regulator_set_voltage_sel_pickable_regmap(struct regulator_dev *rdev, int regulator_set_voltage_sel_pickable_regmap(struct regulator_dev *rdev,
...@@ -250,7 +250,7 @@ EXPORT_SYMBOL_GPL(regulator_set_voltage_sel_pickable_regmap); ...@@ -250,7 +250,7 @@ EXPORT_SYMBOL_GPL(regulator_set_voltage_sel_pickable_regmap);
* *
* Regulators that use regmap for their register I/O can set the * Regulators that use regmap for their register I/O can set the
* vsel_reg and vsel_mask fields in their descriptor and then use this * vsel_reg and vsel_mask fields in their descriptor and then use this
* as their get_voltage_vsel operation, saving some code. * as their get_voltage_sel operation, saving some code.
*/ */
int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev) int regulator_get_voltage_sel_regmap(struct regulator_dev *rdev)
{ {
...@@ -276,7 +276,7 @@ EXPORT_SYMBOL_GPL(regulator_get_voltage_sel_regmap); ...@@ -276,7 +276,7 @@ EXPORT_SYMBOL_GPL(regulator_get_voltage_sel_regmap);
* *
* Regulators that use regmap for their register I/O can set the * Regulators that use regmap for their register I/O can set the
* vsel_reg and vsel_mask fields in their descriptor and then use this * vsel_reg and vsel_mask fields in their descriptor and then use this
* as their set_voltage_vsel operation, saving some code. * as their set_voltage_sel operation, saving some code.
*/ */
int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel) int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel)
{ {
......
...@@ -303,7 +303,7 @@ static const struct regulator_ops hi6421_buck345_ops; ...@@ -303,7 +303,7 @@ static const struct regulator_ops hi6421_buck345_ops;
} }
/* HI6421 regulator information */ /* HI6421 regulator information */
static struct hi6421_regulator_info static const struct hi6421_regulator_info
hi6421_regulator_info[HI6421_NUM_REGULATORS] = { hi6421_regulator_info[HI6421_NUM_REGULATORS] = {
HI6421_LDO(LDO0, hi6421_vout0, ldo_0_voltages, 0x20, 0x07, 0x20, 0x10, HI6421_LDO(LDO0, hi6421_vout0, ldo_0_voltages, 0x20, 0x07, 0x20, 0x10,
10000, 0x20, 8000), 10000, 0x20, 8000),
...@@ -384,7 +384,7 @@ static int hi6421_regulator_enable(struct regulator_dev *rdev) ...@@ -384,7 +384,7 @@ static int hi6421_regulator_enable(struct regulator_dev *rdev)
static unsigned int hi6421_regulator_ldo_get_mode(struct regulator_dev *rdev) static unsigned int hi6421_regulator_ldo_get_mode(struct regulator_dev *rdev)
{ {
struct hi6421_regulator_info *info; const struct hi6421_regulator_info *info;
unsigned int reg_val; unsigned int reg_val;
info = container_of(rdev->desc, struct hi6421_regulator_info, desc); info = container_of(rdev->desc, struct hi6421_regulator_info, desc);
...@@ -397,7 +397,7 @@ static unsigned int hi6421_regulator_ldo_get_mode(struct regulator_dev *rdev) ...@@ -397,7 +397,7 @@ static unsigned int hi6421_regulator_ldo_get_mode(struct regulator_dev *rdev)
static unsigned int hi6421_regulator_buck_get_mode(struct regulator_dev *rdev) static unsigned int hi6421_regulator_buck_get_mode(struct regulator_dev *rdev)
{ {
struct hi6421_regulator_info *info; const struct hi6421_regulator_info *info;
unsigned int reg_val; unsigned int reg_val;
info = container_of(rdev->desc, struct hi6421_regulator_info, desc); info = container_of(rdev->desc, struct hi6421_regulator_info, desc);
...@@ -411,7 +411,7 @@ static unsigned int hi6421_regulator_buck_get_mode(struct regulator_dev *rdev) ...@@ -411,7 +411,7 @@ static unsigned int hi6421_regulator_buck_get_mode(struct regulator_dev *rdev)
static int hi6421_regulator_ldo_set_mode(struct regulator_dev *rdev, static int hi6421_regulator_ldo_set_mode(struct regulator_dev *rdev,
unsigned int mode) unsigned int mode)
{ {
struct hi6421_regulator_info *info; const struct hi6421_regulator_info *info;
unsigned int new_mode; unsigned int new_mode;
info = container_of(rdev->desc, struct hi6421_regulator_info, desc); info = container_of(rdev->desc, struct hi6421_regulator_info, desc);
...@@ -436,7 +436,7 @@ static int hi6421_regulator_ldo_set_mode(struct regulator_dev *rdev, ...@@ -436,7 +436,7 @@ static int hi6421_regulator_ldo_set_mode(struct regulator_dev *rdev,
static int hi6421_regulator_buck_set_mode(struct regulator_dev *rdev, static int hi6421_regulator_buck_set_mode(struct regulator_dev *rdev,
unsigned int mode) unsigned int mode)
{ {
struct hi6421_regulator_info *info; const struct hi6421_regulator_info *info;
unsigned int new_mode; unsigned int new_mode;
info = container_of(rdev->desc, struct hi6421_regulator_info, desc); info = container_of(rdev->desc, struct hi6421_regulator_info, desc);
...@@ -462,7 +462,7 @@ static unsigned int ...@@ -462,7 +462,7 @@ static unsigned int
hi6421_regulator_ldo_get_optimum_mode(struct regulator_dev *rdev, hi6421_regulator_ldo_get_optimum_mode(struct regulator_dev *rdev,
int input_uV, int output_uV, int load_uA) int input_uV, int output_uV, int load_uA)
{ {
struct hi6421_regulator_info *info; const struct hi6421_regulator_info *info;
info = container_of(rdev->desc, struct hi6421_regulator_info, desc); info = container_of(rdev->desc, struct hi6421_regulator_info, desc);
...@@ -539,7 +539,7 @@ static int hi6421_regulator_probe(struct platform_device *pdev) ...@@ -539,7 +539,7 @@ static int hi6421_regulator_probe(struct platform_device *pdev)
{ {
struct hi6421_pmic *pmic = dev_get_drvdata(pdev->dev.parent); struct hi6421_pmic *pmic = dev_get_drvdata(pdev->dev.parent);
struct hi6421_regulator_pdata *pdata; struct hi6421_regulator_pdata *pdata;
struct hi6421_regulator_info *info; const struct hi6421_regulator_info *info;
struct regulator_config config = { }; struct regulator_config config = { };
struct regulator_dev *rdev; struct regulator_dev *rdev;
int i; int i;
......
...@@ -21,12 +21,10 @@ ...@@ -21,12 +21,10 @@
* struct hi6421v530_regulator_info - hi6421v530 regulator information * struct hi6421v530_regulator_info - hi6421v530 regulator information
* @desc: regulator description * @desc: regulator description
* @mode_mask: ECO mode bitmask of LDOs; for BUCKs, this masks sleep * @mode_mask: ECO mode bitmask of LDOs; for BUCKs, this masks sleep
* @eco_microamp: eco mode load upper limit (in uA), valid for LDOs only
*/ */
struct hi6421v530_regulator_info { struct hi6421v530_regulator_info {
struct regulator_desc rdesc; struct regulator_desc rdesc;
u8 mode_mask; u8 mode_mask;
u32 eco_microamp;
}; };
/* HI6421v530 regulators */ /* HI6421v530 regulators */
...@@ -68,10 +66,9 @@ static const struct regulator_ops hi6421v530_ldo_ops; ...@@ -68,10 +66,9 @@ static const struct regulator_ops hi6421v530_ldo_ops;
* emask - enable mask * emask - enable mask
* odelay - off/on delay time in uS * odelay - off/on delay time in uS
* ecomask - eco mode mask * ecomask - eco mode mask
* ecoamp - eco mode load uppler limit in uA
*/ */
#define HI6421V530_LDO(_ID, v_table, vreg, vmask, ereg, emask, \ #define HI6421V530_LDO(_ID, v_table, vreg, vmask, ereg, emask, \
odelay, ecomask, ecoamp) { \ odelay, ecomask) { \
.rdesc = { \ .rdesc = { \
.name = #_ID, \ .name = #_ID, \
.of_match = of_match_ptr(#_ID), \ .of_match = of_match_ptr(#_ID), \
...@@ -90,31 +87,30 @@ static const struct regulator_ops hi6421v530_ldo_ops; ...@@ -90,31 +87,30 @@ static const struct regulator_ops hi6421v530_ldo_ops;
.off_on_delay = odelay, \ .off_on_delay = odelay, \
}, \ }, \
.mode_mask = ecomask, \ .mode_mask = ecomask, \
.eco_microamp = ecoamp, \
} }
/* HI6421V530 regulator information */ /* HI6421V530 regulator information */
static struct hi6421v530_regulator_info hi6421v530_regulator_info[] = { static const struct hi6421v530_regulator_info hi6421v530_regulator_info[] = {
HI6421V530_LDO(LDO3, ldo_3_voltages, 0x061, 0xf, 0x060, 0x2, HI6421V530_LDO(LDO3, ldo_3_voltages, 0x061, 0xf, 0x060, 0x2,
20000, 0x6, 8000), 20000, 0x6),
HI6421V530_LDO(LDO9, ldo_9_11_voltages, 0x06b, 0x7, 0x06a, 0x2, HI6421V530_LDO(LDO9, ldo_9_11_voltages, 0x06b, 0x7, 0x06a, 0x2,
40000, 0x6, 8000), 40000, 0x6),
HI6421V530_LDO(LDO11, ldo_9_11_voltages, 0x06f, 0x7, 0x06e, 0x2, HI6421V530_LDO(LDO11, ldo_9_11_voltages, 0x06f, 0x7, 0x06e, 0x2,
40000, 0x6, 8000), 40000, 0x6),
HI6421V530_LDO(LDO15, ldo_15_16_voltages, 0x077, 0x7, 0x076, 0x2, HI6421V530_LDO(LDO15, ldo_15_16_voltages, 0x077, 0x7, 0x076, 0x2,
40000, 0x6, 8000), 40000, 0x6),
HI6421V530_LDO(LDO16, ldo_15_16_voltages, 0x079, 0x7, 0x078, 0x2, HI6421V530_LDO(LDO16, ldo_15_16_voltages, 0x079, 0x7, 0x078, 0x2,
40000, 0x6, 8000), 40000, 0x6),
}; };
static unsigned int hi6421v530_regulator_ldo_get_mode( static unsigned int hi6421v530_regulator_ldo_get_mode(
struct regulator_dev *rdev) struct regulator_dev *rdev)
{ {
struct hi6421v530_regulator_info *info; const struct hi6421v530_regulator_info *info;
unsigned int reg_val; unsigned int reg_val;
info = rdev_get_drvdata(rdev); info = container_of(rdev->desc, struct hi6421v530_regulator_info, rdesc);
regmap_read(rdev->regmap, rdev->desc->enable_reg, &reg_val); regmap_read(rdev->regmap, rdev->desc->enable_reg, &reg_val);
if (reg_val & (info->mode_mask)) if (reg_val & (info->mode_mask))
...@@ -126,10 +122,10 @@ static unsigned int hi6421v530_regulator_ldo_get_mode( ...@@ -126,10 +122,10 @@ static unsigned int hi6421v530_regulator_ldo_get_mode(
static int hi6421v530_regulator_ldo_set_mode(struct regulator_dev *rdev, static int hi6421v530_regulator_ldo_set_mode(struct regulator_dev *rdev,
unsigned int mode) unsigned int mode)
{ {
struct hi6421v530_regulator_info *info; const struct hi6421v530_regulator_info *info;
unsigned int new_mode; unsigned int new_mode;
info = rdev_get_drvdata(rdev); info = container_of(rdev->desc, struct hi6421v530_regulator_info, rdesc);
switch (mode) { switch (mode) {
case REGULATOR_MODE_NORMAL: case REGULATOR_MODE_NORMAL:
new_mode = 0; new_mode = 0;
...@@ -176,7 +172,6 @@ static int hi6421v530_regulator_probe(struct platform_device *pdev) ...@@ -176,7 +172,6 @@ static int hi6421v530_regulator_probe(struct platform_device *pdev)
for (i = 0; i < ARRAY_SIZE(hi6421v530_regulator_info); i++) { for (i = 0; i < ARRAY_SIZE(hi6421v530_regulator_info); i++) {
config.dev = pdev->dev.parent; config.dev = pdev->dev.parent;
config.regmap = pmic->regmap; config.regmap = pmic->regmap;
config.driver_data = &hi6421v530_regulator_info[i];
rdev = devm_regulator_register(&pdev->dev, rdev = devm_regulator_register(&pdev->dev,
&hi6421v530_regulator_info[i].rdesc, &hi6421v530_regulator_info[i].rdesc,
......
...@@ -118,7 +118,7 @@ static int hi6421_spmi_regulator_enable(struct regulator_dev *rdev) ...@@ -118,7 +118,7 @@ static int hi6421_spmi_regulator_enable(struct regulator_dev *rdev)
static unsigned int hi6421_spmi_regulator_get_mode(struct regulator_dev *rdev) static unsigned int hi6421_spmi_regulator_get_mode(struct regulator_dev *rdev)
{ {
struct hi6421_spmi_reg_info *sreg; const struct hi6421_spmi_reg_info *sreg;
unsigned int reg_val; unsigned int reg_val;
sreg = container_of(rdev->desc, struct hi6421_spmi_reg_info, desc); sreg = container_of(rdev->desc, struct hi6421_spmi_reg_info, desc);
...@@ -133,7 +133,7 @@ static unsigned int hi6421_spmi_regulator_get_mode(struct regulator_dev *rdev) ...@@ -133,7 +133,7 @@ static unsigned int hi6421_spmi_regulator_get_mode(struct regulator_dev *rdev)
static int hi6421_spmi_regulator_set_mode(struct regulator_dev *rdev, static int hi6421_spmi_regulator_set_mode(struct regulator_dev *rdev,
unsigned int mode) unsigned int mode)
{ {
struct hi6421_spmi_reg_info *sreg; const struct hi6421_spmi_reg_info *sreg;
unsigned int val; unsigned int val;
sreg = container_of(rdev->desc, struct hi6421_spmi_reg_info, desc); sreg = container_of(rdev->desc, struct hi6421_spmi_reg_info, desc);
...@@ -160,7 +160,7 @@ hi6421_spmi_regulator_get_optimum_mode(struct regulator_dev *rdev, ...@@ -160,7 +160,7 @@ hi6421_spmi_regulator_get_optimum_mode(struct regulator_dev *rdev,
int input_uV, int output_uV, int input_uV, int output_uV,
int load_uA) int load_uA)
{ {
struct hi6421_spmi_reg_info *sreg; const struct hi6421_spmi_reg_info *sreg;
sreg = container_of(rdev->desc, struct hi6421_spmi_reg_info, desc); sreg = container_of(rdev->desc, struct hi6421_spmi_reg_info, desc);
...@@ -195,7 +195,7 @@ enum hi6421_spmi_regulator_id { ...@@ -195,7 +195,7 @@ enum hi6421_spmi_regulator_id {
hi6421v600_ldo34, hi6421v600_ldo34,
}; };
static struct hi6421_spmi_reg_info regulator_info[] = { static const struct hi6421_spmi_reg_info regulator_info[] = {
HI6421V600_LDO(ldo3, range_1v5_to_2v0, HI6421V600_LDO(ldo3, range_1v5_to_2v0,
0x16, 0x01, 0x51, 0x16, 0x01, 0x51,
20000, 120, 20000, 120,
...@@ -235,7 +235,7 @@ static int hi6421_spmi_regulator_probe(struct platform_device *pdev) ...@@ -235,7 +235,7 @@ static int hi6421_spmi_regulator_probe(struct platform_device *pdev)
struct device *pmic_dev = pdev->dev.parent; struct device *pmic_dev = pdev->dev.parent;
struct regulator_config config = { }; struct regulator_config config = { };
struct hi6421_spmi_reg_priv *priv; struct hi6421_spmi_reg_priv *priv;
struct hi6421_spmi_reg_info *info; const struct hi6421_spmi_reg_info *info;
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct regmap *regmap; struct regmap *regmap;
struct regulator_dev *rdev; struct regulator_dev *rdev;
......
...@@ -66,7 +66,8 @@ static inline struct regulator_dev *dev_to_rdev(struct device *dev) ...@@ -66,7 +66,8 @@ static inline struct regulator_dev *dev_to_rdev(struct device *dev)
} }
#ifdef CONFIG_OF #ifdef CONFIG_OF
struct regulator_dev *of_find_regulator_by_node(struct device_node *np); struct regulator_dev *of_regulator_dev_lookup(struct device *dev,
const char *supply);
struct regulator_init_data *regulator_of_get_init_data(struct device *dev, struct regulator_init_data *regulator_of_get_init_data(struct device *dev,
const struct regulator_desc *desc, const struct regulator_desc *desc,
struct regulator_config *config, struct regulator_config *config,
...@@ -80,10 +81,10 @@ int of_get_n_coupled(struct regulator_dev *rdev); ...@@ -80,10 +81,10 @@ int of_get_n_coupled(struct regulator_dev *rdev);
bool of_check_coupling_data(struct regulator_dev *rdev); bool of_check_coupling_data(struct regulator_dev *rdev);
#else #else
static inline struct regulator_dev * static inline struct regulator_dev *of_regulator_dev_lookup(struct device *dev,
of_find_regulator_by_node(struct device_node *np) const char *supply)
{ {
return NULL; return ERR_PTR(-ENODEV);
} }
static inline struct regulator_init_data * static inline struct regulator_init_data *
...@@ -120,6 +121,10 @@ enum regulator_get_type { ...@@ -120,6 +121,10 @@ enum regulator_get_type {
MAX_GET_TYPE MAX_GET_TYPE
}; };
int _regulator_get_common_check(struct device *dev, const char *id,
enum regulator_get_type get_type);
struct regulator *_regulator_get_common(struct regulator_dev *rdev, struct device *dev,
const char *id, enum regulator_get_type get_type);
struct regulator *_regulator_get(struct device *dev, const char *id, struct regulator *_regulator_get(struct device *dev, const char *id,
enum regulator_get_type get_type); enum regulator_get_type get_type);
int _regulator_bulk_get(struct device *dev, int num_consumers, int _regulator_bulk_get(struct device *dev, int num_consumers,
......
...@@ -333,7 +333,7 @@ static void init_rdev_errors(struct regulator_irq *h) ...@@ -333,7 +333,7 @@ static void init_rdev_errors(struct regulator_irq *h)
* IRQ. * IRQ.
* @rdev_amount: Amount of regulators associated with this IRQ. * @rdev_amount: Amount of regulators associated with this IRQ.
* *
* Return: handle to irq_helper or an ERR_PTR() encoded error code. * Return: handle to irq_helper or an ERR_PTR() encoded negative error number.
*/ */
void *regulator_irq_helper(struct device *dev, void *regulator_irq_helper(struct device *dev,
const struct regulator_irq_desc *d, int irq, const struct regulator_irq_desc *d, int irq,
...@@ -404,16 +404,21 @@ EXPORT_SYMBOL_GPL(regulator_irq_helper_cancel); ...@@ -404,16 +404,21 @@ EXPORT_SYMBOL_GPL(regulator_irq_helper_cancel);
/** /**
* regulator_irq_map_event_simple - regulator IRQ notification for trivial IRQs * regulator_irq_map_event_simple - regulator IRQ notification for trivial IRQs
* *
* @irq: Number of IRQ that occurred * @irq: Number of IRQ that occurred.
* @rid: Information about the event IRQ indicates * @rid: Information about the event IRQ indicates.
* @dev_mask: mask indicating the regulator originating the IRQ * The function fills in the &regulator_err_state->notifs
* and &regulator_err_state->errors fields of
* &regulator_irq_data->states as output.
* @dev_mask: mask indicating the regulator originating the IRQ.
* *
* Regulators whose IRQ has single, well defined purpose (always indicate * Regulators whose IRQ has single, well defined purpose (always indicate
* exactly one event, and are relevant to exactly one regulator device) can * exactly one event, and are relevant to exactly one regulator device) can
* use this function as their map_event callbac for their regulator IRQ * use this function as their map_event callback for their regulator IRQ
* notification helperk. Exactly one rdev and exactly one error (in * notification helper. Exactly one rdev and exactly one error (in
* "common_errs"-field) can be given at IRQ helper registration for * "common_errs"-field) can be given at IRQ helper registration for
* regulator_irq_map_event_simple() to be viable. * regulator_irq_map_event_simple() to be viable.
*
* Return: 0.
*/ */
int regulator_irq_map_event_simple(int irq, struct regulator_irq_data *rid, int regulator_irq_map_event_simple(int irq, struct regulator_irq_data *rid,
unsigned long *dev_mask) unsigned long *dev_mask)
......
...@@ -70,7 +70,7 @@ static int max5970_read(struct device *dev, enum hwmon_sensor_types type, ...@@ -70,7 +70,7 @@ static int max5970_read(struct device *dev, enum hwmon_sensor_types type,
* millivolts) and then divide it by the maximum value of the 10-bit ADC. * millivolts) and then divide it by the maximum value of the 10-bit ADC.
*/ */
*val = (*val * ddata->irng) >> 10; *val = (*val * ddata->irng) >> 10;
/* Convert the voltage meansurement across shunt resistor to current */ /* Convert the voltage measurement across shunt resistor to current */
*val = (*val * 1000) / ddata->shunt_micro_ohms; *val = (*val * 1000) / ddata->shunt_micro_ohms;
return 0; return 0;
default: default:
......
...@@ -43,8 +43,6 @@ struct max77650_regulator_desc { ...@@ -43,8 +43,6 @@ struct max77650_regulator_desc {
unsigned int regB; unsigned int regB;
}; };
static struct max77650_regulator_desc max77651_SBB1_desc;
static const unsigned int max77651_sbb1_volt_range_sel[] = { static const unsigned int max77651_sbb1_volt_range_sel[] = {
0x0, 0x1, 0x2, 0x3 0x0, 0x1, 0x2, 0x3
}; };
...@@ -66,11 +64,11 @@ static const unsigned int max77650_current_limit_table[] = { ...@@ -66,11 +64,11 @@ static const unsigned int max77650_current_limit_table[] = {
static int max77650_regulator_is_enabled(struct regulator_dev *rdev) static int max77650_regulator_is_enabled(struct regulator_dev *rdev)
{ {
struct max77650_regulator_desc *rdesc; const struct max77650_regulator_desc *rdesc;
struct regmap *map; struct regmap *map;
int val, rv, en; int val, rv, en;
rdesc = rdev_get_drvdata(rdev); rdesc = container_of(rdev->desc, struct max77650_regulator_desc, desc);
map = rdev_get_regmap(rdev); map = rdev_get_regmap(rdev);
rv = regmap_read(map, rdesc->regB, &val); rv = regmap_read(map, rdesc->regB, &val);
...@@ -84,10 +82,10 @@ static int max77650_regulator_is_enabled(struct regulator_dev *rdev) ...@@ -84,10 +82,10 @@ static int max77650_regulator_is_enabled(struct regulator_dev *rdev)
static int max77650_regulator_enable(struct regulator_dev *rdev) static int max77650_regulator_enable(struct regulator_dev *rdev)
{ {
struct max77650_regulator_desc *rdesc; const struct max77650_regulator_desc *rdesc;
struct regmap *map; struct regmap *map;
rdesc = rdev_get_drvdata(rdev); rdesc = container_of(rdev->desc, struct max77650_regulator_desc, desc);
map = rdev_get_regmap(rdev); map = rdev_get_regmap(rdev);
return regmap_update_bits(map, rdesc->regB, return regmap_update_bits(map, rdesc->regB,
...@@ -97,10 +95,10 @@ static int max77650_regulator_enable(struct regulator_dev *rdev) ...@@ -97,10 +95,10 @@ static int max77650_regulator_enable(struct regulator_dev *rdev)
static int max77650_regulator_disable(struct regulator_dev *rdev) static int max77650_regulator_disable(struct regulator_dev *rdev)
{ {
struct max77650_regulator_desc *rdesc; const struct max77650_regulator_desc *rdesc;
struct regmap *map; struct regmap *map;
rdesc = rdev_get_drvdata(rdev); rdesc = container_of(rdev->desc, struct max77650_regulator_desc, desc);
map = rdev_get_regmap(rdev); map = rdev_get_regmap(rdev);
return regmap_update_bits(map, rdesc->regB, return regmap_update_bits(map, rdesc->regB,
...@@ -145,7 +143,7 @@ static const struct regulator_ops max77651_SBB1_regulator_ops = { ...@@ -145,7 +143,7 @@ static const struct regulator_ops max77651_SBB1_regulator_ops = {
.set_active_discharge = regulator_set_active_discharge_regmap, .set_active_discharge = regulator_set_active_discharge_regmap,
}; };
static struct max77650_regulator_desc max77650_LDO_desc = { static const struct max77650_regulator_desc max77650_LDO_desc = {
.desc = { .desc = {
.name = "ldo", .name = "ldo",
.of_match = of_match_ptr("ldo"), .of_match = of_match_ptr("ldo"),
...@@ -171,7 +169,7 @@ static struct max77650_regulator_desc max77650_LDO_desc = { ...@@ -171,7 +169,7 @@ static struct max77650_regulator_desc max77650_LDO_desc = {
.regB = MAX77650_REG_CNFG_LDO_B, .regB = MAX77650_REG_CNFG_LDO_B,
}; };
static struct max77650_regulator_desc max77650_SBB0_desc = { static const struct max77650_regulator_desc max77650_SBB0_desc = {
.desc = { .desc = {
.name = "sbb0", .name = "sbb0",
.of_match = of_match_ptr("sbb0"), .of_match = of_match_ptr("sbb0"),
...@@ -201,7 +199,7 @@ static struct max77650_regulator_desc max77650_SBB0_desc = { ...@@ -201,7 +199,7 @@ static struct max77650_regulator_desc max77650_SBB0_desc = {
.regB = MAX77650_REG_CNFG_SBB0_B, .regB = MAX77650_REG_CNFG_SBB0_B,
}; };
static struct max77650_regulator_desc max77650_SBB1_desc = { static const struct max77650_regulator_desc max77650_SBB1_desc = {
.desc = { .desc = {
.name = "sbb1", .name = "sbb1",
.of_match = of_match_ptr("sbb1"), .of_match = of_match_ptr("sbb1"),
...@@ -231,7 +229,7 @@ static struct max77650_regulator_desc max77650_SBB1_desc = { ...@@ -231,7 +229,7 @@ static struct max77650_regulator_desc max77650_SBB1_desc = {
.regB = MAX77650_REG_CNFG_SBB1_B, .regB = MAX77650_REG_CNFG_SBB1_B,
}; };
static struct max77650_regulator_desc max77651_SBB1_desc = { static const struct max77650_regulator_desc max77651_SBB1_desc = {
.desc = { .desc = {
.name = "sbb1", .name = "sbb1",
.of_match = of_match_ptr("sbb1"), .of_match = of_match_ptr("sbb1"),
...@@ -264,7 +262,7 @@ static struct max77650_regulator_desc max77651_SBB1_desc = { ...@@ -264,7 +262,7 @@ static struct max77650_regulator_desc max77651_SBB1_desc = {
.regB = MAX77650_REG_CNFG_SBB1_B, .regB = MAX77650_REG_CNFG_SBB1_B,
}; };
static struct max77650_regulator_desc max77650_SBB2_desc = { static const struct max77650_regulator_desc max77650_SBB2_desc = {
.desc = { .desc = {
.name = "sbb2", .name = "sbb2",
.of_match = of_match_ptr("sbb2"), .of_match = of_match_ptr("sbb2"),
...@@ -294,7 +292,7 @@ static struct max77650_regulator_desc max77650_SBB2_desc = { ...@@ -294,7 +292,7 @@ static struct max77650_regulator_desc max77650_SBB2_desc = {
.regB = MAX77650_REG_CNFG_SBB2_B, .regB = MAX77650_REG_CNFG_SBB2_B,
}; };
static struct max77650_regulator_desc max77651_SBB2_desc = { static const struct max77650_regulator_desc max77651_SBB2_desc = {
.desc = { .desc = {
.name = "sbb2", .name = "sbb2",
.of_match = of_match_ptr("sbb2"), .of_match = of_match_ptr("sbb2"),
...@@ -326,8 +324,8 @@ static struct max77650_regulator_desc max77651_SBB2_desc = { ...@@ -326,8 +324,8 @@ static struct max77650_regulator_desc max77651_SBB2_desc = {
static int max77650_regulator_probe(struct platform_device *pdev) static int max77650_regulator_probe(struct platform_device *pdev)
{ {
struct max77650_regulator_desc **rdescs; const struct max77650_regulator_desc **rdescs;
struct max77650_regulator_desc *rdesc; const struct max77650_regulator_desc *rdesc;
struct regulator_config config = { }; struct regulator_config config = { };
struct device *dev, *parent; struct device *dev, *parent;
struct regulator_dev *rdev; struct regulator_dev *rdev;
...@@ -376,7 +374,6 @@ static int max77650_regulator_probe(struct platform_device *pdev) ...@@ -376,7 +374,6 @@ static int max77650_regulator_probe(struct platform_device *pdev)
for (i = 0; i < MAX77650_REGULATOR_NUM_REGULATORS; i++) { for (i = 0; i < MAX77650_REGULATOR_NUM_REGULATORS; i++) {
rdesc = rdescs[i]; rdesc = rdescs[i];
config.driver_data = rdesc;
rdev = devm_regulator_register(dev, &rdesc->desc, &config); rdev = devm_regulator_register(dev, &rdesc->desc, &config);
if (IS_ERR(rdev)) if (IS_ERR(rdev))
......
...@@ -160,8 +160,8 @@ static unsigned max77802_get_mode(struct regulator_dev *rdev) ...@@ -160,8 +160,8 @@ static unsigned max77802_get_mode(struct regulator_dev *rdev)
* Enable Control Logic3 by PWRREQ (LDO 3) * Enable Control Logic3 by PWRREQ (LDO 3)
* *
* If setting the regulator mode fails, the function only warns but does * If setting the regulator mode fails, the function only warns but does
* not return an error code to avoid the regulator core to stop setting * not return a negative error number to avoid the regulator core to stop
* the operating mode for the remaining regulators. * setting the operating mode for the remaining regulators.
*/ */
static int max77802_set_suspend_mode(struct regulator_dev *rdev, static int max77802_set_suspend_mode(struct regulator_dev *rdev,
unsigned int mode) unsigned int mode)
......
...@@ -153,7 +153,6 @@ enum max77826_regulators { ...@@ -153,7 +153,6 @@ enum max77826_regulators {
struct max77826_regulator_info { struct max77826_regulator_info {
struct regmap *regmap; struct regmap *regmap;
struct regulator_desc *rdesc;
}; };
static const struct regmap_config max77826_regmap_config = { static const struct regmap_config max77826_regmap_config = {
...@@ -187,7 +186,7 @@ static const struct regulator_ops max77826_buck_ops = { ...@@ -187,7 +186,7 @@ static const struct regulator_ops max77826_buck_ops = {
.set_voltage_time_sel = max77826_set_voltage_time_sel, .set_voltage_time_sel = max77826_set_voltage_time_sel,
}; };
static struct regulator_desc max77826_regulators_desc[] = { static const struct regulator_desc max77826_regulators_desc[] = {
MAX77826_LDO(1, NMOS), MAX77826_LDO(1, NMOS),
MAX77826_LDO(2, NMOS), MAX77826_LDO(2, NMOS),
MAX77826_LDO(3, NMOS), MAX77826_LDO(3, NMOS),
...@@ -246,7 +245,6 @@ static int max77826_i2c_probe(struct i2c_client *client) ...@@ -246,7 +245,6 @@ static int max77826_i2c_probe(struct i2c_client *client)
if (!info) if (!info)
return -ENOMEM; return -ENOMEM;
info->rdesc = max77826_regulators_desc;
regmap = devm_regmap_init_i2c(client, &max77826_regmap_config); regmap = devm_regmap_init_i2c(client, &max77826_regmap_config);
if (IS_ERR(regmap)) { if (IS_ERR(regmap)) {
dev_err(dev, "Failed to allocate regmap!\n"); dev_err(dev, "Failed to allocate regmap!\n");
......
...@@ -427,7 +427,7 @@ static int max77857_probe(struct i2c_client *client) ...@@ -427,7 +427,7 @@ static int max77857_probe(struct i2c_client *client)
return 0; return 0;
} }
const struct i2c_device_id max77857_id[] = { static const struct i2c_device_id max77857_id[] = {
{ "max77831", ID_MAX77831 }, { "max77831", ID_MAX77831 },
{ "max77857", ID_MAX77857 }, { "max77857", ID_MAX77857 },
{ "max77859", ID_MAX77859 }, { "max77859", ID_MAX77859 },
......
...@@ -470,8 +470,7 @@ static const struct thermal_zone_device_ops max77621_tz_ops = { ...@@ -470,8 +470,7 @@ static const struct thermal_zone_device_ops max77621_tz_ops = {
static int max8973_thermal_init(struct max8973_chip *mchip) static int max8973_thermal_init(struct max8973_chip *mchip)
{ {
struct thermal_zone_device *tzd; struct thermal_zone_device *tzd;
struct irq_data *irq_data; unsigned long irq_flags;
unsigned long irq_flags = 0;
int ret; int ret;
if (mchip->id != MAX77621) if (mchip->id != MAX77621)
...@@ -489,9 +488,7 @@ static int max8973_thermal_init(struct max8973_chip *mchip) ...@@ -489,9 +488,7 @@ static int max8973_thermal_init(struct max8973_chip *mchip)
if (mchip->irq <= 0) if (mchip->irq <= 0)
return 0; return 0;
irq_data = irq_get_irq_data(mchip->irq); irq_flags = irq_get_trigger_type(mchip->irq);
if (irq_data)
irq_flags = irqd_get_trigger_type(irq_data);
ret = devm_request_threaded_irq(mchip->dev, mchip->irq, NULL, ret = devm_request_threaded_irq(mchip->dev, mchip->irq, NULL,
max8973_thermal_irq, max8973_thermal_irq,
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
// This driver is based on max8998.c // This driver is based on max8998.c
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/cleanup.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -876,7 +877,7 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -876,7 +877,7 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
struct max8997_platform_data *pdata) struct max8997_platform_data *pdata)
{ {
struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent); struct max8997_dev *iodev = dev_get_drvdata(pdev->dev.parent);
struct device_node *pmic_np, *regulators_np, *reg_np; struct device_node *pmic_np, *reg_np;
struct max8997_regulator_data *rdata; struct max8997_regulator_data *rdata;
unsigned int i, dvs_voltage_nr = 1; unsigned int i, dvs_voltage_nr = 1;
...@@ -886,7 +887,8 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -886,7 +887,8 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
return -ENODEV; return -ENODEV;
} }
regulators_np = of_get_child_by_name(pmic_np, "regulators"); struct device_node *regulators_np __free(device_node) = of_get_child_by_name(pmic_np,
"regulators");
if (!regulators_np) { if (!regulators_np) {
dev_err(&pdev->dev, "could not find regulators sub-node\n"); dev_err(&pdev->dev, "could not find regulators sub-node\n");
return -EINVAL; return -EINVAL;
...@@ -898,10 +900,8 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -898,10 +900,8 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
rdata = devm_kcalloc(&pdev->dev, rdata = devm_kcalloc(&pdev->dev,
pdata->num_regulators, sizeof(*rdata), pdata->num_regulators, sizeof(*rdata),
GFP_KERNEL); GFP_KERNEL);
if (!rdata) { if (!rdata)
of_node_put(regulators_np);
return -ENOMEM; return -ENOMEM;
}
pdata->regulators = rdata; pdata->regulators = rdata;
for_each_child_of_node(regulators_np, reg_np) { for_each_child_of_node(regulators_np, reg_np) {
...@@ -922,7 +922,6 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -922,7 +922,6 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
rdata->reg_node = reg_np; rdata->reg_node = reg_np;
rdata++; rdata++;
} }
of_node_put(regulators_np);
pdata->buck1_gpiodvs = of_property_read_bool(pmic_np, "max8997,pmic-buck1-uses-gpio-dvs"); pdata->buck1_gpiodvs = of_property_read_bool(pmic_np, "max8997,pmic-buck1-uses-gpio-dvs");
pdata->buck2_gpiodvs = of_property_read_bool(pmic_np, "max8997,pmic-buck2-uses-gpio-dvs"); pdata->buck2_gpiodvs = of_property_read_bool(pmic_np, "max8997,pmic-buck2-uses-gpio-dvs");
...@@ -941,9 +940,8 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -941,9 +940,8 @@ static int max8997_pmic_dt_parse_pdata(struct platform_device *pdev,
} }
} }
if (of_get_property(pmic_np, pdata->ignore_gpiodvs_side_effect = of_property_read_bool(pmic_np,
"max8997,pmic-ignore-gpiodvs-side-effect", NULL)) "max8997,pmic-ignore-gpiodvs-side-effect");
pdata->ignore_gpiodvs_side_effect = true;
dvs_voltage_nr = 8; dvs_voltage_nr = 8;
} }
......
...@@ -107,9 +107,10 @@ static unsigned int mcp16502_of_map_mode(unsigned int mode) ...@@ -107,9 +107,10 @@ static unsigned int mcp16502_of_map_mode(unsigned int mode)
return REGULATOR_MODE_INVALID; return REGULATOR_MODE_INVALID;
} }
#define MCP16502_REGULATOR(_name, _id, _ranges, _ops, _ramp_table) \ #define MCP16502_REGULATOR(_name, _id, _sn, _ranges, _ops, _ramp_table) \
[_id] = { \ [_id] = { \
.name = _name, \ .name = _name, \
.supply_name = #_sn, \
.regulators_node = "regulators", \ .regulators_node = "regulators", \
.id = _id, \ .id = _id, \
.ops = &(_ops), \ .ops = &(_ops), \
...@@ -467,18 +468,18 @@ static const struct linear_range b234_ranges[] = { ...@@ -467,18 +468,18 @@ static const struct linear_range b234_ranges[] = {
}; };
static const struct regulator_desc mcp16502_desc[] = { static const struct regulator_desc mcp16502_desc[] = {
/* MCP16502_REGULATOR(_name, _id, ranges, regulator_ops, ramp_table) */ /* MCP16502_REGULATOR(_name, _id, _sn, _ranges, _ops, _ramp_table) */
MCP16502_REGULATOR("VDD_IO", BUCK1, b1l12_ranges, mcp16502_buck_ops, MCP16502_REGULATOR("VDD_IO", BUCK1, pvin1, b1l12_ranges, mcp16502_buck_ops,
mcp16502_ramp_b1l12), mcp16502_ramp_b1l12),
MCP16502_REGULATOR("VDD_DDR", BUCK2, b234_ranges, mcp16502_buck_ops, MCP16502_REGULATOR("VDD_DDR", BUCK2, pvin2, b234_ranges, mcp16502_buck_ops,
mcp16502_ramp_b234), mcp16502_ramp_b234),
MCP16502_REGULATOR("VDD_CORE", BUCK3, b234_ranges, mcp16502_buck_ops, MCP16502_REGULATOR("VDD_CORE", BUCK3, pvin3, b234_ranges, mcp16502_buck_ops,
mcp16502_ramp_b234), mcp16502_ramp_b234),
MCP16502_REGULATOR("VDD_OTHER", BUCK4, b234_ranges, mcp16502_buck_ops, MCP16502_REGULATOR("VDD_OTHER", BUCK4, pvin4, b234_ranges, mcp16502_buck_ops,
mcp16502_ramp_b234), mcp16502_ramp_b234),
MCP16502_REGULATOR("LDO1", LDO1, b1l12_ranges, mcp16502_ldo_ops, MCP16502_REGULATOR("LDO1", LDO1, lvin, b1l12_ranges, mcp16502_ldo_ops,
mcp16502_ramp_b1l12), mcp16502_ramp_b1l12),
MCP16502_REGULATOR("LDO2", LDO2, b1l12_ranges, mcp16502_ldo_ops, MCP16502_REGULATOR("LDO2", LDO2, lvin, b1l12_ranges, mcp16502_ldo_ops,
mcp16502_ramp_b1l12) mcp16502_ramp_b1l12)
}; };
......
...@@ -163,7 +163,7 @@ static const struct regulator_ops mp5416_buck_ops = { ...@@ -163,7 +163,7 @@ static const struct regulator_ops mp5416_buck_ops = {
.set_ramp_delay = regulator_set_ramp_delay_regmap, .set_ramp_delay = regulator_set_ramp_delay_regmap,
}; };
static struct regulator_desc mp5416_regulators_desc[MP5416_MAX_REGULATORS] = { static const struct regulator_desc mp5416_regulators_desc[MP5416_MAX_REGULATORS] = {
MP5416BUCK("buck1", 1, mp5416_I_limits1, MP5416_REG_CTL1, BIT(0), 1), MP5416BUCK("buck1", 1, mp5416_I_limits1, MP5416_REG_CTL1, BIT(0), 1),
MP5416BUCK("buck2", 2, mp5416_I_limits2, MP5416_REG_CTL1, BIT(1), 2), MP5416BUCK("buck2", 2, mp5416_I_limits2, MP5416_REG_CTL1, BIT(1), 2),
MP5416BUCK("buck3", 3, mp5416_I_limits1, MP5416_REG_CTL1, BIT(2), 1), MP5416BUCK("buck3", 3, mp5416_I_limits1, MP5416_REG_CTL1, BIT(2), 1),
...@@ -174,7 +174,7 @@ static struct regulator_desc mp5416_regulators_desc[MP5416_MAX_REGULATORS] = { ...@@ -174,7 +174,7 @@ static struct regulator_desc mp5416_regulators_desc[MP5416_MAX_REGULATORS] = {
MP5416LDO("ldo4", 4, BIT(1)), MP5416LDO("ldo4", 4, BIT(1)),
}; };
static struct regulator_desc mp5496_regulators_desc[MP5416_MAX_REGULATORS] = { static const struct regulator_desc mp5496_regulators_desc[MP5416_MAX_REGULATORS] = {
MP5416BUCK("buck1", 1, mp5416_I_limits1, MP5416_REG_CTL1, BIT(0), 1), MP5416BUCK("buck1", 1, mp5416_I_limits1, MP5416_REG_CTL1, BIT(0), 1),
MP5416BUCK("buck2", 2, mp5416_I_limits2, MP5416_REG_CTL1, BIT(1), 1), MP5416BUCK("buck2", 2, mp5416_I_limits2, MP5416_REG_CTL1, BIT(1), 1),
MP5416BUCK("buck3", 3, mp5416_I_limits1, MP5416_REG_CTL1, BIT(2), 1), MP5416BUCK("buck3", 3, mp5416_I_limits1, MP5416_REG_CTL1, BIT(2), 1),
......
...@@ -123,7 +123,7 @@ struct mt6357_regulator_info { ...@@ -123,7 +123,7 @@ struct mt6357_regulator_info {
* *
* Regulators that use regmap for their register I/O can set the * 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 * da_vsel_reg and da_vsel_mask fields in the info structure and
* then use this as their get_voltage_vsel operation. * then use this as their get_voltage_sel operation.
*/ */
static int mt6357_get_buck_voltage_sel(struct regulator_dev *rdev) static int mt6357_get_buck_voltage_sel(struct regulator_dev *rdev)
{ {
......
...@@ -19,7 +19,7 @@ enum dvfsrc_regulator_id { ...@@ -19,7 +19,7 @@ enum dvfsrc_regulator_id {
}; };
struct dvfsrc_regulator_pdata { struct dvfsrc_regulator_pdata {
struct regulator_desc *descs; const struct regulator_desc *descs;
u32 size; u32 size;
}; };
...@@ -107,7 +107,7 @@ static const unsigned int mt6873_voltages[] = { ...@@ -107,7 +107,7 @@ static const unsigned int mt6873_voltages[] = {
725000, 725000,
}; };
static struct regulator_desc mt6873_regulators[] = { static const struct regulator_desc mt6873_regulators[] = {
MTK_DVFSRC_VREG("dvfsrc-vcore", VCORE, mt6873_voltages), MTK_DVFSRC_VREG("dvfsrc-vcore", VCORE, mt6873_voltages),
MTK_DVFSRC_VREG("dvfsrc-vscp", VSCP, mt6873_voltages), MTK_DVFSRC_VREG("dvfsrc-vscp", VSCP, mt6873_voltages),
}; };
...@@ -122,7 +122,7 @@ static const unsigned int mt8183_voltages[] = { ...@@ -122,7 +122,7 @@ static const unsigned int mt8183_voltages[] = {
800000, 800000,
}; };
static struct regulator_desc mt8183_regulators[] = { static const struct regulator_desc mt8183_regulators[] = {
MTK_DVFSRC_VREG("dvfsrc-vcore", VCORE, mt8183_voltages), MTK_DVFSRC_VREG("dvfsrc-vcore", VCORE, mt8183_voltages),
}; };
...@@ -138,7 +138,7 @@ static const unsigned int mt8195_voltages[] = { ...@@ -138,7 +138,7 @@ static const unsigned int mt8195_voltages[] = {
750000, 750000,
}; };
static struct regulator_desc mt8195_regulators[] = { static const struct regulator_desc mt8195_regulators[] = {
MTK_DVFSRC_VREG("dvfsrc-vcore", VCORE, mt8195_voltages), MTK_DVFSRC_VREG("dvfsrc-vcore", VCORE, mt8195_voltages),
MTK_DVFSRC_VREG("dvfsrc-vscp", VSCP, mt8195_voltages), MTK_DVFSRC_VREG("dvfsrc-vscp", VSCP, mt8195_voltages),
}; };
...@@ -159,7 +159,7 @@ static int dvfsrc_vcore_regulator_probe(struct platform_device *pdev) ...@@ -159,7 +159,7 @@ static int dvfsrc_vcore_regulator_probe(struct platform_device *pdev)
return -EINVAL; return -EINVAL;
for (i = 0; i < pdata->size; i++) { for (i = 0; i < pdata->size; i++) {
struct regulator_desc *vrdesc = &pdata->descs[i]; const struct regulator_desc *vrdesc = &pdata->descs[i];
struct regulator_dev *rdev; struct regulator_dev *rdev;
rdev = devm_regulator_register(&pdev->dev, vrdesc, &config); rdev = devm_regulator_register(&pdev->dev, vrdesc, &config);
......
...@@ -338,8 +338,10 @@ static int of_get_regulation_constraints(struct device *dev, ...@@ -338,8 +338,10 @@ static int of_get_regulation_constraints(struct device *dev,
* @desc: regulator description * @desc: regulator description
* *
* Populates regulator_init_data structure by extracting data from device * Populates regulator_init_data structure by extracting data from device
* tree node, returns a pointer to the populated structure or NULL if memory * tree node.
* alloc fails. *
* Return: Pointer to a populated &struct regulator_init_data or NULL if
* memory allocation fails.
*/ */
struct regulator_init_data *of_get_regulator_init_data(struct device *dev, struct regulator_init_data *of_get_regulator_init_data(struct device *dev,
struct device_node *node, struct device_node *node,
...@@ -391,7 +393,7 @@ static void devm_of_regulator_put_matches(struct device *dev, void *res) ...@@ -391,7 +393,7 @@ static void devm_of_regulator_put_matches(struct device *dev, void *res)
* in place and an additional of_node reference is taken for each matched * in place and an additional of_node reference is taken for each matched
* regulator. * regulator.
* *
* Returns the number of matches found or a negative error code on failure. * Return: The number of matches found or a negative error number on failure.
*/ */
int of_regulator_match(struct device *dev, struct device_node *node, int of_regulator_match(struct device *dev, struct device_node *node,
struct of_regulator_match *matches, struct of_regulator_match *matches,
...@@ -550,7 +552,71 @@ struct regulator_init_data *regulator_of_get_init_data(struct device *dev, ...@@ -550,7 +552,71 @@ struct regulator_init_data *regulator_of_get_init_data(struct device *dev,
return NULL; return NULL;
} }
struct regulator_dev *of_find_regulator_by_node(struct device_node *np) /**
* of_get_child_regulator - get a child regulator device node
* based on supply name
* @parent: Parent device node
* @prop_name: Combination regulator supply name and "-supply"
*
* Traverse all child nodes.
* Extract the child regulator device node corresponding to the supply name.
*
* Return: Pointer to the &struct device_node corresponding to the regulator
* if found, or %NULL if not found.
*/
static struct device_node *of_get_child_regulator(struct device_node *parent,
const char *prop_name)
{
struct device_node *regnode = NULL;
struct device_node *child = NULL;
for_each_child_of_node(parent, child) {
regnode = of_parse_phandle(child, prop_name, 0);
if (regnode)
goto err_node_put;
regnode = of_get_child_regulator(child, prop_name);
if (regnode)
goto err_node_put;
}
return NULL;
err_node_put:
of_node_put(child);
return regnode;
}
/**
* of_get_regulator - get a regulator device node based on supply name
* @dev: Device pointer for the consumer (of regulator) device
* @supply: regulator supply name
*
* Extract the regulator device node corresponding to the supply name.
*
* Return: Pointer to the &struct device_node corresponding to the regulator
* if found, or %NULL if not found.
*/
static struct device_node *of_get_regulator(struct device *dev, const char *supply)
{
struct device_node *regnode = NULL;
char prop_name[64]; /* 64 is max size of property name */
dev_dbg(dev, "Looking up %s-supply from device tree\n", supply);
snprintf(prop_name, 64, "%s-supply", supply);
regnode = of_parse_phandle(dev->of_node, prop_name, 0);
if (regnode)
return regnode;
regnode = of_get_child_regulator(dev->of_node, prop_name);
if (regnode)
return regnode;
dev_dbg(dev, "Looking up %s property in node %pOF failed\n", prop_name, dev->of_node);
return NULL;
}
static struct regulator_dev *of_find_regulator_by_node(struct device_node *np)
{ {
struct device *dev; struct device *dev;
...@@ -559,6 +625,46 @@ struct regulator_dev *of_find_regulator_by_node(struct device_node *np) ...@@ -559,6 +625,46 @@ struct regulator_dev *of_find_regulator_by_node(struct device_node *np)
return dev ? dev_to_rdev(dev) : NULL; return dev ? dev_to_rdev(dev) : NULL;
} }
/**
* of_regulator_dev_lookup - lookup a regulator device with device tree only
* @dev: Device pointer for regulator supply lookup.
* @supply: Supply name or regulator ID.
*
* Return: Pointer to the &struct regulator_dev on success, or ERR_PTR()
* encoded value on error.
*
* If successful, returns a pointer to the &struct regulator_dev that
* corresponds to the name @supply and with the embedded &struct device
* refcount incremented by one. The refcount must be dropped by calling
* put_device().
*
* On failure one of the following ERR_PTR() encoded values is returned:
* * -%ENODEV if lookup fails permanently.
* * -%EPROBE_DEFER if lookup could succeed in the future.
*/
struct regulator_dev *of_regulator_dev_lookup(struct device *dev,
const char *supply)
{
struct regulator_dev *r;
struct device_node *node;
node = of_get_regulator(dev, supply);
if (node) {
r = of_find_regulator_by_node(node);
of_node_put(node);
if (r)
return r;
/*
* We have a node, but there is no device.
* assume it has not registered yet.
*/
return ERR_PTR(-EPROBE_DEFER);
}
return ERR_PTR(-ENODEV);
}
/* /*
* Returns number of regulators coupled with rdev. * Returns number of regulators coupled with rdev.
*/ */
...@@ -619,7 +725,7 @@ static bool of_coupling_find_node(struct device_node *src, ...@@ -619,7 +725,7 @@ static bool of_coupling_find_node(struct device_node *src,
* - all coupled regulators have the same number of regulator_dev phandles * - all coupled regulators have the same number of regulator_dev phandles
* - all regulators are linked to each other * - all regulators are linked to each other
* *
* Returns true if all conditions are met. * Return: True if all conditions are met; false otherwise.
*/ */
bool of_check_coupling_data(struct regulator_dev *rdev) bool of_check_coupling_data(struct regulator_dev *rdev)
{ {
...@@ -690,8 +796,8 @@ bool of_check_coupling_data(struct regulator_dev *rdev) ...@@ -690,8 +796,8 @@ bool of_check_coupling_data(struct regulator_dev *rdev)
* "regulator-coupled-with" property * "regulator-coupled-with" property
* @index: Index in phandles array * @index: Index in phandles array
* *
* Returns the regulator_dev pointer parsed from DTS. If it has not been yet * Return: Pointer to the &struct regulator_dev parsed from DTS, or %NULL if
* registered, returns NULL * it has not yet been registered.
*/ */
struct regulator_dev *of_parse_coupled_regulator(struct regulator_dev *rdev, struct regulator_dev *of_parse_coupled_regulator(struct regulator_dev *rdev,
int index) int index)
...@@ -735,31 +841,32 @@ static int is_supply_name(const char *name) ...@@ -735,31 +841,32 @@ static int is_supply_name(const char *name)
return 0; return 0;
} }
/* /**
* of_regulator_bulk_get_all - get multiple regulator consumers * of_regulator_bulk_get_all - get multiple regulator consumers
* *
* @dev: Device to supply * @dev: Device to supply
* @np: device node to search for consumers * @np: device node to search for consumers
* @consumers: Configuration of consumers; clients are stored here. * @consumers: Configuration of consumers; clients are stored here.
* *
* @return number of regulators on success, an errno on failure.
*
* This helper function allows drivers to get several regulator * This helper function allows drivers to get several regulator
* consumers in one operation. If any of the regulators cannot be * consumers in one operation. If any of the regulators cannot be
* acquired then any regulators that were allocated will be freed * acquired then any regulators that were allocated will be freed
* before returning to the caller. * before returning to the caller, and @consumers will not be
* changed.
*
* Return: Number of regulators on success, or a negative error number
* on failure.
*/ */
int of_regulator_bulk_get_all(struct device *dev, struct device_node *np, int of_regulator_bulk_get_all(struct device *dev, struct device_node *np,
struct regulator_bulk_data **consumers) struct regulator_bulk_data **consumers)
{ {
int num_consumers = 0; int num_consumers = 0;
struct regulator *tmp; struct regulator *tmp;
struct regulator_bulk_data *_consumers = NULL;
struct property *prop; struct property *prop;
int i, n = 0, ret; int i, n = 0, ret;
char name[64]; char name[64];
*consumers = NULL;
/* /*
* first pass: get numbers of xxx-supply * first pass: get numbers of xxx-supply
* second pass: fill consumers * second pass: fill consumers
...@@ -769,7 +876,7 @@ int of_regulator_bulk_get_all(struct device *dev, struct device_node *np, ...@@ -769,7 +876,7 @@ int of_regulator_bulk_get_all(struct device *dev, struct device_node *np,
i = is_supply_name(prop->name); i = is_supply_name(prop->name);
if (i == 0) if (i == 0)
continue; continue;
if (!*consumers) { if (!_consumers) {
num_consumers++; num_consumers++;
continue; continue;
} else { } else {
...@@ -777,28 +884,31 @@ int of_regulator_bulk_get_all(struct device *dev, struct device_node *np, ...@@ -777,28 +884,31 @@ int of_regulator_bulk_get_all(struct device *dev, struct device_node *np,
name[i] = '\0'; name[i] = '\0';
tmp = regulator_get(dev, name); tmp = regulator_get(dev, name);
if (IS_ERR(tmp)) { if (IS_ERR(tmp)) {
ret = -EINVAL; ret = PTR_ERR(tmp);
goto error; goto error;
} }
(*consumers)[n].consumer = tmp; _consumers[n].consumer = tmp;
n++; n++;
continue; continue;
} }
} }
if (*consumers) if (_consumers) {
*consumers = _consumers;
return num_consumers; return num_consumers;
}
if (num_consumers == 0) if (num_consumers == 0)
return 0; return 0;
*consumers = kmalloc_array(num_consumers, _consumers = kmalloc_array(num_consumers,
sizeof(struct regulator_bulk_data), sizeof(struct regulator_bulk_data),
GFP_KERNEL); GFP_KERNEL);
if (!*consumers) if (!_consumers)
return -ENOMEM; return -ENOMEM;
goto restart; goto restart;
error: error:
while (--n >= 0) while (--n >= 0)
regulator_put(consumers[n]->consumer); regulator_put(_consumers[n].consumer);
kfree(_consumers);
return ret; return ret;
} }
EXPORT_SYMBOL_GPL(of_regulator_bulk_get_all); EXPORT_SYMBOL_GPL(of_regulator_bulk_get_all);
...@@ -105,7 +105,7 @@ struct pcap_regulator { ...@@ -105,7 +105,7 @@ struct pcap_regulator {
.lowpwr = _lowpwr, \ .lowpwr = _lowpwr, \
} }
static struct pcap_regulator vreg_table[] = { static const struct pcap_regulator vreg_table[] = {
VREG_INFO(V1, PCAP_REG_VREG1, 1, 2, 18, 0), VREG_INFO(V1, PCAP_REG_VREG1, 1, 2, 18, 0),
VREG_INFO(V2, PCAP_REG_VREG1, 5, 6, 19, 22), VREG_INFO(V2, PCAP_REG_VREG1, 5, 6, 19, 22),
VREG_INFO(V3, PCAP_REG_VREG1, 7, 8, 20, 23), VREG_INFO(V3, PCAP_REG_VREG1, 7, 8, 20, 23),
...@@ -141,7 +141,7 @@ static struct pcap_regulator vreg_table[] = { ...@@ -141,7 +141,7 @@ static struct pcap_regulator vreg_table[] = {
static int pcap_regulator_set_voltage_sel(struct regulator_dev *rdev, static int pcap_regulator_set_voltage_sel(struct regulator_dev *rdev,
unsigned selector) unsigned selector)
{ {
struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)]; const struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)];
void *pcap = rdev_get_drvdata(rdev); void *pcap = rdev_get_drvdata(rdev);
/* the regulator doesn't support voltage switching */ /* the regulator doesn't support voltage switching */
...@@ -155,7 +155,7 @@ static int pcap_regulator_set_voltage_sel(struct regulator_dev *rdev, ...@@ -155,7 +155,7 @@ static int pcap_regulator_set_voltage_sel(struct regulator_dev *rdev,
static int pcap_regulator_get_voltage_sel(struct regulator_dev *rdev) static int pcap_regulator_get_voltage_sel(struct regulator_dev *rdev)
{ {
struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)]; const struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)];
void *pcap = rdev_get_drvdata(rdev); void *pcap = rdev_get_drvdata(rdev);
u32 tmp; u32 tmp;
...@@ -169,7 +169,7 @@ static int pcap_regulator_get_voltage_sel(struct regulator_dev *rdev) ...@@ -169,7 +169,7 @@ static int pcap_regulator_get_voltage_sel(struct regulator_dev *rdev)
static int pcap_regulator_enable(struct regulator_dev *rdev) static int pcap_regulator_enable(struct regulator_dev *rdev)
{ {
struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)]; const struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)];
void *pcap = rdev_get_drvdata(rdev); void *pcap = rdev_get_drvdata(rdev);
if (vreg->en == NA) if (vreg->en == NA)
...@@ -180,7 +180,7 @@ static int pcap_regulator_enable(struct regulator_dev *rdev) ...@@ -180,7 +180,7 @@ static int pcap_regulator_enable(struct regulator_dev *rdev)
static int pcap_regulator_disable(struct regulator_dev *rdev) static int pcap_regulator_disable(struct regulator_dev *rdev)
{ {
struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)]; const struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)];
void *pcap = rdev_get_drvdata(rdev); void *pcap = rdev_get_drvdata(rdev);
if (vreg->en == NA) if (vreg->en == NA)
...@@ -191,7 +191,7 @@ static int pcap_regulator_disable(struct regulator_dev *rdev) ...@@ -191,7 +191,7 @@ static int pcap_regulator_disable(struct regulator_dev *rdev)
static int pcap_regulator_is_enabled(struct regulator_dev *rdev) static int pcap_regulator_is_enabled(struct regulator_dev *rdev)
{ {
struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)]; const struct pcap_regulator *vreg = &vreg_table[rdev_get_id(rdev)];
void *pcap = rdev_get_drvdata(rdev); void *pcap = rdev_get_drvdata(rdev);
u32 tmp; u32 tmp;
......
...@@ -76,7 +76,7 @@ struct pfuze_chip { ...@@ -76,7 +76,7 @@ struct pfuze_chip {
struct device *dev; struct device *dev;
struct pfuze_regulator regulator_descs[PFUZE100_MAX_REGULATOR]; struct pfuze_regulator regulator_descs[PFUZE100_MAX_REGULATOR];
struct regulator_dev *regulators[PFUZE100_MAX_REGULATOR]; struct regulator_dev *regulators[PFUZE100_MAX_REGULATOR];
struct pfuze_regulator *pfuze_regulators; const struct pfuze_regulator *pfuze_regulators;
}; };
static const int pfuze100_swbst[] = { static const int pfuze100_swbst[] = {
...@@ -367,7 +367,7 @@ static const struct regulator_ops pfuze3000_sw_regulator_ops = { ...@@ -367,7 +367,7 @@ static const struct regulator_ops pfuze3000_sw_regulator_ops = {
} }
/* PFUZE100 */ /* PFUZE100 */
static struct pfuze_regulator pfuze100_regulators[] = { static const struct pfuze_regulator pfuze100_regulators[] = {
PFUZE100_SW_REG(PFUZE100, SW1AB, PFUZE100_SW1ABVOL, 300000, 1875000, 25000), PFUZE100_SW_REG(PFUZE100, SW1AB, PFUZE100_SW1ABVOL, 300000, 1875000, 25000),
PFUZE100_SW_REG(PFUZE100, SW1C, PFUZE100_SW1CVOL, 300000, 1875000, 25000), PFUZE100_SW_REG(PFUZE100, SW1C, PFUZE100_SW1CVOL, 300000, 1875000, 25000),
PFUZE100_SW_REG(PFUZE100, SW2, PFUZE100_SW2VOL, 400000, 1975000, 25000), PFUZE100_SW_REG(PFUZE100, SW2, PFUZE100_SW2VOL, 400000, 1975000, 25000),
...@@ -386,7 +386,7 @@ static struct pfuze_regulator pfuze100_regulators[] = { ...@@ -386,7 +386,7 @@ static struct pfuze_regulator pfuze100_regulators[] = {
PFUZE100_COIN_REG(PFUZE100, COIN, PFUZE100_COINVOL, 0x7, pfuze100_coin), PFUZE100_COIN_REG(PFUZE100, COIN, PFUZE100_COINVOL, 0x7, pfuze100_coin),
}; };
static struct pfuze_regulator pfuze200_regulators[] = { static const struct pfuze_regulator pfuze200_regulators[] = {
PFUZE100_SW_REG(PFUZE200, SW1AB, PFUZE100_SW1ABVOL, 300000, 1875000, 25000), PFUZE100_SW_REG(PFUZE200, SW1AB, PFUZE100_SW1ABVOL, 300000, 1875000, 25000),
PFUZE100_SW_REG(PFUZE200, SW2, PFUZE100_SW2VOL, 400000, 1975000, 25000), PFUZE100_SW_REG(PFUZE200, SW2, PFUZE100_SW2VOL, 400000, 1975000, 25000),
PFUZE100_SW_REG(PFUZE200, SW3A, PFUZE100_SW3AVOL, 400000, 1975000, 25000), PFUZE100_SW_REG(PFUZE200, SW3A, PFUZE100_SW3AVOL, 400000, 1975000, 25000),
...@@ -403,7 +403,7 @@ static struct pfuze_regulator pfuze200_regulators[] = { ...@@ -403,7 +403,7 @@ static struct pfuze_regulator pfuze200_regulators[] = {
PFUZE100_COIN_REG(PFUZE200, COIN, PFUZE100_COINVOL, 0x7, pfuze100_coin), PFUZE100_COIN_REG(PFUZE200, COIN, PFUZE100_COINVOL, 0x7, pfuze100_coin),
}; };
static struct pfuze_regulator pfuze3000_regulators[] = { static const struct pfuze_regulator pfuze3000_regulators[] = {
PFUZE3000_SW_REG(PFUZE3000, SW1A, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a), PFUZE3000_SW_REG(PFUZE3000, SW1A, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a),
PFUZE100_SW_REG(PFUZE3000, SW1B, PFUZE100_SW1CVOL, 700000, 1475000, 25000), PFUZE100_SW_REG(PFUZE3000, SW1B, PFUZE100_SW1CVOL, 700000, 1475000, 25000),
PFUZE3000_SW_REG(PFUZE3000, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo), PFUZE3000_SW_REG(PFUZE3000, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo),
...@@ -419,7 +419,7 @@ static struct pfuze_regulator pfuze3000_regulators[] = { ...@@ -419,7 +419,7 @@ static struct pfuze_regulator pfuze3000_regulators[] = {
PFUZE100_VGEN_REG(PFUZE3000, VLDO4, PFUZE100_VGEN6VOL, 1800000, 3300000, 100000), PFUZE100_VGEN_REG(PFUZE3000, VLDO4, PFUZE100_VGEN6VOL, 1800000, 3300000, 100000),
}; };
static struct pfuze_regulator pfuze3001_regulators[] = { static const struct pfuze_regulator pfuze3001_regulators[] = {
PFUZE3000_SW_REG(PFUZE3001, SW1, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a), PFUZE3000_SW_REG(PFUZE3001, SW1, PFUZE100_SW1ABVOL, 0x1f, pfuze3000_sw1a),
PFUZE3000_SW_REG(PFUZE3001, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo), PFUZE3000_SW_REG(PFUZE3001, SW2, PFUZE100_SW2VOL, 0x7, pfuze3000_sw2lo),
PFUZE3000_SW3_REG(PFUZE3001, SW3, PFUZE100_SW3AVOL, 900000, 1650000, 50000), PFUZE3000_SW3_REG(PFUZE3001, SW3, PFUZE100_SW3AVOL, 900000, 1650000, 50000),
......
...@@ -62,7 +62,7 @@ static int qcom_sdm845_refgen_is_enabled(struct regulator_dev *rdev) ...@@ -62,7 +62,7 @@ static int qcom_sdm845_refgen_is_enabled(struct regulator_dev *rdev)
return 1; return 1;
} }
static struct regulator_desc sdm845_refgen_desc = { static const struct regulator_desc sdm845_refgen_desc = {
.enable_time = 5, .enable_time = 5,
.name = "refgen", .name = "refgen",
.owner = THIS_MODULE, .owner = THIS_MODULE,
...@@ -74,7 +74,7 @@ static struct regulator_desc sdm845_refgen_desc = { ...@@ -74,7 +74,7 @@ static struct regulator_desc sdm845_refgen_desc = {
}, },
}; };
static struct regulator_desc sm8250_refgen_desc = { static const struct regulator_desc sm8250_refgen_desc = {
.enable_reg = REFGEN_REG_PWRDWN_CTRL5, .enable_reg = REFGEN_REG_PWRDWN_CTRL5,
.enable_mask = REFGEN_PWRDWN_CTRL5_MASK, .enable_mask = REFGEN_PWRDWN_CTRL5_MASK,
.enable_val = REFGEN_PWRDWN_CTRL5_ENABLE, .enable_val = REFGEN_PWRDWN_CTRL5_ENABLE,
......
...@@ -158,7 +158,7 @@ struct rpmh_vreg_init_data { ...@@ -158,7 +158,7 @@ struct rpmh_vreg_init_data {
* @wait_for_ack: Boolean indicating if execution must wait until the * @wait_for_ack: Boolean indicating if execution must wait until the
* request has been acknowledged as complete * request has been acknowledged as complete
* *
* Return: 0 on success, errno on failure * Return: 0 on success, or a negative error number on failure
*/ */
static int rpmh_regulator_send_request(struct rpmh_vreg *vreg, static int rpmh_regulator_send_request(struct rpmh_vreg *vreg,
struct tcs_cmd *cmd, bool wait_for_ack) struct tcs_cmd *cmd, bool wait_for_ack)
...@@ -317,7 +317,7 @@ static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev) ...@@ -317,7 +317,7 @@ static unsigned int rpmh_regulator_vrm_get_mode(struct regulator_dev *rdev)
* This function is used in the regulator_ops for VRM type RPMh regulator * This function is used in the regulator_ops for VRM type RPMh regulator
* devices. * devices.
* *
* Return: 0 on success, errno on failure * Return: 0 on success, or a negative error number on failure
*/ */
static unsigned int rpmh_regulator_vrm_get_optimum_mode( static unsigned int rpmh_regulator_vrm_get_optimum_mode(
struct regulator_dev *rdev, int input_uV, int output_uV, int load_uA) struct regulator_dev *rdev, int input_uV, int output_uV, int load_uA)
...@@ -409,7 +409,7 @@ static const struct regulator_ops rpmh_regulator_xob_ops = { ...@@ -409,7 +409,7 @@ static const struct regulator_ops rpmh_regulator_xob_ops = {
* @pmic_rpmh_data: Pointer to a null-terminated array of rpmh-regulator * @pmic_rpmh_data: Pointer to a null-terminated array of rpmh-regulator
* resources defined for the top level PMIC device * resources defined for the top level PMIC device
* *
* Return: 0 on success, errno on failure * Return: 0 on success, or a negative error number on failure
*/ */
static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev, static int rpmh_regulator_init_vreg(struct rpmh_vreg *vreg, struct device *dev,
struct device_node *node, const char *pmic_id, struct device_node *node, const char *pmic_id,
...@@ -1537,7 +1537,6 @@ static int rpmh_regulator_probe(struct platform_device *pdev) ...@@ -1537,7 +1537,6 @@ static int rpmh_regulator_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct rpmh_vreg_init_data *vreg_data; const struct rpmh_vreg_init_data *vreg_data;
struct device_node *node;
struct rpmh_vreg *vreg; struct rpmh_vreg *vreg;
const char *pmic_id; const char *pmic_id;
int ret; int ret;
...@@ -1552,19 +1551,15 @@ static int rpmh_regulator_probe(struct platform_device *pdev) ...@@ -1552,19 +1551,15 @@ static int rpmh_regulator_probe(struct platform_device *pdev)
return ret; return ret;
} }
for_each_available_child_of_node(dev->of_node, node) { for_each_available_child_of_node_scoped(dev->of_node, node) {
vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL); vreg = devm_kzalloc(dev, sizeof(*vreg), GFP_KERNEL);
if (!vreg) { if (!vreg)
of_node_put(node);
return -ENOMEM; return -ENOMEM;
}
ret = rpmh_regulator_init_vreg(vreg, dev, node, pmic_id, ret = rpmh_regulator_init_vreg(vreg, dev, node, pmic_id,
vreg_data); vreg_data);
if (ret < 0) { if (ret < 0)
of_node_put(node);
return ret; return ret;
}
} }
return 0; return 0;
......
...@@ -1386,7 +1386,7 @@ MODULE_DEVICE_TABLE(of, rpm_of_match); ...@@ -1386,7 +1386,7 @@ MODULE_DEVICE_TABLE(of, rpm_of_match);
* @pmic_rpm_data: Pointer to a null-terminated array of qcom_smd-regulator * @pmic_rpm_data: Pointer to a null-terminated array of qcom_smd-regulator
* resources defined for the top level PMIC device * resources defined for the top level PMIC device
* *
* Return: 0 on success, errno on failure * Return: 0 on success, or a negative error number on failure
*/ */
static int rpm_regulator_init_vreg(struct qcom_rpm_reg *vreg, struct device *dev, static int rpm_regulator_init_vreg(struct qcom_rpm_reg *vreg, struct device *dev,
struct device_node *node, struct device_node *node,
...@@ -1435,7 +1435,6 @@ static int rpm_reg_probe(struct platform_device *pdev) ...@@ -1435,7 +1435,6 @@ static int rpm_reg_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
const struct rpm_regulator_data *vreg_data; const struct rpm_regulator_data *vreg_data;
struct device_node *node;
struct qcom_rpm_reg *vreg; struct qcom_rpm_reg *vreg;
struct qcom_smd_rpm *rpm; struct qcom_smd_rpm *rpm;
int ret; int ret;
...@@ -1455,18 +1454,14 @@ static int rpm_reg_probe(struct platform_device *pdev) ...@@ -1455,18 +1454,14 @@ static int rpm_reg_probe(struct platform_device *pdev)
if (!vreg_data) if (!vreg_data)
return -ENODEV; return -ENODEV;
for_each_available_child_of_node(dev->of_node, node) { for_each_available_child_of_node_scoped(dev->of_node, node) {
vreg = devm_kzalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL); vreg = devm_kzalloc(&pdev->dev, sizeof(*vreg), GFP_KERNEL);
if (!vreg) { if (!vreg)
of_node_put(node);
return -ENOMEM; return -ENOMEM;
}
ret = rpm_regulator_init_vreg(vreg, dev, node, vreg_data); ret = rpm_regulator_init_vreg(vreg, dev, node, vreg_data);
if (ret < 0) { if (ret < 0)
of_node_put(node);
return ret; return ret;
}
} }
return 0; return 0;
......
...@@ -245,7 +245,7 @@ enum spmi_saw3_registers { ...@@ -245,7 +245,7 @@ enum spmi_saw3_registers {
SAW3_VERSION = 0xFD0, SAW3_VERSION = 0xFD0,
}; };
/* Used for indexing into ctrl_reg. These are offets from 0x40 */ /* Used for indexing into ctrl_reg. These are offsets from 0x40 */
enum spmi_common_control_register_index { enum spmi_common_control_register_index {
SPMI_COMMON_IDX_VOLTAGE_RANGE = 0, SPMI_COMMON_IDX_VOLTAGE_RANGE = 0,
SPMI_COMMON_IDX_VOLTAGE_SET = 1, SPMI_COMMON_IDX_VOLTAGE_SET = 1,
...@@ -2528,8 +2528,8 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev) ...@@ -2528,8 +2528,8 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev)
if (!reg) if (!reg)
return -ENODEV; return -ENODEV;
if (of_find_property(node, "qcom,saw-reg", &lenp)) { syscon = of_parse_phandle(node, "qcom,saw-reg", 0);
syscon = of_parse_phandle(node, "qcom,saw-reg", 0); if (syscon) {
saw_regmap = syscon_node_to_regmap(syscon); saw_regmap = syscon_node_to_regmap(syscon);
of_node_put(syscon); of_node_put(syscon);
if (IS_ERR(saw_regmap)) if (IS_ERR(saw_regmap))
...@@ -2577,15 +2577,13 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev) ...@@ -2577,15 +2577,13 @@ static int qcom_spmi_regulator_probe(struct platform_device *pdev)
if (saw_regmap) { if (saw_regmap) {
reg_node = of_get_child_by_name(node, reg->name); reg_node = of_get_child_by_name(node, reg->name);
reg_prop = of_find_property(reg_node, "qcom,saw-leader", if (of_property_read_bool(reg_node, "qcom,saw-leader")) {
&lenp);
of_node_put(reg_node);
if (reg_prop) {
spmi_saw_ops = *(vreg->desc.ops); spmi_saw_ops = *(vreg->desc.ops);
spmi_saw_ops.set_voltage_sel = spmi_saw_ops.set_voltage_sel =
spmi_regulator_saw_set_voltage; spmi_regulator_saw_set_voltage;
vreg->desc.ops = &spmi_saw_ops; vreg->desc.ops = &spmi_saw_ops;
} }
of_node_put(reg_node);
} }
if (vreg->set_points && vreg->set_points->count == 1) { if (vreg->set_points && vreg->set_points->count == 1) {
......
...@@ -245,8 +245,8 @@ static void rt5120_fillin_regulator_desc(struct regulator_desc *desc, int rid) ...@@ -245,8 +245,8 @@ static void rt5120_fillin_regulator_desc(struct regulator_desc *desc, int rid)
desc->n_voltages = RT5120_BUCK1_NUM_VOLT; desc->n_voltages = RT5120_BUCK1_NUM_VOLT;
desc->min_uV = RT5120_BUCK1_MINUV; desc->min_uV = RT5120_BUCK1_MINUV;
desc->uV_step = RT5120_BUCK1_STEPUV; desc->uV_step = RT5120_BUCK1_STEPUV;
desc->vsel_reg = RT5120_REG_CH1VID, desc->vsel_reg = RT5120_REG_CH1VID;
desc->vsel_mask = RT5120_CH1VID_MASK, desc->vsel_mask = RT5120_CH1VID_MASK;
desc->ops = &rt5120_buck1_ops; desc->ops = &rt5120_buck1_ops;
break; break;
case RT5120_REGULATOR_BUCK2 ... RT5120_REGULATOR_BUCK4: case RT5120_REGULATOR_BUCK2 ... RT5120_REGULATOR_BUCK4:
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
// http://www.samsung.com // http://www.samsung.com
#include <linux/bug.h> #include <linux/bug.h>
#include <linux/cleanup.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
#include <linux/slab.h> #include <linux/slab.h>
...@@ -1120,7 +1121,6 @@ static const struct regulator_desc s2mpu02_regulators[] = { ...@@ -1120,7 +1121,6 @@ static const struct regulator_desc s2mpu02_regulators[] = {
static int s2mps11_pmic_probe(struct platform_device *pdev) static int s2mps11_pmic_probe(struct platform_device *pdev)
{ {
struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
struct of_regulator_match *rdata = NULL;
struct regulator_config config = { }; struct regulator_config config = { };
struct s2mps11_info *s2mps11; struct s2mps11_info *s2mps11;
unsigned int rdev_num = 0; unsigned int rdev_num = 0;
...@@ -1170,7 +1170,8 @@ static int s2mps11_pmic_probe(struct platform_device *pdev) ...@@ -1170,7 +1170,8 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
if (!s2mps11->ext_control_gpiod) if (!s2mps11->ext_control_gpiod)
return -ENOMEM; return -ENOMEM;
rdata = kcalloc(rdev_num, sizeof(*rdata), GFP_KERNEL); struct of_regulator_match *rdata __free(kfree) =
kcalloc(rdev_num, sizeof(*rdata), GFP_KERNEL);
if (!rdata) if (!rdata)
return -ENOMEM; return -ENOMEM;
...@@ -1179,7 +1180,7 @@ static int s2mps11_pmic_probe(struct platform_device *pdev) ...@@ -1179,7 +1180,7 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
ret = s2mps11_pmic_dt_parse(pdev, rdata, s2mps11, rdev_num); ret = s2mps11_pmic_dt_parse(pdev, rdata, s2mps11, rdev_num);
if (ret) if (ret)
goto out; return ret;
platform_set_drvdata(pdev, s2mps11); platform_set_drvdata(pdev, s2mps11);
...@@ -1201,10 +1202,9 @@ static int s2mps11_pmic_probe(struct platform_device *pdev) ...@@ -1201,10 +1202,9 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
regulator = devm_regulator_register(&pdev->dev, regulator = devm_regulator_register(&pdev->dev,
&regulators[i], &config); &regulators[i], &config);
if (IS_ERR(regulator)) { if (IS_ERR(regulator)) {
ret = PTR_ERR(regulator);
dev_err(&pdev->dev, "regulator init failed for %d\n", dev_err(&pdev->dev, "regulator init failed for %d\n",
i); i);
goto out; return PTR_ERR(regulator);
} }
if (config.ena_gpiod) { if (config.ena_gpiod) {
...@@ -1214,15 +1214,12 @@ static int s2mps11_pmic_probe(struct platform_device *pdev) ...@@ -1214,15 +1214,12 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
dev_err(&pdev->dev, dev_err(&pdev->dev,
"failed to enable GPIO control over %s: %d\n", "failed to enable GPIO control over %s: %d\n",
regulator->desc->name, ret); regulator->desc->name, ret);
goto out; return ret;
} }
} }
} }
out: return 0;
kfree(rdata);
return ret;
} }
static const struct platform_device_id s2mps11_pmic_id[] = { static const struct platform_device_id s2mps11_pmic_id[] = {
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
// Copyright (c) 2011 Samsung Electronics Co., Ltd // Copyright (c) 2011 Samsung Electronics Co., Ltd
// http://www.samsung.com // http://www.samsung.com
#include <linux/cleanup.h>
#include <linux/err.h> #include <linux/err.h>
#include <linux/of_gpio.h> #include <linux/of_gpio.h>
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
...@@ -521,7 +522,7 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -521,7 +522,7 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
struct sec_platform_data *pdata) struct sec_platform_data *pdata)
{ {
struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent); struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
struct device_node *pmic_np, *regulators_np, *reg_np; struct device_node *pmic_np, *reg_np;
struct sec_regulator_data *rdata; struct sec_regulator_data *rdata;
struct sec_opmode_data *rmode; struct sec_opmode_data *rmode;
unsigned int i, dvs_voltage_nr = 8, ret; unsigned int i, dvs_voltage_nr = 8, ret;
...@@ -532,7 +533,8 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -532,7 +533,8 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
return -ENODEV; return -ENODEV;
} }
regulators_np = of_get_child_by_name(pmic_np, "regulators"); struct device_node *regulators_np __free(device_node) = of_get_child_by_name(pmic_np,
"regulators");
if (!regulators_np) { if (!regulators_np) {
dev_err(iodev->dev, "could not find regulators sub-node\n"); dev_err(iodev->dev, "could not find regulators sub-node\n");
return -EINVAL; return -EINVAL;
...@@ -544,18 +546,14 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -544,18 +546,14 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
rdata = devm_kcalloc(&pdev->dev, rdata = devm_kcalloc(&pdev->dev,
pdata->num_regulators, sizeof(*rdata), pdata->num_regulators, sizeof(*rdata),
GFP_KERNEL); GFP_KERNEL);
if (!rdata) { if (!rdata)
of_node_put(regulators_np);
return -ENOMEM; return -ENOMEM;
}
rmode = devm_kcalloc(&pdev->dev, rmode = devm_kcalloc(&pdev->dev,
pdata->num_regulators, sizeof(*rmode), pdata->num_regulators, sizeof(*rmode),
GFP_KERNEL); GFP_KERNEL);
if (!rmode) { if (!rmode)
of_node_put(regulators_np);
return -ENOMEM; return -ENOMEM;
}
pdata->regulators = rdata; pdata->regulators = rdata;
pdata->opmode = rmode; pdata->opmode = rmode;
...@@ -581,7 +579,6 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -581,7 +579,6 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
rdata->ext_control_gpiod = NULL; rdata->ext_control_gpiod = NULL;
} else if (IS_ERR(rdata->ext_control_gpiod)) { } else if (IS_ERR(rdata->ext_control_gpiod)) {
of_node_put(reg_np); of_node_put(reg_np);
of_node_put(regulators_np);
return PTR_ERR(rdata->ext_control_gpiod); return PTR_ERR(rdata->ext_control_gpiod);
} }
...@@ -603,8 +600,6 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev, ...@@ -603,8 +600,6 @@ static int s5m8767_pmic_dt_parse_pdata(struct platform_device *pdev,
rmode++; rmode++;
} }
of_node_put(regulators_np);
if (of_property_read_bool(pmic_np, "s5m8767,pmic-buck2-uses-gpio-dvs")) { if (of_property_read_bool(pmic_np, "s5m8767,pmic-buck2-uses-gpio-dvs")) {
pdata->buck2_gpiodvs = true; pdata->buck2_gpiodvs = true;
......
...@@ -297,7 +297,7 @@ static int process_scmi_regulator_of_node(struct scmi_device *sdev, ...@@ -297,7 +297,7 @@ static int process_scmi_regulator_of_node(struct scmi_device *sdev,
static int scmi_regulator_probe(struct scmi_device *sdev) static int scmi_regulator_probe(struct scmi_device *sdev)
{ {
int d, ret, num_doms; int d, ret, num_doms;
struct device_node *np, *child; struct device_node *np;
const struct scmi_handle *handle = sdev->handle; const struct scmi_handle *handle = sdev->handle;
struct scmi_regulator_info *rinfo; struct scmi_regulator_info *rinfo;
struct scmi_protocol_handle *ph; struct scmi_protocol_handle *ph;
...@@ -341,13 +341,11 @@ static int scmi_regulator_probe(struct scmi_device *sdev) ...@@ -341,13 +341,11 @@ static int scmi_regulator_probe(struct scmi_device *sdev)
*/ */
of_node_get(handle->dev->of_node); of_node_get(handle->dev->of_node);
np = of_find_node_by_name(handle->dev->of_node, "regulators"); np = of_find_node_by_name(handle->dev->of_node, "regulators");
for_each_child_of_node(np, child) { for_each_child_of_node_scoped(np, child) {
ret = process_scmi_regulator_of_node(sdev, ph, child, rinfo); ret = process_scmi_regulator_of_node(sdev, ph, child, rinfo);
/* abort on any mem issue */ /* abort on any mem issue */
if (ret == -ENOMEM) { if (ret == -ENOMEM)
of_node_put(child);
return ret; return ret;
}
} }
of_node_put(np); of_node_put(np);
/* /*
......
// SPDX-License-Identifier: GPL-2.0-only
#include <linux/mfd/sm5703.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/platform_device.h>
#include <linux/regmap.h>
#include <linux/regulator/driver.h>
#include <linux/regulator/of_regulator.h>
enum sm5703_regulators {
SM5703_BUCK,
SM5703_LDO1,
SM5703_LDO2,
SM5703_LDO3,
SM5703_USBLDO1,
SM5703_USBLDO2,
SM5703_VBUS,
SM5703_MAX_REGULATORS,
};
static const int sm5703_ldo_voltagemap[] = {
1500000, 1800000, 2600000, 2800000, 3000000, 3300000,
};
static const int sm5703_buck_voltagemap[] = {
1000000, 1000000, 1000000, 1000000,
1000000, 1000000, 1000000, 1000000,
1000000, 1000000, 1000000, 1100000,
1200000, 1300000, 1400000, 1500000,
1600000, 1700000, 1800000, 1900000,
2000000, 2100000, 2200000, 2300000,
2400000, 2500000, 2600000, 2700000,
2800000, 2900000, 3000000, 3000000,
};
#define SM5703USBLDO(_name, _id) \
[SM5703_USBLDO ## _id] = { \
.name = _name, \
.of_match = _name, \
.regulators_node = "regulators", \
.type = REGULATOR_VOLTAGE, \
.id = SM5703_USBLDO ## _id, \
.ops = &sm5703_regulator_ops_fixed, \
.n_voltages = 1, \
.fixed_uV = SM5703_USBLDO_MICROVOLT, \
.enable_reg = SM5703_REG_USBLDO12, \
.enable_mask = SM5703_REG_EN_USBLDO ##_id, \
.owner = THIS_MODULE, \
}
#define SM5703VBUS(_name) \
[SM5703_VBUS] = { \
.name = _name, \
.of_match = _name, \
.regulators_node = "regulators", \
.type = REGULATOR_VOLTAGE, \
.id = SM5703_VBUS, \
.ops = &sm5703_regulator_ops_fixed, \
.n_voltages = 1, \
.fixed_uV = SM5703_VBUS_MICROVOLT, \
.enable_reg = SM5703_REG_CNTL, \
.enable_mask = SM5703_OPERATION_MODE_MASK, \
.enable_val = SM5703_OPERATION_MODE_USB_OTG_MODE, \
.disable_val = SM5703_OPERATION_MODE_CHARGING_ON, \
.owner = THIS_MODULE, \
}
#define SM5703BUCK(_name) \
[SM5703_BUCK] = { \
.name = _name, \
.of_match = _name, \
.regulators_node = "regulators", \
.type = REGULATOR_VOLTAGE, \
.id = SM5703_BUCK, \
.ops = &sm5703_regulator_ops, \
.n_voltages = ARRAY_SIZE(sm5703_buck_voltagemap), \
.volt_table = sm5703_buck_voltagemap, \
.vsel_reg = SM5703_REG_BUCK, \
.vsel_mask = SM5703_BUCK_VOLT_MASK, \
.enable_reg = SM5703_REG_BUCK, \
.enable_mask = SM5703_REG_EN_BUCK, \
.owner = THIS_MODULE, \
}
#define SM5703LDO(_name, _id) \
[SM5703_LDO ## _id] = { \
.name = _name, \
.of_match = _name, \
.regulators_node = "regulators", \
.type = REGULATOR_VOLTAGE, \
.id = SM5703_LDO ## _id, \
.ops = &sm5703_regulator_ops, \
.n_voltages = ARRAY_SIZE(sm5703_ldo_voltagemap), \
.volt_table = sm5703_ldo_voltagemap, \
.vsel_reg = SM5703_REG_LDO ##_id, \
.vsel_mask = SM5703_LDO_VOLT_MASK, \
.enable_reg = SM5703_REG_LDO ##_id, \
.enable_mask = SM5703_LDO_EN, \
.owner = THIS_MODULE, \
}
static const struct regulator_ops sm5703_regulator_ops = {
.enable = regulator_enable_regmap,
.disable = regulator_disable_regmap,
.is_enabled = regulator_is_enabled_regmap,
.list_voltage = regulator_list_voltage_table,
.get_voltage_sel = regulator_get_voltage_sel_regmap,
.set_voltage_sel = regulator_set_voltage_sel_regmap,
};
static const struct regulator_ops sm5703_regulator_ops_fixed = {
.enable = regulator_enable_regmap,
.disable = regulator_disable_regmap,
.is_enabled = regulator_is_enabled_regmap,
};
static struct regulator_desc sm5703_regulators_desc[SM5703_MAX_REGULATORS] = {
SM5703BUCK("buck"),
SM5703LDO("ldo1", 1),
SM5703LDO("ldo2", 2),
SM5703LDO("ldo3", 3),
SM5703USBLDO("usbldo1", 1),
SM5703USBLDO("usbldo2", 2),
SM5703VBUS("vbus"),
};
static int sm5703_regulator_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct regulator_config config = { NULL, };
struct regulator_dev *rdev;
struct sm5703_dev *sm5703 = dev_get_drvdata(pdev->dev.parent);
int i;
config.dev = dev->parent;
config.regmap = sm5703->regmap;
for (i = 0; i < SM5703_MAX_REGULATORS; i++) {
rdev = devm_regulator_register(dev,
&sm5703_regulators_desc[i],
&config);
if (IS_ERR(rdev))
return dev_err_probe(dev, PTR_ERR(rdev),
"Failed to register a regulator\n");
}
return 0;
}
static const struct platform_device_id sm5703_regulator_id[] = {
{ "sm5703-regulator", 0 },
{}
};
MODULE_DEVICE_TABLE(platform, sm5703_regulator_id);
static struct platform_driver sm5703_regulator_driver = {
.driver = {
.name = "sm5703-regulator",
.probe_type = PROBE_PREFER_ASYNCHRONOUS,
},
.probe = sm5703_regulator_probe,
.id_table = sm5703_regulator_id,
};
module_platform_driver(sm5703_regulator_driver);
MODULE_DESCRIPTION("Silicon Mitus SM5703 LDO/Buck/USB regulator driver");
MODULE_AUTHOR("Markuss Broks <markuss.broks@gmail.com>");
MODULE_LICENSE("GPL");
...@@ -103,7 +103,7 @@ static const struct regulator_ops tps6287x_regulator_ops = { ...@@ -103,7 +103,7 @@ static const struct regulator_ops tps6287x_regulator_ops = {
.set_ramp_delay = regulator_set_ramp_delay_regmap, .set_ramp_delay = regulator_set_ramp_delay_regmap,
}; };
static struct regulator_desc tps6287x_reg = { static const struct regulator_desc tps6287x_reg = {
.name = "tps6287x", .name = "tps6287x",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.ops = &tps6287x_regulator_ops, .ops = &tps6287x_regulator_ops,
......
...@@ -242,17 +242,17 @@ static const struct regulator_desc tps65023_regulators[] = { ...@@ -242,17 +242,17 @@ static const struct regulator_desc tps65023_regulators[] = {
TPS65023_REGULATOR_LDO(2, TPS65023_LDO2_VSEL_table, 0x70), TPS65023_REGULATOR_LDO(2, TPS65023_LDO2_VSEL_table, 0x70),
}; };
static struct tps_driver_data tps65020_drv_data = { static const struct tps_driver_data tps65020_drv_data = {
.desc = tps65020_regulators, .desc = tps65020_regulators,
.core_regulator = TPS65023_DCDC_3, .core_regulator = TPS65023_DCDC_3,
}; };
static struct tps_driver_data tps65021_drv_data = { static const struct tps_driver_data tps65021_drv_data = {
.desc = tps65021_regulators, .desc = tps65021_regulators,
.core_regulator = TPS65023_DCDC_3, .core_regulator = TPS65023_DCDC_3,
}; };
static struct tps_driver_data tps65023_drv_data = { static const struct tps_driver_data tps65023_drv_data = {
.desc = tps65023_regulators, .desc = tps65023_regulators,
.core_regulator = TPS65023_DCDC_1, .core_regulator = TPS65023_DCDC_1,
}; };
......
...@@ -146,10 +146,10 @@ static int wm831x_isink_probe(struct platform_device *pdev) ...@@ -146,10 +146,10 @@ static int wm831x_isink_probe(struct platform_device *pdev)
isink->desc.ops = &wm831x_isink_ops; isink->desc.ops = &wm831x_isink_ops;
isink->desc.type = REGULATOR_CURRENT; isink->desc.type = REGULATOR_CURRENT;
isink->desc.owner = THIS_MODULE; isink->desc.owner = THIS_MODULE;
isink->desc.curr_table = wm831x_isinkv_values, isink->desc.curr_table = wm831x_isinkv_values;
isink->desc.n_current_limits = ARRAY_SIZE(wm831x_isinkv_values), isink->desc.n_current_limits = ARRAY_SIZE(wm831x_isinkv_values);
isink->desc.csel_reg = isink->reg, isink->desc.csel_reg = isink->reg;
isink->desc.csel_mask = WM831X_CS1_ISEL_MASK, isink->desc.csel_mask = WM831X_CS1_ISEL_MASK;
config.dev = pdev->dev.parent; config.dev = pdev->dev.parent;
config.init_data = pdata->isink[id]; config.init_data = pdata->isink[id];
......
...@@ -112,7 +112,7 @@ static const struct regulator_ops wm8400_dcdc_ops = { ...@@ -112,7 +112,7 @@ static const struct regulator_ops wm8400_dcdc_ops = {
.get_optimum_mode = wm8400_dcdc_get_optimum_mode, .get_optimum_mode = wm8400_dcdc_get_optimum_mode,
}; };
static struct regulator_desc regulators[] = { static const struct regulator_desc regulators[] = {
{ {
.name = "LDO1", .name = "LDO1",
.id = WM8400_LDO1, .id = WM8400_LDO1,
......
...@@ -115,6 +115,8 @@ enum axp20x_variants { ...@@ -115,6 +115,8 @@ enum axp20x_variants {
#define AXP313A_IRQ_STATE 0x21 #define AXP313A_IRQ_STATE 0x21
#define AXP717_ON_INDICATE 0x00 #define AXP717_ON_INDICATE 0x00
#define AXP717_MODULE_EN_CONTROL_2 0x19
#define AXP717_BOOST_CONTROL 0x1e
#define AXP717_IRQ0_EN 0x40 #define AXP717_IRQ0_EN 0x40
#define AXP717_IRQ1_EN 0x41 #define AXP717_IRQ1_EN 0x41
#define AXP717_IRQ2_EN 0x42 #define AXP717_IRQ2_EN 0x42
...@@ -484,6 +486,7 @@ enum { ...@@ -484,6 +486,7 @@ enum {
AXP717_CLDO3, AXP717_CLDO3,
AXP717_CLDO4, AXP717_CLDO4,
AXP717_CPUSLDO, AXP717_CPUSLDO,
AXP717_BOOST,
AXP717_REG_ID_MAX, AXP717_REG_ID_MAX,
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment