On Friday, March 21, 2014 at 10:54:19 PM, Ian Campbell wrote:
[...]

> diff --git a/arch/arm/cpu/armv7/sunxi/pinmux.c
> b/arch/arm/cpu/armv7/sunxi/pinmux.c new file mode 100644
> index 0000000..8f5cbfe
> --- /dev/null
> +++ b/arch/arm/cpu/armv7/sunxi/pinmux.c
> @@ -0,0 +1,80 @@
> +/*
> + * (C) Copyright 2007-2011
> + * Allwinner Technology Co., Ltd. <www.allwinnertech.com>
> + * Tom Cubie <tangli...@allwinnertech.com>
> + *
> + * SPDX-License-Identifier:  GPL-2.0+
> + */
> +
> +#include <common.h>
> +#include <asm/io.h>
> +#include <asm/arch/gpio.h>
> +
> +int sunxi_gpio_set_cfgpin(u32 pin, u32 val)
> +{
> +     u32 cfg;
> +     u32 bank = GPIO_BANK(pin);
> +     u32 index = GPIO_CFG_INDEX(pin);
> +     u32 offset = GPIO_CFG_OFFSET(pin);
> +     struct sunxi_gpio *pio =
> +         &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank];
> +
> +     cfg = readl(&pio->cfg[0] + index);
> +     cfg &= ~(0xf << offset);
> +     cfg |= val << offset;
> +
> +     writel(cfg, &pio->cfg[0] + index);

clrsetbits_le32() here.

> +     return 0;
> +}
> +
> +int sunxi_gpio_get_cfgpin(u32 pin)
> +{
> +     u32 cfg;
> +     u32 bank = GPIO_BANK(pin);
> +     u32 index = GPIO_CFG_INDEX(pin);
> +     u32 offset = GPIO_CFG_OFFSET(pin);
> +     struct sunxi_gpio *pio =
> +         &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank];
> +
> +     cfg = readl(&pio->cfg[0] + index);
> +     cfg >>= offset;
> +
> +     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 &= ~(0x3 << offset);
> +     drv |= val << offset;
> +
> +     writel(drv, &pio->drv[0] + index);

Here as well.

> +     return 0;
> +}
> +
> +int sunxi_gpio_set_pull(u32 pin, u32 val)
> +{
> +     u32 pull;
> +     u32 bank = GPIO_BANK(pin);
> +     u32 index = GPIO_PULL_INDEX(pin);
> +     u32 offset = GPIO_PULL_OFFSET(pin);
> +     struct sunxi_gpio *pio =
> +         &((struct sunxi_gpio_reg *)SUNXI_PIO_BASE)->gpio_bank[bank];
> +
> +     pull = readl(&pio->pull[0] + index);
> +     pull &= ~(0x3 << offset);
> +     pull |= val << offset;
> +
> +     writel(pull, &pio->pull[0] + index);

Same here.

> +     return 0;
> +}

[...]

> +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

What is this ugly define doing here ?
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to