//Returns whether a battery is charging, discharging, full, etc. int get_battery_charge_state(unsigned int battery_index) { unsigned int percent, i; if (last_status[battery_index].state & 0x1) return BATT_DISCHARGING; else if (last_status[battery_index].state & 0x2) { // The Dell Venue 11 Pro 7140 reports state = BATT_CHARGING even when it's full. if (last_status[battery_index].charge_now == last_info[battery_index].design_capacity) { return BATT_FULL; } else { return BATT_CHARGING; } } else { /* We're not charging nor discharging... */ percent = get_battery_percentage(battery_index); /* Are we full or empty? */ if (percent > 90) return BATT_FULL; else if (percent < 10) return BATT_EMPTY; else { /* Is anybody else (dis)charging? */ for (i = 0; i < num_battery_structs_allocd; ++i) { if (i != battery_index && last_status[i].present == YES && (last_status[i].state & 0x1 || last_status[i].state & 0x2)) { break; } } if (i < num_battery_structs_allocd) { /* Yes! */ /* If the other battery is charging, we're pending charge */ if (last_status[i].state & 0x2) return BATT_PENDING_CHARGE; /* If the other battery is discharging, we're pending discharge */ else if (last_status[i].state & 0x1) return BATT_PENDING_DISCHARGE; } /* We tried everything, the state is unknown... */ return BATT_STATE_UNKNOWN; } } return BATT_STATE_UNKNOWN; }
int switch_boot_mode(void) { // unsigned long hold_time = 50000, polling_time = 10000, tmp; unsigned long upgrade_step; int ret=0; act8942_init(&act8942_pdata); //act8942_dump(); upgrade_step = simple_strtoul (getenv ("upgrade_step"), NULL, 16); printf("upgrade_step = %d\n", upgrade_step); saradc_enable(); #ifdef ENABLE_FONT_RESOURCE RegisterFont(DEFAULT_FONT); #endif ret=isVolAKeyPress(); if(ret==1) aml_autoscript(); powerkey_hold(0); #ifdef CONFIG_AML_TINY_USBTOOL usb_boot(1); #endif if(upgrade_step == 2) { switch(reboot_mode) { case AMLOGIC_NORMAL_BOOT: { ret=keypress_to_upgrade(); if(ret==0) return 0; printf("AMLOGIC_NORMAL_BOOT...\n"); power_up(); logo_display(); return 1; } case AMLOGIC_FACTORY_RESET_REBOOT: { printf("AMLOGIC_FACTORY_RESET_REBOOT...\n"); power_up(); logo_display(); run_command ("nand read ${recovery_name} ${loadaddr} 0 ${recovery_size}", 0); run_command ("bootm", 0); break; } case AMLOGIC_UPDATE_REBOOT: { printf("AMLOGIC_UPDATE_REBOOT...\n"); power_up(); logo_display(); run_command ("set upgrade_step 0", 0); run_command ("save", 0); upgrade_step = 0; break; } default: { printf("AMLOGIC_CHARGING_REBOOT...\n"); if(is_ac_connected) { power_up(); #ifdef CONFIG_BATTERY_CHARGING //battery_charging(); #endif logo_display(); } else { powerkey_hold(0); #ifdef CONFIG_BATTERY_CHARGING if(get_powerkey_hold_count()) { logo_display(); if(get_battery_percentage() < 10) { power_low_display(); sdelay(2); power_down(); printf("Low Power!!!\nPower Down!\n"); hang(); } #else if(powerkey_hold(1000)) { #endif logo_display(); power_up(); printf("Power Up!\n"); } else { power_down(); printf("Power Down!\n"); hang(); } } break; } } } else { power_up(); printf("Upgrade step %d...\n", upgrade_step); } if(upgrade_step == 0) { #ifdef CONFIG_AML_TINY_USBTOOL usb_boot(1); #endif display_messge("upgrade step 1! Don't Power Off!"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { printf("### ERROR: u-boot write failed!!!\n"); return -1; } } else if(upgrade_step == 1) { display_messge("upgrade step 2! Don't Power Off!"); run_command ("defenv", 0); run_command ("set upgrade_step 2", 0); run_command ("save", 0); into_recovery(); } //added by Elvis for added fool idle /*get_key(); get_key(); while(hold_time > 0) { udelay(polling_time); tmp = get_key(); printf("get_key(): %d\n", tmp); if(!tmp) break; hold_time -= polling_time; } if(hold_time > 0) { printf("Normal Start...\n"); return 1; } else { display_messge("upgrading... please wait"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } run_command ("set upgrade_step 2", 0); run_command ("save", 0); into_recovery(); } */ ret=keypress_to_upgrade(); return ret; //return 0; }
int switch_boot_mode(void) { unsigned long hold_time = 50000, polling_time = 10000, tmp; unsigned long upgrade_step; upgrade_step = simple_strtoul (getenv ("upgrade_step"), NULL, 16); printf("upgrade_step = %d !!!!!!!!!!!!!!!!!!\n", upgrade_step); saradc_enable(); #ifdef CONFIG_UBI_SUPPORT powerkey_hold(0); run_command ("ubi part system", 0); powerkey_hold(0); run_command ("ubifsmount system", 0); //run_command ("ubifsls", 0); #endif if(upgrade_step == 3) { switch(reboot_mode) { case AMLOGIC_NORMAL_BOOT: { printf("AMLOGIC_NORMAL_BOOT...\n"); power_hold(); //green led on red led off green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); return 1; } case AMLOGIC_FACTORY_RESET_REBOOT: { printf("AMLOGIC_FACTORY_RESET_REBOOT...\n"); power_hold(); //green led on red led off green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); run_command ("nand read ${recovery_name} ${loadaddr} 0 ${recovery_size}", 0); run_command ("bootm", 0); break; } case AMLOGIC_UPDATE_REBOOT: { printf("AMLOGIC_UPDATE_REBOOT...\n"); power_hold(); //green led on red led off green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); run_command ("set upgrade_step 0", 0); run_command ("save", 0); upgrade_step = 0; break; } case AMLOGIC_CHARGING_REBOOT: { printf("AMLOGIC_POWERDOWN... \n"); if(is_ac_connected) { power_unhold(); hang(); } } default: { printf("Default.... \n"); if(is_ac_connected) { power_hold(); #ifdef CONFIG_BATTERY_CHARGING battery_charging(); #endif } else { powerkey_hold(0); if(get_powerkey_hold_count()) { #ifdef CONFIG_BATTERY_CHARGING if(get_battery_percentage() < 10) { power_low_display(); sdelay(2); power_unhold(); printf("Low Power!!!\nPower Down!\n"); hang(); } #endif power_hold(); printf("Power Up!\n"); } else { power_unhold(); printf("Power Down!\n"); hang(); } } //green led on red led off green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); break; } } } else { power_hold(); printf("Upgrade step %d...\n", upgrade_step); green_powerkey_led_on(); red_powerkey_led_off(); SET_MPEG_REG_MASK(VPP_MISC, VPP_POST_FG_OSD2 | VPP_PRE_FG_OSD2); logo_display(); } if(upgrade_step == 0) { if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { printf("### ERROR: u-boot write failed!!!\n"); return -1; } } else if((upgrade_step >0) && (upgrade_step < 3)) { if(upgrade_step == 1) { if(upgrade_env()) { run_command ("set upgrade_step 2", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { run_command ("defenv", 0); run_command ("save", 0); } } run_command ("set upgrade_step 3", 0); run_command ("save", 0); //upgrade_partition(); into_recovery(); } //added by Elvis for added fool idle get_key(); get_key(); while(hold_time > 0) { udelay(polling_time); tmp = get_key(); printf("get_key(): %d\n", tmp); if(!tmp) break; hold_time -= polling_time; } if(hold_time > 0) { aml_autoscript(); printf("Normal Start...\n"); return 1; } else { if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } if(upgrade_env()) { run_command ("set upgrade_step 2", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } run_command ("set upgrade_step 3", 0); run_command ("save", 0); #ifndef CONFIG_UBI_SUPPORT //upgrade_partition(); #endif into_recovery(); } }
int switch_boot_mode(void) { unsigned long hold_time = 50000, polling_time = 10000, tmp; unsigned long upgrade_step; clrbits_le32(P_PREG_PAD_GPIO2_EN_N, (1<<25)); // VCC5V_EN GPIOD_9 setbits_le32(P_PREG_PAD_GPIO2_O, (1<<25)); get_osd_size(); #ifdef CONFIG_PMU_ACT8942 act8942_init(&act8942_pdata); //act8942_dump(); #endif upgrade_step = simple_strtoul (getenv ("upgrade_step"), NULL, 16); printf("upgrade_step = %d\n", upgrade_step); saradc_enable(); #ifdef ENABLE_FONT_RESOURCE RegisterFont(DEFAULT_FONT); #endif aml_autoscript(); powerkey_hold(0); u32 reboot_mode_current = reboot_mode;//cvt reboot_mode_clear();//cvt #ifdef CONFIG_AML_TINY_USBTOOL //cvt extern int usb_boot(int clk_cfg, int time_out); if((reboot_mode_current == MESON_USB_BURNER_REBOOT) || get_burner_key()) { usb_boot(1, 200000); } #endif if(upgrade_step == 2) { switch(reboot_mode_current) { case AMLOGIC_NORMAL_BOOT: { printf("AMLOGIC_NORMAL_BOOT...\n"); power_up(); logo_display(); return 1; } case AMLOGIC_FACTORY_RESET_REBOOT: { printf("AMLOGIC_FACTORY_RESET_REBOOT...\n"); power_up(); logo_display(); run_command ("nand read ${recovery_name} ${loadaddr} 0 ${recovery_size}", 0); run_command ("bootm", 0); break; } case AMLOGIC_UPDATE_REBOOT: { printf("AMLOGIC_UPDATE_REBOOT...\n"); power_up(); logo_display(); run_command ("set upgrade_step 0", 0); run_command ("save", 0); upgrade_step = 0; break; } default: { printf("AMLOGIC_CHARGING_REBOOT...\n"); if(is_ac_connected) { power_up(); #ifdef CONFIG_BATTERY_CHARGING battery_charging(); #endif logo_display(); } else { powerkey_hold(0); #ifdef CONFIG_BATTERY_CHARGING if(get_powerkey_hold_count()) { logo_display(); if(get_battery_percentage() < 10) { power_low_display(); sdelay(2); power_down(); printf("Low Power!!!\nPower Down!\n"); hang(); } logo_display(); power_up(); printf("Power Up!\n"); } #else if(powerkey_hold(1000)) { logo_display(); power_up(); printf("Power Up!\n"); } #endif else { power_down(); printf("Power Down!\n"); hang(); } } break; } } } else { power_up(); printf("Upgrade step %d...\n", upgrade_step); } if(upgrade_step == 0) { display_messge("upgrade step 1! Don't Power Off!"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } else { printf("### ERROR: u-boot write failed!!!\n"); return -1; } } else if(upgrade_step == 1) { display_messge("upgrade step 2! Don't Power Off!"); run_command ("set upgrade_step 2", 0); run_command ("save", 0); into_recovery(); } //added by Elvis for added fool idle get_key(); get_key(); while(hold_time > 0) { udelay(polling_time); tmp = get_key(); printf("get_key(): %d\n", tmp); if(!tmp) break; hold_time -= polling_time; } if(hold_time > 0) { printf("Normal Start...\n"); char *recovery_command; recovery_command = getenv("recovery_command"); if (strcmp(recovery_command, "--usb_burning") == 0){ run_command ("set recovery_command", 0); } run_command ("save", 0); return 1; } else { display_messge("upgrading... please wait"); if(upgrade_bootloader()) { run_command ("set upgrade_step 1", 0); run_command ("save", 0); run_command ("reset", 0); hang(); } run_command ("set upgrade_step 2", 0); run_command ("save", 0); into_recovery(); } return 0; }