Loading arch/blackfin/Kconfig +11 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,9 @@ config GENERIC_BUG config ZONE_DMA def_bool y config GENERIC_GPIO def_bool y config FORCE_MAX_ZONEORDER int default "14" Loading Loading @@ -317,6 +320,14 @@ config BF53x depends on (BF531 || BF532 || BF533 || BF534 || BF536 || BF537) default y config GPIO_ADI def_bool y depends on (BF51x || BF52x || BF53x || BF538 || BF539 || BF561) config PINCTRL def_bool y depends on BF54x || BF60x config MEM_MT48LC64M4A2FB_7E bool depends on (BFIN533_STAMP) Loading arch/blackfin/include/asm/gpio.h +20 −137 Original line number Diff line number Diff line Loading @@ -25,8 +25,12 @@ #ifndef __ASSEMBLY__ #ifndef CONFIG_PINCTRL #include <linux/compiler.h> #include <linux/gpio.h> #include <asm/blackfin.h> #include <asm/portmux.h> #include <asm/irq_handler.h> /*********************************************************** * Loading @@ -45,7 +49,6 @@ * MODIFICATION HISTORY : **************************************************************/ #if !BFIN_GPIO_PINT void set_gpio_dir(unsigned, unsigned short); void set_gpio_inen(unsigned, unsigned short); void set_gpio_polar(unsigned, unsigned short); Loading Loading @@ -115,7 +118,6 @@ struct gpio_port_t { unsigned short dummy16; unsigned short inen; }; #endif #ifdef BFIN_SPECIAL_GPIO_BANKS void bfin_special_gpio_free(unsigned gpio); Loading @@ -127,25 +129,21 @@ void bfin_special_gpio_pm_hibernate_suspend(void); #endif #ifdef CONFIG_PM int bfin_pm_standby_ctrl(unsigned ctrl); void bfin_gpio_pm_hibernate_restore(void); void bfin_gpio_pm_hibernate_suspend(void); int bfin_gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl); int bfin_gpio_pm_standby_ctrl(unsigned ctrl); static inline int bfin_pm_standby_setup(void) { return bfin_pm_standby_ctrl(1); return bfin_gpio_pm_standby_ctrl(1); } static inline void bfin_pm_standby_restore(void) { bfin_pm_standby_ctrl(0); bfin_gpio_pm_standby_ctrl(0); } void bfin_gpio_pm_hibernate_restore(void); void bfin_gpio_pm_hibernate_suspend(void); void bfin_pint_suspend(void); void bfin_pint_resume(void); # if !BFIN_GPIO_PINT int gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl); struct gpio_port_s { unsigned short data; Loading @@ -161,7 +159,6 @@ struct gpio_port_s { unsigned short reserved; unsigned short mux; }; # endif #endif /*CONFIG_PM*/ /*********************************************************** Loading @@ -178,35 +175,28 @@ struct gpio_port_s { ************************************************************* * MODIFICATION HISTORY : **************************************************************/ int bfin_gpio_request(unsigned gpio, const char *label); void bfin_gpio_free(unsigned gpio); int bfin_gpio_irq_request(unsigned gpio, const char *label); void bfin_gpio_irq_free(unsigned gpio); int bfin_gpio_direction_input(unsigned gpio); int bfin_gpio_direction_output(unsigned gpio, int value); int bfin_gpio_get_value(unsigned gpio); void bfin_gpio_set_value(unsigned gpio, int value); void bfin_gpio_irq_prepare(unsigned gpio); static inline int irq_to_gpio(unsigned irq) { return irq - GPIO_IRQ_BASE; } #endif /* CONFIG_PINCTRL */ #include <asm/irq.h> #include <asm/errno.h> #ifdef CONFIG_GPIOLIB #include <asm-generic/gpio.h> /* cansleep wrappers */ static inline int gpio_get_value(unsigned int gpio) { if (gpio < MAX_BLACKFIN_GPIOS) return bfin_gpio_get_value(gpio); else return __gpio_get_value(gpio); } static inline void gpio_set_value(unsigned int gpio, int value) { if (gpio < MAX_BLACKFIN_GPIOS) bfin_gpio_set_value(gpio, value); else __gpio_set_value(gpio, value); } Loading @@ -219,113 +209,6 @@ static inline int gpio_to_irq(unsigned gpio) { return __gpio_to_irq(gpio); } #else /* !CONFIG_GPIOLIB */ static inline int gpio_request(unsigned gpio, const char *label) { return bfin_gpio_request(gpio, label); } static inline void gpio_free(unsigned gpio) { return bfin_gpio_free(gpio); } static inline int gpio_direction_input(unsigned gpio) { return bfin_gpio_direction_input(gpio); } static inline int gpio_direction_output(unsigned gpio, int value) { return bfin_gpio_direction_output(gpio, value); } static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) { return -EINVAL; } static inline int gpio_request_one(unsigned gpio, unsigned long flags, const char *label) { int err; err = bfin_gpio_request(gpio, label); if (err) return err; if (flags & GPIOF_DIR_IN) err = bfin_gpio_direction_input(gpio); else err = bfin_gpio_direction_output(gpio, (flags & GPIOF_INIT_HIGH) ? 1 : 0); if (err) bfin_gpio_free(gpio); return err; } static inline int gpio_request_array(const struct gpio *array, size_t num) { int i, err; for (i = 0; i < num; i++, array++) { err = gpio_request_one(array->gpio, array->flags, array->label); if (err) goto err_free; } return 0; err_free: while (i--) bfin_gpio_free((--array)->gpio); return err; } static inline void gpio_free_array(const struct gpio *array, size_t num) { while (num--) bfin_gpio_free((array++)->gpio); } static inline int __gpio_get_value(unsigned gpio) { return bfin_gpio_get_value(gpio); } static inline void __gpio_set_value(unsigned gpio, int value) { return bfin_gpio_set_value(gpio, value); } static inline int gpio_get_value(unsigned gpio) { return __gpio_get_value(gpio); } static inline void gpio_set_value(unsigned gpio, int value) { return __gpio_set_value(gpio, value); } static inline int gpio_to_irq(unsigned gpio) { if (likely(gpio < MAX_BLACKFIN_GPIOS)) return gpio + GPIO_IRQ_BASE; return -EINVAL; } #include <asm-generic/gpio.h> /* cansleep wrappers */ #endif /* !CONFIG_GPIOLIB */ static inline int irq_to_gpio(unsigned irq) { return (irq - GPIO_IRQ_BASE); } #endif /* __ASSEMBLY__ */ #endif /* __ARCH_BLACKFIN_GPIO_H__ */ arch/blackfin/include/asm/portmux.h +17 −2 Original line number Diff line number Diff line Loading @@ -17,14 +17,29 @@ #define P_MAYSHARE 0x2000 #define P_DONTCARE 0x1000 #ifdef CONFIG_PINCTRL #include <asm/irq_handler.h> #define gpio_pint_regs bfin_pint_regs #define adi_internal_set_wake bfin_internal_set_wake #define peripheral_request(per, label) 0 #define peripheral_free(per) #define peripheral_request_list(per, label) \ (pdev ? (IS_ERR(devm_pinctrl_get_select_default(&pdev->dev)) \ ? -EINVAL : 0) : 0) #define peripheral_free_list(per) #else int peripheral_request(unsigned short per, const char *label); void peripheral_free(unsigned short per); int peripheral_request_list(const unsigned short per[], const char *label); void peripheral_free_list(const unsigned short per[]); #endif #include <asm/gpio.h> #include <linux/err.h> #include <linux/pinctrl/pinctrl.h> #include <mach/portmux.h> #include <linux/gpio.h> #ifndef P_SPORT2_TFS #define P_SPORT2_TFS P_UNDEF Loading arch/blackfin/kernel/Makefile +2 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ extra-y := vmlinux.lds obj-y := \ entry.o process.o bfin_ksyms.o ptrace.o setup.o signal.o \ sys_bfin.o traps.o irqchip.o dma-mapping.o flat.o \ fixed_code.o reboot.o bfin_gpio.o bfin_dma.o \ fixed_code.o reboot.o bfin_dma.o \ exception.o dumpstack.o ifeq ($(CONFIG_GENERIC_CLOCKEVENTS),y) Loading @@ -16,6 +16,7 @@ else obj-y += time.o endif obj-$(CONFIG_GPIO_ADI) += bfin_gpio.o obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o obj-$(CONFIG_FUNCTION_TRACER) += ftrace-entry.o obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o Loading arch/blackfin/mach-bf548/include/mach/portmux.h +0 −2 Original line number Diff line number Diff line Loading @@ -7,8 +7,6 @@ #ifndef _MACH_PORTMUX_H_ #define _MACH_PORTMUX_H_ #define MAX_RESOURCES MAX_BLACKFIN_GPIOS #define P_SPORT2_TFS (P_DEFINED | P_IDENT(GPIO_PA0) | P_FUNCT(0)) #define P_SPORT2_DTSEC (P_DEFINED | P_IDENT(GPIO_PA1) | P_FUNCT(0)) #define P_SPORT2_DTPRI (P_DEFINED | P_IDENT(GPIO_PA2) | P_FUNCT(0)) Loading Loading
arch/blackfin/Kconfig +11 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,9 @@ config GENERIC_BUG config ZONE_DMA def_bool y config GENERIC_GPIO def_bool y config FORCE_MAX_ZONEORDER int default "14" Loading Loading @@ -317,6 +320,14 @@ config BF53x depends on (BF531 || BF532 || BF533 || BF534 || BF536 || BF537) default y config GPIO_ADI def_bool y depends on (BF51x || BF52x || BF53x || BF538 || BF539 || BF561) config PINCTRL def_bool y depends on BF54x || BF60x config MEM_MT48LC64M4A2FB_7E bool depends on (BFIN533_STAMP) Loading
arch/blackfin/include/asm/gpio.h +20 −137 Original line number Diff line number Diff line Loading @@ -25,8 +25,12 @@ #ifndef __ASSEMBLY__ #ifndef CONFIG_PINCTRL #include <linux/compiler.h> #include <linux/gpio.h> #include <asm/blackfin.h> #include <asm/portmux.h> #include <asm/irq_handler.h> /*********************************************************** * Loading @@ -45,7 +49,6 @@ * MODIFICATION HISTORY : **************************************************************/ #if !BFIN_GPIO_PINT void set_gpio_dir(unsigned, unsigned short); void set_gpio_inen(unsigned, unsigned short); void set_gpio_polar(unsigned, unsigned short); Loading Loading @@ -115,7 +118,6 @@ struct gpio_port_t { unsigned short dummy16; unsigned short inen; }; #endif #ifdef BFIN_SPECIAL_GPIO_BANKS void bfin_special_gpio_free(unsigned gpio); Loading @@ -127,25 +129,21 @@ void bfin_special_gpio_pm_hibernate_suspend(void); #endif #ifdef CONFIG_PM int bfin_pm_standby_ctrl(unsigned ctrl); void bfin_gpio_pm_hibernate_restore(void); void bfin_gpio_pm_hibernate_suspend(void); int bfin_gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl); int bfin_gpio_pm_standby_ctrl(unsigned ctrl); static inline int bfin_pm_standby_setup(void) { return bfin_pm_standby_ctrl(1); return bfin_gpio_pm_standby_ctrl(1); } static inline void bfin_pm_standby_restore(void) { bfin_pm_standby_ctrl(0); bfin_gpio_pm_standby_ctrl(0); } void bfin_gpio_pm_hibernate_restore(void); void bfin_gpio_pm_hibernate_suspend(void); void bfin_pint_suspend(void); void bfin_pint_resume(void); # if !BFIN_GPIO_PINT int gpio_pm_wakeup_ctrl(unsigned gpio, unsigned ctrl); struct gpio_port_s { unsigned short data; Loading @@ -161,7 +159,6 @@ struct gpio_port_s { unsigned short reserved; unsigned short mux; }; # endif #endif /*CONFIG_PM*/ /*********************************************************** Loading @@ -178,35 +175,28 @@ struct gpio_port_s { ************************************************************* * MODIFICATION HISTORY : **************************************************************/ int bfin_gpio_request(unsigned gpio, const char *label); void bfin_gpio_free(unsigned gpio); int bfin_gpio_irq_request(unsigned gpio, const char *label); void bfin_gpio_irq_free(unsigned gpio); int bfin_gpio_direction_input(unsigned gpio); int bfin_gpio_direction_output(unsigned gpio, int value); int bfin_gpio_get_value(unsigned gpio); void bfin_gpio_set_value(unsigned gpio, int value); void bfin_gpio_irq_prepare(unsigned gpio); static inline int irq_to_gpio(unsigned irq) { return irq - GPIO_IRQ_BASE; } #endif /* CONFIG_PINCTRL */ #include <asm/irq.h> #include <asm/errno.h> #ifdef CONFIG_GPIOLIB #include <asm-generic/gpio.h> /* cansleep wrappers */ static inline int gpio_get_value(unsigned int gpio) { if (gpio < MAX_BLACKFIN_GPIOS) return bfin_gpio_get_value(gpio); else return __gpio_get_value(gpio); } static inline void gpio_set_value(unsigned int gpio, int value) { if (gpio < MAX_BLACKFIN_GPIOS) bfin_gpio_set_value(gpio, value); else __gpio_set_value(gpio, value); } Loading @@ -219,113 +209,6 @@ static inline int gpio_to_irq(unsigned gpio) { return __gpio_to_irq(gpio); } #else /* !CONFIG_GPIOLIB */ static inline int gpio_request(unsigned gpio, const char *label) { return bfin_gpio_request(gpio, label); } static inline void gpio_free(unsigned gpio) { return bfin_gpio_free(gpio); } static inline int gpio_direction_input(unsigned gpio) { return bfin_gpio_direction_input(gpio); } static inline int gpio_direction_output(unsigned gpio, int value) { return bfin_gpio_direction_output(gpio, value); } static inline int gpio_set_debounce(unsigned gpio, unsigned debounce) { return -EINVAL; } static inline int gpio_request_one(unsigned gpio, unsigned long flags, const char *label) { int err; err = bfin_gpio_request(gpio, label); if (err) return err; if (flags & GPIOF_DIR_IN) err = bfin_gpio_direction_input(gpio); else err = bfin_gpio_direction_output(gpio, (flags & GPIOF_INIT_HIGH) ? 1 : 0); if (err) bfin_gpio_free(gpio); return err; } static inline int gpio_request_array(const struct gpio *array, size_t num) { int i, err; for (i = 0; i < num; i++, array++) { err = gpio_request_one(array->gpio, array->flags, array->label); if (err) goto err_free; } return 0; err_free: while (i--) bfin_gpio_free((--array)->gpio); return err; } static inline void gpio_free_array(const struct gpio *array, size_t num) { while (num--) bfin_gpio_free((array++)->gpio); } static inline int __gpio_get_value(unsigned gpio) { return bfin_gpio_get_value(gpio); } static inline void __gpio_set_value(unsigned gpio, int value) { return bfin_gpio_set_value(gpio, value); } static inline int gpio_get_value(unsigned gpio) { return __gpio_get_value(gpio); } static inline void gpio_set_value(unsigned gpio, int value) { return __gpio_set_value(gpio, value); } static inline int gpio_to_irq(unsigned gpio) { if (likely(gpio < MAX_BLACKFIN_GPIOS)) return gpio + GPIO_IRQ_BASE; return -EINVAL; } #include <asm-generic/gpio.h> /* cansleep wrappers */ #endif /* !CONFIG_GPIOLIB */ static inline int irq_to_gpio(unsigned irq) { return (irq - GPIO_IRQ_BASE); } #endif /* __ASSEMBLY__ */ #endif /* __ARCH_BLACKFIN_GPIO_H__ */
arch/blackfin/include/asm/portmux.h +17 −2 Original line number Diff line number Diff line Loading @@ -17,14 +17,29 @@ #define P_MAYSHARE 0x2000 #define P_DONTCARE 0x1000 #ifdef CONFIG_PINCTRL #include <asm/irq_handler.h> #define gpio_pint_regs bfin_pint_regs #define adi_internal_set_wake bfin_internal_set_wake #define peripheral_request(per, label) 0 #define peripheral_free(per) #define peripheral_request_list(per, label) \ (pdev ? (IS_ERR(devm_pinctrl_get_select_default(&pdev->dev)) \ ? -EINVAL : 0) : 0) #define peripheral_free_list(per) #else int peripheral_request(unsigned short per, const char *label); void peripheral_free(unsigned short per); int peripheral_request_list(const unsigned short per[], const char *label); void peripheral_free_list(const unsigned short per[]); #endif #include <asm/gpio.h> #include <linux/err.h> #include <linux/pinctrl/pinctrl.h> #include <mach/portmux.h> #include <linux/gpio.h> #ifndef P_SPORT2_TFS #define P_SPORT2_TFS P_UNDEF Loading
arch/blackfin/kernel/Makefile +2 −1 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ extra-y := vmlinux.lds obj-y := \ entry.o process.o bfin_ksyms.o ptrace.o setup.o signal.o \ sys_bfin.o traps.o irqchip.o dma-mapping.o flat.o \ fixed_code.o reboot.o bfin_gpio.o bfin_dma.o \ fixed_code.o reboot.o bfin_dma.o \ exception.o dumpstack.o ifeq ($(CONFIG_GENERIC_CLOCKEVENTS),y) Loading @@ -16,6 +16,7 @@ else obj-y += time.o endif obj-$(CONFIG_GPIO_ADI) += bfin_gpio.o obj-$(CONFIG_DYNAMIC_FTRACE) += ftrace.o obj-$(CONFIG_FUNCTION_TRACER) += ftrace-entry.o obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o Loading
arch/blackfin/mach-bf548/include/mach/portmux.h +0 −2 Original line number Diff line number Diff line Loading @@ -7,8 +7,6 @@ #ifndef _MACH_PORTMUX_H_ #define _MACH_PORTMUX_H_ #define MAX_RESOURCES MAX_BLACKFIN_GPIOS #define P_SPORT2_TFS (P_DEFINED | P_IDENT(GPIO_PA0) | P_FUNCT(0)) #define P_SPORT2_DTSEC (P_DEFINED | P_IDENT(GPIO_PA1) | P_FUNCT(0)) #define P_SPORT2_DTPRI (P_DEFINED | P_IDENT(GPIO_PA2) | P_FUNCT(0)) Loading