int intr_pin;
int irq;
int suspend;
+ int acin_cnt;
+ int usbin_cnt;
};
static void rt5025_work_func(struct work_struct *work)
irq_enable[3] = rt5025_reg_read(ii->i2c, RT5025_REG_IRQEN4);
irq_enable[4] = rt5025_reg_read(ii->i2c, RT5025_REG_IRQEN5);
irq_enable[5] = rt5025_reg_read(ii->i2c, RT5025_REG_GAUGEIRQEN);
+ #if 1
+ rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN2, irq_enable[1]&(~RT5025_CHTERMI_MASK));
+ #else
/* disable all irq enable bit first */
rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN1, irq_enable[0]&RT5025_ADAPIRQ_MASK);
rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN2, 0x00);
rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN4, 0x00);
rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN5, 0x00);
rt5025_reg_write(ii->i2c, RT5025_REG_GAUGEIRQEN, 0x00);
+ #endif //#if 0
/* read irq status bit */
irq_stat[0] = rt5025_reg_read(ii->i2c, RT5025_REG_IRQSTATUS1);
irq_stat[1] = rt5025_reg_read(ii->i2c, RT5025_REG_IRQSTATUS2);
chg_event = irq_stat[0]<<16 | irq_stat[1]<<8 | irq_stat[2];
pwr_event = irq_stat[3]<<8 | irq_stat[4];
#ifdef CONFIG_POWER_RT5025
- if ((chg_event & CHARGER_DETECT_MASK) && ii->chip->power_info->otg_en == 0)
+ if ((chg_event & CHARGER_DETECT_MASK))
{
if (chg_event & CHG_EVENT_CHTERMI)
{
if (chg_event & (CHG_EVENT_CHSLPI_INAC | CHG_EVENT_CHSLPI_INUSB))
{
ii->chip->power_info->chg_term = 0;
+ if (chg_event & CHG_EVENT_CHSLPI_INAC)
+ ii->acin_cnt = 0;
+ if (chg_event & CHG_EVENT_CHSLPI_INUSB)
+ ii->usbin_cnt = 0;
+
}
if (chg_event & (CHG_EVENT_INAC_PLUGIN | CHG_EVENT_INUSB_PLUGIN))
{
- rt5025_set_charging_buck(ii->i2c, 0);
- mdelay(50);
- rt5025_set_charging_buck(ii->i2c, 1);
- mdelay(100);
- rt5025_set_charging_buck(ii->i2c, 0);
- mdelay(50);
- rt5025_set_charging_buck(ii->i2c, 1);
- mdelay(200);
+ RTINFO("acin_cnt %d, usbin_cnt %d\n", ii->acin_cnt, ii->usbin_cnt);
+ if (ii->acin_cnt == 0 && ii->usbin_cnt == 0)
+ {
+ #if 1
+ rt5025_charger_reset_and_reinit(ii->chip->power_info);
+ rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN1, irq_enable[0]);
+ rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN2, irq_enable[1]&(~RT5025_CHTERMI_MASK));
+ rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN3, irq_enable[2]);
+ #else
+ rt5025_set_charging_buck(ii->i2c, 0);
+ mdelay(50);
+ rt5025_set_charging_buck(ii->i2c, 1);
+ mdelay(100);
+ rt5025_set_charging_buck(ii->i2c, 0);
+ mdelay(50);
+ rt5025_set_charging_buck(ii->i2c, 1);
+ mdelay(400);
+ #endif /* #if 1 */
+ }
+
+ if (chg_event & CHG_EVENT_INAC_PLUGIN)
+ ii->acin_cnt = 1;
+ if (chg_event & CHG_EVENT_INUSB_PLUGIN)
+ ii->usbin_cnt = 1;
+ RTINFO("acin_cnt %d, usbin_cnt %d\n", ii->acin_cnt, ii->usbin_cnt);
}
if (ii->chip->power_info->chg_term <= 3)
rt5025_gauge_irq_handler(ii->chip->battery_info, irq_stat[5] & RT5025_FLG_VOLT);
#endif /* CONFIG_POWER_RT5025 */
+ #if 1
+ rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN2, irq_enable[1]);
+ #else
/* restore all irq enable bit */
rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN1, irq_enable[0]);
rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN2, irq_enable[1]);
rt5025_reg_write(ii->i2c, RT5025_REG_IRQEN5, irq_enable[4]);
if (rt5025_reg_read(ii->i2c, RT5025_REG_GAUGEIRQEN) == 0)
rt5025_reg_write(ii->i2c, RT5025_REG_GAUGEIRQEN, irq_enable[5]);
+ #endif //#if 0
//enable_irq(ii->irq);
}