static void update_battery_level_n_go( struct battery_device_info *di ) // ---------------------------------------------------------------------------- // Description : // Input Argument : // Return Value : { sec_bci.battery.battery_level_ptg = get_battery_level_ptg(); power_supply_changed( &di->sec_battery ); queue_delayed_work( sec_bci.sec_battery_workq, &di->battery_monitor_work, 4 * HZ); }
static int get_charging_current_adc_val( void ) // ---------------------------------------------------------------------------- // Description : // Input Argument : // Return Value : { int adc; //adc = _get_t2adc_data_( device_config->CHG_CURRENT_ADC_PORT );//me close adc = get_battery_level_ptg();//me add //printk(" [BR] CHG CURRENT ADC: %d, VOL: %d\n\n ", adc, (adc * 2500 / 1023) ); return adc; }
int _low_battery_alarm_() { struct battery_device_info *di; struct platform_device *pdev; int level; pdev = to_platform_device( this_dev ); di = platform_get_drvdata( pdev ); level = get_battery_level_ptg(); if ( level == 1 ) sec_bci.battery.battery_level_ptg = 0; else sec_bci.battery.battery_level_ptg = level; wake_lock_timeout( &sec_bc_wakelock , HZ ); power_supply_changed( &di->sec_battery ); return 0; }
//extern int resource_get_level(const char *name); static void battery_monitor_work_handler( struct work_struct *work ) // ---------------------------------------------------------------------------- // Description : // Input Argument : // Return Value : { int is_full = 0; int charge_current_adc; struct battery_device_info *di = container_of( work, struct battery_device_info, battery_monitor_work.work ); //printk("OPP: %d\n", resource_get_level("vdd1_opp")); //printk( KERN_DEBUG "[BR] battery_monitor_work\n" ); #if 0//me open printk( "[BR] battery monitor [Level:%d, ADC:%d, TEMP.:%d, cable: %d] \n",\ get_battery_level_ptg(),\ get_battery_level_adc(),\ get_system_temperature(TEMP_DEG ),\ sec_bci.charger.cable_status ); #endif //printk("VF: %d\n", _get_t2adc_data_(1)); /*Monitoring the battery info.*/ sec_bci.battery.battery_level_ptg = get_battery_level_ptg(); sec_bci.battery.battery_level_vol= get_battery_level_adc(); if ( device_config->MONITORING_SYSTEM_TEMP ) sec_bci.battery.battery_temp = get_system_temperature( TEMP_DEG ); else sec_bci.battery.battery_temp = 0; #if 1 //me add printk( "[BR] monitor BATT.(%d%%, %dmV, %d*)\n", sec_bci.battery.battery_level_ptg, sec_bci.battery.battery_level_vol, sec_bci.battery.battery_temp ); #endif if( !( sec_bci.battery.monitor_field_temp ) && !( sec_bci.battery.monitor_field_rechg_vol ) ) { sec_bci.battery.monitor_duration = MONITOR_DEFAULT_DURATION; } else { // Workaround : check status of cabel at this point. if ( !_cable_status_now_() ) { _battery_state_change_( STATUS_CATEGORY_ETC, ETC_CABLE_IS_DISCONNECTED, CHARGE_DUR_ACTIVE ); return; } if ( sec_bci.charger.is_charging && device_config->MONITORING_CHG_CURRENT ) // in charging && enable monitor_chg_current { charge_current_adc = get_charging_current_adc_val(); is_full = check_full_charge_using_chg_current( charge_current_adc ); if ( is_full ) { // do_fuelgauge_reset(); _battery_state_change_( STATUS_CATEGORY_CHARGING, POWER_SUPPLY_STATUS_FULL, CHARGE_DUR_ACTIVE ); } else battery_monitor_core( CHARGE_DUR_ACTIVE ); } else { battery_monitor_core( CHARGE_DUR_ACTIVE ); } } #if 0 printk( "[BR] monitor BATT.(%d%%, %dmV, %d*)\n", sec_bci.battery.battery_level_ptg, sec_bci.battery.battery_level_vol, sec_bci.battery.battery_temp ); #endif power_supply_changed( &di->sec_battery ); power_supply_changed( &di->sec_ac ); power_supply_changed( &di->sec_usb ); //schedule_delayed_work( &di->battery_monitor_work, //sec_bci.battery.monitor_duration * HZ ); cancel_delayed_work( &di->battery_monitor_work ); queue_delayed_work( sec_bci.sec_battery_workq, &di->battery_monitor_work, sec_bci.battery.monitor_duration * HZ); }
static void battery_monitor_work_handler( struct work_struct *work ) { int is_full = 0; int charge_current_adc; struct battery_device_info *di = container_of( work, struct battery_device_info, battery_monitor_work.work ); #if 0 printk( "[BM] battery monitor [Level:%d, ADC:%d, TEMP.:%d, cable: %d] \n",\ get_battery_level_ptg(),\ get_battery_level_adc(),\ get_system_temperature(),\ sec_bci.charger.cable_status ); #endif boot_monitor_count++; if(!boot_complete && boot_monitor_count >= 2) { printk("[BM] boot complete \n"); boot_complete = true; } if(sec_bci.charger.rechg_count > 0) sec_bci.charger.rechg_count--; // printk("[BM] MMC2_DAT0 : %x\n", omap_readw(0x4800215c)); if ( device_config->MONITORING_SYSTEM_TEMP ) sec_bci.battery.battery_temp = get_system_temperature( TEMP_DEG ); else sec_bci.battery.battery_temp = 0; #if 0 update_rcomp_by_temperature(sec_bci.battery.battery_temp); #endif /* Monitoring the battery info. */ sec_bci.battery.battery_level_ptg = get_battery_level_ptg(); msleep(10); sec_bci.battery.battery_level_vol= get_battery_level_adc(); if( !( sec_bci.battery.monitor_field_temp ) && !( sec_bci.battery.monitor_field_rechg_vol ) ) { sec_bci.battery.monitor_duration = MONITOR_DEFAULT_DURATION; } else { // Workaround : check status of cabel at this point. if ( !_cable_status_now_() ) { _battery_state_change_( STATUS_CATEGORY_ETC, ETC_CABLE_IS_DISCONNECTED, CHARGE_DUR_ACTIVE ); } if ( sec_bci.charger.is_charging && device_config->MONITORING_CHG_CURRENT ) { // in charging && enable monitor_chg_current charge_current_adc = get_charging_current_adc_val(); is_full = check_full_charge_using_chg_current( charge_current_adc ); if ( is_full ) { _battery_state_change_( STATUS_CATEGORY_CHARGING, POWER_SUPPLY_STATUS_FULL, CHARGE_DUR_ACTIVE ); } else { battery_monitor_core( CHARGE_DUR_ACTIVE ); } } else { battery_monitor_core( CHARGE_DUR_ACTIVE ); } } #if 1 printk( "[BM] monitor BATT.(%d%%, %dmV, %d*, count=%d, charging=%d)\n", sec_bci.battery.battery_level_ptg, sec_bci.battery.battery_level_vol, sec_bci.battery.battery_temp, boot_monitor_count, sec_bci.charger.is_charging ); #endif //printk("[BM] adc 167 -> %d^, adc 198 -> %d^\n", t2adc_to_temperature(927, 0), t2adc_to_temperature(884, 0)); power_supply_changed( &di->sec_battery ); power_supply_changed( &di->sec_ac ); power_supply_changed( &di->sec_usb ); queue_delayed_work( sec_bci.sec_battery_workq, &di->battery_monitor_work, sec_bci.battery.monitor_duration * HZ); }