linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv3 0/6] omap3: Various fixes and improvements for IGEP v2 board.
@ 2010-10-01 21:09 Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on " Enric Balletbo i Serra
                   ` (5 more replies)
  0 siblings, 6 replies; 11+ messages in thread
From: Enric Balletbo i Serra @ 2010-10-01 21:09 UTC (permalink / raw)
  To: linux-arm-kernel


Hello,

This is the version 3 of patch series to fix and improve the IGEP v2 board support.

Changes since v2:
 - [1/6] check the result value of gpio_request and gpio_direction_*
 - [2/6] align the igep2_gpio_leds with tabs.
 - cc linux-arm-kernel

Kind regards,

  Enric

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

* [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on IGEP v2 board.
  2010-10-01 21:09 [PATCHv3 0/6] omap3: Various fixes and improvements for IGEP v2 board Enric Balletbo i Serra
@ 2010-10-01 21:09 ` Enric Balletbo i Serra
  2010-10-02  8:04   ` David Cohen
  2010-10-01 21:09 ` [PATCHv3 2/6] omap3: fix and improve the LED handling " Enric Balletbo i Serra
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 11+ messages in thread
From: Enric Balletbo i Serra @ 2010-10-01 21:09 UTC (permalink / raw)
  To: linux-arm-kernel

GPIO for various devices are missing from the board initialization.
This patch adds support for the VBUS and over current gpios.  Without this
patch, input/outputs from these two sources are ignored.

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

diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 175f043..07dbdb7 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -274,6 +274,22 @@ static int igep2_twl_gpio_setup(struct device *dev,
 	igep2_vmmc1_supply.dev = mmc[0].dev;
 	igep2_vmmc2_supply.dev = mmc[1].dev;
 
+	/*
+	 * REVISIT: need ehci-omap hooks for external VBUS
+	 * power switch and overcurrent detect
+	 */
+	if ((gpio_request(gpio + 1, "GPIO_EHCI_NOC") < 0) ||
+	    (gpio_direction_input(gpio + 1) < 0))
+		pr_err("IGEP2: Could not obtain gpio for EHCI NOC");
+
+	/*
+	 * TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN
+	 * (out, active low)
+	 */
+	if ((gpio_request(gpio + TWL4030_GPIO_MAX, "GPIO_USBH_CPEN") < 0) ||
+	    (gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0) < 0))
+		pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");
+
 	return 0;
 };
 
-- 
1.7.0.4

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

* [PATCHv3 2/6] omap3: fix and improve the LED handling on IGEP v2 board.
  2010-10-01 21:09 [PATCHv3 0/6] omap3: Various fixes and improvements for IGEP v2 board Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on " Enric Balletbo i Serra
@ 2010-10-01 21:09 ` Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 3/6] omap3: Introduce function to detect the IGEP v2 hardware revision Enric Balletbo i Serra
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Enric Balletbo i Serra @ 2010-10-01 21:09 UTC (permalink / raw)
  To: linux-arm-kernel

The IGEP v2 board has four leds, this patch allows control all
of these LEDs using the LED class if CONFIG_LEDS_GPIO is selected
or using the General Purpose Input/Output (GPIO) interface if
CONFIG_LEDS_GPIO is not selected.

Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
---
 arch/arm/mach-omap2/board-igep0020.c |  156 +++++++++++++++++++---------------
 1 files changed, 87 insertions(+), 69 deletions(-)

diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 07dbdb7..83a30ce 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -261,6 +261,77 @@ static struct omap2_hsmmc_info mmc[] = {
 	{}      /* Terminator */
 };
 
+#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
+#include <linux/leds.h>
+
+static struct gpio_led igep2_gpio_leds[] = {
+	[0] = {
+		.name			= "gpio-led:red:d0",
+		.gpio			= IGEP2_GPIO_LED0_RED,
+		.default_trigger	= "default-off"
+	},
+	[1] = {
+		.name			= "gpio-led:green:d0",
+		.gpio			= IGEP2_GPIO_LED0_GREEN,
+		.default_trigger	= "default-off",
+	},
+	[2] = {
+		.name			= "gpio-led:red:d1",
+		.gpio			= IGEP2_GPIO_LED1_RED,
+		.default_trigger	= "default-off",
+	},
+	[3] = {
+		.name			= "gpio-led:green:d1",
+		.default_trigger	= "heartbeat",
+		.gpio			= -EINVAL, /* gets replaced */
+	},
+};
+
+static struct gpio_led_platform_data igep2_led_pdata = {
+	.leds           = igep2_gpio_leds,
+	.num_leds       = ARRAY_SIZE(igep2_gpio_leds),
+};
+
+static struct platform_device igep2_led_device = {
+	 .name   = "leds-gpio",
+	 .id     = -1,
+	 .dev    = {
+		 .platform_data  =  &igep2_led_pdata,
+	},
+};
+
+static void __init igep2_leds_init(void)
+{
+	platform_device_register(&igep2_led_device);
+}
+
+#else
+static inline void igep2_leds_init(void)
+{
+	if ((gpio_request(IGEP2_GPIO_LED0_RED, "gpio-led:red:d0") == 0) &&
+	    (gpio_direction_output(IGEP2_GPIO_LED0_RED, 1) == 0)) {
+		gpio_export(IGEP2_GPIO_LED0_RED, 0);
+		gpio_set_value(IGEP2_GPIO_LED0_RED, 0);
+	} else
+		pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
+
+	if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "gpio-led:green:d0") == 0) &&
+	    (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 1) == 0)) {
+		gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
+		gpio_set_value(IGEP2_GPIO_LED0_GREEN, 0);
+	} else
+		pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
+
+	if ((gpio_request(IGEP2_GPIO_LED1_RED, "gpio-led:red:d1") == 0) &&
+	    (gpio_direction_output(IGEP2_GPIO_LED1_RED, 1) == 0)) {
+		gpio_export(IGEP2_GPIO_LED1_RED, 0);
+		gpio_set_value(IGEP2_GPIO_LED1_RED, 0);
+	} else
+		pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
+
+}
+#endif
+
 static int igep2_twl_gpio_setup(struct device *dev,
 		unsigned gpio, unsigned ngpio)
 {
@@ -290,14 +361,26 @@ static int igep2_twl_gpio_setup(struct device *dev,
 	    (gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0) < 0))
 		pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");
 
+	/* TWL4030_GPIO_MAX + 1 == ledB (out, active low LED) */
+#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
+	if ((gpio_request(gpio+TWL4030_GPIO_MAX+1, "gpio-led:green:d1") == 0)
+	    && (gpio_direction_output(gpio + TWL4030_GPIO_MAX + 1, 1) == 0)) {
+		gpio_export(gpio + TWL4030_GPIO_MAX + 1, 0);
+		gpio_set_value(gpio + TWL4030_GPIO_MAX + 1, 0);
+	} else
+		pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_GREEN\n");
+#else
+	igep2_gpio_leds[3].gpio = gpio + TWL4030_GPIO_MAX + 1;
+#endif
+
 	return 0;
 };
 
-static struct twl4030_gpio_platform_data igep2_gpio_data = {
+static struct twl4030_gpio_platform_data igep2_twl4030_gpio_pdata = {
 	.gpio_base	= OMAP_MAX_GPIO_LINES,
 	.irq_base	= TWL4030_GPIO_IRQ_BASE,
 	.irq_end	= TWL4030_GPIO_IRQ_END,
-	.use_leds	= false,
+	.use_leds	= true,
 	.setup		= igep2_twl_gpio_setup,
 };
 
@@ -371,47 +454,6 @@ static void __init igep2_display_init(void)
 		pr_err("IGEP v2: Could not obtain gpio GPIO_DVI_PUP\n");
 }
 
-#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
-#include <linux/leds.h>
-
-static struct gpio_led igep2_gpio_leds[] = {
-	{
-		.name = "led0:red",
-		.gpio = IGEP2_GPIO_LED0_RED,
-	},
-	{
-		.name = "led0:green",
-		.default_trigger = "heartbeat",
-		.gpio = IGEP2_GPIO_LED0_GREEN,
-	},
-	{
-		.name = "led1:red",
-		.gpio = IGEP2_GPIO_LED1_RED,
-	},
-};
-
-static struct gpio_led_platform_data igep2_led_pdata = {
-	.leds           = igep2_gpio_leds,
-	.num_leds       = ARRAY_SIZE(igep2_gpio_leds),
-};
-
-static struct platform_device igep2_led_device = {
-	 .name   = "leds-gpio",
-	 .id     = -1,
-	 .dev    = {
-		 .platform_data  =  &igep2_led_pdata,
-	},
-};
-
-static void __init igep2_init_led(void)
-{
-	platform_device_register(&igep2_led_device);
-}
-
-#else
-static inline void igep2_init_led(void) {}
-#endif
-
 static struct platform_device *igep2_devices[] __initdata = {
 	&igep2_dss_device,
 };
@@ -441,7 +483,7 @@ static struct twl4030_platform_data igep2_twldata = {
 	/* platform_data for children goes here */
 	.usb		= &igep2_usb_data,
 	.codec		= &igep2_codec_data,
-	.gpio		= &igep2_gpio_data,
+	.gpio		= &igep2_twl4030_gpio_pdata,
 	.vmmc1          = &igep2_vmmc1,
 	.vmmc2		= &igep2_vmmc2,
 	.vpll2		= &igep2_vpll2,
@@ -502,34 +544,10 @@ static void __init igep2_init(void)
 	usb_ehci_init(&ehci_pdata);
 
 	igep2_flash_init();
-	igep2_init_led();
+	igep2_leds_init();
 	igep2_display_init();
 	igep2_init_smsc911x();
 
-	/* GPIO userspace leds */
-#if !defined(CONFIG_LEDS_GPIO) && !defined(CONFIG_LEDS_GPIO_MODULE)
-	if ((gpio_request(IGEP2_GPIO_LED0_RED, "led0:red") == 0) &&
-	    (gpio_direction_output(IGEP2_GPIO_LED0_RED, 1) == 0)) {
-		gpio_export(IGEP2_GPIO_LED0_RED, 0);
-		gpio_set_value(IGEP2_GPIO_LED0_RED, 0);
-	} else
-		pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_RED\n");
-
-	if ((gpio_request(IGEP2_GPIO_LED0_GREEN, "led0:green") == 0) &&
-	    (gpio_direction_output(IGEP2_GPIO_LED0_GREEN, 1) == 0)) {
-		gpio_export(IGEP2_GPIO_LED0_GREEN, 0);
-		gpio_set_value(IGEP2_GPIO_LED0_GREEN, 0);
-	} else
-		pr_warning("IGEP v2: Could not obtain gpio GPIO_LED0_GREEN\n");
-
-	if ((gpio_request(IGEP2_GPIO_LED1_RED, "led1:red") == 0) &&
-	    (gpio_direction_output(IGEP2_GPIO_LED1_RED, 1) == 0)) {
-		gpio_export(IGEP2_GPIO_LED1_RED, 0);
-		gpio_set_value(IGEP2_GPIO_LED1_RED, 0);
-	} else
-		pr_warning("IGEP v2: Could not obtain gpio GPIO_LED1_RED\n");
-#endif
-
 	/* GPIO W-LAN + Bluetooth combo module */
 	if ((gpio_request(IGEP2_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) &&
 	    (gpio_direction_output(IGEP2_GPIO_WIFI_NPD, 1) == 0)) {
-- 
1.7.0.4

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

* [PATCHv3 3/6] omap3: Introduce function to detect the IGEP v2 hardware revision.
  2010-10-01 21:09 [PATCHv3 0/6] omap3: Various fixes and improvements for IGEP v2 board Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on " Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 2/6] omap3: fix and improve the LED handling " Enric Balletbo i Serra
@ 2010-10-01 21:09 ` Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 4/6] omap3: Fix handling some GPIO's for WLAN-BT combo on IGEP v2 Enric Balletbo i Serra
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 11+ messages in thread
From: Enric Balletbo i Serra @ 2010-10-01 21:09 UTC (permalink / raw)
  To: linux-arm-kernel

There are currently two versions of IGEP v2 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    |
  --------------------------

Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.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 83a30ce..ddb46a3 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 (hwrev == 0) {
+			pr_info("IGEP2: Hardware Revision C (B-NON compatible)\n");
+			hwrev = IGEP2_BOARD_HWREV_C;
+		} else if (hwrev ==  1) {
+			pr_info("IGEP2: Hardware Revision B/C (B compatible)\n");
+			hwrev = IGEP2_BOARD_HWREV_B;
+		} else {
+			pr_err("IGEP2: Unknow Hardware Revision\n");
+			hwrev = -1;
+		}
+	} else {
+		pr_warning("IGEP2: Could not obtain gpio GPIO_HW0_REV\n");
+		pr_err("IGEP2: Unknow 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();
-- 
1.7.0.4

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

* [PATCHv3 4/6] omap3: Fix handling some GPIO's for WLAN-BT combo on IGEP v2.
  2010-10-01 21:09 [PATCHv3 0/6] omap3: Various fixes and improvements for IGEP v2 board Enric Balletbo i Serra
                   ` (2 preceding siblings ...)
  2010-10-01 21:09 ` [PATCHv3 3/6] omap3: Introduce function to detect the IGEP v2 hardware revision Enric Balletbo i Serra
@ 2010-10-01 21:09 ` Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 5/6] omap3: Add i2c eeprom driver to read EDID " Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 6/6] omap3: Remove VMMC2 regulator " Enric Balletbo i Serra
  5 siblings, 0 replies; 11+ messages in thread
From: Enric Balletbo i Serra @ 2010-10-01 21:09 UTC (permalink / raw)
  To: linux-arm-kernel

Some GPIO's used by WLAN-BT combo on IGEP v2 depends on hardware
revision. This patch handles these GPIO's.

  ----------------------------------------------------------
 |       Hw Rev.       | WIFI_NPD | WIFI_NRESET | BT_NRESET |
  ----------------------------------------------------------
 |  B                  | gpio94  |   gpio95    |     -      |
 |  B/C (B-compatible) | gpio94  |   gpio95    |  gpio137   |
 |  C                  | gpio138 |   gpio139   |  gpio137   |
  ----------------------------------------------------------

Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
---
 arch/arm/mach-omap2/board-igep0020.c |   94 ++++++++++++++++++++++++----------
 1 files changed, 67 insertions(+), 27 deletions(-)

diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index ddb46a3..ad4bcb1 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -38,22 +38,28 @@
 #define IGEP2_SMSC911X_CS       5
 #define IGEP2_SMSC911X_GPIO     176
 #define IGEP2_GPIO_USBH_NRESET  24
-#define IGEP2_GPIO_LED0_GREEN 	26
-#define IGEP2_GPIO_LED0_RED 	27
-#define IGEP2_GPIO_LED1_RED   	28
-#define IGEP2_GPIO_DVI_PUP	170
-#define IGEP2_GPIO_WIFI_NPD 	94
-#define IGEP2_GPIO_WIFI_NRESET 	95
+#define IGEP2_GPIO_LED0_GREEN   26
+#define IGEP2_GPIO_LED0_RED     27
+#define IGEP2_GPIO_LED1_RED     28
+#define IGEP2_GPIO_DVI_PUP      170
+
+#define IGEP2_RB_GPIO_WIFI_NPD     94
+#define IGEP2_RB_GPIO_WIFI_NRESET  95
+#define IGEP2_RB_GPIO_BT_NRESET    137
+#define IGEP2_RC_GPIO_WIFI_NPD     138
+#define IGEP2_RC_GPIO_WIFI_NRESET  139
+#define IGEP2_RC_GPIO_BT_NRESET    137
 
 /*
  * IGEP2 Hardware Revision Table
  *
- *  --------------------------
- * | Id. | Hw Rev. | HW0 (28) |
- *  --------------------------
- * |  0  |   B/C   |   high   |
- * |  1  |   C     |   low    |
- *  --------------------------
+ *  --------------------------------------------------------------------------
+ * | Id. | Hw Rev.            | HW0 (28) | WIFI_NPD | WIFI_NRESET | BT_NRESET |
+ *  --------------------------------------------------------------------------
+ * |  0  | B                  |   high   |  gpio94  |   gpio95    |     -     |
+ * |  0  | B/C (B-compatible) |   high   |  gpio94  |   gpio95    |  gpio137  |
+ * |  1  | C                  |   low    |  gpio138 |   gpio139   |  gpio137  |
+ *  --------------------------------------------------------------------------
  */
 
 #define IGEP2_BOARD_HWREV_B	0
@@ -295,12 +301,14 @@ static struct omap2_hsmmc_info mmc[] = {
 		.gpio_cd	= -EINVAL,
 		.gpio_wp	= -EINVAL,
 	},
+#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
 	{
 		.mmc		= 2,
 		.wires		= 4,
 		.gpio_cd	= -EINVAL,
 		.gpio_wp	= -EINVAL,
 	},
+#endif
 	{}      /* Terminator */
 };
 
@@ -577,6 +585,48 @@ static struct omap_board_mux board_mux[] __initdata = {
 #define board_mux	NULL
 #endif
 
+#if defined(CONFIG_LIBERTAS_SDIO) || defined(CONFIG_LIBERTAS_SDIO_MODULE)
+
+static void __init igep2_wlan_bt_init(void)
+{
+	unsigned npd, wreset, btreset;
+
+	/* GPIO's for WLAN-BT combo depends on hardware revision */
+	if (hwrev == IGEP2_BOARD_HWREV_B) {
+		npd = IGEP2_RB_GPIO_WIFI_NPD;
+		wreset = IGEP2_RB_GPIO_WIFI_NRESET;
+		btreset = IGEP2_RB_GPIO_BT_NRESET;
+	} else if (hwrev == IGEP2_BOARD_HWREV_B) {
+		npd = IGEP2_RC_GPIO_WIFI_NPD;
+		wreset = IGEP2_RC_GPIO_WIFI_NRESET;
+		btreset = IGEP2_RC_GPIO_BT_NRESET;
+	} else
+		return;
+
+	/* Set GPIO's for  WLAN-BT combo module */
+	if ((gpio_request(npd, "GPIO_WIFI_NPD") == 0) &&
+	    (gpio_direction_output(npd, 1) == 0)) {
+		gpio_export(npd, 0);
+	} else
+		pr_warning("IGEP2: Could not obtain gpio GPIO_WIFI_NPD\n");
+
+	if ((gpio_request(wreset, "GPIO_WIFI_NRESET") == 0) &&
+	    (gpio_direction_output(wreset, 1) == 0)) {
+		gpio_export(wreset, 0);
+		gpio_set_value(wreset, 0);
+		udelay(10);
+		gpio_set_value(wreset, 1);
+	} else
+		pr_warning("IGEP2: Could not obtain gpio GPIO_WIFI_NRESET\n");
+
+	if ((gpio_request(btreset, "GPIO_BT_NRESET") == 0) &&
+	    (gpio_direction_output(btreset, 1) == 0)) {
+		gpio_export(btreset, 0);
+	} else
+		pr_warning("IGEP2: Could not obtain gpio GPIO_BT_NRESET\n");
+}
+#endif
+
 static void __init igep2_init(void)
 {
 	omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
@@ -595,22 +645,12 @@ static void __init igep2_init(void)
 	igep2_display_init();
 	igep2_init_smsc911x();
 
-	/* GPIO W-LAN + Bluetooth combo module */
-	if ((gpio_request(IGEP2_GPIO_WIFI_NPD, "GPIO_WIFI_NPD") == 0) &&
-	    (gpio_direction_output(IGEP2_GPIO_WIFI_NPD, 1) == 0)) {
-		gpio_export(IGEP2_GPIO_WIFI_NPD, 0);
-/* 		gpio_set_value(IGEP2_GPIO_WIFI_NPD, 0); */
-	} else
-		pr_warning("IGEP v2: Could not obtain gpio GPIO_WIFI_NPD\n");
+	/*
+	 * WLAN-BT combo module from MuRata wich has a Marvell WLAN
+	 * (88W8686) + CSR Bluetooth chipset. Uses SDIO interface.
+	 */
+	igep2_wlan_bt_init();
 
-	if ((gpio_request(IGEP2_GPIO_WIFI_NRESET, "GPIO_WIFI_NRESET") == 0) &&
-	    (gpio_direction_output(IGEP2_GPIO_WIFI_NRESET, 1) == 0)) {
-		gpio_export(IGEP2_GPIO_WIFI_NRESET, 0);
-		gpio_set_value(IGEP2_GPIO_WIFI_NRESET, 0);
-		udelay(10);
-		gpio_set_value(IGEP2_GPIO_WIFI_NRESET, 1);
-	} else
-		pr_warning("IGEP v2: Could not obtain gpio GPIO_WIFI_NRESET\n");
 }
 
 MACHINE_START(IGEP0020, "IGEP v2 board")
-- 
1.7.0.4

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

* [PATCHv3 5/6] omap3: Add i2c eeprom driver to read EDID on IGEP v2.
  2010-10-01 21:09 [PATCHv3 0/6] omap3: Various fixes and improvements for IGEP v2 board Enric Balletbo i Serra
                   ` (3 preceding siblings ...)
  2010-10-01 21:09 ` [PATCHv3 4/6] omap3: Fix handling some GPIO's for WLAN-BT combo on IGEP v2 Enric Balletbo i Serra
@ 2010-10-01 21:09 ` Enric Balletbo i Serra
  2010-10-01 21:09 ` [PATCHv3 6/6] omap3: Remove VMMC2 regulator " Enric Balletbo i Serra
  5 siblings, 0 replies; 11+ messages in thread
From: Enric Balletbo i Serra @ 2010-10-01 21:09 UTC (permalink / raw)
  To: linux-arm-kernel

Add i2c eeprom driver to access monitor EDID binary information
from user space, something that is required by 'decode-edid' and
'parse-edid'.

Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
---
 arch/arm/mach-omap2/board-igep0020.c |   24 +++++++++++++++++-------
 1 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index ad4bcb1..e253ebc 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -541,7 +541,7 @@ static struct twl4030_platform_data igep2_twldata = {
 
 };
 
-static struct i2c_board_info __initdata igep2_i2c_boardinfo[] = {
+static struct i2c_board_info __initdata igep2_i2c1_boardinfo[] = {
 	{
 		I2C_BOARD_INFO("twl4030", 0x48),
 		.flags		= I2C_CLIENT_WAKE,
@@ -550,13 +550,23 @@ static struct i2c_board_info __initdata igep2_i2c_boardinfo[] = {
 	},
 };
 
+static struct i2c_board_info __initdata igep2_i2c3_boardinfo[] = {
+	{
+		I2C_BOARD_INFO("eeprom", 0x50),
+	},
+};
+
 static int __init igep2_i2c_init(void)
 {
-	omap_register_i2c_bus(1, 2600, igep2_i2c_boardinfo,
-			ARRAY_SIZE(igep2_i2c_boardinfo));
-	/* Bus 3 is attached to the DVI port where devices like the pico DLP
-	 * projector don't work reliably with 400kHz */
-	omap_register_i2c_bus(3, 100, NULL, 0);
+	omap_register_i2c_bus(1, 2600, igep2_i2c1_boardinfo,
+			ARRAY_SIZE(igep2_i2c1_boardinfo));
+	/*
+	 * Bus 3 is attached to the DVI port where devices like the pico DLP
+	 * projector don't work reliably with 400kHz
+	 */
+	omap_register_i2c_bus(3, 100, igep2_i2c3_boardinfo,
+			 ARRAY_SIZE(igep2_i2c3_boardinfo));
+
 	return 0;
 }
 
@@ -633,7 +643,7 @@ static void __init igep2_init(void)
 
 	/* Get IGEP2 hardware revision */
 	igep2_get_revision();
-
+	/* Register I2C busses and drivers */
 	igep2_i2c_init();
 	platform_add_devices(igep2_devices, ARRAY_SIZE(igep2_devices));
 	omap_serial_init();
-- 
1.7.0.4

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

* [PATCHv3 6/6] omap3: Remove VMMC2 regulator on IGEP v2.
  2010-10-01 21:09 [PATCHv3 0/6] omap3: Various fixes and improvements for IGEP v2 board Enric Balletbo i Serra
                   ` (4 preceding siblings ...)
  2010-10-01 21:09 ` [PATCHv3 5/6] omap3: Add i2c eeprom driver to read EDID " Enric Balletbo i Serra
@ 2010-10-01 21:09 ` Enric Balletbo i Serra
  5 siblings, 0 replies; 11+ messages in thread
From: Enric Balletbo i Serra @ 2010-10-01 21:09 UTC (permalink / raw)
  To: linux-arm-kernel

VMMC2 regulator is configured but it's not used for the IGEP v2, so
remove this regulator from board.

Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
---
 arch/arm/mach-omap2/board-igep0020.c |   26 +++-----------------------
 1 files changed, 3 insertions(+), 23 deletions(-)

diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index e253ebc..19187ae 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -260,10 +260,6 @@ static struct regulator_consumer_supply igep2_vmmc1_supply = {
 	.supply		= "vmmc",
 };
 
-static struct regulator_consumer_supply igep2_vmmc2_supply = {
-	.supply		= "vmmc",
-};
-
 /* VMMC1 for OMAP VDD_MMC1 (i/o) and MMC1 card */
 static struct regulator_init_data igep2_vmmc1 = {
 	.constraints = {
@@ -279,21 +275,6 @@ static struct regulator_init_data igep2_vmmc1 = {
 	.consumer_supplies      = &igep2_vmmc1_supply,
 };
 
-/* VMMC2 for OMAP VDD_MMC2 (i/o) and MMC2 WIFI */
-static struct regulator_init_data igep2_vmmc2 = {
-	.constraints = {
-		.min_uV			= 1850000,
-		.max_uV			= 3150000,
-		.valid_modes_mask	= REGULATOR_MODE_NORMAL
-					| REGULATOR_MODE_STANDBY,
-		.valid_ops_mask		= REGULATOR_CHANGE_VOLTAGE
-					| REGULATOR_CHANGE_MODE
-					| REGULATOR_CHANGE_STATUS,
-	},
-	.num_consumer_supplies  = 1,
-	.consumer_supplies      = &igep2_vmmc2_supply,
-};
-
 static struct omap2_hsmmc_info mmc[] = {
 	{
 		.mmc		= 1,
@@ -390,11 +371,11 @@ static int igep2_twl_gpio_setup(struct device *dev,
 	mmc[0].gpio_cd = gpio + 0;
 	omap2_hsmmc_init(mmc);
 
-	/* link regulators to MMC adapters ... we "know" the
+	/*
+	 * link regulators to MMC adapters ... we "know" the
 	 * regulators will be set up only *after* we return.
-	*/
+	 */
 	igep2_vmmc1_supply.dev = mmc[0].dev;
-	igep2_vmmc2_supply.dev = mmc[1].dev;
 
 	/*
 	 * REVISIT: need ehci-omap hooks for external VBUS
@@ -536,7 +517,6 @@ static struct twl4030_platform_data igep2_twldata = {
 	.codec		= &igep2_codec_data,
 	.gpio		= &igep2_twl4030_gpio_pdata,
 	.vmmc1          = &igep2_vmmc1,
-	.vmmc2		= &igep2_vmmc2,
 	.vpll2		= &igep2_vpll2,
 
 };
-- 
1.7.0.4

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

* [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on IGEP v2 board.
  2010-10-01 21:09 ` [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on " Enric Balletbo i Serra
@ 2010-10-02  8:04   ` David Cohen
  2010-10-02 10:12     ` Enric Balletbò i Serra
  0 siblings, 1 reply; 11+ messages in thread
From: David Cohen @ 2010-10-02  8:04 UTC (permalink / raw)
  To: linux-arm-kernel

Hi,

On Fri, Oct 01, 2010 at 11:09:04PM +0200, ext Enric Balletbo i Serra wrote:
> GPIO for various devices are missing from the board initialization.
> This patch adds support for the VBUS and over current gpios.  Without this
> patch, input/outputs from these two sources are ignored.
> 
> Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
> ---
>  arch/arm/mach-omap2/board-igep0020.c |   16 ++++++++++++++++
>  1 files changed, 16 insertions(+), 0 deletions(-)
> 
> diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
> index 175f043..07dbdb7 100644
> --- a/arch/arm/mach-omap2/board-igep0020.c
> +++ b/arch/arm/mach-omap2/board-igep0020.c
> @@ -274,6 +274,22 @@ static int igep2_twl_gpio_setup(struct device *dev,
>  	igep2_vmmc1_supply.dev = mmc[0].dev;
>  	igep2_vmmc2_supply.dev = mmc[1].dev;
>  
> +	/*
> +	 * REVISIT: need ehci-omap hooks for external VBUS
> +	 * power switch and overcurrent detect
> +	 */
> +	if ((gpio_request(gpio + 1, "GPIO_EHCI_NOC") < 0) ||
> +	    (gpio_direction_input(gpio + 1) < 0))
> +		pr_err("IGEP2: Could not obtain gpio for EHCI NOC");

Shouldb't you return error if it can't request the GPIO?

> +
> +	/*
> +	 * TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN
> +	 * (out, active low)
> +	 */
> +	if ((gpio_request(gpio + TWL4030_GPIO_MAX, "GPIO_USBH_CPEN") < 0) ||
> +	    (gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0) < 0))
> +		pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");

Same here.

> +
>  	return 0;
>  };
>  
> -- 
> 1.7.0.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-omap" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

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

* [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on IGEP v2 board.
  2010-10-02  8:04   ` David Cohen
@ 2010-10-02 10:12     ` Enric Balletbò i Serra
  2010-10-05 10:35       ` David Cohen
  0 siblings, 1 reply; 11+ messages in thread
From: Enric Balletbò i Serra @ 2010-10-02 10:12 UTC (permalink / raw)
  To: linux-arm-kernel

2010/10/2 David Cohen <david.cohen@nokia.com>:
> Hi,
>
> On Fri, Oct 01, 2010 at 11:09:04PM +0200, ext Enric Balletbo i Serra wrote:
>> GPIO for various devices are missing from the board initialization.
>> This patch adds support for the VBUS and over current gpios. ?Without this
>> patch, input/outputs from these two sources are ignored.
>>
>> Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
>> ---
>> ?arch/arm/mach-omap2/board-igep0020.c | ? 16 ++++++++++++++++
>> ?1 files changed, 16 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
>> index 175f043..07dbdb7 100644
>> --- a/arch/arm/mach-omap2/board-igep0020.c
>> +++ b/arch/arm/mach-omap2/board-igep0020.c
>> @@ -274,6 +274,22 @@ static int igep2_twl_gpio_setup(struct device *dev,
>> ? ? ? igep2_vmmc1_supply.dev = mmc[0].dev;
>> ? ? ? igep2_vmmc2_supply.dev = mmc[1].dev;
>>
>> + ? ? /*
>> + ? ? ?* REVISIT: need ehci-omap hooks for external VBUS
>> + ? ? ?* power switch and overcurrent detect
>> + ? ? ?*/
>> + ? ? if ((gpio_request(gpio + 1, "GPIO_EHCI_NOC") < 0) ||
>> + ? ? ? ? (gpio_direction_input(gpio + 1) < 0))
>> + ? ? ? ? ? ? pr_err("IGEP2: Could not obtain gpio for EHCI NOC");
>
> Shouldb't you return error if it can't request the GPIO?

I'm not sure what happens if I return and error, I see only prints a
debug message. Maybe the twl4030-gpio maintainer can explain if I need
return and error or not.

Other omap boards just don't check the gpio_request call and always
return 0. I don't consider this a critical error so maybe should be
better replace the pr_err with a pr_warning.

>
>> +
>> + ? ? /*
>> + ? ? ?* TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN
>> + ? ? ?* (out, active low)
>> + ? ? ?*/
>> + ? ? if ((gpio_request(gpio + TWL4030_GPIO_MAX, "GPIO_USBH_CPEN") < 0) ||
>> + ? ? ? ? (gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0) < 0))
>> + ? ? ? ? ? ? pr_err("IGEP2: Could not obtain gpio for USBH_CPEN");
>
> Same here.
>
>> +
>> ? ? ? return 0;
>> ?};
>>

Kind regards,
  Enric

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

* [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on IGEP v2 board.
  2010-10-02 10:12     ` Enric Balletbò i Serra
@ 2010-10-05 10:35       ` David Cohen
  2010-10-05 14:28         ` Enric Balletbò i Serra
  0 siblings, 1 reply; 11+ messages in thread
From: David Cohen @ 2010-10-05 10:35 UTC (permalink / raw)
  To: linux-arm-kernel

On Sat, Oct 02, 2010 at 12:12:32PM +0200, ext Enric Balletb? i Serra wrote:
> 2010/10/2 David Cohen <david.cohen@nokia.com>:
> > Hi,
> >
> > On Fri, Oct 01, 2010 at 11:09:04PM +0200, ext Enric Balletbo i Serra wrote:
> >> GPIO for various devices are missing from the board initialization.
> >> This patch adds support for the VBUS and over current gpios. ?Without this
> >> patch, input/outputs from these two sources are ignored.
> >>
> >> Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
> >> ---
> >> ?arch/arm/mach-omap2/board-igep0020.c | ? 16 ++++++++++++++++
> >> ?1 files changed, 16 insertions(+), 0 deletions(-)
> >>
> >> diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
> >> index 175f043..07dbdb7 100644
> >> --- a/arch/arm/mach-omap2/board-igep0020.c
> >> +++ b/arch/arm/mach-omap2/board-igep0020.c
> >> @@ -274,6 +274,22 @@ static int igep2_twl_gpio_setup(struct device *dev,
> >> ? ? ? igep2_vmmc1_supply.dev = mmc[0].dev;
> >> ? ? ? igep2_vmmc2_supply.dev = mmc[1].dev;
> >>
> >> + ? ? /*
> >> + ? ? ?* REVISIT: need ehci-omap hooks for external VBUS
> >> + ? ? ?* power switch and overcurrent detect
> >> + ? ? ?*/
> >> + ? ? if ((gpio_request(gpio + 1, "GPIO_EHCI_NOC") < 0) ||
> >> + ? ? ? ? (gpio_direction_input(gpio + 1) < 0))
> >> + ? ? ? ? ? ? pr_err("IGEP2: Could not obtain gpio for EHCI NOC");
> >
> > Shouldb't you return error if it can't request the GPIO?
> 
> I'm not sure what happens if I return and error, I see only prints a
> debug message. Maybe the twl4030-gpio maintainer can explain if I need
> return and error or not.
> 
> Other omap boards just don't check the gpio_request call and always
> return 0. I don't consider this a critical error so maybe should be
> better replace the pr_err with a pr_warning.

I checked some board files and it seems they're not verifying gpio_request()
results most of the times. But if you check board-omap3pandor.c, it's
been done in a better way.

Br,

David

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

* [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on IGEP v2 board.
  2010-10-05 10:35       ` David Cohen
@ 2010-10-05 14:28         ` Enric Balletbò i Serra
  0 siblings, 0 replies; 11+ messages in thread
From: Enric Balletbò i Serra @ 2010-10-05 14:28 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

2010/10/5 David Cohen <david.cohen@nokia.com>:
> On Sat, Oct 02, 2010 at 12:12:32PM +0200, ext Enric Balletb? i Serra wrote:
>> 2010/10/2 David Cohen <david.cohen@nokia.com>:
>> > Hi,
>> >
>> > On Fri, Oct 01, 2010 at 11:09:04PM +0200, ext Enric Balletbo i Serra wrote:
>> >> GPIO for various devices are missing from the board initialization.
>> >> This patch adds support for the VBUS and over current gpios. ?Without this
>> >> patch, input/outputs from these two sources are ignored.
>> >>
>> >> Signed-off-by: Enric Balletbo i Serra <eballetbo@gmail.com>
>> >> ---
>> >> ?arch/arm/mach-omap2/board-igep0020.c | ? 16 ++++++++++++++++
>> >> ?1 files changed, 16 insertions(+), 0 deletions(-)
>> >>
>> >> diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
>> >> index 175f043..07dbdb7 100644
>> >> --- a/arch/arm/mach-omap2/board-igep0020.c
>> >> +++ b/arch/arm/mach-omap2/board-igep0020.c
>> >> @@ -274,6 +274,22 @@ static int igep2_twl_gpio_setup(struct device *dev,
>> >> ? ? ? igep2_vmmc1_supply.dev = mmc[0].dev;
>> >> ? ? ? igep2_vmmc2_supply.dev = mmc[1].dev;
>> >>
>> >> + ? ? /*
>> >> + ? ? ?* REVISIT: need ehci-omap hooks for external VBUS
>> >> + ? ? ?* power switch and overcurrent detect
>> >> + ? ? ?*/
>> >> + ? ? if ((gpio_request(gpio + 1, "GPIO_EHCI_NOC") < 0) ||
>> >> + ? ? ? ? (gpio_direction_input(gpio + 1) < 0))
>> >> + ? ? ? ? ? ? pr_err("IGEP2: Could not obtain gpio for EHCI NOC");
>> >
>> > Shouldb't you return error if it can't request the GPIO?
>>
>> I'm not sure what happens if I return and error, I see only prints a
>> debug message. Maybe the twl4030-gpio maintainer can explain if I need
>> return and error or not.
>>
>> Other omap boards just don't check the gpio_request call and always
>> return 0. I don't consider this a critical error so maybe should be
>> better replace the pr_err with a pr_warning.
>
> I checked some board files and it seems they're not verifying gpio_request()
> results most of the times. But if you check board-omap3pandor.c, it's
> been done in a better way.
>

I think so, looks a better way. I'll introduce this in a future patch,

There are many GPIO's in board-igep* so I think should be better
introduce these changes in a new patch. Thanks for you comments.

Best regards,

  Enric

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

end of thread, other threads:[~2010-10-05 14:28 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-01 21:09 [PATCHv3 0/6] omap3: Various fixes and improvements for IGEP v2 board Enric Balletbo i Serra
2010-10-01 21:09 ` [PATCHv3 1/6] omap3: Add external VBUS power switch and overcurrent detect on " Enric Balletbo i Serra
2010-10-02  8:04   ` David Cohen
2010-10-02 10:12     ` Enric Balletbò i Serra
2010-10-05 10:35       ` David Cohen
2010-10-05 14:28         ` Enric Balletbò i Serra
2010-10-01 21:09 ` [PATCHv3 2/6] omap3: fix and improve the LED handling " Enric Balletbo i Serra
2010-10-01 21:09 ` [PATCHv3 3/6] omap3: Introduce function to detect the IGEP v2 hardware revision Enric Balletbo i Serra
2010-10-01 21:09 ` [PATCHv3 4/6] omap3: Fix handling some GPIO's for WLAN-BT combo on IGEP v2 Enric Balletbo i Serra
2010-10-01 21:09 ` [PATCHv3 5/6] omap3: Add i2c eeprom driver to read EDID " Enric Balletbo i Serra
2010-10-01 21:09 ` [PATCHv3 6/6] omap3: Remove VMMC2 regulator " Enric Balletbo i Serra

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).