public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/2] gpio: add gpio api support to mx27
@ 2012-08-05 10:00 Philippe Reynes
  2012-08-05 10:00 ` [U-Boot] [PATCH 2/2] imx27lite: update with gpio api change Philippe Reynes
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Reynes @ 2012-08-05 10:00 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Philippe Reynes <tremyfr@yahoo.fr>
---
 arch/arm/cpu/arm926ejs/mx27/generic.c     |   11 +++---
 arch/arm/include/asm/arch-mx27/gpio.h     |   55 +++++++++++++++++++++++++++++
 arch/arm/include/asm/arch-mx27/imx-regs.h |   30 ++++------------
 drivers/gpio/mxc_gpio.c                   |    8 +++--
 4 files changed, 73 insertions(+), 31 deletions(-)
 create mode 100644 arch/arm/include/asm/arch-mx27/gpio.h

diff --git a/arch/arm/cpu/arm926ejs/mx27/generic.c b/arch/arm/cpu/arm926ejs/mx27/generic.c
index 65c4813..41bb84b 100644
--- a/arch/arm/cpu/arm926ejs/mx27/generic.c
+++ b/arch/arm/cpu/arm926ejs/mx27/generic.c
@@ -24,6 +24,7 @@
 #include <asm/io.h>
 #include <asm/arch/imx-regs.h>
 #include <asm/arch/clock.h>
+#include <asm/arch/gpio.h>
 #ifdef CONFIG_MXC_MMC
 #include <asm/arch/mxcmmc.h>
 #endif
@@ -209,7 +210,7 @@ int cpu_mmc_init(bd_t *bis)
 
 void imx_gpio_mode(int gpio_mode)
 {
-	struct gpio_regs *regs = (struct gpio_regs *)IMX_GPIO_BASE;
+	struct gpio_port_regs *regs = (struct gpio_port_regs *)IMX_GPIO_BASE;
 	unsigned int pin = gpio_mode & GPIO_PIN_MASK;
 	unsigned int port = (gpio_mode & GPIO_PORT_MASK) >> GPIO_PORT_SHIFT;
 	unsigned int ocr = (gpio_mode & GPIO_OCR_MASK) >> GPIO_OCR_SHIFT;
@@ -228,11 +229,11 @@ void imx_gpio_mode(int gpio_mode)
 
 	/* Data direction */
 	if (gpio_mode & GPIO_OUT) {
-		writel(readl(&regs->port[port].ddir) | 1 << pin,
-				&regs->port[port].ddir);
+		writel(readl(&regs->port[port].gpio_dir) | 1 << pin,
+				&regs->port[port].gpio_dir);
 	} else {
-		writel(readl(&regs->port[port].ddir) & ~(1 << pin),
-				&regs->port[port].ddir);
+		writel(readl(&regs->port[port].gpio_dir) & ~(1 << pin),
+				&regs->port[port].gpio_dir);
 	}
 
 	/* Primary / alternate function */
diff --git a/arch/arm/include/asm/arch-mx27/gpio.h b/arch/arm/include/asm/arch-mx27/gpio.h
new file mode 100644
index 0000000..965b584
--- /dev/null
+++ b/arch/arm/include/asm/arch-mx27/gpio.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2012
+ * Philippe Reynes <tremyfr@yahoo.fr>
+ *
+ * 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
+ */
+
+
+#ifndef __ASM_ARCH_MX27_GPIO_H
+#define __ASM_ARCH_MX27_GPIO_H
+
+/* GPIO registers */
+struct gpio_regs {
+	u32 gpio_dir; /* DDIR */
+	u32 ocr1;
+	u32 ocr2;
+	u32 iconfa1;
+	u32 iconfa2;
+	u32 iconfb1;
+	u32 iconfb2;
+	u32 gpio_dr; /* DR */
+	u32 gius;
+	u32 ssr;
+	u32 icr1;
+	u32 icr2;
+	u32 imr;
+	u32 isr;
+	u32 gpr;
+	u32 swr;
+	u32 puen;
+	u32 res[0x2f];
+};
+
+/* This structure is used by the function imx_gpio_mode */
+struct gpio_port_regs {
+	struct gpio_regs port[6];
+};
+
+#endif
diff --git a/arch/arm/include/asm/arch-mx27/imx-regs.h b/arch/arm/include/asm/arch-mx27/imx-regs.h
index ced5b2a..4035d2b 100644
--- a/arch/arm/include/asm/arch-mx27/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx27/imx-regs.h
@@ -162,29 +162,6 @@ struct gpt_regs {
 #define PORTE 4
 #define PORTF 5
 
-struct gpio_regs {
-	struct {
-		u32 ddir;
-		u32 ocr1;
-		u32 ocr2;
-		u32 iconfa1;
-		u32 iconfa2;
-		u32 iconfb1;
-		u32 iconfb2;
-		u32 dr;
-		u32 gius;
-		u32 ssr;
-		u32 icr1;
-		u32 icr2;
-		u32 imr;
-		u32 isr;
-		u32 gpr;
-		u32 swr;
-		u32 puen;
-		u32 res[0x2f];
-	} port[6];
-};
-
 /* IIM Control Registers */
 struct iim_regs {
 	u32 iim_stat;
@@ -471,6 +448,13 @@ struct fuse_bank0_regs {
 #define TSTAT_CAPT	(1 << 1)	/* Capture event */
 #define TSTAT_COMP	1		/* Compare event */
 
+#define GPIO1_BASE_ADDR 0x10015000
+#define GPIO2_BASE_ADDR 0x10015100
+#define GPIO3_BASE_ADDR 0x10015200
+#define GPIO4_BASE_ADDR 0x10015300
+#define GPIO5_BASE_ADDR 0x10015400
+#define GPIO6_BASE_ADDR 0x10015500
+
 #define GPIO_PIN_MASK	0x1f
 
 #define GPIO_PORT_SHIFT	5
diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c
index 6615535..7ba738b 100644
--- a/drivers/gpio/mxc_gpio.c
+++ b/drivers/gpio/mxc_gpio.c
@@ -41,13 +41,15 @@ static unsigned long gpio_ports[] = {
 	[0] = GPIO1_BASE_ADDR,
 	[1] = GPIO2_BASE_ADDR,
 	[2] = GPIO3_BASE_ADDR,
-#if defined(CONFIG_MX25) || defined(CONFIG_MX51) || defined(CONFIG_MX53) || \
-		defined(CONFIG_MX6Q)
+#if defined(CONFIG_MX25) || defined(CONFIG_MX27) || defined(CONFIG_MX51) || \
+		defined(CONFIG_MX53) || defined(CONFIG_MX6Q)
 	[3] = GPIO4_BASE_ADDR,
 #endif
-#if defined(CONFIG_MX53) || defined(CONFIG_MX6Q)
+#if defined(CONFIG_MX27) || defined(CONFIG_MX53) || defined(CONFIG_MX6Q)
 	[4] = GPIO5_BASE_ADDR,
 	[5] = GPIO6_BASE_ADDR,
+#endif
+#if defined(CONFIG_MX53) || defined(CONFIG_MX6Q)
 	[6] = GPIO7_BASE_ADDR,
 #endif
 };
-- 
1.7.4.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH 2/2] imx27lite: update with gpio api change
  2012-08-05 10:00 [U-Boot] [PATCH 1/2] gpio: add gpio api support to mx27 Philippe Reynes
@ 2012-08-05 10:00 ` Philippe Reynes
  2012-08-06  9:45   ` Stefano Babic
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Reynes @ 2012-08-05 10:00 UTC (permalink / raw)
  To: u-boot

Signed-off-by: Philippe Reynes <tremyfr@yahoo.fr>
---
 board/logicpd/imx27lite/imx27lite.c |    7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/board/logicpd/imx27lite/imx27lite.c b/board/logicpd/imx27lite/imx27lite.c
index 8a5015c..5bd3b68 100644
--- a/board/logicpd/imx27lite/imx27lite.c
+++ b/board/logicpd/imx27lite/imx27lite.c
@@ -23,12 +23,13 @@
 #include <common.h>
 #include <asm/io.h>
 #include <asm/arch/imx-regs.h>
+#include <asm/arch/gpio.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
 int board_init(void)
 {
-	struct gpio_regs *regs = (struct gpio_regs *)IMX_GPIO_BASE;
+	struct gpio_port_regs *regs = (struct gpio_port_regs *)IMX_GPIO_BASE;
 #if defined(CONFIG_SYS_NAND_LARGEPAGE)
 	struct system_control_regs *sc_regs =
 		(struct system_control_regs *)IMX_SYSTEM_CTL_BASE;
@@ -43,8 +44,8 @@ int board_init(void)
 #ifdef CONFIG_FEC_MXC
 	mx27_fec_init_pins();
 	imx_gpio_mode((GPIO_PORTC | GPIO_OUT | GPIO_PUEN | GPIO_GPIO | 31));
-	writel(readl(&regs->port[PORTC].dr) | (1 << 31),
-				&regs->port[PORTC].dr);
+	writel(readl(&regs->port[PORTC].gpio_dr) | (1 << 31),
+				&regs->port[PORTC].gpio_dr);
 #endif
 #ifdef CONFIG_MXC_MMC
 #if defined(CONFIG_MAGNESIUM)
-- 
1.7.4.4

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH 2/2] imx27lite: update with gpio api change
  2012-08-05 10:00 ` [U-Boot] [PATCH 2/2] imx27lite: update with gpio api change Philippe Reynes
@ 2012-08-06  9:45   ` Stefano Babic
  2012-08-06 15:27     ` Philippe Reynes
  0 siblings, 1 reply; 5+ messages in thread
From: Stefano Babic @ 2012-08-06  9:45 UTC (permalink / raw)
  To: u-boot

On 05/08/2012 12:00, Philippe Reynes wrote:
> Signed-off-by: Philippe Reynes <tremyfr@yahoo.fr>
> ---
>  board/logicpd/imx27lite/imx27lite.c |    7 ++++---
>  1 files changed, 4 insertions(+), 3 deletions(-)
> 

Hi Philippe,


>  {
> -	struct gpio_regs *regs = (struct gpio_regs *)IMX_GPIO_BASE;
> +	struct gpio_port_regs *regs = (struct gpio_port_regs *)IMX_GPIO_BASE;
>  #if defined(CONFIG_SYS_NAND_LARGEPAGE)
>  	struct system_control_regs *sc_regs =
>  		(struct system_control_regs *)IMX_SYSTEM_CTL_BASE;
> @@ -43,8 +44,8 @@ int board_init(void)
>  #ifdef CONFIG_FEC_MXC
>  	mx27_fec_init_pins();
>  	imx_gpio_mode((GPIO_PORTC | GPIO_OUT | GPIO_PUEN | GPIO_GPIO | 31));
> -	writel(readl(&regs->port[PORTC].dr) | (1 << 31),
> -				&regs->port[PORTC].dr);
> +	writel(readl(&regs->port[PORTC].gpio_dr) | (1 << 31),
> +				&regs->port[PORTC].gpio_dr);

This is not what I am expecting from the patch when it will move to
generic GPIO API.

The GPIO API uses really generic as in kernel functions, independently
from the SOC where it is running. This hides the physical registers of
the GPIOs.

Instead of that, gpio_set_value(), gpio_get_value(),
gpio_direction_input() and gpio_direction_output() should be used. You
can take a look at other iMX (MX3, MX28, MX5, MX6), that are already
using the generic API.

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-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH 2/2] imx27lite: update with gpio api change
  2012-08-06  9:45   ` Stefano Babic
@ 2012-08-06 15:27     ` Philippe Reynes
  2012-08-06 15:39       ` Stefano Babic
  0 siblings, 1 reply; 5+ messages in thread
From: Philippe Reynes @ 2012-08-06 15:27 UTC (permalink / raw)
  To: u-boot



>On 05/08/2012 12:00, Philippe Reynes wrote:
>> Signed-off-by: Philippe Reynes <tremyfr@yahoo.fr>
>> ---
>>? board/logicpd/imx27lite/imx27lite.c |? ? 7 ++++---
>>? 1 files changed, 4 insertions(+), 3 deletions(-)
>> 

>Hi Philippe,

Hi Stefano,


>>? {
>> -??? struct gpio_regs *regs = (struct gpio_regs *)IMX_GPIO_BASE;
>> +??? struct gpio_port_regs *regs = (struct gpio_port_regs *)IMX_GPIO_BASE;
>>? #if defined(CONFIG_SYS_NAND_LARGEPAGE)
>>? ??? struct system_control_regs *sc_regs =
>>? ??? ??? (struct system_control_regs *)IMX_SYSTEM_CTL_BASE;
>> @@ -43,8 +44,8 @@ int board_init(void)
>>? #ifdef CONFIG_FEC_MXC
>>? ??? mx27_fec_init_pins();
>>? ??? imx_gpio_mode((GPIO_PORTC | GPIO_OUT | GPIO_PUEN | GPIO_GPIO | 31));
>> -??? writel(readl(&regs->port[PORTC].dr) | (1 << 31),
>> -??? ??? ??? ??? &regs->port[PORTC].dr);
>> +??? writel(readl(&regs->port[PORTC].gpio_dr) | (1 << 31),
>> +??? ??? ??? ??? &regs->port[PORTC].gpio_dr);

>This is not what I am expecting from the patch when it will move to
>generic GPIO API.

>The GPIO API uses really generic as in kernel functions, independently
>from the SOC where it is running. This hides the physical registers of
>the GPIOs.

>Instead of that, gpio_set_value(), gpio_get_value(),
>gpio_direction_input() and gpio_direction_output() should be used. You
>can take a look at other iMX (MX3, MX28, MX5, MX6), that are already
>using the generic API.

Oh, I understand. As I don't have this board, I've done the smallest change to fix the compilation.
I add the driver mxc_gpio on imx27lite, remove this direct acces to gpio register,
?and send the new version of the patch.

regards,
Philippe

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH 2/2] imx27lite: update with gpio api change
  2012-08-06 15:27     ` Philippe Reynes
@ 2012-08-06 15:39       ` Stefano Babic
  0 siblings, 0 replies; 5+ messages in thread
From: Stefano Babic @ 2012-08-06 15:39 UTC (permalink / raw)
  To: u-boot

On 06/08/2012 17:27, Philippe Reynes wrote:

> Oh, I understand. As I don't have this board, I've done the smallest
> change to fix the compilation.
> I add the driver mxc_gpio on imx27lite, remove this direct acces to gpio
> register,
>  and send the new version of the patch.

I think I can test it, at least the base functionality.

Best regards,
Stefano


-- 
=====================================================================
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-08-06 15:39 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-05 10:00 [U-Boot] [PATCH 1/2] gpio: add gpio api support to mx27 Philippe Reynes
2012-08-05 10:00 ` [U-Boot] [PATCH 2/2] imx27lite: update with gpio api change Philippe Reynes
2012-08-06  9:45   ` Stefano Babic
2012-08-06 15:27     ` Philippe Reynes
2012-08-06 15:39       ` Stefano Babic

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox