Signed-off-by: Chen-Yu Tsai <w...@csie.org>
---
 arch/arm/cpu/armv7/sunxi/pinmux.c      | 18 ++++++++++++++++++
 arch/arm/include/asm/arch-sunxi/gpio.h |  4 ++++
 2 files changed, 22 insertions(+)

diff --git a/arch/arm/cpu/armv7/sunxi/pinmux.c 
b/arch/arm/cpu/armv7/sunxi/pinmux.c
index 89a4b71..8428439 100644
--- a/arch/arm/cpu/armv7/sunxi/pinmux.c
+++ b/arch/arm/cpu/armv7/sunxi/pinmux.c
@@ -59,6 +59,24 @@ int sunxi_gpio_get_cfgpin(u32 pin)
        return cfg & 0xf;
 }
 
+int sunxi_gpio_set_drv(u32 pin, u32 val)
+{
+       u32 drv;
+       u32 bank = GPIO_BANK(pin);
+       u32 index = GPIO_DRV_INDEX(pin);
+       u32 offset = GPIO_DRV_OFFSET(pin);
+       struct sunxi_gpio *pio =
+           &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank];
+
+       drv = readl(&pio->drv[0] + index);
+       drv &= ~(0xf << offset);
+       drv |= val << offset;
+
+       writel(drv, &pio->drv[0] + index);
+
+       return 0;
+}
+
 int sunxi_gpio_set_pull(u32 pin, u32 val)
 {
        u32 pull;
diff --git a/arch/arm/include/asm/arch-sunxi/gpio.h 
b/arch/arm/include/asm/arch-sunxi/gpio.h
index 4a44759..79b4f21 100644
--- a/arch/arm/include/asm/arch-sunxi/gpio.h
+++ b/arch/arm/include/asm/arch-sunxi/gpio.h
@@ -71,6 +71,9 @@ struct sunxi_gpio_reg {
 #define GPIO_CFG_INDEX(pin)    (((pin) & 0x1f) >> 3)
 #define GPIO_CFG_OFFSET(pin)   ((((pin) & 0x1f) & 0x7) << 2)
 
+#define GPIO_DRV_INDEX(pin)   (((pin) & 0x1f) >> 4)
+#define GPIO_DRV_OFFSET(pin)   ((((pin) & 0x1f) & 0xf) << 1)
+
 #define GPIO_PULL_INDEX(pin)   (((pin) & 0x1f) >> 4)
 #define GPIO_PULL_OFFSET(pin)  ((((pin) & 0x1f) & 0xf) << 1)
 
@@ -168,6 +171,7 @@ enum sunxi_gpio_number {
 
 int sunxi_gpio_set_cfgpin(u32 pin, u32 val);
 int sunxi_gpio_get_cfgpin(u32 pin);
+int sunxi_gpio_set_drv(u32 pin, u32 val);
 int sunxi_gpio_set_pull(u32 pin, u32 val);
 int name_to_gpio(const char *name);
 #define name_to_gpio   name_to_gpio
-- 
1.8.5.1

-- 
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to