diff -urN linux-2.6.21.5.old/arch/arm/mach-at91/board-vlink.c linux-2.6.21.5/arch/arm/mach-at91/board-vlink.c --- linux-2.6.21.5.old/arch/arm/mach-at91/board-vlink.c 2007-07-26 12:43:11.000000000 +0200 +++ linux-2.6.21.5/arch/arm/mach-at91/board-vlink.c 2007-08-20 16:56:56.000000000 +0200 @@ -151,31 +151,37 @@ // at91_gpio_leds(vlink_leds, ARRAY_SIZE(vlink_leds)); /* Other LED's */ - at91_set_gpio_output(AT91_PIN_PC7, 1); // LED FRONT AP1 - at91_set_gpio_output(AT91_PIN_PC8, 1); // LED FRONT BP1 - at91_set_gpio_output(AT91_PIN_PB14, 1); // LED BACK AP1 - at91_set_gpio_output(AT91_PIN_PB15, 1); // LED BACK BP1 - at91_set_gpio_output(AT91_PIN_PB16, 1); // LED BACK AP2 - at91_set_gpio_output(AT91_PIN_PB17, 1); // LED BACK BP2 + at91_set_gpio_output(AT91_PIN_PC7, 1); // LED FRONT AP1 + at91_set_gpio_output(AT91_PIN_PC8, 1); // LED FRONT BP1 + at91_set_gpio_output(AT91_PIN_PB14, 1); // LED BACK AP1 + at91_set_gpio_output(AT91_PIN_PB15, 1); // LED BACK BP1 + at91_set_gpio_output(AT91_PIN_PB16, 1); // LED BACK AP2 + at91_set_gpio_output(AT91_PIN_PB17, 1); // LED BACK BP2 + +/* Test jig presence detection */ + at91_set_gpio_input(AT91_PIN_PB8, 1); // JIGPRESENT /* SIM Cards */ - at91_set_gpio_output(AT91_PIN_PB9, 1); // ENBSC3 - at91_set_gpio_output(AT91_PIN_PB10, 1); // ENBSC2 - at91_set_gpio_output(AT91_PIN_PB11, 1); // ENBSC1 + if (at91_get_gpio_value(AT91_PIN_PB8)) { + at91_set_gpio_output(AT91_PIN_PB11, 0); + at91_set_gpio_output(AT91_PIN_PB9, 1); + } else { + at91_set_gpio_output(AT91_PIN_PB11, 1); + at91_set_gpio_output(AT91_PIN_PB9, 0); + } + + at91_set_gpio_output(AT91_PIN_PB10, 1); // ENBSC2 /* GSM Module Control */ - at91_set_gpio_output(AT91_PIN_PB12, 1); // GSMONOFF - -/* Test jig presence detection */ - at91_set_gpio_input(AT91_PIN_PB8, 1); // JIGPRESENT + at91_set_gpio_output(AT91_PIN_PB12, 1); // GSMONOFF /* Power indicator */ - at91_set_gpio_input(AT91_PIN_PB22, 1); // PWR_IND + at91_set_gpio_input(AT91_PIN_PB22, 1); // PWR_IND /* USB Device control */ - at91_set_gpio_input(AT91_PIN_PB27, 1); // UDB_CNX - at91_set_gpio_output(AT91_PIN_PB28, 1); // UDB_PUP - at91_set_multi_drive(AT91_PIN_PB28, 1); // Set to multi-drive + at91_set_gpio_input(AT91_PIN_PB27, 1); // UDB_CNX + at91_set_gpio_output(AT91_PIN_PB28, 1); // UDB_PUP + at91_set_multi_drive(AT91_PIN_PB28, 1); // Set to multi-drive }