* [PATCH v4 0/7] AXP8x3 AC and battery power supply support
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: Lee Jones, Quentin Schulz, Oskari Lemmela, linux-pm, devicetree,
linux-kernel, linux-arm-kernel
AXP813 AC power supply support with input current and
voltage limiting support.
AXP803 AC and battery power supply support.
Changes in v4:
* Change order of axp20x-gpio in axp20x.c
* Fix indentation and spaces to tabs in axp20x.c
Changes in v3:
* Reorder ac_power_supply DT node
* Rename axp20x_ac_power_set_property function
* Split mfd commit
Changes in v2:
* Reuse axp813 compatibles for axp803
* Refactor axp20x_ac_power.c
Oskari Lemmela (7):
dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
ARM: dts: axp81x: add AC power supply subnode
arm64: dts: allwinner: axp803: add AC and battery power supplies
arm64: dts: allwinner: a64: sopine: enable power supplies
power: supply: add AC power supply driver for AXP813
mfd: axp20x: Add AC power supply cell for AXP813
mfd: axp20x: Add supported cells for AXP803
.../bindings/power/supply/axp20x_ac_power.txt | 3 +
arch/arm/boot/dts/axp81x.dtsi | 5 +
arch/arm64/boot/dts/allwinner/axp803.dtsi | 31 +++++++
.../allwinner/sun50i-a64-sopine-baseboard.dts | 8 ++
drivers/mfd/axp20x.c | 20 ++++
drivers/power/supply/axp20x_ac_power.c | 92 +++++++++++++++++++
include/linux/mfd/axp20x.h | 1 +
7 files changed, 160 insertions(+)
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 0/7] AXP8x3 AC and battery power supply support
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: linux-arm-kernel
AXP813 AC power supply support with input current and
voltage limiting support.
AXP803 AC and battery power supply support.
Changes in v4:
* Change order of axp20x-gpio in axp20x.c
* Fix indentation and spaces to tabs in axp20x.c
Changes in v3:
* Reorder ac_power_supply DT node
* Rename axp20x_ac_power_set_property function
* Split mfd commit
Changes in v2:
* Reuse axp813 compatibles for axp803
* Refactor axp20x_ac_power.c
Oskari Lemmela (7):
dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
ARM: dts: axp81x: add AC power supply subnode
arm64: dts: allwinner: axp803: add AC and battery power supplies
arm64: dts: allwinner: a64: sopine: enable power supplies
power: supply: add AC power supply driver for AXP813
mfd: axp20x: Add AC power supply cell for AXP813
mfd: axp20x: Add supported cells for AXP803
.../bindings/power/supply/axp20x_ac_power.txt | 3 +
arch/arm/boot/dts/axp81x.dtsi | 5 +
arch/arm64/boot/dts/allwinner/axp803.dtsi | 31 +++++++
.../allwinner/sun50i-a64-sopine-baseboard.dts | 8 ++
drivers/mfd/axp20x.c | 20 ++++
drivers/power/supply/axp20x_ac_power.c | 92 +++++++++++++++++++
include/linux/mfd/axp20x.h | 1 +
7 files changed, 160 insertions(+)
--
2.17.1
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 1/7] dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-13 8:08 ` Oskari Lemmela
-1 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: Lee Jones, Quentin Schulz, Oskari Lemmela, linux-pm, devicetree,
linux-kernel, linux-arm-kernel
The AXP803/AXP813 AC power supply can limit input current and voltage.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
.../devicetree/bindings/power/supply/axp20x_ac_power.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt b/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
index 826e8a879121..7a1fb532abe5 100644
--- a/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
+++ b/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
@@ -4,6 +4,7 @@ Required Properties:
- compatible: One of:
"x-powers,axp202-ac-power-supply"
"x-powers,axp221-ac-power-supply"
+ "x-powers,axp813-ac-power-supply"
This node is a subnode of the axp20x PMIC.
@@ -13,6 +14,8 @@ reading ADC channels from the AXP20X ADC.
The AXP22X is only able to tell if an AC power supply is present and
usable.
+AXP813/AXP803 are able to limit current and supply voltage
+
Example:
&axp209 {
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 1/7] dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: linux-arm-kernel
The AXP803/AXP813 AC power supply can limit input current and voltage.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Rob Herring <robh@kernel.org>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
.../devicetree/bindings/power/supply/axp20x_ac_power.txt | 3 +++
1 file changed, 3 insertions(+)
diff --git a/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt b/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
index 826e8a879121..7a1fb532abe5 100644
--- a/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
+++ b/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
@@ -4,6 +4,7 @@ Required Properties:
- compatible: One of:
"x-powers,axp202-ac-power-supply"
"x-powers,axp221-ac-power-supply"
+ "x-powers,axp813-ac-power-supply"
This node is a subnode of the axp20x PMIC.
@@ -13,6 +14,8 @@ reading ADC channels from the AXP20X ADC.
The AXP22X is only able to tell if an AC power supply is present and
usable.
+AXP813/AXP803 are able to limit current and supply voltage
+
Example:
&axp209 {
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 2/7] ARM: dts: axp81x: add AC power supply subnode
2018-10-13 8:08 ` Oskari Lemmela
(?)
@ 2018-10-13 8:08 ` Oskari Lemmela
-1 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: Lee Jones, Quentin Schulz, Oskari Lemmela, linux-pm, devicetree,
linux-kernel, linux-arm-kernel
Add AC power supply subnode for AXP81X PMIC.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
arch/arm/boot/dts/axp81x.dtsi | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/arm/boot/dts/axp81x.dtsi b/arch/arm/boot/dts/axp81x.dtsi
index 043c717dcef1..bd83962d3627 100644
--- a/arch/arm/boot/dts/axp81x.dtsi
+++ b/arch/arm/boot/dts/axp81x.dtsi
@@ -48,6 +48,11 @@
interrupt-controller;
#interrupt-cells = <1>;
+ ac_power_supply: ac-power-supply {
+ compatible = "x-powers,axp813-ac-power-supply";
+ status = "disabled";
+ };
+
axp_adc: adc {
compatible = "x-powers,axp813-adc";
#io-channel-cells = <1>;
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 2/7] ARM: dts: axp81x: add AC power supply subnode
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: devicetree, linux-pm, linux-kernel, Quentin Schulz,
Oskari Lemmela, Lee Jones, linux-arm-kernel
Add AC power supply subnode for AXP81X PMIC.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
arch/arm/boot/dts/axp81x.dtsi | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/arm/boot/dts/axp81x.dtsi b/arch/arm/boot/dts/axp81x.dtsi
index 043c717dcef1..bd83962d3627 100644
--- a/arch/arm/boot/dts/axp81x.dtsi
+++ b/arch/arm/boot/dts/axp81x.dtsi
@@ -48,6 +48,11 @@
interrupt-controller;
#interrupt-cells = <1>;
+ ac_power_supply: ac-power-supply {
+ compatible = "x-powers,axp813-ac-power-supply";
+ status = "disabled";
+ };
+
axp_adc: adc {
compatible = "x-powers,axp813-adc";
#io-channel-cells = <1>;
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 2/7] ARM: dts: axp81x: add AC power supply subnode
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: linux-arm-kernel
Add AC power supply subnode for AXP81X PMIC.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
arch/arm/boot/dts/axp81x.dtsi | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/arch/arm/boot/dts/axp81x.dtsi b/arch/arm/boot/dts/axp81x.dtsi
index 043c717dcef1..bd83962d3627 100644
--- a/arch/arm/boot/dts/axp81x.dtsi
+++ b/arch/arm/boot/dts/axp81x.dtsi
@@ -48,6 +48,11 @@
interrupt-controller;
#interrupt-cells = <1>;
+ ac_power_supply: ac-power-supply {
+ compatible = "x-powers,axp813-ac-power-supply";
+ status = "disabled";
+ };
+
axp_adc: adc {
compatible = "x-powers,axp813-adc";
#io-channel-cells = <1>;
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 3/7] arm64: dts: allwinner: axp803: add AC and battery power supplies
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-13 8:08 ` Oskari Lemmela
-1 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: Lee Jones, Quentin Schulz, Oskari Lemmela, linux-pm, devicetree,
linux-kernel, linux-arm-kernel
AXP803 is compatible with AXP813. Add DT nodes ADC, GPIO,
AC and battery power supplies.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
arch/arm64/boot/dts/allwinner/axp803.dtsi | 31 +++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/axp803.dtsi b/arch/arm64/boot/dts/allwinner/axp803.dtsi
index e5eae8bafc42..128177178615 100644
--- a/arch/arm64/boot/dts/allwinner/axp803.dtsi
+++ b/arch/arm64/boot/dts/allwinner/axp803.dtsi
@@ -49,6 +49,37 @@
interrupt-controller;
#interrupt-cells = <1>;
+ ac_power_supply: ac-power-supply {
+ compatible = "x-powers,axp813-ac-power-supply";
+ status = "disabled";
+ };
+
+ axp_adc: adc {
+ compatible = "x-powers,axp813-adc";
+ #io-channel-cells = <1>;
+ };
+
+ axp_gpio: gpio {
+ compatible = "x-powers,axp813-gpio";
+ gpio-controller;
+ #gpio-cells = <2>;
+
+ gpio0_ldo: gpio0-ldo {
+ pins = "GPIO0";
+ function = "ldo";
+ };
+
+ gpio1_ldo: gpio1-ldo {
+ pins = "GPIO1";
+ function = "ldo";
+ };
+ };
+
+ battery_power_supply: battery-power-supply {
+ compatible = "x-powers,axp813-battery-power-supply";
+ status = "disabled";
+ };
+
regulators {
/* Default work frequency for buck regulators */
x-powers,dcdc-freq = <3000>;
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 3/7] arm64: dts: allwinner: axp803: add AC and battery power supplies
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: linux-arm-kernel
AXP803 is compatible with AXP813. Add DT nodes ADC, GPIO,
AC and battery power supplies.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
arch/arm64/boot/dts/allwinner/axp803.dtsi | 31 +++++++++++++++++++++++
1 file changed, 31 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/axp803.dtsi b/arch/arm64/boot/dts/allwinner/axp803.dtsi
index e5eae8bafc42..128177178615 100644
--- a/arch/arm64/boot/dts/allwinner/axp803.dtsi
+++ b/arch/arm64/boot/dts/allwinner/axp803.dtsi
@@ -49,6 +49,37 @@
interrupt-controller;
#interrupt-cells = <1>;
+ ac_power_supply: ac-power-supply {
+ compatible = "x-powers,axp813-ac-power-supply";
+ status = "disabled";
+ };
+
+ axp_adc: adc {
+ compatible = "x-powers,axp813-adc";
+ #io-channel-cells = <1>;
+ };
+
+ axp_gpio: gpio {
+ compatible = "x-powers,axp813-gpio";
+ gpio-controller;
+ #gpio-cells = <2>;
+
+ gpio0_ldo: gpio0-ldo {
+ pins = "GPIO0";
+ function = "ldo";
+ };
+
+ gpio1_ldo: gpio1-ldo {
+ pins = "GPIO1";
+ function = "ldo";
+ };
+ };
+
+ battery_power_supply: battery-power-supply {
+ compatible = "x-powers,axp813-battery-power-supply";
+ status = "disabled";
+ };
+
regulators {
/* Default work frequency for buck regulators */
x-powers,dcdc-freq = <3000>;
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 4/7] arm64: dts: allwinner: a64: sopine: enable power supplies
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-13 8:08 ` Oskari Lemmela
-1 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: Lee Jones, Quentin Schulz, Oskari Lemmela, linux-pm, devicetree,
linux-kernel, linux-arm-kernel
Sopine baseboard have ACIN and battery connectors.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
.../boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
index c21f2331add6..335cf2263d19 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
@@ -69,6 +69,14 @@
};
};
+&ac_power_supply {
+ status = "okay";
+};
+
+&battery_power_supply {
+ status = "okay";
+};
+
&ehci0 {
status = "okay";
};
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 4/7] arm64: dts: allwinner: a64: sopine: enable power supplies
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: linux-arm-kernel
Sopine baseboard have ACIN and battery connectors.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
.../boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
index c21f2331add6..335cf2263d19 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
@@ -69,6 +69,14 @@
};
};
+&ac_power_supply {
+ status = "okay";
+};
+
+&battery_power_supply {
+ status = "okay";
+};
+
&ehci0 {
status = "okay";
};
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 5/7] power: supply: add AC power supply driver for AXP813
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-13 8:08 ` Oskari Lemmela
-1 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: Lee Jones, Quentin Schulz, Oskari Lemmela, linux-pm, devicetree,
linux-kernel, linux-arm-kernel
AXP813 and AXP803 PMICs can control input current and
minimum voltage.
Both of these values are configurable.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
drivers/power/supply/axp20x_ac_power.c | 92 ++++++++++++++++++++++++++
include/linux/mfd/axp20x.h | 1 +
2 files changed, 93 insertions(+)
diff --git a/drivers/power/supply/axp20x_ac_power.c b/drivers/power/supply/axp20x_ac_power.c
index 0771f951b11f..059a97d6e14c 100644
--- a/drivers/power/supply/axp20x_ac_power.c
+++ b/drivers/power/supply/axp20x_ac_power.c
@@ -27,6 +27,16 @@
#define AXP20X_PWR_STATUS_ACIN_PRESENT BIT(7)
#define AXP20X_PWR_STATUS_ACIN_AVAIL BIT(6)
+#define AXP813_VHOLD_MASK GENMASK(5, 3)
+#define AXP813_VHOLD_UV_TO_BIT(x) ((((x) / 100000) - 40) << 3)
+#define AXP813_VHOLD_REG_TO_UV(x) \
+ (((((x) & AXP813_VHOLD_MASK) >> 3) + 40) * 100000)
+
+#define AXP813_CURR_LIMIT_MASK GENMASK(2, 0)
+#define AXP813_CURR_LIMIT_UA_TO_BIT(x) (((x) / 500000) - 3)
+#define AXP813_CURR_LIMIT_REG_TO_UA(x) \
+ ((((x) & AXP813_CURR_LIMIT_MASK) + 3) * 500000)
+
#define DRVNAME "axp20x-ac-power-supply"
struct axp20x_ac_power {
@@ -102,6 +112,55 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
return 0;
+ case POWER_SUPPLY_PROP_VOLTAGE_MIN:
+ ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
+ if (ret)
+ return ret;
+
+ val->intval = AXP813_VHOLD_REG_TO_UV(reg);
+
+ return 0;
+
+ case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
+ ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
+ if (ret)
+ return ret;
+
+ val->intval = AXP813_CURR_LIMIT_REG_TO_UA(reg);
+
+ return 0;
+
+ default:
+ return -EINVAL;
+ }
+
+ return -EINVAL;
+}
+
+static int axp813_ac_power_set_property(struct power_supply *psy,
+ enum power_supply_property psp,
+ const union power_supply_propval *val)
+{
+ struct axp20x_ac_power *power = power_supply_get_drvdata(psy);
+
+ switch (psp) {
+ case POWER_SUPPLY_PROP_VOLTAGE_MIN:
+ if (val->intval < 4000000 || val->intval > 4700000)
+ return -EINVAL;
+
+ return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
+ AXP813_VHOLD_MASK,
+ AXP813_VHOLD_UV_TO_BIT(val->intval));
+
+ case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
+ if (val->intval < 1500000 || val->intval > 4000000)
+ return -EINVAL;
+
+ return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
+ AXP813_CURR_LIMIT_MASK,
+ AXP813_CURR_LIMIT_UA_TO_BIT
+ (val->intval));
+
default:
return -EINVAL;
}
@@ -109,6 +168,13 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
return -EINVAL;
}
+static int axp813_ac_power_prop_writeable(struct power_supply *psy,
+ enum power_supply_property psp)
+{
+ return psp == POWER_SUPPLY_PROP_VOLTAGE_MIN ||
+ psp == POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT;
+}
+
static enum power_supply_property axp20x_ac_power_properties[] = {
POWER_SUPPLY_PROP_HEALTH,
POWER_SUPPLY_PROP_PRESENT,
@@ -123,6 +189,14 @@ static enum power_supply_property axp22x_ac_power_properties[] = {
POWER_SUPPLY_PROP_ONLINE,
};
+static enum power_supply_property axp813_ac_power_properties[] = {
+ POWER_SUPPLY_PROP_HEALTH,
+ POWER_SUPPLY_PROP_PRESENT,
+ POWER_SUPPLY_PROP_ONLINE,
+ POWER_SUPPLY_PROP_VOLTAGE_MIN,
+ POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
+};
+
static const struct power_supply_desc axp20x_ac_power_desc = {
.name = "axp20x-ac",
.type = POWER_SUPPLY_TYPE_MAINS,
@@ -139,6 +213,16 @@ static const struct power_supply_desc axp22x_ac_power_desc = {
.get_property = axp20x_ac_power_get_property,
};
+static const struct power_supply_desc axp813_ac_power_desc = {
+ .name = "axp813-ac",
+ .type = POWER_SUPPLY_TYPE_MAINS,
+ .properties = axp813_ac_power_properties,
+ .num_properties = ARRAY_SIZE(axp813_ac_power_properties),
+ .property_is_writeable = axp813_ac_power_prop_writeable,
+ .get_property = axp20x_ac_power_get_property,
+ .set_property = axp813_ac_power_set_property,
+};
+
struct axp_data {
const struct power_supply_desc *power_desc;
bool acin_adc;
@@ -154,6 +238,11 @@ static const struct axp_data axp22x_data = {
.acin_adc = false,
};
+static const struct axp_data axp813_data = {
+ .power_desc = &axp813_ac_power_desc,
+ .acin_adc = false,
+};
+
static int axp20x_ac_power_probe(struct platform_device *pdev)
{
struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
@@ -234,6 +323,9 @@ static const struct of_device_id axp20x_ac_power_match[] = {
}, {
.compatible = "x-powers,axp221-ac-power-supply",
.data = &axp22x_data,
+ }, {
+ .compatible = "x-powers,axp813-ac-power-supply",
+ .data = &axp813_data,
}, { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, axp20x_ac_power_match);
diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
index 517e60eecbcb..2302b620d238 100644
--- a/include/linux/mfd/axp20x.h
+++ b/include/linux/mfd/axp20x.h
@@ -266,6 +266,7 @@ enum axp20x_variants {
#define AXP288_RT_BATT_V_H 0xa0
#define AXP288_RT_BATT_V_L 0xa1
+#define AXP813_ACIN_PATH_CTRL 0x3a
#define AXP813_ADC_RATE 0x85
/* Fuel Gauge */
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 5/7] power: supply: add AC power supply driver for AXP813
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: linux-arm-kernel
AXP813 and AXP803 PMICs can control input current and
minimum voltage.
Both of these values are configurable.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
drivers/power/supply/axp20x_ac_power.c | 92 ++++++++++++++++++++++++++
include/linux/mfd/axp20x.h | 1 +
2 files changed, 93 insertions(+)
diff --git a/drivers/power/supply/axp20x_ac_power.c b/drivers/power/supply/axp20x_ac_power.c
index 0771f951b11f..059a97d6e14c 100644
--- a/drivers/power/supply/axp20x_ac_power.c
+++ b/drivers/power/supply/axp20x_ac_power.c
@@ -27,6 +27,16 @@
#define AXP20X_PWR_STATUS_ACIN_PRESENT BIT(7)
#define AXP20X_PWR_STATUS_ACIN_AVAIL BIT(6)
+#define AXP813_VHOLD_MASK GENMASK(5, 3)
+#define AXP813_VHOLD_UV_TO_BIT(x) ((((x) / 100000) - 40) << 3)
+#define AXP813_VHOLD_REG_TO_UV(x) \
+ (((((x) & AXP813_VHOLD_MASK) >> 3) + 40) * 100000)
+
+#define AXP813_CURR_LIMIT_MASK GENMASK(2, 0)
+#define AXP813_CURR_LIMIT_UA_TO_BIT(x) (((x) / 500000) - 3)
+#define AXP813_CURR_LIMIT_REG_TO_UA(x) \
+ ((((x) & AXP813_CURR_LIMIT_MASK) + 3) * 500000)
+
#define DRVNAME "axp20x-ac-power-supply"
struct axp20x_ac_power {
@@ -102,6 +112,55 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
return 0;
+ case POWER_SUPPLY_PROP_VOLTAGE_MIN:
+ ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
+ if (ret)
+ return ret;
+
+ val->intval = AXP813_VHOLD_REG_TO_UV(reg);
+
+ return 0;
+
+ case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
+ ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
+ if (ret)
+ return ret;
+
+ val->intval = AXP813_CURR_LIMIT_REG_TO_UA(reg);
+
+ return 0;
+
+ default:
+ return -EINVAL;
+ }
+
+ return -EINVAL;
+}
+
+static int axp813_ac_power_set_property(struct power_supply *psy,
+ enum power_supply_property psp,
+ const union power_supply_propval *val)
+{
+ struct axp20x_ac_power *power = power_supply_get_drvdata(psy);
+
+ switch (psp) {
+ case POWER_SUPPLY_PROP_VOLTAGE_MIN:
+ if (val->intval < 4000000 || val->intval > 4700000)
+ return -EINVAL;
+
+ return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
+ AXP813_VHOLD_MASK,
+ AXP813_VHOLD_UV_TO_BIT(val->intval));
+
+ case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
+ if (val->intval < 1500000 || val->intval > 4000000)
+ return -EINVAL;
+
+ return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
+ AXP813_CURR_LIMIT_MASK,
+ AXP813_CURR_LIMIT_UA_TO_BIT
+ (val->intval));
+
default:
return -EINVAL;
}
@@ -109,6 +168,13 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
return -EINVAL;
}
+static int axp813_ac_power_prop_writeable(struct power_supply *psy,
+ enum power_supply_property psp)
+{
+ return psp == POWER_SUPPLY_PROP_VOLTAGE_MIN ||
+ psp == POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT;
+}
+
static enum power_supply_property axp20x_ac_power_properties[] = {
POWER_SUPPLY_PROP_HEALTH,
POWER_SUPPLY_PROP_PRESENT,
@@ -123,6 +189,14 @@ static enum power_supply_property axp22x_ac_power_properties[] = {
POWER_SUPPLY_PROP_ONLINE,
};
+static enum power_supply_property axp813_ac_power_properties[] = {
+ POWER_SUPPLY_PROP_HEALTH,
+ POWER_SUPPLY_PROP_PRESENT,
+ POWER_SUPPLY_PROP_ONLINE,
+ POWER_SUPPLY_PROP_VOLTAGE_MIN,
+ POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
+};
+
static const struct power_supply_desc axp20x_ac_power_desc = {
.name = "axp20x-ac",
.type = POWER_SUPPLY_TYPE_MAINS,
@@ -139,6 +213,16 @@ static const struct power_supply_desc axp22x_ac_power_desc = {
.get_property = axp20x_ac_power_get_property,
};
+static const struct power_supply_desc axp813_ac_power_desc = {
+ .name = "axp813-ac",
+ .type = POWER_SUPPLY_TYPE_MAINS,
+ .properties = axp813_ac_power_properties,
+ .num_properties = ARRAY_SIZE(axp813_ac_power_properties),
+ .property_is_writeable = axp813_ac_power_prop_writeable,
+ .get_property = axp20x_ac_power_get_property,
+ .set_property = axp813_ac_power_set_property,
+};
+
struct axp_data {
const struct power_supply_desc *power_desc;
bool acin_adc;
@@ -154,6 +238,11 @@ static const struct axp_data axp22x_data = {
.acin_adc = false,
};
+static const struct axp_data axp813_data = {
+ .power_desc = &axp813_ac_power_desc,
+ .acin_adc = false,
+};
+
static int axp20x_ac_power_probe(struct platform_device *pdev)
{
struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
@@ -234,6 +323,9 @@ static const struct of_device_id axp20x_ac_power_match[] = {
}, {
.compatible = "x-powers,axp221-ac-power-supply",
.data = &axp22x_data,
+ }, {
+ .compatible = "x-powers,axp813-ac-power-supply",
+ .data = &axp813_data,
}, { /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, axp20x_ac_power_match);
diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
index 517e60eecbcb..2302b620d238 100644
--- a/include/linux/mfd/axp20x.h
+++ b/include/linux/mfd/axp20x.h
@@ -266,6 +266,7 @@ enum axp20x_variants {
#define AXP288_RT_BATT_V_H 0xa0
#define AXP288_RT_BATT_V_L 0xa1
+#define AXP813_ACIN_PATH_CTRL 0x3a
#define AXP813_ADC_RATE 0x85
/* Fuel Gauge */
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 6/7] mfd: axp20x: Add AC power supply cell for AXP813
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-13 8:08 ` Oskari Lemmela
-1 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: Lee Jones, Quentin Schulz, Oskari Lemmela, linux-pm, devicetree,
linux-kernel, linux-arm-kernel
As axp20x-ac-power-supply now supports AXP813, add a cell for it.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
drivers/mfd/axp20x.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
index 0be511dd93d0..dfc3cff1d08b 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -778,6 +778,11 @@ static const struct mfd_cell axp813_cells[] = {
}, {
.name = "axp20x-battery-power-supply",
.of_compatible = "x-powers,axp813-battery-power-supply",
+ }, {
+ .name = "axp20x-ac-power-supply",
+ .of_compatible = "x-powers,axp813-ac-power-supply",
+ .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources),
+ .resources = axp20x_ac_power_supply_resources,
},
};
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 6/7] mfd: axp20x: Add AC power supply cell for AXP813
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: linux-arm-kernel
As axp20x-ac-power-supply now supports AXP813, add a cell for it.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
---
drivers/mfd/axp20x.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
index 0be511dd93d0..dfc3cff1d08b 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -778,6 +778,11 @@ static const struct mfd_cell axp813_cells[] = {
}, {
.name = "axp20x-battery-power-supply",
.of_compatible = "x-powers,axp813-battery-power-supply",
+ }, {
+ .name = "axp20x-ac-power-supply",
+ .of_compatible = "x-powers,axp813-ac-power-supply",
+ .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources),
+ .resources = axp20x_ac_power_supply_resources,
},
};
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 7/7] mfd: axp20x: Add supported cells for AXP803
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-13 8:08 ` Oskari Lemmela
-1 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: Sebastian Reichel, Rob Herring, Mark Rutland, Chen-Yu Tsai,
Maxime Ripard
Cc: Lee Jones, Quentin Schulz, Oskari Lemmela, linux-pm, devicetree,
linux-kernel, linux-arm-kernel
AXP803 is compatible with AXP813.
Adding cells for GPIO, ADC, AC and battery power supplies.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
---
drivers/mfd/axp20x.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
index dfc3cff1d08b..e415b967d38c 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -728,11 +728,26 @@ static const struct mfd_cell axp288_cells[] = {
static const struct mfd_cell axp803_cells[] = {
{
+ .name = "axp20x-gpio",
+ .of_compatible = "x-powers,axp813-gpio",
+ }, {
.name = "axp221-pek",
.num_resources = ARRAY_SIZE(axp803_pek_resources),
.resources = axp803_pek_resources,
},
{ .name = "axp20x-regulator" },
+ {
+ .name = "axp813-adc",
+ .of_compatible = "x-powers,axp813-adc",
+ }, {
+ .name = "axp20x-battery-power-supply",
+ .of_compatible = "x-powers,axp813-battery-power-supply",
+ }, {
+ .name = "axp20x-ac-power-supply",
+ .of_compatible = "x-powers,axp813-ac-power-supply",
+ .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources),
+ .resources = axp20x_ac_power_supply_resources,
+ },
};
static const struct mfd_cell axp806_self_working_cells[] = {
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* [PATCH v4 7/7] mfd: axp20x: Add supported cells for AXP803
@ 2018-10-13 8:08 ` Oskari Lemmela
0 siblings, 0 replies; 38+ messages in thread
From: Oskari Lemmela @ 2018-10-13 8:08 UTC (permalink / raw)
To: linux-arm-kernel
AXP803 is compatible with AXP813.
Adding cells for GPIO, ADC, AC and battery power supplies.
Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
---
drivers/mfd/axp20x.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
index dfc3cff1d08b..e415b967d38c 100644
--- a/drivers/mfd/axp20x.c
+++ b/drivers/mfd/axp20x.c
@@ -728,11 +728,26 @@ static const struct mfd_cell axp288_cells[] = {
static const struct mfd_cell axp803_cells[] = {
{
+ .name = "axp20x-gpio",
+ .of_compatible = "x-powers,axp813-gpio",
+ }, {
.name = "axp221-pek",
.num_resources = ARRAY_SIZE(axp803_pek_resources),
.resources = axp803_pek_resources,
},
{ .name = "axp20x-regulator" },
+ {
+ .name = "axp813-adc",
+ .of_compatible = "x-powers,axp813-adc",
+ }, {
+ .name = "axp20x-battery-power-supply",
+ .of_compatible = "x-powers,axp813-battery-power-supply",
+ }, {
+ .name = "axp20x-ac-power-supply",
+ .of_compatible = "x-powers,axp813-ac-power-supply",
+ .num_resources = ARRAY_SIZE(axp20x_ac_power_supply_resources),
+ .resources = axp20x_ac_power_supply_resources,
+ },
};
static const struct mfd_cell axp806_self_working_cells[] = {
--
2.17.1
^ permalink raw reply related [flat|nested] 38+ messages in thread
* Re: [PATCH v4 2/7] ARM: dts: axp81x: add AC power supply subnode
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-16 4:08 ` Chen-Yu Tsai
-1 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:08 UTC (permalink / raw)
To: oskari
Cc: Sebastian Reichel, Rob Herring, Mark Rutland, Maxime Ripard,
Lee Jones, Quentin Schulz, open list:THERMAL, devicetree,
linux-kernel, linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> Add AC power supply subnode for AXP81X PMIC.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 2/7] ARM: dts: axp81x: add AC power supply subnode
@ 2018-10-16 4:08 ` Chen-Yu Tsai
0 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:08 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> Add AC power supply subnode for AXP81X PMIC.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 1/7] dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-16 4:08 ` Chen-Yu Tsai
-1 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:08 UTC (permalink / raw)
To: oskari
Cc: Sebastian Reichel, Rob Herring, Mark Rutland, Maxime Ripard,
Lee Jones, Quentin Schulz, open list:THERMAL, devicetree,
linux-kernel, linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> The AXP803/AXP813 AC power supply can limit input current and voltage.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Rob Herring <robh@kernel.org>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 1/7] dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
@ 2018-10-16 4:08 ` Chen-Yu Tsai
0 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:08 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> The AXP803/AXP813 AC power supply can limit input current and voltage.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Rob Herring <robh@kernel.org>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 3/7] arm64: dts: allwinner: axp803: add AC and battery power supplies
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-16 4:11 ` Chen-Yu Tsai
-1 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:11 UTC (permalink / raw)
To: oskari
Cc: Sebastian Reichel, Rob Herring, Mark Rutland, Maxime Ripard,
Lee Jones, Quentin Schulz, open list:THERMAL, devicetree,
linux-kernel, linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> AXP803 is compatible with AXP813. Add DT nodes ADC, GPIO,
> AC and battery power supplies.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
> arch/arm64/boot/dts/allwinner/axp803.dtsi | 31 +++++++++++++++++++++++
> 1 file changed, 31 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/allwinner/axp803.dtsi b/arch/arm64/boot/dts/allwinner/axp803.dtsi
> index e5eae8bafc42..128177178615 100644
> --- a/arch/arm64/boot/dts/allwinner/axp803.dtsi
> +++ b/arch/arm64/boot/dts/allwinner/axp803.dtsi
> @@ -49,6 +49,37 @@
> interrupt-controller;
> #interrupt-cells = <1>;
>
> + ac_power_supply: ac-power-supply {
> + compatible = "x-powers,axp813-ac-power-supply";
Even though they seem to be compatible, please add a model specific
compatible string in front for all the new nodes just in case. In
this case it would be "x-powers,axp803-ac-power-supply".
ChenYu
> + status = "disabled";
> + };
> +
> + axp_adc: adc {
> + compatible = "x-powers,axp813-adc";
> + #io-channel-cells = <1>;
> + };
> +
> + axp_gpio: gpio {
> + compatible = "x-powers,axp813-gpio";
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + gpio0_ldo: gpio0-ldo {
> + pins = "GPIO0";
> + function = "ldo";
> + };
> +
> + gpio1_ldo: gpio1-ldo {
> + pins = "GPIO1";
> + function = "ldo";
> + };
> + };
> +
> + battery_power_supply: battery-power-supply {
> + compatible = "x-powers,axp813-battery-power-supply";
> + status = "disabled";
> + };
> +
> regulators {
> /* Default work frequency for buck regulators */
> x-powers,dcdc-freq = <3000>;
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 3/7] arm64: dts: allwinner: axp803: add AC and battery power supplies
@ 2018-10-16 4:11 ` Chen-Yu Tsai
0 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:11 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> AXP803 is compatible with AXP813. Add DT nodes ADC, GPIO,
> AC and battery power supplies.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
> arch/arm64/boot/dts/allwinner/axp803.dtsi | 31 +++++++++++++++++++++++
> 1 file changed, 31 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/allwinner/axp803.dtsi b/arch/arm64/boot/dts/allwinner/axp803.dtsi
> index e5eae8bafc42..128177178615 100644
> --- a/arch/arm64/boot/dts/allwinner/axp803.dtsi
> +++ b/arch/arm64/boot/dts/allwinner/axp803.dtsi
> @@ -49,6 +49,37 @@
> interrupt-controller;
> #interrupt-cells = <1>;
>
> + ac_power_supply: ac-power-supply {
> + compatible = "x-powers,axp813-ac-power-supply";
Even though they seem to be compatible, please add a model specific
compatible string in front for all the new nodes just in case. In
this case it would be "x-powers,axp803-ac-power-supply".
ChenYu
> + status = "disabled";
> + };
> +
> + axp_adc: adc {
> + compatible = "x-powers,axp813-adc";
> + #io-channel-cells = <1>;
> + };
> +
> + axp_gpio: gpio {
> + compatible = "x-powers,axp813-gpio";
> + gpio-controller;
> + #gpio-cells = <2>;
> +
> + gpio0_ldo: gpio0-ldo {
> + pins = "GPIO0";
> + function = "ldo";
> + };
> +
> + gpio1_ldo: gpio1-ldo {
> + pins = "GPIO1";
> + function = "ldo";
> + };
> + };
> +
> + battery_power_supply: battery-power-supply {
> + compatible = "x-powers,axp813-battery-power-supply";
> + status = "disabled";
> + };
> +
> regulators {
> /* Default work frequency for buck regulators */
> x-powers,dcdc-freq = <3000>;
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 4/7] arm64: dts: allwinner: a64: sopine: enable power supplies
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-16 4:14 ` Chen-Yu Tsai
-1 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:14 UTC (permalink / raw)
To: oskari
Cc: Sebastian Reichel, Rob Herring, Mark Rutland, Maxime Ripard,
Lee Jones, Quentin Schulz, open list:THERMAL, devicetree,
linux-kernel, linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> Sopine baseboard have ACIN and battery connectors.
The commit message should be more specific, like how the two connections
from the PMIC are routed. In this case ACIN is routed from the SOM to
the DC jack on the baseboard, while the battery pins are routed to a 3-pin
connector next to the USB connectors.
ChenYu
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
> .../boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
> index c21f2331add6..335cf2263d19 100644
> --- a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
> +++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
> @@ -69,6 +69,14 @@
> };
> };
>
> +&ac_power_supply {
> + status = "okay";
> +};
> +
> +&battery_power_supply {
> + status = "okay";
> +};
> +
> &ehci0 {
> status = "okay";
> };
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 4/7] arm64: dts: allwinner: a64: sopine: enable power supplies
@ 2018-10-16 4:14 ` Chen-Yu Tsai
0 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:14 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> Sopine baseboard have ACIN and battery connectors.
The commit message should be more specific, like how the two connections
from the PMIC are routed. In this case ACIN is routed from the SOM to
the DC jack on the baseboard, while the battery pins are routed to a 3-pin
connector next to the USB connectors.
ChenYu
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
> .../boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
> index c21f2331add6..335cf2263d19 100644
> --- a/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
> +++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-sopine-baseboard.dts
> @@ -69,6 +69,14 @@
> };
> };
>
> +&ac_power_supply {
> + status = "okay";
> +};
> +
> +&battery_power_supply {
> + status = "okay";
> +};
> +
> &ehci0 {
> status = "okay";
> };
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 6/7] mfd: axp20x: Add AC power supply cell for AXP813
2018-10-13 8:08 ` Oskari Lemmela
(?)
@ 2018-10-16 4:15 ` Chen-Yu Tsai
-1 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:15 UTC (permalink / raw)
To: oskari
Cc: Sebastian Reichel, Rob Herring, Mark Rutland, Maxime Ripard,
Lee Jones, Quentin Schulz, open list:THERMAL, devicetree,
linux-kernel, linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> As axp20x-ac-power-supply now supports AXP813, add a cell for it.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 6/7] mfd: axp20x: Add AC power supply cell for AXP813
@ 2018-10-16 4:15 ` Chen-Yu Tsai
0 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:15 UTC (permalink / raw)
To: oskari
Cc: Mark Rutland, devicetree, open list:THERMAL, Maxime Ripard,
Sebastian Reichel, linux-kernel, Quentin Schulz, Rob Herring,
Lee Jones, linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> As axp20x-ac-power-supply now supports AXP813, add a cell for it.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 6/7] mfd: axp20x: Add AC power supply cell for AXP813
@ 2018-10-16 4:15 ` Chen-Yu Tsai
0 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:15 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> As axp20x-ac-power-supply now supports AXP813, add a cell for it.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 7/7] mfd: axp20x: Add supported cells for AXP803
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-16 4:17 ` Chen-Yu Tsai
-1 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:17 UTC (permalink / raw)
To: oskari
Cc: Sebastian Reichel, Rob Herring, Mark Rutland, Maxime Ripard,
Lee Jones, Quentin Schulz, open list:THERMAL, devicetree,
linux-kernel, linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> AXP803 is compatible with AXP813.
> Adding cells for GPIO, ADC, AC and battery power supplies.
They are not _completely_ compatible. A better way to phrase this would be:
Parts of the AXP803 are compatible with their counterparts on the AXP813.
These include the GPIO, ADC, AC and battery power supplies.
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Otherwise,
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 7/7] mfd: axp20x: Add supported cells for AXP803
@ 2018-10-16 4:17 ` Chen-Yu Tsai
0 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-16 4:17 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> AXP803 is compatible with AXP813.
> Adding cells for GPIO, ADC, AC and battery power supplies.
They are not _completely_ compatible. A better way to phrase this would be:
Parts of the AXP803 are compatible with their counterparts on the AXP813.
These include the GPIO, ADC, AC and battery power supplies.
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
Otherwise,
Reviewed-by: Chen-Yu Tsai <wens@csie.org>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 5/7] power: supply: add AC power supply driver for AXP813
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-17 6:12 ` Chen-Yu Tsai
-1 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-17 6:12 UTC (permalink / raw)
To: oskari
Cc: Sebastian Reichel, Rob Herring, Mark Rutland, Maxime Ripard,
Lee Jones, Quentin Schulz, open list:THERMAL, devicetree,
linux-kernel, linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> AXP813 and AXP803 PMICs can control input current and
> minimum voltage.
>
> Both of these values are configurable.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
> drivers/power/supply/axp20x_ac_power.c | 92 ++++++++++++++++++++++++++
> include/linux/mfd/axp20x.h | 1 +
> 2 files changed, 93 insertions(+)
>
> diff --git a/drivers/power/supply/axp20x_ac_power.c b/drivers/power/supply/axp20x_ac_power.c
> index 0771f951b11f..059a97d6e14c 100644
> --- a/drivers/power/supply/axp20x_ac_power.c
> +++ b/drivers/power/supply/axp20x_ac_power.c
> @@ -27,6 +27,16 @@
> #define AXP20X_PWR_STATUS_ACIN_PRESENT BIT(7)
> #define AXP20X_PWR_STATUS_ACIN_AVAIL BIT(6)
>
> +#define AXP813_VHOLD_MASK GENMASK(5, 3)
> +#define AXP813_VHOLD_UV_TO_BIT(x) ((((x) / 100000) - 40) << 3)
> +#define AXP813_VHOLD_REG_TO_UV(x) \
> + (((((x) & AXP813_VHOLD_MASK) >> 3) + 40) * 100000)
> +
> +#define AXP813_CURR_LIMIT_MASK GENMASK(2, 0)
> +#define AXP813_CURR_LIMIT_UA_TO_BIT(x) (((x) / 500000) - 3)
> +#define AXP813_CURR_LIMIT_REG_TO_UA(x) \
> + ((((x) & AXP813_CURR_LIMIT_MASK) + 3) * 500000)
> +
> #define DRVNAME "axp20x-ac-power-supply"
>
> struct axp20x_ac_power {
> @@ -102,6 +112,55 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
>
> return 0;
>
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN:
> + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
> + if (ret)
> + return ret;
> +
> + val->intval = AXP813_VHOLD_REG_TO_UV(reg);
> +
> + return 0;
> +
> + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
> + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
> + if (ret)
> + return ret;
> +
> + val->intval = AXP813_CURR_LIMIT_REG_TO_UA(reg);
This doesn't handle the case where the register value is set to 0x6 or 0x7,
which should still mean 4000 mA.
> +
> + return 0;
> +
> + default:
> + return -EINVAL;
> + }
> +
> + return -EINVAL;
> +}
> +
> +static int axp813_ac_power_set_property(struct power_supply *psy,
> + enum power_supply_property psp,
> + const union power_supply_propval *val)
> +{
> + struct axp20x_ac_power *power = power_supply_get_drvdata(psy);
> +
> + switch (psp) {
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN:
> + if (val->intval < 4000000 || val->intval > 4700000)
> + return -EINVAL;
> +
> + return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
> + AXP813_VHOLD_MASK,
> + AXP813_VHOLD_UV_TO_BIT(val->intval));
> +
> + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
> + if (val->intval < 1500000 || val->intval > 4000000)
> + return -EINVAL;
> +
> + return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
> + AXP813_CURR_LIMIT_MASK,
> + AXP813_CURR_LIMIT_UA_TO_BIT
> + (val->intval));
Nit, don't wrap this part. Even if it exceeds the 80 character limit, it's
still easier to read that way.
ChenYu
> +
> default:
> return -EINVAL;
> }
> @@ -109,6 +168,13 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
> return -EINVAL;
> }
>
> +static int axp813_ac_power_prop_writeable(struct power_supply *psy,
> + enum power_supply_property psp)
> +{
> + return psp == POWER_SUPPLY_PROP_VOLTAGE_MIN ||
> + psp == POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT;
> +}
> +
> static enum power_supply_property axp20x_ac_power_properties[] = {
> POWER_SUPPLY_PROP_HEALTH,
> POWER_SUPPLY_PROP_PRESENT,
> @@ -123,6 +189,14 @@ static enum power_supply_property axp22x_ac_power_properties[] = {
> POWER_SUPPLY_PROP_ONLINE,
> };
>
> +static enum power_supply_property axp813_ac_power_properties[] = {
> + POWER_SUPPLY_PROP_HEALTH,
> + POWER_SUPPLY_PROP_PRESENT,
> + POWER_SUPPLY_PROP_ONLINE,
> + POWER_SUPPLY_PROP_VOLTAGE_MIN,
> + POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
> +};
> +
> static const struct power_supply_desc axp20x_ac_power_desc = {
> .name = "axp20x-ac",
> .type = POWER_SUPPLY_TYPE_MAINS,
> @@ -139,6 +213,16 @@ static const struct power_supply_desc axp22x_ac_power_desc = {
> .get_property = axp20x_ac_power_get_property,
> };
>
> +static const struct power_supply_desc axp813_ac_power_desc = {
> + .name = "axp813-ac",
> + .type = POWER_SUPPLY_TYPE_MAINS,
> + .properties = axp813_ac_power_properties,
> + .num_properties = ARRAY_SIZE(axp813_ac_power_properties),
> + .property_is_writeable = axp813_ac_power_prop_writeable,
> + .get_property = axp20x_ac_power_get_property,
> + .set_property = axp813_ac_power_set_property,
> +};
> +
> struct axp_data {
> const struct power_supply_desc *power_desc;
> bool acin_adc;
> @@ -154,6 +238,11 @@ static const struct axp_data axp22x_data = {
> .acin_adc = false,
> };
>
> +static const struct axp_data axp813_data = {
> + .power_desc = &axp813_ac_power_desc,
> + .acin_adc = false,
> +};
> +
> static int axp20x_ac_power_probe(struct platform_device *pdev)
> {
> struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
> @@ -234,6 +323,9 @@ static const struct of_device_id axp20x_ac_power_match[] = {
> }, {
> .compatible = "x-powers,axp221-ac-power-supply",
> .data = &axp22x_data,
> + }, {
> + .compatible = "x-powers,axp813-ac-power-supply",
> + .data = &axp813_data,
> }, { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, axp20x_ac_power_match);
> diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
> index 517e60eecbcb..2302b620d238 100644
> --- a/include/linux/mfd/axp20x.h
> +++ b/include/linux/mfd/axp20x.h
> @@ -266,6 +266,7 @@ enum axp20x_variants {
> #define AXP288_RT_BATT_V_H 0xa0
> #define AXP288_RT_BATT_V_L 0xa1
>
> +#define AXP813_ACIN_PATH_CTRL 0x3a
> #define AXP813_ADC_RATE 0x85
>
> /* Fuel Gauge */
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 5/7] power: supply: add AC power supply driver for AXP813
@ 2018-10-17 6:12 ` Chen-Yu Tsai
0 siblings, 0 replies; 38+ messages in thread
From: Chen-Yu Tsai @ 2018-10-17 6:12 UTC (permalink / raw)
To: linux-arm-kernel
On Sat, Oct 13, 2018 at 4:09 PM Oskari Lemmela <oskari@lemmela.net> wrote:
>
> AXP813 and AXP803 PMICs can control input current and
> minimum voltage.
>
> Both of these values are configurable.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
> drivers/power/supply/axp20x_ac_power.c | 92 ++++++++++++++++++++++++++
> include/linux/mfd/axp20x.h | 1 +
> 2 files changed, 93 insertions(+)
>
> diff --git a/drivers/power/supply/axp20x_ac_power.c b/drivers/power/supply/axp20x_ac_power.c
> index 0771f951b11f..059a97d6e14c 100644
> --- a/drivers/power/supply/axp20x_ac_power.c
> +++ b/drivers/power/supply/axp20x_ac_power.c
> @@ -27,6 +27,16 @@
> #define AXP20X_PWR_STATUS_ACIN_PRESENT BIT(7)
> #define AXP20X_PWR_STATUS_ACIN_AVAIL BIT(6)
>
> +#define AXP813_VHOLD_MASK GENMASK(5, 3)
> +#define AXP813_VHOLD_UV_TO_BIT(x) ((((x) / 100000) - 40) << 3)
> +#define AXP813_VHOLD_REG_TO_UV(x) \
> + (((((x) & AXP813_VHOLD_MASK) >> 3) + 40) * 100000)
> +
> +#define AXP813_CURR_LIMIT_MASK GENMASK(2, 0)
> +#define AXP813_CURR_LIMIT_UA_TO_BIT(x) (((x) / 500000) - 3)
> +#define AXP813_CURR_LIMIT_REG_TO_UA(x) \
> + ((((x) & AXP813_CURR_LIMIT_MASK) + 3) * 500000)
> +
> #define DRVNAME "axp20x-ac-power-supply"
>
> struct axp20x_ac_power {
> @@ -102,6 +112,55 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
>
> return 0;
>
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN:
> + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
> + if (ret)
> + return ret;
> +
> + val->intval = AXP813_VHOLD_REG_TO_UV(reg);
> +
> + return 0;
> +
> + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
> + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
> + if (ret)
> + return ret;
> +
> + val->intval = AXP813_CURR_LIMIT_REG_TO_UA(reg);
This doesn't handle the case where the register value is set to 0x6 or 0x7,
which should still mean 4000 mA.
> +
> + return 0;
> +
> + default:
> + return -EINVAL;
> + }
> +
> + return -EINVAL;
> +}
> +
> +static int axp813_ac_power_set_property(struct power_supply *psy,
> + enum power_supply_property psp,
> + const union power_supply_propval *val)
> +{
> + struct axp20x_ac_power *power = power_supply_get_drvdata(psy);
> +
> + switch (psp) {
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN:
> + if (val->intval < 4000000 || val->intval > 4700000)
> + return -EINVAL;
> +
> + return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
> + AXP813_VHOLD_MASK,
> + AXP813_VHOLD_UV_TO_BIT(val->intval));
> +
> + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
> + if (val->intval < 1500000 || val->intval > 4000000)
> + return -EINVAL;
> +
> + return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
> + AXP813_CURR_LIMIT_MASK,
> + AXP813_CURR_LIMIT_UA_TO_BIT
> + (val->intval));
Nit, don't wrap this part. Even if it exceeds the 80 character limit, it's
still easier to read that way.
ChenYu
> +
> default:
> return -EINVAL;
> }
> @@ -109,6 +168,13 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
> return -EINVAL;
> }
>
> +static int axp813_ac_power_prop_writeable(struct power_supply *psy,
> + enum power_supply_property psp)
> +{
> + return psp == POWER_SUPPLY_PROP_VOLTAGE_MIN ||
> + psp == POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT;
> +}
> +
> static enum power_supply_property axp20x_ac_power_properties[] = {
> POWER_SUPPLY_PROP_HEALTH,
> POWER_SUPPLY_PROP_PRESENT,
> @@ -123,6 +189,14 @@ static enum power_supply_property axp22x_ac_power_properties[] = {
> POWER_SUPPLY_PROP_ONLINE,
> };
>
> +static enum power_supply_property axp813_ac_power_properties[] = {
> + POWER_SUPPLY_PROP_HEALTH,
> + POWER_SUPPLY_PROP_PRESENT,
> + POWER_SUPPLY_PROP_ONLINE,
> + POWER_SUPPLY_PROP_VOLTAGE_MIN,
> + POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
> +};
> +
> static const struct power_supply_desc axp20x_ac_power_desc = {
> .name = "axp20x-ac",
> .type = POWER_SUPPLY_TYPE_MAINS,
> @@ -139,6 +213,16 @@ static const struct power_supply_desc axp22x_ac_power_desc = {
> .get_property = axp20x_ac_power_get_property,
> };
>
> +static const struct power_supply_desc axp813_ac_power_desc = {
> + .name = "axp813-ac",
> + .type = POWER_SUPPLY_TYPE_MAINS,
> + .properties = axp813_ac_power_properties,
> + .num_properties = ARRAY_SIZE(axp813_ac_power_properties),
> + .property_is_writeable = axp813_ac_power_prop_writeable,
> + .get_property = axp20x_ac_power_get_property,
> + .set_property = axp813_ac_power_set_property,
> +};
> +
> struct axp_data {
> const struct power_supply_desc *power_desc;
> bool acin_adc;
> @@ -154,6 +238,11 @@ static const struct axp_data axp22x_data = {
> .acin_adc = false,
> };
>
> +static const struct axp_data axp813_data = {
> + .power_desc = &axp813_ac_power_desc,
> + .acin_adc = false,
> +};
> +
> static int axp20x_ac_power_probe(struct platform_device *pdev)
> {
> struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
> @@ -234,6 +323,9 @@ static const struct of_device_id axp20x_ac_power_match[] = {
> }, {
> .compatible = "x-powers,axp221-ac-power-supply",
> .data = &axp22x_data,
> + }, {
> + .compatible = "x-powers,axp813-ac-power-supply",
> + .data = &axp813_data,
> }, { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, axp20x_ac_power_match);
> diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
> index 517e60eecbcb..2302b620d238 100644
> --- a/include/linux/mfd/axp20x.h
> +++ b/include/linux/mfd/axp20x.h
> @@ -266,6 +266,7 @@ enum axp20x_variants {
> #define AXP288_RT_BATT_V_H 0xa0
> #define AXP288_RT_BATT_V_L 0xa1
>
> +#define AXP813_ACIN_PATH_CTRL 0x3a
> #define AXP813_ADC_RATE 0x85
>
> /* Fuel Gauge */
> --
> 2.17.1
>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 0/7] AXP8x3 AC and battery power supply support
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-18 6:04 ` Vasily Khoruzhick
-1 siblings, 0 replies; 38+ messages in thread
From: Vasily Khoruzhick @ 2018-10-18 6:04 UTC (permalink / raw)
To: linux-arm-kernel
Cc: Oskari Lemmela, Sebastian Reichel, Rob Herring, Mark Rutland,
Chen-Yu Tsai, Maxime Ripard, devicetree, linux-pm, linux-kernel,
Quentin Schulz, Lee Jones
On Saturday, October 13, 2018 1:08:41 AM PDT Oskari Lemmela wrote:
> AXP813 AC power supply support with input current and
> voltage limiting support.
>
> AXP803 AC and battery power supply support.
>
> Changes in v4:
> * Change order of axp20x-gpio in axp20x.c
> * Fix indentation and spaces to tabs in axp20x.c
>
> Changes in v3:
> * Reorder ac_power_supply DT node
> * Rename axp20x_ac_power_set_property function
> * Split mfd commit
>
> Changes in v2:
> * Reuse axp813 compatibles for axp803
> * Refactor axp20x_ac_power.c
Patches 1-3, 5-7:
Tested-by: Vasily Khoruzhick <anarsoul@gmail.com>
> Oskari Lemmela (7):
> dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
> ARM: dts: axp81x: add AC power supply subnode
> arm64: dts: allwinner: axp803: add AC and battery power supplies
> arm64: dts: allwinner: a64: sopine: enable power supplies
> power: supply: add AC power supply driver for AXP813
> mfd: axp20x: Add AC power supply cell for AXP813
> mfd: axp20x: Add supported cells for AXP803
>
> .../bindings/power/supply/axp20x_ac_power.txt | 3 +
> arch/arm/boot/dts/axp81x.dtsi | 5 +
> arch/arm64/boot/dts/allwinner/axp803.dtsi | 31 +++++++
> .../allwinner/sun50i-a64-sopine-baseboard.dts | 8 ++
> drivers/mfd/axp20x.c | 20 ++++
> drivers/power/supply/axp20x_ac_power.c | 92 +++++++++++++++++++
> include/linux/mfd/axp20x.h | 1 +
> 7 files changed, 160 insertions(+)
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 0/7] AXP8x3 AC and battery power supply support
@ 2018-10-18 6:04 ` Vasily Khoruzhick
0 siblings, 0 replies; 38+ messages in thread
From: Vasily Khoruzhick @ 2018-10-18 6:04 UTC (permalink / raw)
To: linux-arm-kernel
On Saturday, October 13, 2018 1:08:41 AM PDT Oskari Lemmela wrote:
> AXP813 AC power supply support with input current and
> voltage limiting support.
>
> AXP803 AC and battery power supply support.
>
> Changes in v4:
> * Change order of axp20x-gpio in axp20x.c
> * Fix indentation and spaces to tabs in axp20x.c
>
> Changes in v3:
> * Reorder ac_power_supply DT node
> * Rename axp20x_ac_power_set_property function
> * Split mfd commit
>
> Changes in v2:
> * Reuse axp813 compatibles for axp803
> * Refactor axp20x_ac_power.c
Patches 1-3, 5-7:
Tested-by: Vasily Khoruzhick <anarsoul@gmail.com>
> Oskari Lemmela (7):
> dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
> ARM: dts: axp81x: add AC power supply subnode
> arm64: dts: allwinner: axp803: add AC and battery power supplies
> arm64: dts: allwinner: a64: sopine: enable power supplies
> power: supply: add AC power supply driver for AXP813
> mfd: axp20x: Add AC power supply cell for AXP813
> mfd: axp20x: Add supported cells for AXP803
>
> .../bindings/power/supply/axp20x_ac_power.txt | 3 +
> arch/arm/boot/dts/axp81x.dtsi | 5 +
> arch/arm64/boot/dts/allwinner/axp803.dtsi | 31 +++++++
> .../allwinner/sun50i-a64-sopine-baseboard.dts | 8 ++
> drivers/mfd/axp20x.c | 20 ++++
> drivers/power/supply/axp20x_ac_power.c | 92 +++++++++++++++++++
> include/linux/mfd/axp20x.h | 1 +
> 7 files changed, 160 insertions(+)
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 1/7] dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-21 21:15 ` Sebastian Reichel
-1 siblings, 0 replies; 38+ messages in thread
From: Sebastian Reichel @ 2018-10-21 21:15 UTC (permalink / raw)
To: Oskari Lemmela
Cc: Rob Herring, Mark Rutland, Chen-Yu Tsai, Maxime Ripard,
Lee Jones, Quentin Schulz, linux-pm, devicetree, linux-kernel,
linux-arm-kernel
[-- Attachment #1: Type: text/plain, Size: 1386 bytes --]
Hi,
On Sat, Oct 13, 2018 at 11:08:42AM +0300, Oskari Lemmela wrote:
> The AXP803/AXP813 AC power supply can limit input current and voltage.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Rob Herring <robh@kernel.org>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
-- Sebastian
> .../devicetree/bindings/power/supply/axp20x_ac_power.txt | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt b/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
> index 826e8a879121..7a1fb532abe5 100644
> --- a/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
> +++ b/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
> @@ -4,6 +4,7 @@ Required Properties:
> - compatible: One of:
> "x-powers,axp202-ac-power-supply"
> "x-powers,axp221-ac-power-supply"
> + "x-powers,axp813-ac-power-supply"
>
> This node is a subnode of the axp20x PMIC.
>
> @@ -13,6 +14,8 @@ reading ADC channels from the AXP20X ADC.
> The AXP22X is only able to tell if an AC power supply is present and
> usable.
>
> +AXP813/AXP803 are able to limit current and supply voltage
> +
> Example:
>
> &axp209 {
> --
> 2.17.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 1/7] dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding
@ 2018-10-21 21:15 ` Sebastian Reichel
0 siblings, 0 replies; 38+ messages in thread
From: Sebastian Reichel @ 2018-10-21 21:15 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Sat, Oct 13, 2018 at 11:08:42AM +0300, Oskari Lemmela wrote:
> The AXP803/AXP813 AC power supply can limit input current and voltage.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Rob Herring <robh@kernel.org>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
-- Sebastian
> .../devicetree/bindings/power/supply/axp20x_ac_power.txt | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt b/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
> index 826e8a879121..7a1fb532abe5 100644
> --- a/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
> +++ b/Documentation/devicetree/bindings/power/supply/axp20x_ac_power.txt
> @@ -4,6 +4,7 @@ Required Properties:
> - compatible: One of:
> "x-powers,axp202-ac-power-supply"
> "x-powers,axp221-ac-power-supply"
> + "x-powers,axp813-ac-power-supply"
>
> This node is a subnode of the axp20x PMIC.
>
> @@ -13,6 +14,8 @@ reading ADC channels from the AXP20X ADC.
> The AXP22X is only able to tell if an AC power supply is present and
> usable.
>
> +AXP813/AXP803 are able to limit current and supply voltage
> +
> Example:
>
> &axp209 {
> --
> 2.17.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20181021/8640a93c/attachment.sig>
^ permalink raw reply [flat|nested] 38+ messages in thread
* Re: [PATCH v4 5/7] power: supply: add AC power supply driver for AXP813
2018-10-13 8:08 ` Oskari Lemmela
@ 2018-10-21 21:16 ` Sebastian Reichel
-1 siblings, 0 replies; 38+ messages in thread
From: Sebastian Reichel @ 2018-10-21 21:16 UTC (permalink / raw)
To: Oskari Lemmela
Cc: Rob Herring, Mark Rutland, Chen-Yu Tsai, Maxime Ripard,
Lee Jones, Quentin Schulz, linux-pm, devicetree, linux-kernel,
linux-arm-kernel
[-- Attachment #1: Type: text/plain, Size: 5824 bytes --]
Hi,
On Sat, Oct 13, 2018 at 11:08:46AM +0300, Oskari Lemmela wrote:
> AXP813 and AXP803 PMICs can control input current and
> minimum voltage.
>
> Both of these values are configurable.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
Looks good to me apart from Chen-Yu Tsai's comments.
-- Sebastian
> drivers/power/supply/axp20x_ac_power.c | 92 ++++++++++++++++++++++++++
> include/linux/mfd/axp20x.h | 1 +
> 2 files changed, 93 insertions(+)
>
> diff --git a/drivers/power/supply/axp20x_ac_power.c b/drivers/power/supply/axp20x_ac_power.c
> index 0771f951b11f..059a97d6e14c 100644
> --- a/drivers/power/supply/axp20x_ac_power.c
> +++ b/drivers/power/supply/axp20x_ac_power.c
> @@ -27,6 +27,16 @@
> #define AXP20X_PWR_STATUS_ACIN_PRESENT BIT(7)
> #define AXP20X_PWR_STATUS_ACIN_AVAIL BIT(6)
>
> +#define AXP813_VHOLD_MASK GENMASK(5, 3)
> +#define AXP813_VHOLD_UV_TO_BIT(x) ((((x) / 100000) - 40) << 3)
> +#define AXP813_VHOLD_REG_TO_UV(x) \
> + (((((x) & AXP813_VHOLD_MASK) >> 3) + 40) * 100000)
> +
> +#define AXP813_CURR_LIMIT_MASK GENMASK(2, 0)
> +#define AXP813_CURR_LIMIT_UA_TO_BIT(x) (((x) / 500000) - 3)
> +#define AXP813_CURR_LIMIT_REG_TO_UA(x) \
> + ((((x) & AXP813_CURR_LIMIT_MASK) + 3) * 500000)
> +
> #define DRVNAME "axp20x-ac-power-supply"
>
> struct axp20x_ac_power {
> @@ -102,6 +112,55 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
>
> return 0;
>
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN:
> + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
> + if (ret)
> + return ret;
> +
> + val->intval = AXP813_VHOLD_REG_TO_UV(reg);
> +
> + return 0;
> +
> + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
> + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
> + if (ret)
> + return ret;
> +
> + val->intval = AXP813_CURR_LIMIT_REG_TO_UA(reg);
> +
> + return 0;
> +
> + default:
> + return -EINVAL;
> + }
> +
> + return -EINVAL;
> +}
> +
> +static int axp813_ac_power_set_property(struct power_supply *psy,
> + enum power_supply_property psp,
> + const union power_supply_propval *val)
> +{
> + struct axp20x_ac_power *power = power_supply_get_drvdata(psy);
> +
> + switch (psp) {
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN:
> + if (val->intval < 4000000 || val->intval > 4700000)
> + return -EINVAL;
> +
> + return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
> + AXP813_VHOLD_MASK,
> + AXP813_VHOLD_UV_TO_BIT(val->intval));
> +
> + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
> + if (val->intval < 1500000 || val->intval > 4000000)
> + return -EINVAL;
> +
> + return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
> + AXP813_CURR_LIMIT_MASK,
> + AXP813_CURR_LIMIT_UA_TO_BIT
> + (val->intval));
> +
> default:
> return -EINVAL;
> }
> @@ -109,6 +168,13 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
> return -EINVAL;
> }
>
> +static int axp813_ac_power_prop_writeable(struct power_supply *psy,
> + enum power_supply_property psp)
> +{
> + return psp == POWER_SUPPLY_PROP_VOLTAGE_MIN ||
> + psp == POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT;
> +}
> +
> static enum power_supply_property axp20x_ac_power_properties[] = {
> POWER_SUPPLY_PROP_HEALTH,
> POWER_SUPPLY_PROP_PRESENT,
> @@ -123,6 +189,14 @@ static enum power_supply_property axp22x_ac_power_properties[] = {
> POWER_SUPPLY_PROP_ONLINE,
> };
>
> +static enum power_supply_property axp813_ac_power_properties[] = {
> + POWER_SUPPLY_PROP_HEALTH,
> + POWER_SUPPLY_PROP_PRESENT,
> + POWER_SUPPLY_PROP_ONLINE,
> + POWER_SUPPLY_PROP_VOLTAGE_MIN,
> + POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
> +};
> +
> static const struct power_supply_desc axp20x_ac_power_desc = {
> .name = "axp20x-ac",
> .type = POWER_SUPPLY_TYPE_MAINS,
> @@ -139,6 +213,16 @@ static const struct power_supply_desc axp22x_ac_power_desc = {
> .get_property = axp20x_ac_power_get_property,
> };
>
> +static const struct power_supply_desc axp813_ac_power_desc = {
> + .name = "axp813-ac",
> + .type = POWER_SUPPLY_TYPE_MAINS,
> + .properties = axp813_ac_power_properties,
> + .num_properties = ARRAY_SIZE(axp813_ac_power_properties),
> + .property_is_writeable = axp813_ac_power_prop_writeable,
> + .get_property = axp20x_ac_power_get_property,
> + .set_property = axp813_ac_power_set_property,
> +};
> +
> struct axp_data {
> const struct power_supply_desc *power_desc;
> bool acin_adc;
> @@ -154,6 +238,11 @@ static const struct axp_data axp22x_data = {
> .acin_adc = false,
> };
>
> +static const struct axp_data axp813_data = {
> + .power_desc = &axp813_ac_power_desc,
> + .acin_adc = false,
> +};
> +
> static int axp20x_ac_power_probe(struct platform_device *pdev)
> {
> struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
> @@ -234,6 +323,9 @@ static const struct of_device_id axp20x_ac_power_match[] = {
> }, {
> .compatible = "x-powers,axp221-ac-power-supply",
> .data = &axp22x_data,
> + }, {
> + .compatible = "x-powers,axp813-ac-power-supply",
> + .data = &axp813_data,
> }, { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, axp20x_ac_power_match);
> diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
> index 517e60eecbcb..2302b620d238 100644
> --- a/include/linux/mfd/axp20x.h
> +++ b/include/linux/mfd/axp20x.h
> @@ -266,6 +266,7 @@ enum axp20x_variants {
> #define AXP288_RT_BATT_V_H 0xa0
> #define AXP288_RT_BATT_V_L 0xa1
>
> +#define AXP813_ACIN_PATH_CTRL 0x3a
> #define AXP813_ADC_RATE 0x85
>
> /* Fuel Gauge */
> --
> 2.17.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
^ permalink raw reply [flat|nested] 38+ messages in thread
* [PATCH v4 5/7] power: supply: add AC power supply driver for AXP813
@ 2018-10-21 21:16 ` Sebastian Reichel
0 siblings, 0 replies; 38+ messages in thread
From: Sebastian Reichel @ 2018-10-21 21:16 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Sat, Oct 13, 2018 at 11:08:46AM +0300, Oskari Lemmela wrote:
> AXP813 and AXP803 PMICs can control input current and
> minimum voltage.
>
> Both of these values are configurable.
>
> Signed-off-by: Oskari Lemmela <oskari@lemmela.net>
> Reviewed-by: Quentin Schulz <quentin.schulz@bootlin.com>
> ---
Looks good to me apart from Chen-Yu Tsai's comments.
-- Sebastian
> drivers/power/supply/axp20x_ac_power.c | 92 ++++++++++++++++++++++++++
> include/linux/mfd/axp20x.h | 1 +
> 2 files changed, 93 insertions(+)
>
> diff --git a/drivers/power/supply/axp20x_ac_power.c b/drivers/power/supply/axp20x_ac_power.c
> index 0771f951b11f..059a97d6e14c 100644
> --- a/drivers/power/supply/axp20x_ac_power.c
> +++ b/drivers/power/supply/axp20x_ac_power.c
> @@ -27,6 +27,16 @@
> #define AXP20X_PWR_STATUS_ACIN_PRESENT BIT(7)
> #define AXP20X_PWR_STATUS_ACIN_AVAIL BIT(6)
>
> +#define AXP813_VHOLD_MASK GENMASK(5, 3)
> +#define AXP813_VHOLD_UV_TO_BIT(x) ((((x) / 100000) - 40) << 3)
> +#define AXP813_VHOLD_REG_TO_UV(x) \
> + (((((x) & AXP813_VHOLD_MASK) >> 3) + 40) * 100000)
> +
> +#define AXP813_CURR_LIMIT_MASK GENMASK(2, 0)
> +#define AXP813_CURR_LIMIT_UA_TO_BIT(x) (((x) / 500000) - 3)
> +#define AXP813_CURR_LIMIT_REG_TO_UA(x) \
> + ((((x) & AXP813_CURR_LIMIT_MASK) + 3) * 500000)
> +
> #define DRVNAME "axp20x-ac-power-supply"
>
> struct axp20x_ac_power {
> @@ -102,6 +112,55 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
>
> return 0;
>
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN:
> + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
> + if (ret)
> + return ret;
> +
> + val->intval = AXP813_VHOLD_REG_TO_UV(reg);
> +
> + return 0;
> +
> + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
> + ret = regmap_read(power->regmap, AXP813_ACIN_PATH_CTRL, ®);
> + if (ret)
> + return ret;
> +
> + val->intval = AXP813_CURR_LIMIT_REG_TO_UA(reg);
> +
> + return 0;
> +
> + default:
> + return -EINVAL;
> + }
> +
> + return -EINVAL;
> +}
> +
> +static int axp813_ac_power_set_property(struct power_supply *psy,
> + enum power_supply_property psp,
> + const union power_supply_propval *val)
> +{
> + struct axp20x_ac_power *power = power_supply_get_drvdata(psy);
> +
> + switch (psp) {
> + case POWER_SUPPLY_PROP_VOLTAGE_MIN:
> + if (val->intval < 4000000 || val->intval > 4700000)
> + return -EINVAL;
> +
> + return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
> + AXP813_VHOLD_MASK,
> + AXP813_VHOLD_UV_TO_BIT(val->intval));
> +
> + case POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT:
> + if (val->intval < 1500000 || val->intval > 4000000)
> + return -EINVAL;
> +
> + return regmap_update_bits(power->regmap, AXP813_ACIN_PATH_CTRL,
> + AXP813_CURR_LIMIT_MASK,
> + AXP813_CURR_LIMIT_UA_TO_BIT
> + (val->intval));
> +
> default:
> return -EINVAL;
> }
> @@ -109,6 +168,13 @@ static int axp20x_ac_power_get_property(struct power_supply *psy,
> return -EINVAL;
> }
>
> +static int axp813_ac_power_prop_writeable(struct power_supply *psy,
> + enum power_supply_property psp)
> +{
> + return psp == POWER_SUPPLY_PROP_VOLTAGE_MIN ||
> + psp == POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT;
> +}
> +
> static enum power_supply_property axp20x_ac_power_properties[] = {
> POWER_SUPPLY_PROP_HEALTH,
> POWER_SUPPLY_PROP_PRESENT,
> @@ -123,6 +189,14 @@ static enum power_supply_property axp22x_ac_power_properties[] = {
> POWER_SUPPLY_PROP_ONLINE,
> };
>
> +static enum power_supply_property axp813_ac_power_properties[] = {
> + POWER_SUPPLY_PROP_HEALTH,
> + POWER_SUPPLY_PROP_PRESENT,
> + POWER_SUPPLY_PROP_ONLINE,
> + POWER_SUPPLY_PROP_VOLTAGE_MIN,
> + POWER_SUPPLY_PROP_INPUT_CURRENT_LIMIT,
> +};
> +
> static const struct power_supply_desc axp20x_ac_power_desc = {
> .name = "axp20x-ac",
> .type = POWER_SUPPLY_TYPE_MAINS,
> @@ -139,6 +213,16 @@ static const struct power_supply_desc axp22x_ac_power_desc = {
> .get_property = axp20x_ac_power_get_property,
> };
>
> +static const struct power_supply_desc axp813_ac_power_desc = {
> + .name = "axp813-ac",
> + .type = POWER_SUPPLY_TYPE_MAINS,
> + .properties = axp813_ac_power_properties,
> + .num_properties = ARRAY_SIZE(axp813_ac_power_properties),
> + .property_is_writeable = axp813_ac_power_prop_writeable,
> + .get_property = axp20x_ac_power_get_property,
> + .set_property = axp813_ac_power_set_property,
> +};
> +
> struct axp_data {
> const struct power_supply_desc *power_desc;
> bool acin_adc;
> @@ -154,6 +238,11 @@ static const struct axp_data axp22x_data = {
> .acin_adc = false,
> };
>
> +static const struct axp_data axp813_data = {
> + .power_desc = &axp813_ac_power_desc,
> + .acin_adc = false,
> +};
> +
> static int axp20x_ac_power_probe(struct platform_device *pdev)
> {
> struct axp20x_dev *axp20x = dev_get_drvdata(pdev->dev.parent);
> @@ -234,6 +323,9 @@ static const struct of_device_id axp20x_ac_power_match[] = {
> }, {
> .compatible = "x-powers,axp221-ac-power-supply",
> .data = &axp22x_data,
> + }, {
> + .compatible = "x-powers,axp813-ac-power-supply",
> + .data = &axp813_data,
> }, { /* sentinel */ }
> };
> MODULE_DEVICE_TABLE(of, axp20x_ac_power_match);
> diff --git a/include/linux/mfd/axp20x.h b/include/linux/mfd/axp20x.h
> index 517e60eecbcb..2302b620d238 100644
> --- a/include/linux/mfd/axp20x.h
> +++ b/include/linux/mfd/axp20x.h
> @@ -266,6 +266,7 @@ enum axp20x_variants {
> #define AXP288_RT_BATT_V_H 0xa0
> #define AXP288_RT_BATT_V_L 0xa1
>
> +#define AXP813_ACIN_PATH_CTRL 0x3a
> #define AXP813_ADC_RATE 0x85
>
> /* Fuel Gauge */
> --
> 2.17.1
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20181021/dd42a26f/attachment-0001.sig>
^ permalink raw reply [flat|nested] 38+ messages in thread
end of thread, other threads:[~2018-10-22 11:33 UTC | newest]
Thread overview: 38+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-10-13 8:08 [PATCH v4 0/7] AXP8x3 AC and battery power supply support Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-13 8:08 ` [PATCH v4 1/7] dt-bindings: power: supply: axp20x: add AXP813 AC power DT binding Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-16 4:08 ` Chen-Yu Tsai
2018-10-16 4:08 ` Chen-Yu Tsai
2018-10-21 21:15 ` Sebastian Reichel
2018-10-21 21:15 ` Sebastian Reichel
2018-10-13 8:08 ` [PATCH v4 2/7] ARM: dts: axp81x: add AC power supply subnode Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-16 4:08 ` Chen-Yu Tsai
2018-10-16 4:08 ` Chen-Yu Tsai
2018-10-13 8:08 ` [PATCH v4 3/7] arm64: dts: allwinner: axp803: add AC and battery power supplies Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-16 4:11 ` Chen-Yu Tsai
2018-10-16 4:11 ` Chen-Yu Tsai
2018-10-13 8:08 ` [PATCH v4 4/7] arm64: dts: allwinner: a64: sopine: enable " Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-16 4:14 ` Chen-Yu Tsai
2018-10-16 4:14 ` Chen-Yu Tsai
2018-10-13 8:08 ` [PATCH v4 5/7] power: supply: add AC power supply driver for AXP813 Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-17 6:12 ` Chen-Yu Tsai
2018-10-17 6:12 ` Chen-Yu Tsai
2018-10-21 21:16 ` Sebastian Reichel
2018-10-21 21:16 ` Sebastian Reichel
2018-10-13 8:08 ` [PATCH v4 6/7] mfd: axp20x: Add AC power supply cell " Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-16 4:15 ` Chen-Yu Tsai
2018-10-16 4:15 ` Chen-Yu Tsai
2018-10-16 4:15 ` Chen-Yu Tsai
2018-10-13 8:08 ` [PATCH v4 7/7] mfd: axp20x: Add supported cells for AXP803 Oskari Lemmela
2018-10-13 8:08 ` Oskari Lemmela
2018-10-16 4:17 ` Chen-Yu Tsai
2018-10-16 4:17 ` Chen-Yu Tsai
2018-10-18 6:04 ` [PATCH v4 0/7] AXP8x3 AC and battery power supply support Vasily Khoruzhick
2018-10-18 6:04 ` Vasily Khoruzhick
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.