[U-Boot] [PATCH 2/6] dm: gpio: hi6220: Add a hi6220 GPIO driver model driver.

Marek Vasut marex at denx.de
Tue May 12 20:36:30 CEST 2015


On Tuesday, May 12, 2015 at 03:38:28 PM, Peter Griffin wrote:

Hi!

> This patch adds support for the GPIO perif found on hi6220
> SoC.
> 
> Signed-off-by: Peter Griffin <peter.griffin at linaro.org>
> ---
>  arch/arm/include/asm/arch-armv8/gpio.h | 47 +++++++++++++++++
>  drivers/gpio/Makefile                  |  2 +
>  drivers/gpio/hi6220_gpio.c             | 95
> ++++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+)
>  create mode 100644 arch/arm/include/asm/arch-armv8/gpio.h
>  create mode 100644 drivers/gpio/hi6220_gpio.c
> 
> diff --git a/arch/arm/include/asm/arch-armv8/gpio.h
> b/arch/arm/include/asm/arch-armv8/gpio.h new file mode 100644
> index 0000000..162c2d9
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-armv8/gpio.h
> @@ -0,0 +1,47 @@
> +/*
> + * Copyright (C) 2015 Linaro
> + * Peter Griffin <peter.griffin at linaro.org>
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +
> +#ifndef _HI6220_GPIO_H_
> +#define _HI6220_GPIO_H_
> +
> +#define HI6220_GPIO0_BASE	(void *)0xf8011000

You should drop the explicit cast, that's nasty.

Also, why don't you define this as a HI6220_GPIO_BASE(bank) instead?
That'd trim down the number of macros and from what I see, it should
be rather easy to do ...

#define HI6220_GPIO_BASE(bank)
	(((bank < 4) ? 0xf8012000 : (0xf7020000 - 0x4000)) + (0x1000 * bank))

> +#define HI6220_GPIO1_BASE	(void *)0xf8012000
> +#define HI6220_GPIO2_BASE	(void *)0xf8013000
> +#define HI6220_GPIO3_BASE	(void *)0xf8014000
> +#define HI6220_GPIO4_BASE	(void *)0xf7020000
> +#define HI6220_GPIO5_BASE	(void *)0xf7021000
> +#define HI6220_GPIO6_BASE	(void *)0xf7022000
> +#define HI6220_GPIO7_BASE	(void *)0xf7023000
> +#define HI6220_GPIO8_BASE	(void *)0xf7024000
> +#define HI6220_GPIO9_BASE	(void *)0xf7025000
> +#define HI6220_GPIO10_BASE	(void *)0xf7026000
> +#define HI6220_GPIO11_BASE	(void *)0xf7027000
> +#define HI6220_GPIO12_BASE	(void *)0xf7028000
> +#define HI6220_GPIO13_BASE	(void *)0xf7029000
> +#define HI6220_GPIO14_BASE	(void *)0xf702a000
> +#define HI6220_GPIO15_BASE	(void *)0xf702b000
> +#define HI6220_GPIO16_BASE	(void *)0xf702c000
> +#define HI6220_GPIO17_BASE	(void *)0xf702d000
> +#define HI6220_GPIO18_BASE	(void *)0xf702e000
> +#define HI6220_GPIO19_BASE	(void *)0xf702f000

But are these even used in the driver anywhere ?

> +#define BIT(x)			(1 << (x))

This macro should be placed into common header files.

> +#define HI6220_GPIO_PER_BANK	8
> +#define HI6220_GPIO_DIR		0x400
> +
> +struct gpio_bank {
> +	u8 *base;	/* address of registers in physical memory */

Should be void __iomem *, no ?

> +};
> +
> +/* Information about a GPIO bank */
> +struct hikey_gpio_platdata {
> +	int bank_index;
> +	void *base;     /* address of registers in physical memory */
> +};
> +
> +#endif /* _HI6220_GPIO_H_ */

[...]


More information about the U-Boot mailing list