ARM: OMAP: Beagle: revision detection
Subsystems (3)
PATCH v3 1/3 ARM: 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 since v2:
for older U-Boot's, use omap_mux_init_gpio() over gpio_direction_input() keep Beagle Rev in board-omap3beagle.c
Tested on Beagle Revisions: B5, C2, C4, and xMA
--- arch/arm/mach-omap2/board-omap3beagle.c | 78 +++++++++++++++++++++++++++++++ 1 files changed, 78 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-omap3beagle.c +78 -0
@@ -50,6 +50,83 @@#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_AXBX =0 , +OMAP3BEAGLE_BOARD_C1_3 , +OMAP3BEAGLE_BOARD_C4 , +OMAP3BEAGLE_BOARD_XM , +}; + +static u8 omap3_beagle_version; + +u8 get_omap3_beagle_rev (void ) +{ +return omap3_beagle_version; +} + +static void __init omap3_beagle_get_revision (void ) +{ +int ret; +u16 beagle_rev =0 ; + + ret =gpio_request (171 ,"rev_id_0" ); +if (ret <0 ) + goto fail; + + ret =gpio_request (172 ,"rev_id_1" ); +if (ret <0 ) + goto fail; + + ret =gpio_request (173 ,"rev_id_2" ); +if (ret <0 ) + goto fail; + +/* Older U-Boot's such as 2009.01-dirty don't have the pins +* muxed correctly to use the generic gpio_direction_input(); +*/ +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 ); + + 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_XM ; + } + +return ; +fail: +printk (KERN_ERR "Unable to get revision detection GPIO pins\n" ); +} +static struct mtd_partition omap3beagle_nand_partitions[] = {/* All the partition sizes are listed in terms of NAND block size */ {
@@ -464,6 +541,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_get_revision ();omap3_beagle_i2c_init ();platform_add_devices (omap3_beagle_devices,ARRAY_SIZE (omap3_beagle_devices));
Signature · 1 line
1.7.0.4
PATCH v3 2/3 ARM: OMAP: Beagle: only Cx boards use pin 23 for write protect
system_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
@@ -244,7 +244,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 ((get_omap3_beagle_rev () ==OMAP3BEAGLE_BOARD_C1_3 ) || + (get_omap3_beagle_rev () ==OMAP3BEAGLE_BOARD_C4 )) {omap_mux_init_gpio (23 ,OMAP_PIN_INPUT ); mmc[0 ].gpio_wp =23 ; }else {
Signature · 1 line
1.7.0.4
PATCH v3 3/3 ARM: OMAP: Beagle: no gpio_wp pin connection on xM
In reply to Robert NelsonThe 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
@@ -244,7 +244,9 @@ static struct gpio_led gpio_leds[];static int beagle_twl_gpio_setup (struct device *dev,unsigned gpio,unsigned ngpio) { -if ((get_omap3_beagle_rev () ==OMAP3BEAGLE_BOARD_C1_3 ) || +if (get_omap3_beagle_rev () ==OMAP3BEAGLE_BOARD_XM ) { + mmc[0 ].gpio_wp = -EINVAL ; + }else if ((get_omap3_beagle_rev () ==OMAP3BEAGLE_BOARD_C1_3 ) || (get_omap3_beagle_rev () ==OMAP3BEAGLE_BOARD_C4 )) {omap_mux_init_gpio (23 ,OMAP_PIN_INPUT ); mmc[0 ].gpio_wp =23 ;
Signature · 1 line
1.7.0.4
arch/arm/mach-omap2/board-omap3beagle.c line 99
Quoted 7 lines · On Fri, 13 Aug 2010 07:21:08 -0500 Robert Nelson <[email protected]>…
arch/arm/mach-omap2/board-omap3beagle.c +7
-0+/* Older U-Boot's such as 2009.01-dirty don't have the pins +* muxed correctly to use the generic gpio_direction_input(); +*/ +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 ); +
Comment (and code) is wrong: gpio_direction_input is still required to setup pin direction and letting the gpiolib to setup internal data structures properly. I.e. both mux setup and gpio_direction_input are required.
Signature · 1 line
Jarkko
Quoted 11 lines · Jarkko Nikula
Quoted 7 lines · On Fri, 13 Aug 2010 07:21:08 -0500 Robert Nelson <[email protected]>…
+ /* Older U-Boot's such as 2009.01-dirty don't have the pins
+ * muxed correctly to use the genericgpio_direction_input();
+ */
+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);
+
Quoted 9 lines
Comment (and code) is wrong:
gpio_direction_inputis still required to setup pin direction and letting the gpiolib to setup internal data structures properly. I.e. both mux setup andgpio_direction_inputare required.--
Jarkko
Thanks Jarkko,
I'll add the gpio_direction_input's back.. I assumed those two functions were similar, and it still works probably by mostly luck..
Regards,
Signature · 6 lines
Robert Nelson http://www.rcn-ee.com/ -- 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