]> git.sur5r.net Git - u-boot/blobdiff - board/amazon/kc1/kc1.c
env: Rename getenv/_f() to env_get()
[u-boot] / board / amazon / kc1 / kc1.c
index d526695b7c729860b2031d86cfb0db0b66cd7642..eead98b24eb39aabf732f096fba3a44987007292 100644 (file)
@@ -17,6 +17,7 @@
 #include <asm/emif.h>
 #include <twl6030.h>
 #include "kc1.h"
+#include <asm/mach-types.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -86,18 +87,43 @@ int board_init(void)
 int misc_init_r(void)
 {
        char reboot_mode[2] = { 0 };
+       u32 data = 0;
+       u32 value;
+       int rc;
 
        /* Reboot mode */
 
-       omap_reboot_mode(reboot_mode, sizeof(reboot_mode));
+       rc = omap_reboot_mode(reboot_mode, sizeof(reboot_mode));
 
-       if (reboot_mode[0] > 0 && isascii(reboot_mode[0])) {
-               if (!getenv("reboot-mode"))
-                       setenv("reboot-mode", (char *)reboot_mode);
+       /* USB ID pin pull-up indicates factory (fastboot) cable detection. */
+       gpio_request(KC1_GPIO_USB_ID, "USB_ID");
+       gpio_direction_input(KC1_GPIO_USB_ID);
+       value = gpio_get_value(KC1_GPIO_USB_ID);
+
+       if (value)
+               reboot_mode[0] = 'b';
+
+       if (rc < 0 || reboot_mode[0] == 'o') {
+               /*
+                * When not rebooting, valid power on reasons are either the
+                * power button, charger plug or USB plug.
+                */
+
+               data |= twl6030_input_power_button();
+               data |= twl6030_input_charger();
+               data |= twl6030_input_usb();
 
-               omap_reboot_mode_clear();
+               if (!data)
+                       twl6030_power_off();
        }
 
+       if (reboot_mode[0] > 0 && isascii(reboot_mode[0])) {
+               if (!env_get("reboot-mode"))
+                       env_set("reboot-mode", (char *)reboot_mode);
+       }
+
+       omap_reboot_mode_clear();
+
        /* Serial number */
 
        omap_die_id_serial();
@@ -141,12 +167,10 @@ int fb_set_reboot_flag(void)
        return omap_reboot_mode_store("b");
 }
 
-#ifndef CONFIG_SPL_BUILD
 int board_mmc_init(bd_t *bis)
 {
        return omap_mmc_init(1, 0, 0, -1, -1);
 }
-#endif
 
 void board_mmc_power_init(void)
 {