int max8971_is_charging_enable(void) { int ret, chg_dtls_val; ret = max8971_read_reg(max8971_chg->client, MAX8971_REG_DETAILS2); chg_dtls_val = (ret & MAX8971_CHG_DTLS_MASK); //if (max8971_chg->chg_online) // printk("[CHG] chg_online is %d\n", max8971_chg->chg_online); if ((chg_dtls_val == MAX8971_CHG_DTLS_DONE) || (chg_dtls_val == MAX8971_CHG_DTLS_TIMER_FAULT) || (chg_dtls_val == MAX8971_CHG_DTLS_TEMP_SUSPEND) || (chg_dtls_val == MAX8971_CHG_DTLS_USB_SUSPEND) || (chg_dtls_val == MAX8971_CHG_DTLS_CHG_OFF)) { printk("[CHG] %s() = 0 (chg_dtls_val = 0x%02X)\n", __func__, chg_dtls_val); return 0; } else { printk("[CHG] %s() = 1 (chg_dtls_val = 0x%02X)\n", __func__, chg_dtls_val); return 1; } }
static void max8971_charge(struct work_struct *max8971_work) { u8 temp; // int ret; struct max8971_chip *max8971_chg; u8 val[3]; max8971_chg = container_of(max8971_work, struct max8971_chip, charge_work.work); dev_dbg(&max8971_chg->client->dev, "%s\n", __func__); if (max8971_chg->chg_online) { temp = max8971_read_reg(max8971_chg->client, MAX8971_REG_CHGINT); dev_info(&max8971_chg->client->dev, "CHG Interrupt: 0x%x\n", temp); #if 1 val[0] = max8971_read_reg(max8971_chg->client, MAX8971_REG_DETAILS1); val[1] = max8971_read_reg(max8971_chg->client, MAX8971_REG_DETAILS2); val[2] = max8971_read_reg(max8971_chg->client, MAX8971_REG_CHG_STAT); dev_info(&max8971_chg->client->dev, "DETAIL1 : 0x%x, DETAIL2:0x%x, STAT:0x%x\n",val[0], val[1], val[2]); #endif if ((temp & MAX8971_CHG_MASK) == MAX8971_CHG_MASK) { temp = max8971_read_reg(max8971_chg->client, MAX8971_REG_DETAILS2); dev_info(&max8971_chg->client->dev, "Fast Charge Interrupt: details-0x%x\n", (temp & MAX8971_CHG_DTLS_MASK)); switch ((temp & MAX8971_CHG_DTLS_MASK)) { case MAX8971_CHG_DTLS_DEAD_BAT: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_PREQUAL: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_FAST_CHARGE_CC: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_FAST_CHARGE_CV: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_TOP_OFF: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_DONE: // insert event if a customer need to do something // // Charging done and charge off automatically break; case MAX8971_CHG_DTLS_TIMER_FAULT: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_TEMP_SUSPEND: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_USB_SUSPEND: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_THERMAL_LOOP_ACTIVE: // insert event if a customer need to do something // break; case MAX8971_CHG_DTLS_CHG_OFF: // insert event if a customer need to do something // break; default: break; } } else if ((temp & MAX8971_BAT_MASK) == MAX8971_BAT_MASK) { temp = max8971_read_reg(max8971_chg->client, MAX8971_REG_DETAILS2); dev_info(&max8971_chg->client->dev, "Batt Interrupt: details-0x%x\n", (temp & MAX8971_BAT_DTLS_MASK)); switch ((temp & MAX8971_BAT_MASK)>>MAX8971_BAT_SHIFT) { case MAX8971_BAT_DTLS_BATDEAD: break; case MAX8971_BAT_DTLS_TIMER_FAULT: break; case MAX8971_BAT_DTLS_BATOK: break; case MAX8971_BAT_DTLS_GTBATOV: break; default: break; } }