Exemple #1
0
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;
            }
        }