GTA02v5 pulls the GPBn lines controlling the LEDs down too strongly. Thus bit operations on GPB always contain a 0 in these bits. With the addition of a shadow register, this problem is avoided. - Werner Index: u-boot/board/neo1973/gta02/gta02.c =================================================================== --- u-boot.orig/board/neo1973/gta02/gta02.c +++ u-boot/board/neo1973/gta02/gta02.c @@ -75,6 +75,8 @@ */ int gta02_revision; +static uint16_t gpb_shadow = 0; /* to work around GTA02v5 LED bug */ + int gta02_get_pcb_revision(void); static inline void delay (unsigned long loops) @@ -452,6 +454,7 @@ #else gpio->GPBDAT &= ~(1 << 3); /* GPB3 */ #endif + gpio->GPBDAT |= gpb_shadow; } void neo1973_gsm(int on) @@ -571,10 +574,14 @@ if (led > 2) return; - if (on) - gpio->GPBDAT |= (1 << led); - else - gpio->GPBDAT &= ~(1 << led); + if (on) { + gpb_shadow |= (1 << led); + gpio->GPBDAT |= gpb_shadow; + } + else { + gpb_shadow &= ~(1 << led); + gpio->GPBDAT = (gpio->GPBDAT | gpb_shadow) & ~(1 << led); + } } /**