aboutsummaryrefslogtreecommitdiff
path: root/package/boot/uboot-d1/patches/0052-gpio-axp-Add-pull-down-support-for-AXP22x-AXP8xx-var.patch
blob: 771e5c3866c69c11a7c81189b013b7819eb17775 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
From 4be9f9082b0a2ac2626ae20b7e07006139827442 Mon Sep 17 00:00:00 2001
From: Samuel Holland <samuel@sholland.org>
Date: Sat, 28 Aug 2021 00:34:54 -0500
Subject: [PATCH 52/90] gpio: axp: Add pull-down support for AXP22x/AXP8xx
 variant

The AXP221 and newer PMICs support a pull-down function on their GPIOs.
Add support for it.

Signed-off-by: Samuel Holland <samuel@sholland.org>
---
 drivers/gpio/axp_gpio.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

--- a/drivers/gpio/axp_gpio.c
+++ b/drivers/gpio/axp_gpio.c
@@ -24,6 +24,7 @@ struct axp_gpio_desc {
 	u8		npins;
 	u8		status_reg;
 	u8		status_offset;
+	u8		pull_reg;
 	u8		input_mux;
 };
 
@@ -60,11 +61,22 @@ static int axp_gpio_get_function(struct
 static int axp_gpio_set_flags(struct udevice *dev, unsigned pin, ulong flags)
 {
 	const struct axp_gpio_desc *desc = dev_get_priv(dev);
+	bool pull_down = flags & GPIOD_PULL_DOWN;
+	int ret;
 	u8 mux;
 
-	if (flags & (GPIOD_MASK_DSTYPE | GPIOD_MASK_PULL))
+	if (flags & (GPIOD_MASK_DSTYPE | GPIOD_PULL_UP))
+		return -EINVAL;
+	if (pull_down && !desc->pull_reg)
 		return -EINVAL;
 
+	if (desc->pull_reg) {
+		ret = pmic_clrsetbits(dev->parent, desc->pull_reg,
+				      BIT(pin), pull_down ? BIT(pin) : 0);
+		if (ret)
+			return ret;
+	}
+
 	if (flags & GPIOD_IS_IN)
 		mux = desc->input_mux;
 	else if (flags & GPIOD_IS_OUT_ACTIVE)
@@ -129,6 +141,7 @@ static const struct axp_gpio_desc axp221
 	.pins		= axp221_gpio_pins,
 	.npins		= ARRAY_SIZE(axp221_gpio_pins),
 	.status_reg	= 0x94,
+	.pull_reg	= 0x97,
 	.input_mux	= 2,
 };