static void fuelgauge_work_handler(struct work_struct *work) { struct battery_data *battery = container_of(work, struct battery_data, fuelgauge_work.work); pr_info("low battery alert!"); if (get_fuelgauge_value(FG_CHECK_STATUS)) _low_battery_alarm_(battery); }
static int adcfg_lowbat_detect(void) { static int first_warn_sent = false; static int second_warn_sent = false; static int poweroff_sent = false; #ifdef BQ27425_FUEL_GAUGE if (sec_bci->charger.is_charging || !sec_bci->ready || sec_bci->battery.battery_level_ptg > BATT_PTG_WARN_1ST) { first_warn_sent = false; second_warn_sent = false; poweroff_sent = false; return false; } if (sec_bci->battery.battery_level_ptg <= BATT_PTG_WARN_1ST && sec_bci->battery.battery_level_ptg > BATT_PTG_WARN_2ND) { if (first_warn_sent == false) { dprintk("1st: ptg:%d, adc", sec_bci->battery.battery_level_ptg, batt_avg_info.adc); _low_battery_alarm_(); } first_warn_sent = true; second_warn_sent = false; poweroff_sent = false; } else if (sec_bci->battery.battery_level_ptg <= BATT_PTG_WARN_2ND && sec_bci->battery.battery_level_ptg > BATT_PTG_WARN_OFF) { if (second_warn_sent == false) { dprintk("2nd: ptg:%d, adc", sec_bci->battery.battery_level_ptg, batt_avg_info.adc); _low_battery_alarm_(); } first_warn_sent = false; second_warn_sent = true; poweroff_sent = false; } else if (sec_bci->battery.battery_level_ptg <= BATT_PTG_WARN_OFF) { if (poweroff_sent == false) { dprintk("off: ptg:%d, adc", sec_bci->battery.battery_level_ptg, batt_avg_info.adc); _low_battery_alarm_(); } first_warn_sent = false; second_warn_sent = false; poweroff_sent = true; } else { printk("%s : can't reach here!\n", __func__); } return true; #else if (sec_bci->charger.is_charging || !sec_bci->ready || batt_avg_info.capacity > BATT_PTG_WARN_1ST) { first_warn_sent = false; second_warn_sent = false; poweroff_sent = false; return false; } if (batt_avg_info.capacity <= BATT_PTG_WARN_1ST && batt_avg_info.capacity > BATT_PTG_WARN_2ND) { if (first_warn_sent == false) { dprintk("1st: ptg:%d, adc", batt_avg_info.capacity, batt_avg_info.adc); _low_battery_alarm_(); } first_warn_sent = true; second_warn_sent = false; poweroff_sent = false; } else if (batt_avg_info.capacity <= BATT_PTG_WARN_2ND && batt_avg_info.capacity > BATT_PTG_WARN_OFF) { if (second_warn_sent == false) { dprintk("2nd: ptg:%d, adc", batt_avg_info.capacity, batt_avg_info.adc); _low_battery_alarm_(); } first_warn_sent = false; second_warn_sent = true; poweroff_sent = false; } else if (batt_avg_info.capacity <= BATT_PTG_WARN_OFF) { if (poweroff_sent == false) { dprintk("off: ptg:%d, adc", batt_avg_info.capacity, batt_avg_info.adc); _low_battery_alarm_(); } first_warn_sent = false; second_warn_sent = false; poweroff_sent = true; } else { printk("%s : can't reach here!\n", __func__); } return true; #endif }