/* * Copyright (c) 2016 Scalys B.V. * SPDX-License-Identifier: GPL-2.0+ */ #ifndef _POWERPC_ASM_MPC8XXX_GPIO_H #define _POWERPC_ASM_MPC8XXX_GPIO_H #include #define MPC8XXX_GPIO_NR(port, pin) ((((port)-1)*32)+((pin)&31)) #define MPC8XXX_GPIO_TO_PORT(gpio) (gpio/32) #define MPC8XXX_GPIO_TO_PIN(gpio) (gpio&31) static inline void mpc8xxx_gpio_set(uint32_t gpio, int value) { int port, pin; ccsr_gpio_t *gpio_regs; uint32_t regval; port = MPC8XXX_GPIO_TO_PORT(gpio); pin = MPC8XXX_GPIO_TO_PIN(gpio); switch (port) { #ifdef CONFIG_SYS_MPC8XXX_GPIO1_ADDR case 0: gpio_regs = (ccsr_gpio_t *) CONFIG_SYS_MPC8XXX_GPIO1_ADDR; break; #endif #ifdef CONFIG_SYS_MPC8XXX_GPIO2_ADDR case 1: gpio_regs = (ccsr_gpio_t *) CONFIG_SYS_MPC8XXX_GPIO2_ADDR; break; #endif #ifdef CONFIG_SYS_MPC8XXX_GPIO3_ADDR case 2: gpio_regs = (ccsr_gpio_t *) CONFIG_SYS_MPC8XXX_GPIO3_ADDR; break; #endif #ifdef CONFIG_SYS_MPC8XXX_GPIO4_ADDR case 3: gpio_regs = (ccsr_gpio_t *) CONFIG_SYS_MPC8XXX_GPIO4_ADDR; break; #endif default: return; } /* Set output */ regval = in_be32(&(gpio_regs->gpdat)); regval |= (0x80000000 >> pin); out_be32(&(gpio_regs->gpdat), regval); /* Set direction to acivate gpio pin */ regval = in_be32(&(gpio_regs->gpdir)); regval |= (0x80000000 >> pin); out_be32(&(gpio_regs->gpdir), regval); } static inline int mpc8xxx_gpio_get(uint32_t gpio, int value) { int port, pin; ccsr_gpio_t *gpio_regs; uint32_t regval; port = MPC8XXX_GPIO_TO_PORT(gpio); pin = MPC8XXX_GPIO_TO_PIN(gpio); switch (port) { #ifdef CONFIG_SYS_MPC8XXX_GPIO1_ADDR case 0: gpio_regs = (ccsr_gpio_t *) CONFIG_SYS_MPC8XXX_GPIO1_ADDR; break; #endif #ifdef CONFIG_SYS_MPC8XXX_GPIO2_ADDR case 1: gpio_regs = (ccsr_gpio_t *) CONFIG_SYS_MPC8XXX_GPIO2_ADDR; break; #endif #ifdef CONFIG_SYS_MPC8XXX_GPIO3_ADDR case 2: gpio_regs = (ccsr_gpio_t *) CONFIG_SYS_MPC8XXX_GPIO3_ADDR; break; #endif #ifdef CONFIG_SYS_MPC8XXX_GPIO4_ADDR case 3: gpio_regs = (ccsr_gpio_t *) CONFIG_SYS_MPC8XXX_GPIO4_ADDR; break; #endif default: return -ENODEV; } /* Get inputs */ regval = in_be32(&(gpio_regs->gpdat)); regval <<= pin; regval &= 1; return regval; } #endif /* _POWERPC_ASM_MPC8XXX_GPIO_H */