Subject: [PATCH] OMAP3: Beagle: Update board revision detection From: Dirk Behme New BeagleBoard revision C4 uses a new ID. Known C4 changes: - Use OMAP3 720MHz devices. - Change in the way the USB Host PHY is powered. Signed-off-by: Dirk Behme --- Note: Due to lack of C4, not tested on C4 yet. board/ti/beagle/beagle.c | 66 +++++++++++++++++++++++++++++------------------ board/ti/beagle/beagle.h | 8 ++++- 2 files changed, 48 insertions(+), 26 deletions(-) Index: u-boot-main/board/ti/beagle/beagle.c =================================================================== --- u-boot-main.orig/board/ti/beagle/beagle.c +++ u-boot-main/board/ti/beagle/beagle.c @@ -38,7 +38,7 @@ #include #include "beagle.h" -static int beagle_revision_c; +static int beagle_revision; /* * Routine: board_init @@ -60,41 +60,59 @@ int board_init(void) /* * Routine: beagle_get_revision * Description: Return the revision of the BeagleBoard this code is running on. - * If it is a revision Ax/Bx board, this function returns 0, - * on a revision C board you will get a 1. */ int beagle_get_revision(void) { - return beagle_revision_c; + return beagle_revision; } /* * Routine: beagle_identify - * Description: Detect if we are running on a Beagle revision Ax/Bx or - * Cx. This can be done by GPIO_171. If this is low, we are - * running on a revision C board. + * Description: Detect if we are running on a Beagle revision Ax/Bx, + * C2, C3 or Cx (x >= 4). This can be done by reading + * the level of GPIO173, GPIO172 and GPIO171. This should + * result in + * GPIO173, GPIO172, GPIO171: 1 1 1 => Ax/Bx + * GPIO173, GPIO172, GPIO171: 1 1 0 => C1 + * GPIO173, GPIO172, GPIO171: 1 0 0 => C3 + * GPIO173, GPIO172, GPIO171: 1 0 1 => Cx (x >= 4) */ void beagle_identify(void) { - beagle_revision_c = 0; - if (!omap_request_gpio(171)) { - unsigned int val; - - omap_set_gpio_direction(171, 1); - val = omap_get_gpio_datain(171); - omap_free_gpio(171); - - if (val) - beagle_revision_c = 0; - else - beagle_revision_c = 1; - } + omap_request_gpio(171); + omap_request_gpio(172); + omap_request_gpio(173); + omap_set_gpio_direction(171, 1); + omap_set_gpio_direction(172, 1); + omap_set_gpio_direction(173, 1); + + beagle_revision = omap_get_gpio_datain(173) << 2 | + omap_get_gpio_datain(172) << 1 | + omap_get_gpio_datain(171); + omap_free_gpio(171); + omap_free_gpio(172); + omap_free_gpio(173); printf("Board revision "); - if (beagle_revision_c) - printf("C\n"); - else + + printf("0x%02x ", beagle_revision); + + switch (beagle_revision) { + case REVISION_AXBX: printf("Ax/Bx\n"); + break; + case REVISION_C1: + printf("C1\n"); + break; + case REVISION_C3: + printf("C3\n"); + break; + case REVISION_C4: + printf(">= C4\n"); + break; + default: + printf("unknown 0x%02x\n", beagle_revision); + } } /* @@ -137,7 +155,7 @@ void set_muxconf_regs(void) { MUX_BEAGLE(); - if (beagle_revision_c) { + if (beagle_revision != REVISION_AXBX) { MUX_BEAGLE_C(); } } Index: u-boot-main/board/ti/beagle/beagle.h =================================================================== --- u-boot-main.orig/board/ti/beagle/beagle.h +++ u-boot-main/board/ti/beagle/beagle.h @@ -33,7 +33,11 @@ const omap3_sysinfo sysinfo = { #endif }; -#define BOARD_REVISION_MASK (0x1 << 11) +/* BeagleBoard revisions */ +#define REVISION_AXBX 0x7 +#define REVISION_C1 0x6 +#define REVISION_C3 0x4 +#define REVISION_C4 0x5 /* * IEN - Input Enable @@ -264,7 +268,7 @@ const omap3_sysinfo sysinfo = { MUX_VAL(CP(HDQ_SIO), (IDIS | PTU | EN | M4)) /*GPIO_170*/\ MUX_VAL(CP(MCSPI1_CLK), (IEN | PTU | EN | M4)) /*GPIO_171*/\ MUX_VAL(CP(MCSPI1_SIMO), (IEN | PTU | EN | M4)) /*GPIO_172*/\ - MUX_VAL(CP(MCSPI1_SOMI), (IEN | PTD | DIS | M0)) /*McSPI1_SOMI*/\ + MUX_VAL(CP(MCSPI1_SOMI), (IEN | PTU | EN | M4)) /*GPIO_173*/\ MUX_VAL(CP(MCSPI1_CS0), (IEN | PTD | EN | M0)) /*McSPI1_CS0*/\ MUX_VAL(CP(MCSPI1_CS1), (IDIS | PTD | EN | M0)) /*McSPI1_CS1*/\ MUX_VAL(CP(MCSPI1_CS2), (IDIS | PTD | DIS | M4)) /*GPIO_176*/\