Skip to contentSkip to conversation

omap: gpio: Use generic API (instead of custom)

PATCH New Sanjeev Premi 3 participants 9 messages Sep 5, 2011 – Sep 8, 2011 Arm (32-bit)

lore
Share & tools
lore
#0 lore raw

cover omap: gpio: Use generic API (instead of custom)

The OMAP boards use a custom api for GPIO operations. While it works, it doesn't help when when we don't know existence of the customization.

I earlier encountered the problem when looking for GPIO related changes when submitting prev set of patches. Since the search for gpio_request() in omap sources returned empty, I had assumed that it isn't supported.

This patchset aims to use generic API instead of custom one. After making the API level changes, most of the board specific files were updated via this bash script (to minimize errors).

[script]
list=search.lst

  [ -f ${list} ] && \rm -rf ${list}

  grep -l -R "omap_.*_gpio" . > ${list}

  sed -i '/\.sh$/d'    ${list}	# Protect this script

  sed -i '/\.o$/d'     ${list}	# Object files
  sed -i '/\.orig$/d'  ${list}	# ongoing merge
  sed -i '/\.rej$/d'   ${list}	# ongoing merge

  sed -i '/\.git/d'    ${list}	# git packs
  sed -i '/patch/d'    ${list}	# patches
  sed -i '/diff/d'     ${list}	# saved diffs
  sed -i '/save/d'     ${list}	# any specifically saved content

  for f in `cat ${list}` ;
  do
    echo "Fixing $f..."
    sed -r -i 's/omap_request_gpio\s*\((\w+)\)/gpio_request(\1, "")/g' "$f"
    sed -r -i 's/omap_free_gpio/gpio_free/g' "$f"
    sed -r -i 's/omap_set_gpio_direction\s*\((\w+)\s*,\s*1\)/gpio_direction_input(\1)/g' "$f"
    sed -r -i 's/omap_set_gpio_direction\s*\((\w+)\s*,\s*(\w+)\)/gpio_direction_output(\1, \2)/g' "$f"
    sed -r -i 's/omap_set_gpio_dataout/gpio_set_value/g' "$f"
    sed -r -i 's/omap_get_gpio_datain/gpio_get_value/g' "$f"
    sed -r -i 's/omap_get_gpio_dataout/gpio_get_value/g' "$f"
    sed -r -i 's/asm\/arch\/gpio.h/asm\/gpio.h/g' "$f"

done
[/script]

Few manual changes were still required to ensure that sources compile without errors for all these configurations:
- omap3_evm_config
- am3517_evm_config
- am3517_crane_config
- omap4_panda_config
- omap3_zoom1_config
- omap4_sdp4430_config
- igep0020_config
- cm_t35_config
- devkit8000_config
- igep0030_config
- dig297_config
- omap3_beagle_config
- omap3_pandora_config
- omap3_sdp3430_config
- omap3_zoom2_config
- omap3_overo_config

All these boards define "CONFIG_OMAP34XX" - therefore likely
to be impacted with this change. The list was created using:
grep -l -R "OMAP34XX" include/configs | cut -d "/" -f 3 | sed 's/\.h/_config/g'

Some additional patches would be required for successful build. Some of them are under discussion, but they status shouldn't impact the contents of this patch set:
1) http://marc.info/?l=u-boot&m=131515805732292&w=2
2) http://marc.info/?l=u-boot&m=131521839308281&w=2

Changes since RFC[1]:
1) While the original RFC was based against the master of u-boot.git. This series is based against master of u-boot-arm.git

2) Used better logic to search and fix 'possibly' impacted files i.e. the script embedded above.

3) In order to avoid rejection of patch series due to long recipent list, board maintainers will be sent separate (off-the-list) notification.

[1] http://marc.info/?l=u-boot&m=131473403131657&w=2

Sanjeev Premi (3):
omap: gpio: Use generic API
omap: gpio: generic changes after changing API
omap: gpio: Adapt board files to use generic API

 arch/arm/cpu/armv7/omap-common/gpio.c |  113 ++++++++++++++++++++++++---------
 arch/arm/cpu/armv7/omap4/clocks.c     |    5 +-
 arch/arm/include/asm/omap_gpio.h      |   15 -----
 board/cm_t35/leds.c                   |    6 +-
 board/comelit/dig297/dig297.c         |   12 ++--
 board/isee/igep0020/igep0020.c        |   12 ++--
 board/logicpd/zoom2/debug_board.c     |   10 ++--
 board/logicpd/zoom2/led.c             |   38 ++++++------
 board/logicpd/zoom2/zoom2.c           |   10 ++--
 board/overo/overo.c                   |   54 ++++++++--------
 board/ti/beagle/beagle.c              |   44 +++++++-------
 board/ti/beagle/led.c                 |   22 +++---
 board/ti/evm/evm.c                    |   12 ++--
 doc/README.omap3                      |   20 +++---
 14 files changed, 205 insertions(+), 168 deletions(-)
#1 lore raw

PATCH 1/3 omap: gpio: Use generic API

Convert all OMAP specific functions to use the common API definitions in include/asm/gpio.h. In the process, made few additional changes:
- Use -EINVAL consistently. -1 was used in many places.
- Removed one-liner static functions that were used only once. Replaced the content as necessary.
- Combines implementation of functions omap_get_gpio_dataout() and omap_get_gpio_datain(). To do so, new static function _get_gpio_direction() was added.

---

Changes since RFC:
- Rebased against u-boot-arm.git
- Dummy header is no longer necessary due to additional changes on the arm tree.
- Added function _get_gpio_direction().
- Fold omap_get_gpio_dataout() and omap_get_gpio_datain() into single gpio_get_value().

 arch/arm/cpu/armv7/omap-common/gpio.c |  113 ++++++++++++++++++++++++---------
 arch/arm/include/asm/omap_gpio.h      |   15 -----
 2 files changed, 82 insertions(+), 46 deletions(-)
arch/arm/cpu/armv7/omap-common/gpio.c +82 -31
index 4749524..5b14c0f 100644
@@ -40,6 +40,9 @@
 #include <asm/io.h>
 #include <asm/errno.h>
 
+#define OMAP_GPIO_DIR_OUT	0
+#define OMAP_GPIO_DIR_IN	1
+
 static inline const struct gpio_bank *get_gpio_bank(int gpio)
 {
 	return &omap_gpio_bank[gpio >> 5];
@@ -53,17 +56,17 @@ static inline int get_gpio_index(int gpio)
 static inline int gpio_valid(int gpio)
 {
 	if (gpio < 0)
-		return -1;
+		return -EINVAL;
 	if (gpio < 192)
 		return 0;
-	return -1;
+	return -EINVAL;
 }
 
 static int check_gpio(int gpio)
 {
 	if (gpio_valid(gpio) < 0) {
 		printf("ERROR : check_gpio: invalid GPIO %d\n", gpio);
-		return -1;
+		return -EINVAL;
 	}
 	return 0;
 }
@@ -89,14 +92,29 @@ static void _set_gpio_direction(const struct gpio_bank *bank, int gpio,
 	__raw_writel(l, reg);
 }
 
-void omap_set_gpio_direction(int gpio, int is_input)
+/**
+ * Get the direction of the GPIO by reading the GPIO_OE register
+ * corresponding to the specified bank.
+ */
+static int _get_gpio_direction(const struct gpio_bank *bank, int gpio)
 {
-	const struct gpio_bank *bank;
+	void *reg = bank->base;
+	u32 v;
 
-	if (check_gpio(gpio) < 0)
-		return;
-	bank = get_gpio_bank(gpio);
-	_set_gpio_direction(bank, get_gpio_index(gpio), is_input);
+	switch (bank->method) {
+	case METHOD_GPIO_24XX:
+		reg += OMAP_GPIO_OE;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	v = __raw_readl(reg);
+
+	if (v & (1 << gpio))
+		return OMAP_GPIO_DIR_IN;
+	else
+		return OMAP_GPIO_DIR_OUT;
 }
 
 static void _set_gpio_dataout(const struct gpio_bank *bank, int gpio,
@@ -121,20 +139,27 @@ static void _set_gpio_dataout(const struct gpio_bank *bank, int gpio,
 	__raw_writel(l, reg);
 }
 
-void omap_set_gpio_dataout(int gpio, int enable)
+/**
+ * Set value of the specified gpio
+ */
+void gpio_set_value(int gpio, int value)
 {
 	const struct gpio_bank *bank;
 
 	if (check_gpio(gpio) < 0)
 		return;
 	bank = get_gpio_bank(gpio);
-	_set_gpio_dataout(bank, get_gpio_index(gpio), enable);
+	_set_gpio_dataout(bank, get_gpio_index(gpio), value);
 }
 
-int omap_get_gpio_datain(int gpio)
+/**
+ * Get value of the specified gpio
+ */
+int gpio_get_value(int gpio)
 {
 	const struct gpio_bank *bank;
 	void *reg;
+	int input;
 
 	if (check_gpio(gpio) < 0)
 		return -EINVAL;
@@ -142,7 +167,17 @@ int omap_get_gpio_datain(int gpio)
 	reg = bank->base;
 	switch (bank->method) {
 	case METHOD_GPIO_24XX:
-		reg += OMAP_GPIO_DATAIN;
+		input = _get_gpio_direction(bank, get_gpio_index(gpio));
+		switch (input) {
+		case OMAP_GPIO_DIR_IN:
+			reg += OMAP_GPIO_DATAIN;
+			break;
+		case OMAP_GPIO_DIR_OUT:
+			reg += OMAP_GPIO_DATAOUT;
+			break;
+		default:
+			return -EINVAL;
+		}
 		break;
 	default:
 		return -EINVAL;
@@ -151,32 +186,45 @@ int omap_get_gpio_datain(int gpio)
 			& (1 << get_gpio_index(gpio))) != 0;
 }
 
-int omap_get_gpio_dataout(int gpio)
+/**
+ * Set gpio direction as input
+ */
+int gpio_direction_input(unsigned gpio)
 {
-	struct gpio_bank *bank;
-	void *reg;
+	const struct gpio_bank *bank;
 
 	if (check_gpio(gpio) < 0)
 		return -EINVAL;
+
 	bank = get_gpio_bank(gpio);
-	reg = bank->base;
-	switch (bank->method) {
-	case METHOD_GPIO_24XX:
-		reg += OMAP_GPIO_DATAOUT;
-		break;
-	default:
-		return -EINVAL;
-	}
-	return (__raw_readl(reg)
-			& (1 << get_gpio_index(gpio))) != 0;
+	_set_gpio_direction(bank, get_gpio_index(gpio), 1);
+
+	return 0;
 }
 
-static void _reset_gpio(const struct gpio_bank *bank, int gpio)
+/**
+ * Set gpio direction as output
+ */
+int gpio_direction_output(unsigned gpio, int value)
 {
-	_set_gpio_direction(bank, get_gpio_index(gpio), 1);
+	const struct gpio_bank *bank;
+
+	if (check_gpio(gpio) < 0)
+		return -EINVAL;
+
+	bank = get_gpio_bank(gpio);
+	_set_gpio_dataout(bank, get_gpio_index(gpio), value);
+	_set_gpio_direction(bank, get_gpio_index(gpio), 0);
+
+	return 0;
 }
 
-int omap_request_gpio(int gpio)
+/**
+ * Request a gpio before using it.
+ *
+ * NOTE: Argument 'label' is unused.
+ */
+int gpio_request(int gpio, const char *label)
 {
 	if (check_gpio(gpio) < 0)
 		return -EINVAL;
@@ -184,7 +232,10 @@ int omap_request_gpio(int gpio)
 	return 0;
 }
 
-void omap_free_gpio(int gpio)
+/**
+ * Reset and free the gpio after using it.
+ */
+void gpio_free(unsigned gpio)
 {
 	const struct gpio_bank *bank;
 
@@ -192,5 +243,5 @@ void omap_free_gpio(int gpio)
 		return;
 	bank = get_gpio_bank(gpio);
 
-	_reset_gpio(bank, gpio);
+	_set_gpio_direction(bank, get_gpio_index(gpio), 1);
 }
arch/arm/include/asm/omap_gpio.h +0 -15
index 8741572..516cc42 100644
@@ -49,19 +49,4 @@ extern const struct gpio_bank *const omap_gpio_bank;
 
 #define METHOD_GPIO_24XX	4
 
-/* This is the interface */
-
-/* Request a gpio before using it */
-int omap_request_gpio(int gpio);
-/* Reset and free a gpio after using it */
-void omap_free_gpio(int gpio);
-/* Sets the gpio as input or output */
-void omap_set_gpio_direction(int gpio, int is_input);
-/* Set or clear a gpio output */
-void omap_set_gpio_dataout(int gpio, int enable);
-/* Get the value of a gpio input */
-int omap_get_gpio_datain(int gpio);
-/* Get the value of a gpio output */
-int omap_get_gpio_dataout(int gpio);
-
 #endif /* _GPIO_H_ */
Signature · 1 line
1.7.0.4
#2 lore raw

PATCH 2/3 omap: gpio: generic changes after changing API

In reply to Sanjeev Premi

This patch contains the generic changes required after change to generic API in the previous patch.

---

This patch could have been merged with previous one, but has been kept separate to illustrate (and review) the changes to generic code.

 arch/arm/cpu/armv7/omap4/clocks.c |    5 +++--
 doc/README.omap3                  |   20 ++++++++++----------
 2 files changed, 13 insertions(+), 12 deletions(-)
arch/arm/cpu/armv7/omap4/clocks.c +3 -2
index eda960c..4f0e0cd 100644
@@ -31,6 +31,7 @@
  */
 #include <common.h>
 #include <asm/omap_common.h>
+#include <asm/gpio.h>
 #include <asm/arch/clocks.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/utils.h>
@@ -481,8 +482,8 @@ static void do_scale_tps62361(u32 reg, u32 volt_mv)
 	 * VSEL1 is grounded on board. So the following selects
 	 * VSEL1 = 0 and VSEL0 = 1
 	 */
-	omap_set_gpio_direction(TPS62361_VSEL0_GPIO, 0);
-	omap_set_gpio_dataout(TPS62361_VSEL0_GPIO, 1);
+	gpio_direction_output(TPS62361_VSEL0_GPIO, 0);
+	gpio_set_value(TPS62361_VSEL0_GPIO, 1);
 
 	temp = TPS62361_I2C_SLAVE_ADDR |
 	    (reg << PRM_VC_VAL_BYPASS_REGADDR_SHIFT) |
doc/README.omap3 +10 -10
index 460950d..1768cdd 100644
@@ -98,24 +98,24 @@ gpio
 
 To set a bit :
 
-	if (!omap_request_gpio(N)) {
-		omap_set_gpio_direction(N, 0);
-		omap_set_gpio_dataout(N, 1);
+	if (!gpio_request(N, "")) {
+		gpio_direction_output(N, 0);
+		gpio_set_value(N, 1);
 	}
 
 To clear a bit :
 
-	if (!omap_request_gpio(N)) {
-		omap_set_gpio_direction(N, 0);
-		omap_set_gpio_dataout(N, 0);
+	if (!gpio_request(N, "")) {
+		gpio_direction_output(N, 0);
+		gpio_set_value(N, 0);
 	}
 
 To read a bit :
 
-	if (!omap_request_gpio(N)) {
-		omap_set_gpio_direction(N, 1);
-		val = omap_get_gpio_datain(N);
-		omap_free_gpio(N);
+	if (!gpio_request(N, "")) {
+		gpio_direction_input(N);
+		val = gpio_get_value(N);
+		gpio_free(N);
 	}
 	if (val)
 		printf("GPIO N is set\n");
Signature · 1 line
1.7.0.4
#3 lore raw

PATCH 3/3 omap: gpio: Adapt board files to use generic API

In reply to Sanjeev Premi

This patch contains updates the sources in the board files to use the generic API.

---

While most changes were done via script mentioned in the patch 0/3, some of the changes were manual - as the script failed to match few instances.

 board/cm_t35/leds.c               |   10 +++---
 board/comelit/dig297/dig297.c     |   12 ++++----
 board/isee/igep0020/igep0020.c    |   12 ++++----
 board/logicpd/zoom2/debug_board.c |   10 +++---
 board/logicpd/zoom2/led.c         |   38 +++++++++++++-------------
 board/logicpd/zoom2/zoom2.c       |   10 +++---
 board/overo/overo.c               |   54 ++++++++++++++++++------------------
 board/ti/beagle/beagle.c          |   44 +++++++++++++++---------------
 board/ti/beagle/led.c             |   22 +++++++-------
 board/ti/evm/evm.c                |   12 ++++----
 10 files changed, 112 insertions(+), 112 deletions(-)
board/cm_t35/leds.c +5 -5
index 71c5b0d..48ad598 100644
@@ -20,26 +20,26 @@
  */
 #include <common.h>
 #include <status_led.h>
-#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
 
 static unsigned int leds[] = { GREEN_LED_GPIO };
 
 void __led_init(led_id_t mask, int state)
 {
-	if (omap_request_gpio(leds[mask]) != 0) {
+	if (gpio_request(leds[mask], "") != 0) {
 		printf("%s: failed requesting GPIO%u\n", __func__, leds[mask]);
 		return;
 	}
 
-	omap_set_gpio_direction(leds[mask], 0);
+	gpio_direction_output(leds[mask], 0);
 }
 
 void __led_set(led_id_t mask, int state)
 {
-	omap_set_gpio_dataout(leds[mask], state == STATUS_LED_ON);
+	gpio_set_value(leds[mask], state == STATUS_LED_ON);
 }
 
 void __led_toggle(led_id_t mask)
 {
-	omap_set_gpio_dataout(leds[mask], !omap_get_gpio_datain(leds[mask]));
+	gpio_set_value(leds[mask], !gpio_get_value(leds[mask]));
 }
board/comelit/dig297/dig297.c +6 -6
index a7071cd..c81ce58 100644
@@ -42,7 +42,7 @@
 #include <asm/arch/mux.h>
 #include <asm/arch/mem.h>
 #include <asm/arch/sys_proto.h>
-#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
 #include <asm/mach-types.h>
 #include "dig297.h"
 
@@ -177,13 +177,13 @@ static void setup_net_chip(void)
 	       &ctrl_base->gpmc_nadv_ale);
 
 	/* Make GPIO 12 as output pin and send a magic pulse through it */
-	if (!omap_request_gpio(NET_LAN9221_RESET_GPIO)) {
-		omap_set_gpio_direction(NET_LAN9221_RESET_GPIO, 0);
-		omap_set_gpio_dataout(NET_LAN9221_RESET_GPIO, 1);
+	if (!gpio_request(NET_LAN9221_RESET_GPIO, "")) {
+		gpio_direction_output(NET_LAN9221_RESET_GPIO, 0);
+		gpio_set_value(NET_LAN9221_RESET_GPIO, 1);
 		udelay(1);
-		omap_set_gpio_dataout(NET_LAN9221_RESET_GPIO, 0);
+		gpio_set_value(NET_LAN9221_RESET_GPIO, 0);
 		udelay(31000);	/* Should be >= 30ms according to datasheet */
-		omap_set_gpio_dataout(NET_LAN9221_RESET_GPIO, 1);
+		gpio_set_value(NET_LAN9221_RESET_GPIO, 1);
 	}
 }
 #endif /* CONFIG_CMD_NET */
board/isee/igep0020/igep0020.c +6 -6
index 36cc924..2279cc0 100644
@@ -24,7 +24,7 @@
 #include <netdev.h>
 #include <twl4030.h>
 #include <asm/io.h>
-#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
 #include <asm/arch/mem.h>
 #include <asm/arch/mmc_host_def.h>
 #include <asm/arch/mux.h>
@@ -81,13 +81,13 @@ static void setup_net_chip(void)
 		&ctrl_base->gpmc_nadv_ale);
 
 	/* Make GPIO 64 as output pin and send a magic pulse through it */
-	if (!omap_request_gpio(64)) {
-		omap_set_gpio_direction(64, 0);
-		omap_set_gpio_dataout(64, 1);
+	if (!gpio_request(64, "")) {
+		gpio_direction_output(64, 0);
+		gpio_set_value(64, 1);
 		udelay(1);
-		omap_set_gpio_dataout(64, 0);
+		gpio_set_value(64, 0);
 		udelay(1);
-		omap_set_gpio_dataout(64, 1);
+		gpio_set_value(64, 1);
 	}
 }
 #endif
board/logicpd/zoom2/debug_board.c +5 -5
index a4ddf29..33aa600 100644
@@ -22,7 +22,7 @@
 #include <asm/arch/cpu.h>
 #include <asm/io.h>
 #include <asm/arch/mux.h>
-#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
 
 #define DEBUG_BOARD_CONNECTED		1
 #define DEBUG_BOARD_NOT_CONNECTED	0
@@ -33,14 +33,14 @@ static void zoom2_debug_board_detect (void)
 {
 	int val = 0;
 
-	if (!omap_request_gpio(158)) {
+	if (!gpio_request(158, "")) {
 		/*
 		 * GPIO to query for debug board
 		 * 158 db board query
 		 */
-		omap_set_gpio_direction(158, 1);
-		val = omap_get_gpio_datain(158);
-		omap_free_gpio(158);
+		gpio_direction_input(158);
+		val = gpio_get_value(158);
+		gpio_free(158);
 	}
 
 	if (!val)
board/logicpd/zoom2/led.c +19 -19
index 4e14c58..4255372 100644
@@ -22,7 +22,7 @@
 #include <asm/arch/cpu.h>
 #include <asm/io.h>
 #include <asm/arch/sys_proto.h>
-#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
 
 static unsigned int saved_state[2] = {STATUS_LED_OFF, STATUS_LED_OFF};
 
@@ -39,9 +39,9 @@ static unsigned int saved_state[2] = {STATUS_LED_OFF, STATUS_LED_OFF};
 void red_LED_off (void)
 {
 	/* red */
-	if (!omap_request_gpio(ZOOM2_LED_RED)) {
-		omap_set_gpio_direction(ZOOM2_LED_RED, 0);
-		omap_set_gpio_dataout(ZOOM2_LED_RED, 0);
+	if (!gpio_request(ZOOM2_LED_RED, "")) {
+		gpio_direction_output(ZOOM2_LED_RED, 0);
+		gpio_set_value(ZOOM2_LED_RED, 0);
 	}
 	saved_state[STATUS_LED_RED] = STATUS_LED_OFF;
 }
@@ -49,15 +49,15 @@ void red_LED_off (void)
 void blue_LED_off (void)
 {
 	/* blue */
-	if (!omap_request_gpio(ZOOM2_LED_BLUE)) {
-		omap_set_gpio_direction(ZOOM2_LED_BLUE, 0);
-		omap_set_gpio_dataout(ZOOM2_LED_BLUE, 0);
+	if (!gpio_request(ZOOM2_LED_BLUE, "")) {
+		gpio_direction_output(ZOOM2_LED_BLUE, 0);
+		gpio_set_value(ZOOM2_LED_BLUE, 0);
 	}
 
 	/* blue 2 */
-	if (!omap_request_gpio(ZOOM2_LED_BLUE2)) {
-		omap_set_gpio_direction(ZOOM2_LED_BLUE2, 0);
-		omap_set_gpio_dataout(ZOOM2_LED_BLUE2, 0);
+	if (!gpio_request(ZOOM2_LED_BLUE2, "")) {
+		gpio_direction_output(ZOOM2_LED_BLUE2, 0);
+		gpio_set_value(ZOOM2_LED_BLUE2, 0);
 	}
 	saved_state[STATUS_LED_BLUE] = STATUS_LED_OFF;
 }
@@ -67,9 +67,9 @@ void red_LED_on (void)
 	blue_LED_off ();
 
 	/* red */
-	if (!omap_request_gpio(ZOOM2_LED_RED)) {
-		omap_set_gpio_direction(ZOOM2_LED_RED, 0);
-		omap_set_gpio_dataout(ZOOM2_LED_RED, 1);
+	if (!gpio_request(ZOOM2_LED_RED, "")) {
+		gpio_direction_output(ZOOM2_LED_RED, 0);
+		gpio_set_value(ZOOM2_LED_RED, 1);
 	}
 	saved_state[STATUS_LED_RED] = STATUS_LED_ON;
 }
@@ -79,15 +79,15 @@ void blue_LED_on (void)
 	red_LED_off ();
 
 	/* blue */
-	if (!omap_request_gpio(ZOOM2_LED_BLUE)) {
-		omap_set_gpio_direction(ZOOM2_LED_BLUE, 0);
-		omap_set_gpio_dataout(ZOOM2_LED_BLUE, 1);
+	if (!gpio_request(ZOOM2_LED_BLUE, "")) {
+		gpio_direction_output(ZOOM2_LED_BLUE, 0);
+		gpio_set_value(ZOOM2_LED_BLUE, 1);
 	}
 
 	/* blue 2 */
-	if (!omap_request_gpio(ZOOM2_LED_BLUE2)) {
-		omap_set_gpio_direction(ZOOM2_LED_BLUE2, 0);
-		omap_set_gpio_dataout(ZOOM2_LED_BLUE2, 1);
+	if (!gpio_request(ZOOM2_LED_BLUE2, "")) {
+		gpio_direction_output(ZOOM2_LED_BLUE2, 0);
+		gpio_set_value(ZOOM2_LED_BLUE2, 1);
 	}
 
 	saved_state[STATUS_LED_BLUE] = STATUS_LED_ON;
board/logicpd/zoom2/zoom2.c +5 -5
index 800113a..21964c2 100644
@@ -36,7 +36,7 @@
 #include <twl4030.h>
 #include <asm/io.h>
 #include <asm/arch/mmc_host_def.h>
-#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
 #include <asm/arch/mem.h>
 #include <asm/arch/mux.h>
 #include <asm/arch/sys_proto.h>
@@ -90,12 +90,12 @@ void zoom2_identify(void)
 	 * and they are not commonly used.  They are mentioned here
 	 * only for completeness.
 	 */
-	if (!omap_request_gpio(94)) {
+	if (!gpio_request(94, "")) {
 		unsigned int val;
 
-		omap_set_gpio_direction(94, 1);
-		val = omap_get_gpio_datain(94);
-		omap_free_gpio(94);
+		gpio_direction_input(94);
+		val = gpio_get_value(94);
+		gpio_free(94);
 
 		if (val)
 			revision = ZOOM2_REVISION_BETA;
board/overo/overo.c +27 -27

89 lines not on this page · raw message

board/ti/beagle/beagle.c +22 -22

90 lines not on this page · raw message

board/ti/beagle/led.c +11 -11
index f08c08a..1779242 100644
@@ -22,7 +22,7 @@
 #include <asm/arch/cpu.h>
 #include <asm/io.h>
 #include <asm/arch/sys_proto.h>
-#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
 
 /* GPIO pins for the LEDs */
 #define BEAGLE_LED_USR0	150
@@ -57,10 +57,10 @@ void __led_toggle (led_id_t mask)
 		toggle_gpio = BEAGLE_LED_USR1;
 #endif
 	if (toggle_gpio) {
-		if (!omap_request_gpio(toggle_gpio)) {
-			omap_set_gpio_direction(toggle_gpio, 0);
-			state = omap_get_gpio_dataout(toggle_gpio);
-			omap_set_gpio_dataout(toggle_gpio, !state);
+		if (!gpio_request(toggle_gpio, "")) {
+			gpio_direction_output(toggle_gpio, 0);
+			state = gpio_get_value(toggle_gpio);
+			gpio_set_value(toggle_gpio, !state);
 		}
 	}
 }
@@ -69,17 +69,17 @@ void __led_set (led_id_t mask, int state)
 {
 #ifdef STATUS_LED_BIT
 	if (STATUS_LED_BIT & mask) {
-		if (!omap_request_gpio(BEAGLE_LED_USR0)) {
-			omap_set_gpio_direction(BEAGLE_LED_USR0, 0);
-			omap_set_gpio_dataout(BEAGLE_LED_USR0, state);
+		if (!gpio_request(BEAGLE_LED_USR0, "")) {
+			gpio_direction_output(BEAGLE_LED_USR0, 0);
+			gpio_set_value(BEAGLE_LED_USR0, state);
 		}
 	}
 #endif
 #ifdef STATUS_LED_BIT1
 	if (STATUS_LED_BIT1 & mask) {
-		if (!omap_request_gpio(BEAGLE_LED_USR1)) {
-			omap_set_gpio_direction(BEAGLE_LED_USR1, 0);
-			omap_set_gpio_dataout(BEAGLE_LED_USR1, state);
+		if (!gpio_request(BEAGLE_LED_USR1, "")) {
+			gpio_direction_output(BEAGLE_LED_USR1, 0);
+			gpio_set_value(BEAGLE_LED_USR1, state);
 		}
 	}
 #endif
board/ti/evm/evm.c +6 -6
index e8360df..b17c0fb 100644
@@ -34,7 +34,7 @@
 #include <asm/arch/mux.h>
 #include <asm/arch/sys_proto.h>
 #include <asm/arch/mmc_host_def.h>
-#include <asm/arch/gpio.h>
+#include <asm/gpio.h>
 #include <i2c.h>
 #include <asm/mach-types.h>
 #include "evm.h"
@@ -196,21 +196,21 @@ static void reset_net_chip(void)
 		rst_gpio = OMAP3EVM_GPIO_ETH_RST_GEN2;
 	}
 
-	ret = omap_request_gpio(rst_gpio);
+	ret = gpio_request(rst_gpio, "");
 	if (ret < 0) {
 		printf("Unable to get GPIO %d\n", rst_gpio);
 		return ;
 	}
 
 	/* Configure as output */
-	omap_set_gpio_direction(rst_gpio, 0);
+	gpio_direction_output(rst_gpio, 0);
 
 	/* Send a pulse on the GPIO pin */
-	omap_set_gpio_dataout(rst_gpio, 1);
+	gpio_set_value(rst_gpio, 1);
 	udelay(1);
-	omap_set_gpio_dataout(rst_gpio, 0);
+	gpio_set_value(rst_gpio, 0);
 	udelay(1);
-	omap_set_gpio_dataout(rst_gpio, 1);
+	gpio_set_value(rst_gpio, 1);
 }
 
 int board_eth_init(bd_t *bis)
Signature · 1 line
1.7.0.4
#4 lore raw

cover omap: gpio: Use generic API (instead of custom)

In reply to Sanjeev Premi
Quoted 8 lines

Sanjeev Premi (3):
omap: gpio: Use generic API
omap: gpio: generic changes after changing API
omap: gpio: Adapt board files to use generic API

Quoted 16 lines
 arch/arm/cpu/armv7/omap-common/gpio.c |  113 ++++++++++++++++++++++++----
-----
 arch/arm/cpu/armv7/omap4/clocks.c     |    5 +-
 arch/arm/include/asm/omap_gpio.h      |   15 -----
 board/cm_t35/leds.c                   |    6 +-
 board/comelit/dig297/dig297.c         |   12 ++--
 board/isee/igep0020/igep0020.c        |   12 ++--
 board/logicpd/zoom2/debug_board.c     |   10 ++--
 board/logicpd/zoom2/led.c             |   38 ++++++------
 board/logicpd/zoom2/zoom2.c           |   10 ++--
 board/overo/overo.c                   |   54 ++++++++--------
 board/ti/beagle/beagle.c              |   44 +++++++-------
 board/ti/beagle/led.c                 |   22 +++---
 board/ti/evm/evm.c                    |   12 ++--
 doc/README.omap3                      |   20 +++---
 14 files changed, 205 insertions(+), 168 deletions(-)

Albert, Wolfgang,

After sufficient review, can we perhaps add this patch set to this release?

When I submitted my pull request I know omap3 beagle was compiling. However after I rebased with the mainline, the builds broke.

Regards,
Sandeep

#5 lore raw

cover omap: gpio: Use generic API (instead of custom)

In reply to Sanjeev Premi

Hi Sanjeev,

Quoted 3 lines · Sanjeev Premi

The OMAP boards use a custom api for GPIO operations. While it works, it doesn't help when when we don't know existence of the customization.

...

Quoted 4 lines

Changes since RFC[1]:
1) While the original RFC was based against the master of u-boot.git. This series is based against master of u-boot-arm.git

This patchset does not apply on top of current -arm master:

commit 1052ea04d60de953f8355eab0e39336974283304
Author: Sanjeev Premi <[email protected]>
Date: Mon Sep 5 00:25:53 2011 +0000

omap3: beagle: Fix build warning

With this message:

Applying: omap: gpio: Use generic API
error: patch failed: arch/arm/cpu/armv7/omap-common/gpio.c:151
error: arch/arm/cpu/armv7/omap-common/gpio.c: patch does not apply
error: patch failed: arch/arm/include/asm/omap_gpio.h:49
error: arch/arm/include/asm/omap_gpio.h: patch does not apply Patch failed at 0001 omap: gpio: Use generic API

I'm afraid think you need another rebase.

Luca

#6 lore raw

cover omap: gpio: Use generic API (instead of custom)

Quoted 30 lines

-----Original Message-----
From: Luca Ceresoli [mailto:luca.ceresoli at comelit.it]
Sent: Wednesday, September 07, 2011 2:54 PM
To: Premi, Sanjeev
Cc: u-boot at lists.denx.de
Subject: Re: [U-Boot] [PATCH 0/3] omap: gpio: Use generic API (instead of custom)

Hi Sanjeev,

Quoted 3 lines · Sanjeev Premi

The OMAP boards use a custom api for GPIO operations. While it works, it doesn't help when when we don't know existence of the customization.

...

Quoted 4 lines

Changes since RFC[1]:
1) While the original RFC was based against the master of u-boot.git. This series is based against master of u-boot-arm.git

This patchset does not apply on top of current -arm master:

commit 1052ea04d60de953f8355eab0e39336974283304
Author: Sanjeev Premi <[email protected]>
Date: Mon Sep 5 00:25:53 2011 +0000

omap3: beagle: Fix build warning

With this message:

Quoted 8 lines

Applying: omap: gpio: Use generic API
error: patch failed: arch/arm/cpu/armv7/omap-common/gpio.c:151
error: arch/arm/cpu/armv7/omap-common/gpio.c: patch does not apply
error: patch failed: arch/arm/include/asm/omap_gpio.h:49
error: arch/arm/include/asm/omap_gpio.h: patch does not apply Patch failed at 0001 omap: gpio: Use generic API

I'm afraid think you need another rebase.

When I rebased, arm/master was at:
58c583b : net: Check network device driver name

Anyways, fresh rebase coming in next hour...

~sanjeev

Quoted 3 lines

Luca

#7 lore raw

cover omap: gpio: Use generic API (instead of custom)

Quoted 46 lines

-----Original Message-----
From: u-boot-bounces at lists.denx.de [mailto:u-boot-bounces at lists.denx.de] On Behalf Of Premi, Sanjeev
Sent: Wednesday, September 07, 2011 3:10 PM
To: Luca Ceresoli
Cc: u-boot at lists.denx.de
Subject: Re: [U-Boot] [PATCH 0/3] omap: gpio: Use generic API (instead of custom)

Quoted 26 lines

-----Original Message-----
From: Luca Ceresoli [mailto:luca.ceresoli at comelit.it]
Sent: Wednesday, September 07, 2011 2:54 PM
To: Premi, Sanjeev
Cc: u-boot at lists.denx.de
Subject: Re: [U-Boot] [PATCH 0/3] omap: gpio: Use generic API (instead of custom)

Hi Sanjeev,

Quoted 3 lines · Sanjeev Premi

The OMAP boards use a custom api for GPIO operations. While it works, it doesn't help when when we don't know existence of the customization.

...

Quoted 4 lines

Changes since RFC[1]:
1) While the original RFC was based against the master of u-boot.git. This series is based against master of u-boot-arm.git

This patchset does not apply on top of current -arm master:

commit 1052ea04d60de953f8355eab0e39336974283304
Author: Sanjeev Premi <[email protected]>
Date: Mon Sep 5 00:25:53 2011 +0000

Quoted 7 lines

omap3: beagle: Fix build warning

With this message:

Applying: omap: gpio: Use generic API
error: patch failed: arch/arm/cpu/armv7/omap-common/gpio.c:151
error: arch/arm/cpu/armv7/omap-common/gpio.c: patch does

not apply

Quoted 4 lines

error: patch failed: arch/arm/include/asm/omap_gpio.h:49
error: arch/arm/include/asm/omap_gpio.h: patch does not apply Patch failed at 0001 omap: gpio: Use generic API

Quoted 6 lines
Quoted 1 line

I'm afraid think you need another rebase.

When I rebased, arm/master was at:
58c583b : net: Check network device driver name

Anyways, fresh rebase coming in next hour...

[sp] Actually, I realized that PATCH 1 in the series depends upon:
http://marc.info/?l=u-boot&m=131515805732292&w=2

I had mentioned 2 patches in the cover letter. Of the two, one is already included in u-boot-arm/master. This one is still not.

Can you apply this patch and then try to apply this series?

~sanjeev

Quoted 11 lines

~sanjeev

Quoted 3 lines

Luca

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#8 lore raw

cover omap: gpio: Use generic API (instead of custom)

Quoted 8 lines · Sanjeev

[sp] Actually, I realized that PATCH 1 in the series depends upon:
http://marc.info/?l=u-boot&m=131515805732292&w=2

I had mentioned 2 patches in the cover letter. Of the two, one is already included in u-boot-arm/master. This one is still not.

Can you apply this patch and then try to apply this series?

That did work. Compiled and tested on the dig297 board.

Luca