diff options
Diffstat (limited to 'arch/arm/mach-at91/include/mach/gpio.h')
-rw-r--r-- | arch/arm/mach-at91/include/mach/gpio.h | 306 |
1 files changed, 0 insertions, 306 deletions
diff --git a/arch/arm/mach-at91/include/mach/gpio.h b/arch/arm/mach-at91/include/mach/gpio.h deleted file mode 100644 index ddd6971e37..0000000000 --- a/arch/arm/mach-at91/include/mach/gpio.h +++ /dev/null @@ -1,306 +0,0 @@ -/* - * Copyright (C) 2011-2012 Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com> - * - * Under GPLv2 only - */ - -#ifndef __AT91_GPIO_H__ -#define __AT91_GPIO_H__ - -#include <dt-bindings/gpio/gpio.h> -#include <asm/io.h> -#include <mach/at91_pio.h> - -#define MAX_NB_GPIO_PER_BANK 32 - -enum at91_mux { - AT91_MUX_GPIO = 0, - AT91_MUX_PERIPH_A = 1, - AT91_MUX_PERIPH_B = 2, - AT91_MUX_PERIPH_C = 3, - AT91_MUX_PERIPH_D = 4, - AT91_MUX_PERIPH_E = 5, - AT91_MUX_PERIPH_F = 6, - AT91_MUX_PERIPH_G = 7, -}; - -static inline unsigned pin_to_bank(unsigned pin) -{ - return pin / MAX_NB_GPIO_PER_BANK; -} - -static inline unsigned pin_to_bank_offset(unsigned pin) -{ - return pin % MAX_NB_GPIO_PER_BANK; -} - -static inline unsigned pin_to_mask(unsigned pin) -{ - return 1 << pin_to_bank_offset(pin); -} - -static inline void at91_mux_disable_interrupt(void __iomem *pio, unsigned mask) -{ - writel(mask, pio + PIO_IDR); -} - -static inline void at91_mux_set_pullup(void __iomem *pio, unsigned mask, bool on) -{ - writel(mask, pio + (on ? PIO_PUER : PIO_PUDR)); -} - -static inline void at91_mux_set_multidrive(void __iomem *pio, unsigned mask, bool on) -{ - writel(mask, pio + (on ? PIO_MDER : PIO_MDDR)); -} - -static inline void at91_mux_set_A_periph(void __iomem *pio, unsigned mask) -{ - writel(mask, pio + PIO_ASR); -} - -static inline void at91_mux_set_B_periph(void __iomem *pio, unsigned mask) -{ - writel(mask, pio + PIO_BSR); -} - -static inline void at91_mux_pio3_set_A_periph(void __iomem *pio, unsigned mask) -{ - writel(readl(pio + PIO_ABCDSR1) & ~mask, pio + PIO_ABCDSR1); - writel(readl(pio + PIO_ABCDSR2) & ~mask, pio + PIO_ABCDSR2); -} - -static inline void at91_mux_pio3_set_B_periph(void __iomem *pio, unsigned mask) -{ - writel(readl(pio + PIO_ABCDSR1) | mask, pio + PIO_ABCDSR1); - writel(readl(pio + PIO_ABCDSR2) & ~mask, pio + PIO_ABCDSR2); -} - -static inline void at91_mux_pio3_set_C_periph(void __iomem *pio, unsigned mask) -{ - writel(readl(pio + PIO_ABCDSR1) & ~mask, pio + PIO_ABCDSR1); - writel(readl(pio + PIO_ABCDSR2) | mask, pio + PIO_ABCDSR2); -} - -static inline void at91_mux_pio3_set_D_periph(void __iomem *pio, unsigned mask) -{ - writel(readl(pio + PIO_ABCDSR1) | mask, pio + PIO_ABCDSR1); - writel(readl(pio + PIO_ABCDSR2) | mask, pio + PIO_ABCDSR2); -} - -static inline void at91_mux_set_deglitch(void __iomem *pio, unsigned mask, bool is_on) -{ - writel(mask, pio + (is_on ? PIO_IFER : PIO_IFDR)); -} - -static inline void at91_mux_pio3_set_deglitch(void __iomem *pio, unsigned mask, bool is_on) -{ - if (is_on) - writel(mask, pio + PIO_IFSCDR); - at91_mux_set_deglitch(pio, mask, is_on); -} - -static inline void at91_mux_pio3_set_debounce(void __iomem *pio, unsigned mask, - bool is_on, u32 div) -{ - if (is_on) { - writel(mask, pio + PIO_IFSCER); - writel(div & PIO_SCDR_DIV, pio + PIO_SCDR); - writel(mask, pio + PIO_IFER); - } else { - writel(mask, pio + PIO_IFDR); - } -} - -static inline void at91_mux_pio3_set_pulldown(void __iomem *pio, unsigned mask, bool is_on) -{ - writel(mask, pio + (is_on ? PIO_PPDER : PIO_PPDDR)); -} - -static inline void at91_mux_pio3_disable_schmitt_trig(void __iomem *pio, unsigned mask) -{ - writel(readl(pio + PIO_SCHMITT) | mask, pio + PIO_SCHMITT); -} - -static inline void at91_mux_gpio_disable(void __iomem *pio, unsigned mask) -{ - writel(mask, pio + PIO_PDR); -} - -static inline void at91_mux_gpio_enable(void __iomem *pio, unsigned mask) -{ - writel(mask, pio + PIO_PER); -} - -static inline void at91_mux_gpio_input(void __iomem *pio, unsigned mask, bool input) -{ - writel(mask, pio + (input ? PIO_ODR : PIO_OER)); -} - -static inline void at91_mux_gpio_set(void __iomem *pio, unsigned mask, -int value) -{ - writel(mask, pio + (value ? PIO_SODR : PIO_CODR)); -} - -static inline int at91_mux_gpio_get(void __iomem *pio, unsigned mask) -{ - u32 pdsr; - - pdsr = readl(pio + PIO_PDSR); - return (pdsr & mask) != 0; -} - -static inline void at91_mux_pio3_pin(void __iomem *pio, unsigned mask, - enum at91_mux mux, int gpio_state) -{ - at91_mux_disable_interrupt(pio, mask); - - switch(mux) { - case AT91_MUX_GPIO: - at91_mux_gpio_enable(pio, mask); - break; - case AT91_MUX_PERIPH_A: - at91_mux_pio3_set_A_periph(pio, mask); - break; - case AT91_MUX_PERIPH_B: - at91_mux_pio3_set_B_periph(pio, mask); - break; - case AT91_MUX_PERIPH_C: - at91_mux_pio3_set_C_periph(pio, mask); - break; - case AT91_MUX_PERIPH_D: - at91_mux_pio3_set_D_periph(pio, mask); - break; - default: - /* ignore everything else */ - break; - } - if (mux != AT91_MUX_GPIO) - at91_mux_gpio_disable(pio, mask); - - at91_mux_set_pullup(pio, mask, gpio_state & GPIO_PULL_UP); - at91_mux_pio3_set_pulldown(pio, mask, gpio_state & GPIO_PULL_DOWN); -} - -/* helpers for PIO4 pinctrl (>= sama5d2) */ - -static inline void at91_mux_pio4_set_periph(void __iomem *pio, unsigned mask, u32 func) -{ - writel(mask, pio + PIO4_MSKR); - writel(func, pio + PIO4_CFGR); -} - -static inline void at91_mux_pio4_set_A_periph(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_periph(pio, mask, AT91_MUX_PERIPH_A); -} - -static inline void at91_mux_pio4_set_B_periph(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_periph(pio, mask, AT91_MUX_PERIPH_B); -} - -static inline void at91_mux_pio4_set_C_periph(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_periph(pio, mask, AT91_MUX_PERIPH_C); -} - -static inline void at91_mux_pio4_set_D_periph(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_periph(pio, mask, AT91_MUX_PERIPH_D); -} - -static inline void at91_mux_pio4_set_E_periph(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_periph(pio, mask, AT91_MUX_PERIPH_E); -} - -static inline void at91_mux_pio4_set_F_periph(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_periph(pio, mask, AT91_MUX_PERIPH_F); -} - -static inline void at91_mux_pio4_set_G_periph(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_periph(pio, mask, AT91_MUX_PERIPH_G); -} - -static inline void at91_mux_pio4_set_func(void __iomem *pio, - unsigned pin_mask, - unsigned cfgr_and_mask, - unsigned cfgr_or_mask) -{ - u32 reg; - writel(pin_mask, pio + PIO4_MSKR); - reg = readl(pio + PIO4_CFGR); - reg &= cfgr_and_mask; - reg |= cfgr_or_mask; - writel(reg, pio + PIO4_CFGR); -} - -static inline void at91_mux_pio4_set_bistate(void __iomem *pio, - unsigned pin_mask, - unsigned func_mask, - bool is_on) -{ - at91_mux_pio4_set_func(pio, pin_mask, ~func_mask, - is_on ? func_mask : 0); -} - -static inline void at91_mux_pio4_set_deglitch(void __iomem *pio, unsigned mask, bool is_on) -{ - at91_mux_pio4_set_bistate(pio, mask, PIO4_IFEN_MASK, is_on); -} - -static inline void at91_mux_pio4_set_debounce(void __iomem *pio, unsigned mask, - bool is_on, u32 div) -{ - at91_mux_pio4_set_bistate(pio, mask, PIO4_IFEN_MASK, is_on); - at91_mux_pio4_set_bistate(pio, mask, PIO4_IFSCEN_MASK, is_on); -} - -static inline void at91_mux_pio4_set_pulldown(void __iomem *pio, unsigned mask, bool is_on) -{ - at91_mux_pio4_set_bistate(pio, mask, PIO4_PDEN_MASK, is_on); -} - -static inline void at91_mux_pio4_disable_schmitt_trig(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_bistate(pio, mask, PIO4_SCHMITT_MASK, false); -} - -static inline void at91_mux_gpio4_enable(void __iomem *pio, unsigned mask) -{ - at91_mux_pio4_set_func(pio, mask, ~PIO4_CFGR_FUNC_MASK, AT91_MUX_GPIO); -} - -static inline void at91_mux_gpio4_input(void __iomem *pio, unsigned mask, bool input) -{ - u32 cfgr; - - writel(mask, pio + PIO4_MSKR); - - cfgr = readl(pio + PIO4_CFGR); - if (input) - cfgr &= ~PIO4_DIR_MASK; - else - cfgr |= PIO4_DIR_MASK; - writel(cfgr, pio + PIO4_CFGR); -} - -static inline void at91_mux_gpio4_set(void __iomem *pio, unsigned mask, - int value) -{ - writel(mask, pio + (value ? PIO4_SODR : PIO4_CODR)); -} - -static inline int at91_mux_gpio4_get(void __iomem *pio, unsigned mask) -{ - u32 pdsr; - - pdsr = readl(pio + PIO4_PDSR); - return (pdsr & mask) != 0; -} - -#endif /* __AT91_GPIO_H__ */ |