* [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).