Index: linux-2.6.21.7/arch/arm/mach-at91/board-vlink.c =================================================================== --- linux-2.6.21.7.orig/arch/arm/mach-at91/board-vlink.c +++ linux-2.6.21.7/arch/arm/mach-at91/board-vlink.c @@ -150,32 +150,38 @@ static void __init vlink_board_init(void /* LEDs */ // 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 - -/* 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 - -/* 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 - -/* Power indicator */ - 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 + /* 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 + + /* Test jig presence detection */ + at91_set_gpio_input(AT91_PIN_PB8, 1); // JIGPRESENT + + /* SIM Cards */ + 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 + + /* Power indicator */ + 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 }