From: Stefano Babic <sbabic@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 06/20] iMX28: Add GPIO control
Date: Thu, 10 Nov 2011 14:11:06 +0100 [thread overview]
Message-ID: <4EBBCD6A.3090907@denx.de> (raw)
In-Reply-To: <1320830307-4762-7-git-send-email-marek.vasut@gmail.com>
On 11/09/2011 10:18 AM, Marek Vasut wrote:
> Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
> Cc: Stefano Babic <sbabic@denx.de>
> Cc: Wolfgang Denk <wd@denx.de>
> Cc: Detlev Zundel <dzu@denx.de>
> ---
> arch/arm/cpu/arm926ejs/mx28/mx28.c | 6 ++
> arch/arm/include/asm/arch-mx28/gpio.h | 32 ++++++++
> drivers/gpio/Makefile | 1 +
> drivers/gpio/mxs_gpio.c | 136 +++++++++++++++++++++++++++++++++
> 4 files changed, 175 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/include/asm/arch-mx28/gpio.h
> create mode 100644 drivers/gpio/mxs_gpio.c
>
> diff --git a/arch/arm/cpu/arm926ejs/mx28/mx28.c b/arch/arm/cpu/arm926ejs/mx28/mx28.c
> index 446ea8b..e990f3c 100644
> --- a/arch/arm/cpu/arm926ejs/mx28/mx28.c
> +++ b/arch/arm/cpu/arm926ejs/mx28/mx28.c
> @@ -31,6 +31,7 @@
> #include <asm/io.h>
> #include <asm/arch/clock.h>
> #include <asm/arch/gpio.h>
> +#include <asm/arch/iomux.h>
> #include <asm/arch/imx-regs.h>
> #include <asm/arch/sys_proto.h>
>
> @@ -134,6 +135,11 @@ int arch_cpu_init(void)
>
> udelay(1000);
>
> + /*
> + * Configure GPIO unit
> + */
> + mxs_gpio_init();
> +
> return 0;
> }
> #endif
> diff --git a/arch/arm/include/asm/arch-mx28/gpio.h b/arch/arm/include/asm/arch-mx28/gpio.h
> new file mode 100644
> index 0000000..be1c944
> --- /dev/null
> +++ b/arch/arm/include/asm/arch-mx28/gpio.h
> @@ -0,0 +1,32 @@
> +/*
> + * Freescale i.MX28 GPIO
> + *
> + * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
> + * on behalf of DENX Software Engineering GmbH
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
> + *
> + */
> +
> +#ifndef __MX28_GPIO_H__
> +#define __MX28_GPIO_H__
> +
> +#ifdef CONFIG_MXS_GPIO
> +void mxs_gpio_init(void);
> +#else
> +inline void mxs_gpio_init(void) {}
> +#endif
> +
> +#endif /* __MX28_GPIO_H__ */
> diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile
> index f505813..e1142d1 100644
> --- a/drivers/gpio/Makefile
> +++ b/drivers/gpio/Makefile
> @@ -30,6 +30,7 @@ COBJS-$(CONFIG_KIRKWOOD_GPIO) += kw_gpio.o
> COBJS-$(CONFIG_MARVELL_GPIO) += mvgpio.o
> COBJS-$(CONFIG_MARVELL_MFP) += mvmfp.o
> COBJS-$(CONFIG_MXC_GPIO) += mxc_gpio.o
> +COBJS-$(CONFIG_MXS_GPIO) += mxs_gpio.o
> COBJS-$(CONFIG_PCA953X) += pca953x.o
> COBJS-$(CONFIG_PCA9698) += pca9698.o
> COBJS-$(CONFIG_S5P) += s5p_gpio.o
> diff --git a/drivers/gpio/mxs_gpio.c b/drivers/gpio/mxs_gpio.c
> new file mode 100644
> index 0000000..b7e9591
> --- /dev/null
> +++ b/drivers/gpio/mxs_gpio.c
> @@ -0,0 +1,136 @@
> +/*
> + * Freescale i.MX28 GPIO control code
> + *
> + * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
> + * on behalf of DENX Software Engineering GmbH
> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +#include <netdev.h>
> +#include <asm/errno.h>
> +#include <asm/io.h>
> +#include <asm/arch/iomux.h>
> +#include <asm/arch/imx-regs.h>
> +
> +#if defined(CONFIG_MX23)
> +#define PINCTRL_BANKS 3
> +#define PINCTRL_DOUT(n) (0x0500 + ((n) * 0x10))
> +#define PINCTRL_DIN(n) (0x0600 + ((n) * 0x10))
> +#define PINCTRL_DOE(n) (0x0700 + ((n) * 0x10))
> +#define PINCTRL_PIN2IRQ(n) (0x0800 + ((n) * 0x10))
> +#define PINCTRL_IRQEN(n) (0x0900 + ((n) * 0x10))
> +#define PINCTRL_IRQSTAT(n) (0x0c00 + ((n) * 0x10))
> +#elif defined(CONFIG_MX28)
> +#define PINCTRL_BANKS 5
> +#define PINCTRL_DOUT(n) (0x0700 + ((n) * 0x10))
> +#define PINCTRL_DIN(n) (0x0900 + ((n) * 0x10))
> +#define PINCTRL_DOE(n) (0x0b00 + ((n) * 0x10))
> +#define PINCTRL_PIN2IRQ(n) (0x1000 + ((n) * 0x10))
> +#define PINCTRL_IRQEN(n) (0x1100 + ((n) * 0x10))
> +#define PINCTRL_IRQSTAT(n) (0x1400 + ((n) * 0x10))
> +#else
> +#error "Please select CONFIG_MX23 or CONFIG_MX28"
> +#endif
> +
> +#define GPIO_INT_FALL_EDGE 0x0
> +#define GPIO_INT_LOW_LEV 0x1
> +#define GPIO_INT_RISE_EDGE 0x2
> +#define GPIO_INT_HIGH_LEV 0x3
> +#define GPIO_INT_LEV_MASK (1 << 0)
> +#define GPIO_INT_POL_MASK (1 << 1)
> +
> +void mxs_gpio_init(void)
> +{
> + int i;
> +
> + for (i = 0; i < PINCTRL_BANKS; i++) {
> + writel(0, MXS_PINCTRL_BASE + PINCTRL_PIN2IRQ(i));
> + writel(0, MXS_PINCTRL_BASE + PINCTRL_IRQEN(i));
> + /* Use SCT address here to clear the IRQSTAT bits */
> + writel(0xffffffff, MXS_PINCTRL_BASE + PINCTRL_IRQSTAT(i) + 8);
> + }
> +}
> +
> +int gpio_get_value(int gp)
> +{
> + uint32_t bank = PAD_BANK(gp);
> + uint32_t offset = PINCTRL_DIN(bank);
> + struct mx28_register *reg =
> + (struct mx28_register *)(MXS_PINCTRL_BASE + offset);
> +
> + return (readl(®->reg) >> PAD_PIN(gp)) & 1;
> +}
> +
> +void gpio_set_value(int gp, int value)
> +{
> + uint32_t bank = PAD_BANK(gp);
> + uint32_t offset = PINCTRL_DOUT(bank);
> + struct mx28_register *reg =
> + (struct mx28_register *)(MXS_PINCTRL_BASE + offset);
> +
> + if (value)
> + writel(1 << PAD_PIN(gp), ®->reg_set);
> + else
> + writel(1 << PAD_PIN(gp), ®->reg_clr);
> +}
> +
> +int gpio_direction_input(int gp)
> +{
> + uint32_t bank = PAD_BANK(gp);
> + uint32_t offset = PINCTRL_DOE(bank);
> + struct mx28_register *reg =
> + (struct mx28_register *)(MXS_PINCTRL_BASE + offset);
> +
> + writel(1 << PAD_PIN(gp), ®->reg_clr);
> +
> + return 0;
> +}
> +
> +int gpio_direction_output(int gp, int value)
> +{
> + uint32_t bank = PAD_BANK(gp);
> + uint32_t offset = PINCTRL_DOE(bank);
> + struct mx28_register *reg =
> + (struct mx28_register *)(MXS_PINCTRL_BASE + offset);
> +
> + writel(1 << PAD_PIN(gp), ®->reg_set);
> +
> + gpio_set_value(gp, value);
> +
> + return 0;
> +}
> +
> +int gpio_request(int gp, const char *label)
> +{
> + if (PAD_BANK(gp) > PINCTRL_BANKS)
> + return -EINVAL;
> +
> + return 0;
> +}
> +
> +void gpio_free(int gp)
> +{
> +}
> +
> +void gpio_toggle_value(int gp)
> +{
> + gpio_set_value(gp, !gpio_get_value(gp));
> +}
Applied to u-boot-imx, thanks.
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de
=====================================================================
next prev parent reply other threads:[~2011-11-10 13:11 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-09 9:18 [U-Boot] [PATCH 00/20 FINAL] Support for the DENX M28 SoM Marek Vasut
2011-11-09 9:18 ` [U-Boot] [PATCH 01/20] iMX28: Initial support for iMX28 CPU Marek Vasut
2011-11-09 9:18 ` [U-Boot] [PATCH 02/20] iMX28: Add SSP MMC driver Marek Vasut
2011-11-10 13:08 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 03/20] FEC: Add support for iMX28 quirks Marek Vasut
2011-11-10 13:09 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 04/20] iMX28: Add PINMUX control Marek Vasut
2011-11-10 13:09 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 05/20] iMX28: Add I2C bus driver Marek Vasut
2011-11-09 9:38 ` Heiko Schocher
2011-11-09 10:46 ` Marek Vasut
2011-11-10 13:10 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 06/20] iMX28: Add GPIO control Marek Vasut
2011-11-10 13:11 ` Stefano Babic [this message]
2011-11-10 16:23 ` Mike Frysinger
2011-11-10 16:58 ` Marek Vasut
2011-11-10 17:10 ` Mike Frysinger
2011-11-10 17:44 ` Marek Vasut
2011-11-09 9:18 ` [U-Boot] [PATCH 07/20] iMX28: Add SPI driver Marek Vasut
2011-11-10 13:11 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 08/20] iMX28: Add APBH DMA driver Marek Vasut
2011-11-10 13:12 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 09/20] iMX28: Add GPMI NAND driver Marek Vasut
2011-11-10 13:12 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 10/20] iMX28: Add driver for internal RTC Marek Vasut
2011-11-10 13:12 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 11/20] iMX28: Add image header generator tool Marek Vasut
2011-11-10 13:12 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 12/20] iMX28: Add u-boot.sb target to Makefile Marek Vasut
2011-11-10 13:13 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 13/20] iMX28: Add support for DENX M28EVK board Marek Vasut
2011-11-10 13:13 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 14/20] M28: Add MMC SPL Marek Vasut
2011-11-10 13:13 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 15/20] M28: Add doc/README.m28 documentation Marek Vasut
2011-11-10 13:14 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 16/20] iMX28: Fix ARM vector handling Marek Vasut
2011-11-10 13:14 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 17/20] M28: Add memory detection into SPL Marek Vasut
2011-11-10 13:14 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 18/20] iMX28: Add USB and USB PHY register definitions Marek Vasut
2011-11-10 13:15 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 19/20] iMX28: Add USB HOST driver Marek Vasut
2011-11-10 13:15 ` Stefano Babic
2011-11-09 9:18 ` [U-Boot] [PATCH 20/20] M28EVK: Enable USB HOST support Marek Vasut
2011-11-10 13:16 ` Stefano Babic
2011-11-11 14:07 ` Veli-Pekka Peltola
2011-11-11 17:49 ` Marek Vasut
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4EBBCD6A.3090907@denx.de \
--to=sbabic@denx.de \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.