linux-2.6-windriver: Beagleboard revision detection and gpio write-protect mapping
Subsystems (3)
cover linux-2.6-windriver: Beagleboard revision detection and gpio write-protect mapping
The existing board detection doesn't work for all board types. The GPIO pins are mapped differently, particularly the SD card write-protect lines. These patches fix a boot hang on the Beagleboard xM due to the xM using a micro SD which doesn't have WP lines.
The following patches already exist in mainline and apply without modification to the linux-2.6-windriver git tree.
Please merge dvhart/beagleboard-standard with beagleboard-standard.
Pull URL: git://git.pokylinux.org/linux-2.6-windriver-contrib.git
Branch: dvhart/beagleboard-standard
Browse: http://git.pokylinux.org/cgit.cgi/linux-2.6-windriver-contrib/log/?h=dvhart/beagleboard-standard
Thanks,
Darren Hart <[email protected]>
---
Robert Nelson (3):
omap: Beagle: revision detection
omap: Beagle: only Cx boards use pin 23 for write protect
omap: Beagle: no gpio_wp pin connection on xM
arch/arm/mach-omap2/board-omap3beagle.c | 93 ++++++++++++++++++++++++++++++- 1 files changed, 92 insertions(+), 1 deletions(-)
PATCH 1/3 omap: Beagle: revision detection
Due to the omap3530 ES3.0 Silicon being used on both the B5/B6 and C1/2/3 Beagle we can't use the cpu_is_omap34xx() routines to differentiate the Beagle Boards.
However gpio pins 171,172,173 where setup for this prupose, so lets use them.
Changes:
for older U-Boot's, use omap_mux_init_gpio()
keep Beagle Rev in board-omap3beagle.cgpio_free on gpio request failure
Tested on Beagle Revisions: B5, C2, C4, and xMA
--- arch/arm/mach-omap2/board-omap3beagle.c | 88 +++++++++++++++++++++++++++++++ 1 files changed, 88 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +88 -0
@@ -52,6 +52,93 @@#define NAND_BLOCK_SIZE SZ_128K +/* +* OMAP3 Beagle revision +* Run time detection of Beagle revision is done by reading GPIO. +* GPIO ID - +* AXBX = GPIO173, GPIO172, GPIO171: 1 1 1 +* C1_3 = GPIO173, GPIO172, GPIO171: 1 1 0 +* C4 = GPIO173, GPIO172, GPIO171: 1 0 1 +* XM = GPIO173, GPIO172, GPIO171: 0 0 0 +*/ +enum { +OMAP3BEAGLE_BOARD_UNKN =0 , +OMAP3BEAGLE_BOARD_AXBX , +OMAP3BEAGLE_BOARD_C1_3 , +OMAP3BEAGLE_BOARD_C4 , +OMAP3BEAGLE_BOARD_XM , +}; + +static u8 omap3_beagle_version; + +static u8 omap3_beagle_get_rev (void ) +{ +return omap3_beagle_version; +} + +static void __init omap3_beagle_init_rev (void ) +{ +int ret; +u16 beagle_rev =0 ; + +omap_mux_init_gpio (171 ,OMAP_PIN_INPUT_PULLUP ); +omap_mux_init_gpio (172 ,OMAP_PIN_INPUT_PULLUP ); +omap_mux_init_gpio (173 ,OMAP_PIN_INPUT_PULLUP ); + + ret =gpio_request (171 ,"rev_id_0" ); +if (ret <0 ) + goto fail0; + + ret =gpio_request (172 ,"rev_id_1" ); +if (ret <0 ) + goto fail1; + + ret =gpio_request (173 ,"rev_id_2" ); +if (ret <0 ) + goto fail2; + +gpio_direction_input (171 ); +gpio_direction_input (172 ); +gpio_direction_input (173 ); + + beagle_rev =gpio_get_value (171 ) | (gpio_get_value (172 ) <<1 ) + | (gpio_get_value (173 ) <<2 ); + +switch (beagle_rev) { +case 7 : +printk (KERN_INFO "OMAP3 Beagle Rev: Ax/Bx\n" ); + omap3_beagle_version =OMAP3BEAGLE_BOARD_AXBX ; +break ; +case 6 : +printk (KERN_INFO "OMAP3 Beagle Rev: C1/C2/C3\n" ); + omap3_beagle_version =OMAP3BEAGLE_BOARD_C1_3 ; +break ; +case 5 : +printk (KERN_INFO "OMAP3 Beagle Rev: C4\n" ); + omap3_beagle_version =OMAP3BEAGLE_BOARD_C4 ; +break ; +case 0 : +printk (KERN_INFO "OMAP3 Beagle Rev: xM\n" ); + omap3_beagle_version =OMAP3BEAGLE_BOARD_XM ; +break ; +default : +printk (KERN_INFO "OMAP3 Beagle Rev: unknown %hd\n" , beagle_rev); + omap3_beagle_version =OMAP3BEAGLE_BOARD_UNKN ; + } + +return ; + +fail2: +gpio_free (172 ); +fail1: +gpio_free (171 ); +fail0: +printk (KERN_ERR "Unable to get revision detection GPIO pins\n" ); + omap3_beagle_version =OMAP3BEAGLE_BOARD_UNKN ; + +return ; +} +static struct mtd_partition omap3beagle_nand_partitions[] = {/* All the partition sizes are listed in terms of NAND block size */ {
@@ -439,6 +526,7 @@ static struct omap_musb_board_data musb_board_data = {static void __init omap3_beagle_init (void ) {omap3_mux_init (board_mux,OMAP_PACKAGE_CBB ); +omap3_beagle_init_rev ();omap3_beagle_i2c_init ();platform_add_devices (omap3_beagle_devices,ARRAY_SIZE (omap3_beagle_devices));
Signature · 1 line
1.7.1
PATCH 2/3 omap: Beagle: only Cx boards use pin 23 for write protect
In reply to Darren Hartsystem_rev comes from u-boot and is a constant 0x20, so Bx boards also fall in this 'if' and will get setup with the wrong gpio_wp pin. Switch to using the Beagle revision routine to correcly set pin 23 only for C1/2/3 and C4 Boards. Bx boards will then use the correct default pin setting.
--- arch/arm/mach-omap2/board-omap3beagle.c | 3 ++- 1 files changed, 2 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +2 -1
@@ -226,7 +226,8 @@ static struct gpio_led gpio_leds[];static int beagle_twl_gpio_setup (struct device *dev,unsigned gpio,unsigned ngpio) { -if (system_rev >=0x20 && system_rev <=0x34301000 ) { +if ((omap3_beagle_get_rev () ==OMAP3BEAGLE_BOARD_C1_3 ) || + (omap3_beagle_get_rev () ==OMAP3BEAGLE_BOARD_C4 )) {omap_mux_init_gpio (23 ,OMAP_PIN_INPUT ); mmc[0 ].gpio_wp =23 ; }else {
Signature · 1 line
1.7.1
PATCH 3/3 omap: Beagle: no gpio_wp pin connection on xM
In reply to Darren HartThe omap3630 based BeagleBoard xM uses a MicroSD card slot with no write protection.
--- arch/arm/mach-omap2/board-omap3beagle.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +3 -1
@@ -226,7 +226,9 @@ static struct gpio_led gpio_leds[];static int beagle_twl_gpio_setup (struct device *dev,unsigned gpio,unsigned ngpio) { -if ((omap3_beagle_get_rev () ==OMAP3BEAGLE_BOARD_C1_3 ) || +if (omap3_beagle_get_rev () ==OMAP3BEAGLE_BOARD_XM ) { + mmc[0 ].gpio_wp = -EINVAL ; + }else if ((omap3_beagle_get_rev () ==OMAP3BEAGLE_BOARD_C1_3 ) || (omap3_beagle_get_rev () ==OMAP3BEAGLE_BOARD_C4 )) {omap_mux_init_gpio (23 ,OMAP_PIN_INPUT ); mmc[0 ].gpio_wp =23 ;
Signature · 1 line
1.7.1
Quoted 9 lines · Darren Hart
The existing board detection doesn't work for all board types. The GPIO pins are mapped differently, particularly the SD card write-protect lines. These patches fix a boot hang on the Beagleboard xM due to the xM using a micro SD which doesn't have WP lines.
The following patches already exist in mainline and apply without modification to the linux-2.6-windriver git tree.
Please merge dvhart/beagleboard-standard with beagleboard-standard.
Grabbed them and amended with the upstream commit IDs for tracking. SRCREV bumps shortly. My build worked here.
Bruce
Quoted 23 lines
Pull URL:
git://git.pokylinux.org/linux-2.6-windriver-contrib.git
Branch: dvhart/beagleboard-standard
Browse: http://git.pokylinux.org/cgit.cgi/linux-2.6-windriver-contrib/log/?h=dvhart/beagleboard-standardThanks,
Darren Hart <[email protected]>
---Robert Nelson (3):
omap: Beagle: revision detection
omap: Beagle: only Cx boards use pin 23 for write protect
omap: Beagle: nogpio_wppin connection on xMarch/arm/mach-omap2/board-omap3beagle.c | 93 ++++++++++++++++++++++++++++++-
1 files changed, 92 insertions(+), 1 deletions(-)_______________________________________________
poky mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/poky
Signature · 2 lines
"Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end"