static void samsung_fake_bat_status_update(struct power_supply *bat_ps)
{
    int old_level, old_temp, old_is_full;
    dev_dbg(dev, "%s ++\n", __func__);

    if (!samsung_fake_battery_initial)
        return;

    mutex_lock(&work_lock);

    old_temp = samsung_fake_bat_info.bat_info.batt_temp;
    old_level = samsung_fake_bat_info.bat_info.level;
    old_is_full = samsung_fake_bat_info.bat_info.batt_is_full;
    samsung_fake_bat_info.bat_info.batt_temp = samsung_get_bat_temp(bat_ps);
    samsung_fake_bat_info.bat_info.level = samsung_get_bat_level(bat_ps);
    samsung_fake_bat_info.bat_info.batt_vol = samsung_get_bat_vol(bat_ps);

    if (old_level != samsung_fake_bat_info.bat_info.level ||
            old_temp != samsung_fake_bat_info.bat_info.batt_temp ||
            old_is_full != samsung_fake_bat_info.bat_info.batt_is_full) {
        power_supply_changed(bat_ps);
        dev_dbg(dev, "%s : call power_supply_changed\n", __func__);
    }

    mutex_unlock(&work_lock);
    dev_dbg(dev, "%s --\n", __func__);
}
static void mixtile_adc_bat_status_update(unsigned long unused)
{
  charger_type_t source = CHARGER_BATTERY;
  int adc;
  int charge_change;

  //获取充电状态,并对比上次检测,充电状态是否改变
  mixtile_adc_bat_info.bat_info.charging_source = samsung_get_charge_source(&source);
  if(last_charge_state == -1)
    last_charge_state = mixtile_adc_bat_info.bat_info.charging_source;
  
  if(last_charge_state == mixtile_adc_bat_info.bat_info.charging_source)
    charge_change = 0;
  else
    charge_change = 1;
  
  last_charge_state = mixtile_adc_bat_info.bat_info.charging_source;

  //判断是否忽略此次读数
  adc = samsung_get_bat_adc();
  if(last_adc_value == 0)
    last_adc_value = adc;
  else
  {
//    printk("%d %d", abs(last_adc_value-adc), charge_change);
    if((abs(last_adc_value-adc) >ADC_JITTER_VAL) && (charge_change==0))
      return;
  }
  
  real_adc_value = adc;
  last_adc_value = adc;
  if(adc > ADC_MIN_VALUE)
  {
    //计算10次adc读数平均值
    int i=0;
    if((adc_value[0] == 0) || (charge_change==1))
    {
      for(i=0; i<10; i++)
        adc_value[i] = adc;
    }
    for(i=0; i<9; i++)
    {
      adc_value[i] = adc_value[i+1];
    }
    adc_value[i] = adc;
    adc = 0;
    for(i=0; i<10; i++)
      adc += adc_value[i];
    adc = adc/10;
   
    mixtile_adc_bat_info.bat_info.batt_temp       = samsung_get_bat_temp();
    mixtile_adc_bat_info.bat_info.batt_vol_adc    = adc;
    mixtile_adc_bat_info.bat_info.level           = samsung_get_bat_level();
    mixtile_adc_bat_info.bat_info.batt_vol        = samsung_get_bat_vol();
  }

  if(mixtile_adc_bat_info.bat_info.level >= 100)
    mixtile_adc_bat_info.bat_info.batt_is_full = 1;
  else
    mixtile_adc_bat_info.bat_info.batt_is_full = 0;

  if(source == CHARGE_FULL)
  {//硬件检测到已充满
    mixtile_adc_bat_info.bat_info.batt_is_full = 1;
    mixtile_adc_bat_info.bat_info.level = 100;
  }

//Apollo + 充电时可休眠
//  if (source == CHARGER_USB || source == CHARGER_AC)
//    wake_lock(&vbus_wake_lock);
//  else
//    wake_lock_timeout(&vbus_wake_lock, HZ / 2);
//Apollo -

  power_supply_changed(&samsung_power_supplies[CHARGER_BATTERY]);
//  power_supply_changed(&s3c_power_supplies[CHARGER_USB]);
//  power_supply_changed(&s3c_power_supplies[CHARGER_AC]);

  printk("batt_vol_adc=%04d adc_read=%04d charge_change=%d\n", mixtile_adc_bat_info.bat_info.batt_vol_adc, real_adc_value, charge_change);
}