omap3: Various fixes and improvements for IGEP v2 board.
Subsystems (3)
v2 cover omap3: Various fixes and improvements for IGEP v2 board.
Hello,
This is the second version of a patch series to fix and improve the IGEP v2 support, in this version I only added proper patch descriptions.
Please consider to add in next merge window, thanks.
Kind regards,
Enric
PATCH v2 1/6 omap3: Add external VBUS power switch and overcurrent detect on IGEP v2 board.
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.
--- arch/arm/mach-omap2/board-igep0020.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-igep0020.c +14 -0
@@ -274,6 +274,20 @@ 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 +*/ +gpio_request (gpio +1 ,"GPIO_EHCI_NOC" ); +gpio_direction_input (gpio +1 ); + +/* +* TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN +* (out, active low) +*/ +gpio_request (gpio +TWL4030_GPIO_MAX ,0 ); +gpio_direction_output (gpio +TWL4030_GPIO_MAX ,0 ); +return 0 ; };
Signature · 1 line
1.7.0.4
Tony Lindgren
maintainerRe: [PATCHv2 1/6] omap3: Add external VBUS power switch and overcurrent detect on IGEP v2 board.
Quoted 23 lines · Enric Balletbo i Serra
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 <[email protected]>--- arch/arm/mach-omap2/board-igep0020.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)arch/arm/mach-omap2/board-igep0020.c +6
-0@@ -274,6 +274,20 @@ 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 +*/ +gpio_request (gpio +1 ,"GPIO_EHCI_NOC" ); +gpio_direction_input (gpio +1 );
arch/arm/mach-omap2/board-igep0020.c static int igep2_twl_gpio_setup(struct device *dev, · line 292
Quoted 10 lines
arch/arm/mach-omap2/board-igep0020.c +8
-0+ +/* +* TWL4030_GPIO_MAX + 0 == ledA, GPIO_USBH_CPEN +* (out, active low) +*/ +gpio_request (gpio +TWL4030_GPIO_MAX ,0 ); +gpio_direction_output (gpio +TWL4030_GPIO_MAX ,0 ); +return 0 ; };
Please check the result value.. gpio_request can fail.
Tony
PATCH v2 2/6 omap3: fix and improve the LED handling on IGEP v2 board.
In reply to Enric Balletbo i SerraThe 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.
--- arch/arm/mach-omap2/board-igep0020.c | 156 +++++++++++++++++++--------------- 1 files changed, 87 insertions(+), 69 deletions(-)
arch/arm/mach-omap2/board-igep0020.c +87 -69
@@ -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) {
@@ -288,14 +359,26 @@ static int igep2_twl_gpio_setup(struct device *dev,gpio_request (gpio +TWL4030_GPIO_MAX ,0 );gpio_direction_output (gpio +TWL4030_GPIO_MAX ,0 ); +/* 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, };
@@ -369,47 +452,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, };
@@ -439,7 +481,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,
@@ -500,34 +542,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 )) {
Signature · 1 line
1.7.0.4
Tony Lindgren
maintainerRe: [PATCHv2 2/6] omap3: fix and improve the LED handling on IGEP v2 board.
Quoted 33 lines · Enric Balletbo i Serra
The IGEP v2 board has four leds, this patch allows control all of these LEDs using the LED class if
CONFIG_LEDS_GPIOis selected or using the General Purpose Input/Output (GPIO) interface ifCONFIG_LEDS_GPIOis not selected.Signed-off-by Enric Balletbo i Serra <[email protected]>--- arch/arm/mach-omap2/board-igep0020.c | 156 +++++++++++++++++++--------------- 1 files changed, 87 insertions(+), 69 deletions(-)arch/arm/mach-omap2/board-igep0020.c +15
-0@@ -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] = {
arch/arm/mach-omap2/board-igep0020.c static struct omap2_hsmmc_info mmc[] = { · line 288
Quoted 10 lines
arch/arm/mach-omap2/board-igep0020.c +10
-0+ .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 */ + }, +};
Please align the igep2_gpio_leds with tabs like you do already below.
Regards,
Tony
PATCH v2 3/6 omap3: Introduce function to detect the IGEP v2 hardware revision.
In reply to Enric Balletbo i SerraThere 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 |
--------------------------
--- arch/arm/mach-omap2/board-igep0020.c | 47 ++++++++++++++++++++++++++++++++++ 1 files changed, 47 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-igep0020.c +47 -0
@@ -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 )
@@ -535,6 +578,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 ();
Signature · 1 line
1.7.0.4
RE: [PATCHv2 3/6] omap3: Introduce function to detect the IGEP v2 hardware revision.
Quoted 63 lines
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Enric Balletbo i Serra
Sent: Saturday, October 02, 2010 1:16 AM
To: [email protected]
Cc: Enric Balletbo i Serra
Subject: [PATCHv2 3/6] omap3: Introduce function to detect the IGEP v2 hardware revision.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 <[email protected]>--- arch/arm/mach-omap2/board-igep0020.c | 47 ++++++++++++++++++++++++++++++++++ 1 files changed, 47 insertions(+), 0 deletions(-)arch/arm/mach-omap2/board-igep0020.c +25
-0@@ -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 );
arch/arm/mach-omap2/board-igep0020.c line 82
Quoted 10 lines
arch/arm/mach-omap2/board-igep0020.c +8
-0+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" );
typo - Unknow
arch/arm/mach-omap2/board-igep0020.c line 85
Quoted 6 lines
arch/arm/mach-omap2/board-igep0020.c +5
-0+ hwrev =-1 ; + } + }else { +pr_warning ("IGEP2: Could not obtain gpio GPIO_HW0_REV\n"); +pr_err ("IGEP2: Unknow Hardware Revision\n" );
Need both the prints?
arch/arm/mach-omap2/board-igep0020.c line 89
Quoted 1 line
arch/arm/mach-omap2/board-igep0020.c +1
-0+ }
typo - Unknow
Quoted 28 lines
arch/arm/mach-omap2/board-igep0020.c +4
-0+ +gpio_free (IGEP2_GPIO_LED1_RED ); +} +#if
defined(CONFIG_MTD_ONENAND_OMAP2)|| \arch/arm/mach-omap2/board-igep0020.c +4
-0defined (CONFIG_MTD_ONENAND_OMAP2_MODULE )@@ -535,6 +578,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();Signature · 7 lines
1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 4/6 omap3: Fix handling some GPIO's for WLAN-BT combo on IGEP v2.
In reply to Enric Balletbo i SerraSome 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 |
----------------------------------------------------------
--- arch/arm/mach-omap2/board-igep0020.c | 94 ++++++++++++++++++++++++---------- 1 files changed, 67 insertions(+), 27 deletions(-)
arch/arm/mach-omap2/board-igep0020.c +67 -27
@@ -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 */ };
@@ -575,6 +583,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 );
@@ -593,22 +643,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" )
Signature · 1 line
1.7.0.4
PATCH v2 5/6 omap3: Add i2c eeprom driver to read EDID on IGEP v2.
In reply to Enric Balletbo i SerraAdd i2c eeprom driver to access monitor EDID binary information from user space, something that is required by 'decode-edid' and 'parse-edid'.
--- arch/arm/mach-omap2/board-igep0020.c | 24 +++++++++++++++++------- 1 files changed, 17 insertions(+), 7 deletions(-)
arch/arm/mach-omap2/board-igep0020.c +17 -7
@@ -539,7 +539,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 ,
@@ -548,13 +548,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 ; }
@@ -631,7 +641,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 ();
Signature · 1 line
1.7.0.4
RE: [PATCHv2 5/6] omap3: Add i2c eeprom driver to read EDID on IGEP v2.
Quoted 53 lines
-----Original Message-----
From: [email protected] [mailto:[email protected]] On Behalf Of Enric Balletbo i Serra
Sent: Saturday, October 02, 2010 1:16 AM
To: [email protected]
Cc: Enric Balletbo i Serra
Subject: [PATCHv2 5/6] omap3: Add i2c eeprom driver to read EDID on IGEP v2.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 <[email protected]>--- arch/arm/mach-omap2/board-igep0020.c | 24 +++++++++++++++++------- 1 files changed, 17 insertions(+), 7 deletions(-)arch/arm/mach-omap2/board-igep0020.c +1
-1@@ -539,7 +539,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 ),arch/arm/mach-omap2/board-igep0020.c +6
-3.flags = I2C_CLIENT_WAKE,@@ -548,13 +548,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
arch/arm/mach-omap2/board-igep0020.c static struct i2c_board_info __initdata igep2_i2c_boardinfo[] = { · line 560
Quoted 4 lines
arch/arm/mach-omap2/board-igep0020.c +2
-2-* 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));
Check for return value.
arch/arm/mach-omap2/board-igep0020.c static struct i2c_board_info __initdata igep2_i2c_boardinfo[] = { · line 566
Quoted 7 lines
arch/arm/mach-omap2/board-igep0020.c +2
-0+/* +* Bus 3 is attached to the DVI port where devices like the pico DLP
arch/arm/mach-omap2/board-igep0020.c +4
-0+* projector don't work reliably with 400kHz +*/ +omap_register_i2c_bus (3 ,100 , igep2_i2c3_boardinfo, +ARRAY_SIZE (igep2_i2c3_boardinfo));
Check for return value.
Quoted 22 lines
arch/arm/mach-omap2/board-igep0020.c +2
-1+return 0 ; }@@ -631,7 +641,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 ();Signature · 7 lines
1.7.0.4 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
PATCH v2 6/6 omap3: Remove VMMC2 regulator on IGEP v2.
In reply to Enric Balletbo i SerraVMMC2 regulator is configured but it's not used for the IGEP v2, so remove this regulator from board.
--- arch/arm/mach-omap2/board-igep0020.c | 26 +++----------------------- 1 files changed, 3 insertions(+), 23 deletions(-)
arch/arm/mach-omap2/board-igep0020.c +3 -23
@@ -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
@@ -534,7 +515,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, };
Signature · 1 line
1.7.0.4
Tony Lindgren
maintainerQuoted 7 lines · Enric Balletbo i Serra
Hello,
This is the second version of a patch series to fix and improve the IGEP v2 support, in this version I only added proper patch descriptions.
Please consider to add in next merge window, thanks.
Looks good except for the few comments I made to the patches.
Can you please repost one more time with linux-arm-kernel Cc'd? That way I don't need to repost your patches before merging.
Regards,
Tony