<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">From 28682ca027b9fa64f3de4cea99373642f36c4e6c Mon Sep 17 00:00:00 2001
From: Samuel Holland &lt;samuel@sholland.org&gt;
Date: Sun, 8 Aug 2021 19:32:14 -0500
Subject: [PATCH 80/90] gpio: sunxi: Hack up the driver for the D1

Signed-off-by: Samuel Holland &lt;samuel@sholland.org&gt;
---
 arch/arm/include/asm/arch-sunxi/gpio.h | 12 ++++++++++--
 arch/arm/mach-sunxi/pinmux.c           |  8 +++++++-
 drivers/gpio/sunxi_gpio.c              |  3 +++
 3 files changed, 20 insertions(+), 3 deletions(-)

--- a/arch/arm/include/asm/arch-sunxi/gpio.h
+++ b/arch/arm/include/asm/arch-sunxi/gpio.h
@@ -9,7 +9,9 @@
 #define _SUNXI_GPIO_H
 
 #include &lt;linux/types.h&gt;
+#if 0
 #include &lt;asm/arch/cpu.h&gt;
+#endif
 
 /*
  * sunxi has 9 banks of gpio, they are:
@@ -55,30 +57,36 @@
 struct sunxi_gpio {
 	u32 cfg[4];
 	u32 dat;
-	u32 drv[2];
+	u32 drv[4];
 	u32 pull[2];
+	u32 reserved;
 };
 
 /* gpio interrupt control */
 struct sunxi_gpio_int {
-	u32 cfg[3];
+	u32 cfg[4];
 	u32 ctl;
 	u32 sta;
 	u32 deb;		/* interrupt debounce */
+	u32 reserved;
 };
 
+#if 0
 struct sunxi_gpio_reg {
 	struct sunxi_gpio gpio_bank[SUNXI_GPIO_BANKS];
 	u8 res[0xbc];
 	struct sunxi_gpio_int gpio_int;
 };
+#endif
 
 #define SUN50I_H6_GPIO_POW_MOD_SEL	0x340
 #define SUN50I_H6_GPIO_POW_MOD_VAL	0x348
 
+#if 0
 #define BANK_TO_GPIO(bank)	(((bank) &lt; SUNXI_GPIO_L) ? \
 	&amp;((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)-&gt;gpio_bank[bank] : \
 	&amp;((struct sunxi_gpio_reg *)SUNXI_R_PIO_BASE)-&gt;gpio_bank[(bank) - SUNXI_GPIO_L])
+#endif
 
 #define GPIO_BANK(pin)		((pin) &gt;&gt; 5)
 #define GPIO_NUM(pin)		((pin) &amp; 0x1f)
--- a/arch/arm/mach-sunxi/pinmux.c
+++ b/arch/arm/mach-sunxi/pinmux.c
@@ -7,7 +7,7 @@
 
 #include &lt;common.h&gt;
 #include &lt;asm/io.h&gt;
-#include &lt;asm/arch/gpio.h&gt;
+//#include &lt;asm/arch/gpio.h&gt;
 
 void sunxi_gpio_set_cfgbank(struct sunxi_gpio *pio, int bank_offset, u32 val)
 {
@@ -17,6 +17,7 @@ void sunxi_gpio_set_cfgbank(struct sunxi
 	clrsetbits_le32(&amp;pio-&gt;cfg[index], 0xf &lt;&lt; offset, val &lt;&lt; offset);
 }
 
+#if !CONFIG_IS_ENABLED(DM_GPIO)
 void sunxi_gpio_set_cfgpin(u32 pin, u32 val)
 {
 	u32 bank = GPIO_BANK(pin);
@@ -24,6 +25,7 @@ void sunxi_gpio_set_cfgpin(u32 pin, u32
 
 	sunxi_gpio_set_cfgbank(pio, pin, val);
 }
+#endif
 
 int sunxi_gpio_get_cfgbank(struct sunxi_gpio *pio, int bank_offset)
 {
@@ -37,6 +39,7 @@ int sunxi_gpio_get_cfgbank(struct sunxi_
 	return cfg &amp; 0xf;
 }
 
+#if !CONFIG_IS_ENABLED(DM_GPIO)
 int sunxi_gpio_get_cfgpin(u32 pin)
 {
 	u32 bank = GPIO_BANK(pin);
@@ -52,6 +55,7 @@ void sunxi_gpio_set_drv(u32 pin, u32 val
 
 	sunxi_gpio_set_drv_bank(pio, pin, val);
 }
+#endif
 
 void sunxi_gpio_set_drv_bank(struct sunxi_gpio *pio, u32 bank_offset, u32 val)
 {
@@ -61,6 +65,7 @@ void sunxi_gpio_set_drv_bank(struct sunx
 	clrsetbits_le32(&amp;pio-&gt;drv[index], 0x3 &lt;&lt; offset, val &lt;&lt; offset);
 }
 
+#if !CONFIG_IS_ENABLED(DM_GPIO)
 void sunxi_gpio_set_pull(u32 pin, u32 val)
 {
 	u32 bank = GPIO_BANK(pin);
@@ -68,6 +73,7 @@ void sunxi_gpio_set_pull(u32 pin, u32 va
 
 	sunxi_gpio_set_pull_bank(pio, pin, val);
 }
+#endif
 
 void sunxi_gpio_set_pull_bank(struct sunxi_gpio *pio, int bank_offset, u32 val)
 {
--- a/drivers/gpio/sunxi_gpio.c
+++ b/drivers/gpio/sunxi_gpio.c
@@ -18,6 +18,9 @@
 #include &lt;asm/gpio.h&gt;
 #include &lt;dt-bindings/gpio/gpio.h&gt;
 
+#include "../../arch/arm/include/asm/arch-sunxi/gpio.h"
+#include "../../arch/arm/mach-sunxi/pinmux.c"
+
 #if !CONFIG_IS_ENABLED(DM_GPIO)
 static int sunxi_gpio_output(u32 pin, u32 val)
 {
</pre></body></html>