diff mbox

[Maverick,SRU,3/6] UBUNTU - ARM: igepv2: Introduce function to dectect HW version

Message ID 1286814994.3125.34.camel@black
State Accepted
Delegated to: Brad Figg
Headers show

Commit Message

Mathieu Poirier Oct. 11, 2010, 4:36 p.m. UTC
SRU Justification:

Impact: This patch is part of a series for fix for the IGEPv2 board.
There are currently two version of the board but no functionality to

Comments

Lee Jones Oct. 12, 2010, 8:20 a.m. UTC | #1
On 11/10/10 17:36, Mathieu Poirier wrote:
> SRU Justification:
> 
> Impact: This patch is part of a series for fix for the IGEPv2 board.
> There are currently two version of the board but no functionality to
> differentiate them from the code.
> 
> Fix: Introducing functionality in the board file to probe GPIOs and set
> the "hwrev" flag.
> 
> Testcase: Without this patch, the code has no way to know which board is
> it working on and therefore can't take decisions on specific actions to
> take on each board.
> 
> 
>>From aa4a3e99b96de115ebe54921f62ebde2e3afc515 Mon Sep 17 00:00:00 2001
> From: Enric Balletbo i Serra <eballetbo@gmail.com>
> Date: Mon, 11 Oct 2010 10:11:51 -0600
> Subject: [PATCH 3/6] UBUNTU - ARM: igepv2: Introduce function to dectect HW version
> 
> There are currently two versions of IGEPv2 board, this patch
> introduces a function to detect the hardware revision of IGEP board.
> 
>   --------------------------
>  | Id. | Hw Rev. | GPIO 28  |
>   --------------------------
>  |  0  |   B/C   |   high   |
>  |  1  |   C     |   low    |
>   --------------------------
> 
> This work was tested by the community and also been submitted here:
> http://marc.info/?l=linux-omap&m=128628886320281&w=2
> 
> BugLink: https://bugs.launchpad.net/bugs/654586
> 
> Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
> Signed-off-by: Mathieu J Poirier <mathieu.poirier@canonical.com>
> ---
>  arch/arm/mach-omap2/board-igep0020.c |   47 ++++++++++++++++++++++++++++++++++
>  1 files changed, 47 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
> index 29a1e24..7715701 100644
> --- a/arch/arm/mach-omap2/board-igep0020.c
> +++ b/arch/arm/mach-omap2/board-igep0020.c
> @@ -45,6 +45,49 @@
>  #define IGEP2_GPIO_WIFI_NPD 	94
>  #define IGEP2_GPIO_WIFI_NRESET 	95
>  
> +/*
> + * IGEP2 Hardware Revision Table
> + *
> + *  --------------------------
> + * | Id. | Hw Rev. | HW0 (28) |
> + *  --------------------------
> + * |  0  |   B/C   |   high   |
> + * |  1  |   C     |   low    |
> + *  --------------------------
> + */
> +
> +#define IGEP2_BOARD_HWREV_B	0
> +#define IGEP2_BOARD_HWREV_C	1
> +
> +static u8 hwrev;
> +
> +static void __init igep2_get_revision(void)
> +{
> +	u8 ret;
> +
> +	omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT);
> +
> +	if ((gpio_request(IGEP2_GPIO_LED1_RED, "GPIO_HW0_REV") == 0) &&
> +	    (gpio_direction_input(IGEP2_GPIO_LED1_RED) == 0)) {
> +		ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
> +		if (ret == 0) {
> +			pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
> +			hwrev = IGEP2_BOARD_HWREV_C;
> +		} else if (ret ==  1) {
> +			pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
> +			hwrev = IGEP2_BOARD_HWREV_B;
> +		} else {
> +			pr_err("IGEP2: Unknown Hardware Revision\n");
> +			hwrev = -1;
> +		}
> +	} else {
> +		pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n");
> +		pr_err("IGEP2: Unknown Hardware Revision\n");
> +	}
> +
> +	gpio_free(IGEP2_GPIO_LED1_RED);
> +}
> +
>  #if defined(CONFIG_MTD_ONENAND_OMAP2) || \
>  	defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
>  
> @@ -537,6 +580,10 @@ static struct omap_board_mux board_mux[] __initdata = {
>  static void __init igep2_init(void)
>  {
>  	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
> +
> +	/* Get IGEP2 hardware revision */
> +	igep2_get_revision();
> +
>  	igep2_i2c_init();
>  	platform_add_devices(igep2_devices, ARRAY_SIZE(igep2_devices));
>  	omap_serial_init();

Signed-off-by: Lee Jones <lee.jones@canonical.com>
diff mbox

Patch

differentiate them from the code.

Fix: Introducing functionality in the board file to probe GPIOs and set
the "hwrev" flag.

Testcase: Without this patch, the code has no way to know which board is
it working on and therefore can't take decisions on specific actions to
take on each board.


>From aa4a3e99b96de115ebe54921f62ebde2e3afc515 Mon Sep 17 00:00:00 2001
From: Enric Balletbo i Serra <eballetbo@gmail.com>
Date: Mon, 11 Oct 2010 10:11:51 -0600
Subject: [PATCH 3/6] UBUNTU - ARM: igepv2: Introduce function to dectect HW version

There are currently two versions of IGEPv2 board, this patch
introduces a function to detect the hardware revision of IGEP board.

  --------------------------
 | Id. | Hw Rev. | GPIO 28  |
  --------------------------
 |  0  |   B/C   |   high   |
 |  1  |   C     |   low    |
  --------------------------

This work was tested by the community and also been submitted here:
http://marc.info/?l=linux-omap&m=128628886320281&w=2

BugLink: https://bugs.launchpad.net/bugs/654586

Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
Signed-off-by: Mathieu J Poirier <mathieu.poirier@canonical.com>
---
 arch/arm/mach-omap2/board-igep0020.c |   47 ++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+), 0 deletions(-)

diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 29a1e24..7715701 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -45,6 +45,49 @@ 
 #define IGEP2_GPIO_WIFI_NPD 	94
 #define IGEP2_GPIO_WIFI_NRESET 	95
 
+/*
+ * IGEP2 Hardware Revision Table
+ *
+ *  --------------------------
+ * | Id. | Hw Rev. | HW0 (28) |
+ *  --------------------------
+ * |  0  |   B/C   |   high   |
+ * |  1  |   C     |   low    |
+ *  --------------------------
+ */
+
+#define IGEP2_BOARD_HWREV_B	0
+#define IGEP2_BOARD_HWREV_C	1
+
+static u8 hwrev;
+
+static void __init igep2_get_revision(void)
+{
+	u8 ret;
+
+	omap_mux_init_gpio(IGEP2_GPIO_LED1_RED, OMAP_PIN_INPUT);
+
+	if ((gpio_request(IGEP2_GPIO_LED1_RED, "GPIO_HW0_REV") == 0) &&
+	    (gpio_direction_input(IGEP2_GPIO_LED1_RED) == 0)) {
+		ret = gpio_get_value(IGEP2_GPIO_LED1_RED);
+		if (ret == 0) {
+			pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
+			hwrev = IGEP2_BOARD_HWREV_C;
+		} else if (ret ==  1) {
+			pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
+			hwrev = IGEP2_BOARD_HWREV_B;
+		} else {
+			pr_err("IGEP2: Unknown Hardware Revision\n");
+			hwrev = -1;
+		}
+	} else {
+		pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n");
+		pr_err("IGEP2: Unknown Hardware Revision\n");
+	}
+
+	gpio_free(IGEP2_GPIO_LED1_RED);
+}
+
 #if defined(CONFIG_MTD_ONENAND_OMAP2) || \
 	defined(CONFIG_MTD_ONENAND_OMAP2_MODULE)
 
@@ -537,6 +580,10 @@  static struct omap_board_mux board_mux[] __initdata = {
 static void __init igep2_init(void)
 {
 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
+
+	/* Get IGEP2 hardware revision */
+	igep2_get_revision();
+
 	igep2_i2c_init();
 	platform_add_devices(igep2_devices, ARRAY_SIZE(igep2_devices));
 	omap_serial_init();