From d131de952565c63834fbaa1b105319b7aaf6bb3f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Jirman?= <megi@xff.cz>
Date: Tue, 9 Jun 2020 22:00:36 +0200
Subject: [PATCH] regulator: axp20x: Turn N_VBUSEN to input on
 x-powers,sense-vbus-en

When x-powers,sense-vbus-en is present on the PMIC DT node, force
the N_VBUSEN to be an input. This is necessary on boards that
have N_VBUSEN connected to VBUS enabling switch to make PMIC
not charge when the board is generating VBUS voltage itself.

Signed-off-by: Ondrej Jirman <megi@xff.cz>
---
 .../arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dts | 4 ++++
 drivers/regulator/axp20x-regulator.c                      | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dts b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dts
index c4e3547e0..ec4927dfe 100644
--- a/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dts
+++ b/arch/arm64/boot/dts/allwinner/sun50i-a64-pinephone-1.2.dts
@@ -15,6 +15,10 @@ wifi_pwrseq: wifi-pwrseq {
 	};
 };
 
+&axp803 {
+	x-powers,sense-vbus-en;
+};
+
 &backlight {
 	power-supply = <&reg_ldo_io0>;
 	lth-brightness = <10>;
diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
index 7017eee0c..21752e4bf 100644
--- a/drivers/regulator/axp20x-regulator.c
+++ b/drivers/regulator/axp20x-regulator.c
@@ -1344,6 +1344,14 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
 						&dcdc5_name);
 	}
 
+	if (!drivevbus &&
+	    of_property_read_bool(pdev->dev.parent->of_node, "x-powers,sense-vbus-en")) {
+		/* make N_VBUSEN an input */
+		regmap_update_bits(axp20x->regmap, AXP20X_OVER_TMP,
+				   AXP22X_MISC_N_VBUSEN_FUNC,
+				   AXP22X_MISC_N_VBUSEN_FUNC);
+	}
+
 	if (drivevbus) {
 		struct regulator_desc *new_desc;
 		bool drivevbus_vin = false;
-- 
2.35.3

