diff options
author | Evert Pap <evert.pap@sintecs.nl> | 2016-09-16 13:16:50 (GMT) |
---|---|---|
committer | vojo <joris.van.vossen@sintecs.nl> | 2017-08-23 08:07:14 (GMT) |
commit | 91259b783fb00422df6157b85317bf5035c72ed4 (patch) | |
tree | 2922ed570d93d45741573e20ef62053e0cc8adea /drivers/gpio | |
parent | 82a006ca2df310164bb48c36a793d1b733cf4af8 (diff) | |
download | u-boot-fsl-qoriq-91259b783fb00422df6157b85317bf5035c72ed4.tar.xz |
merge with master
Diffstat (limited to 'drivers/gpio')
-rw-r--r-- | drivers/gpio/Kconfig | 3 | ||||
-rw-r--r-- | drivers/gpio/gpio-mpc8xxx.c | 178 |
2 files changed, 3 insertions, 178 deletions
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 34c4a40..fecb2fc 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -34,6 +34,7 @@ config DWAPB_GPIO help Support for the Designware APB GPIO driver. +<<<<<<< 82a006ca2df310164bb48c36a793d1b733cf4af8 <<<<<<< bc5d0384458466ed5b3608d326eec03cd4f13016 config AT91_GPIO bool "AT91 PIO GPIO driver" @@ -56,6 +57,8 @@ config MPC8XXX_GPIO Support for the NXP (Freescale) MPC/QorIQ GPIO controller >>>>>>> dm: gpio: Add DM GPIO driver for MPC8xxx platforms +======= +>>>>>>> merge with master config ATMEL_PIO4 bool "ATMEL PIO4 driver" depends on DM_GPIO diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c deleted file mode 100644 index c5d72ef..0000000 --- a/drivers/gpio/gpio-mpc8xxx.c +++ /dev/null @@ -1,178 +0,0 @@ - -/* - * GPIOs on MPC512x/8349/8572/8610/T-series and compatible - * - * Driver ported from the linux kernel 4.5 (b562e44f507e863c6792946e4e1b1449fbbac85d) - * and removed the interrupt functionallity. - * - * Copyright (C) 2008 Peter Korsgaard <jacmet@sunsite.dk> - * Copyright (c) 2016 Scalys B.V. <u-boot@scalys.com> - * - * SPDX-License-Identifier: GPL-2.0+ - */ - -#include <common.h> -#include <dm.h> -#include <errno.h> -#include <malloc.h> -#include <fdtdec.h> -#include <asm/io.h> -#include <asm/gpio.h> -#include <dm/platform_data/gpio_mpc8xxx.h> - -DECLARE_GLOBAL_DATA_PTR; - -#define MPC8XXX_GPIO_PINS 32 - -static inline u32 mpc8xxx_gpio2mask(unsigned int gpio) -{ - return 1u << (MPC8XXX_GPIO_PINS - 1 - gpio); -} - -static int mpc8xxx_dm_gpio_set(struct udevice *dev, unsigned pin, int val) -{ - struct mpc8xxx_gpio_platdata *plat = dev_get_platdata(dev); - -#if defined(CONFIG_MPC8572) || defined(CONFIG_MPC8536) - - if (val) { - plat->data |= mpc8xxx_gpio2mask(pin); - } else { - plat->data &= ~mpc8xxx_gpio2mask(pin); - } - - out_be32(&(plat->regs->gpdat), plat->data); -#else - if (val) { - setbits_be32(&(plat->regs->gpdat), mpc8xxx_gpio2mask(pin)); - } else { - clrbits_be32(&(plat->regs->gpdat), mpc8xxx_gpio2mask(pin)); - } -#endif - return 0; -} - -static int mpc8xxx_dm_gpio_dir_in(struct udevice *dev, unsigned int gpio) -{ - struct mpc8xxx_gpio_platdata *plat = dev_get_platdata(dev); - - clrbits_be32(&(plat->regs->gpdir), mpc8xxx_gpio2mask(gpio)); - - return 0; -} - -static int mpc8xxx_dm_gpio_dir_out(struct udevice *dev, unsigned int gpio, - int val) -{ - struct mpc8xxx_gpio_platdata *plat = dev_get_platdata(dev); - - mpc8xxx_dm_gpio_set(dev, gpio, val); - - setbits_be32(&(plat->regs->gpdir), mpc8xxx_gpio2mask(gpio)); - - return 0; -} - -static int mpc8xxx_dm_gpio_get(struct udevice *dev, unsigned int gpio) -{ - int ret = 0; - struct mpc8xxx_gpio_platdata *plat = dev_get_platdata(dev); - -#if defined(CONFIG_MPC8572) || defined(CONFIG_MPC8536) - uint32_t data_val, out_mask, out_shadow; - - /* Workaround GPIO 1 errata on MPC8572/MPC8536. The status of GPIOs - * defined as output cannot be determined by reading GPDAT register, - * so we use shadow data register instead. The status of input pins - * is determined by reading GPDAT register. - */ - out_mask = in_be32(&plat->regs->gpdir); - - data_val = in_be32(&plat->regs->gpdat) & ~out_mask; - out_shadow = plat->data & out_mask; - - ret = ! !((data_val | out_shadow) & mpc8xxx_gpio2mask(gpio)); -#else - if (in_be32(&plat->regs->gpdat) & mpc8xxx_gpio2mask(gpio)) { - ret = 1; - } else { - ret = 0; - } -#endif - return ret; -} - -static int mpc8xxx_dm_gpio_get_function(struct udevice *dev, unsigned gpio) -{ - int ret = GPIOF_UNUSED; - struct mpc8xxx_gpio_platdata *plat = dev_get_platdata(dev); - - if (in_be32(&plat->regs->gpdir) & mpc8xxx_gpio2mask(gpio)) { - ret = GPIOF_OUTPUT; - } else { - ret = GPIOF_INPUT; - } - return ret; -} - -static const struct udevice_id mpc8xxx_gpio_ids[] = { - {.compatible = "fsl,mpc8349-gpio",}, - {.compatible = "fsl,mpc8572-gpio",}, - {.compatible = "fsl,mpc8610-gpio",}, - {.compatible = "fsl,mpc5121-gpio",}, - {.compatible = "fsl,mpc5125-gpio",}, - {.compatible = "fsl,pq3-gpio",}, - {.compatible = "fsl,qoriq-gpio",}, - {} -}; - -static const struct dm_gpio_ops mpc8xxx_gpio_ops = { - .direction_input = mpc8xxx_dm_gpio_dir_in, - .direction_output = mpc8xxx_dm_gpio_dir_out, - .get_value = mpc8xxx_dm_gpio_get, - .set_value = mpc8xxx_dm_gpio_set, - .get_function = mpc8xxx_dm_gpio_get_function, -}; - -#ifdef SPL_OF_CONTROL -static int mpc8xxx_gpio_ofdata_to_platdata(struct udevice *dev) -{ - int register_address; - struct mpc8xxx_gpio_platdata *plat = dev_get_platdata(dev); - - register_address = - fdtdec_get_int(gd->fdt_blob, dev->of_offset, "reg", -1); - if (register_address == -1) { - debug("%s: Invalid register offset %d\n", __func__, - register_address); - return -EINVAL; - } - plat->regs = map_physmem(register_address, sizeof(ccsr_gpio_t), - MAP_NOCACHE); - plat->gpio_count = MPC8XXX_GPIO_PINS; - plat->bank_name = fdt_getprop(gd->fdt_blob, dev->of_offset, - "bank-name", NULL); - - return 0; -} -#endif - -static int mpc8xxx_gpio_probe(struct udevice *dev) -{ - struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev); - struct mpc8xxx_gpio_platdata *plat = dev_get_platdata(dev); - - uc_priv->gpio_count = MPC8XXX_GPIO_PINS; - uc_priv->bank_name = plat->bank_name; - - return 0; -} - -U_BOOT_DRIVER(gpio_mpc8xxx) = { - .name = "gpio-mpc8xxx",.id = UCLASS_GPIO,.of_match = - mpc8xxx_gpio_ids,.ops = &mpc8xxx_gpio_ops, -#ifdef SPL_OF_CONTROL - .ofdata_to_platdata = mpc8xxx_gpio_ofdata_to_platdata, -#endif -.platdata_auto_alloc_size = - sizeof(struct mpc8xxx_gpio_platdata),.probe = mpc8xxx_gpio_probe,}; |