static int battery_monitor_fleeting_wakeup_handler( unsigned long arg ) { int ret = 0; int is_full = 0; int charge_current_adc = 0; get_system_status_in_sleep( &sec_bci.battery.battery_level_ptg, &sec_bci.battery.battery_level_vol, &sec_bci.battery.battery_temp, &charge_current_adc ); if( sec_bci.charger.is_charging && (sec_bci.battery.battery_level_ptg >= 90 || sec_bci.battery.battery_level_vol >= 4050)) { if ( device_config->MONITORING_CHG_CURRENT ) is_full = check_full_charge_using_chg_current( charge_current_adc ); else is_full = _check_full_charge_dur_sleep_(); } if ( is_full ) { sec_bci.charger.full_charge_dur_sleep = 0x1; ret = -1; } else { sec_bci.charger.full_charge_dur_sleep = 0x0; ret = battery_monitor_core( CHARGE_DUR_SLEEP ); } if ( ret >= 0 ) request_gptimer12( &batt_gptimer_12 ); return ret; }
static int battery_monitor_fleeting_wakeup_handler( unsigned long arg ) // ---------------------------------------------------------------------------- // Description : // Input Argument : // Return Value : { int ret = 0; int is_full = 0; int charge_current_adc = 0; //struct battery_device_info *di = (struct battery_device_info *) arg; //printk("? %s\n", di->dev->kobj.name); //printk("opp: %d\n", resource_get_level("vdd1_opp")); get_system_status_in_sleep( &sec_bci.battery.battery_level_ptg, &sec_bci.battery.battery_level_vol, &sec_bci.battery.battery_temp, &charge_current_adc ); if ( sec_bci.charger.is_charging ) { if ( device_config->MONITORING_CHG_CURRENT ) is_full = check_full_charge_using_chg_current( charge_current_adc ); else is_full = _check_full_charge_dur_sleep_(); } if ( is_full ) { sec_bci.charger.full_charge_dur_sleep = 0x1; ret = -1; } else { sec_bci.charger.full_charge_dur_sleep = 0x0; ret = battery_monitor_core( CHARGE_DUR_SLEEP ); } if ( ret >= 0 ) request_gptimer12( &batt_gptimer_12 ); #if 0 debug_fleeting_counter++; printk( "<br> monitor BATT.(%d%%, %dmV, %d*) - %d\n", sec_bci.battery.battery_level_ptg, sec_bci.battery.battery_level_vol, sec_bci.battery.battery_temp, debug_fleeting_counter ); #endif return ret; }
static int battery_suspend( struct platform_device *pdev, pm_message_t state ) // ---------------------------------------------------------------------------- // Description : // Input Argument : // Return Value : { struct battery_device_info *di = platform_get_drvdata( pdev ); cancel_delayed_work( &di->battery_monitor_work ); flush_delayed_work( &di->battery_monitor_work ); /* if ( sec_bci.charger.cable_status == POWER_SUPPLY_TYPE_BATTERY ) twl4030_i2c_write_u8(TWL4030_MODULE_PM_RECEIVER, 0x00, TWL4030_VINTANA2_DEV_GRP); */ if( sec_bci.charger.cable_status == POWER_SUPPLY_TYPE_MAINS ) { #if 0 struct file *filp; char buf; int count; int retval = 0; mm_segment_t fs; fs = get_fs(); set_fs(KERNEL_DS); filp = filp_open("/sys/power/vdd1_lock", 00000001/*O_WRONLY*/|00010000/*O_SYNC*/, 0x0); buf='1'; count=filp->f_op->write(filp, &buf, 1, &filp->f_pos); retval = filp_close(filp, NULL); set_fs(fs); #endif request_gptimer12( &batt_gptimer_12 ); } return 0; }
static int battery_suspend( struct platform_device *pdev, pm_message_t state ) { struct battery_device_info *di = platform_get_drvdata( pdev ); cancel_delayed_work( &di->battery_monitor_work ); sec_bci.charger.rechg_count = 0; if( sec_bci.charger.cable_status == POWER_SUPPLY_TYPE_MAINS ) { #if 0 struct file *filp; char buf; int count; int retval = 0; mm_segment_t fs; fs = get_fs(); set_fs(KERNEL_DS); filp = filp_open("/sys/power/vdd1_lock", 00000001/*O_WRONLY*/|00010000/*O_SYNC*/, 0x0); buf='1'; count=filp->f_op->write(filp, &buf, 1, &filp->f_pos); retval = filp_close(filp, NULL); set_fs(fs); #endif request_gptimer12( &batt_gptimer_12 ); } return 0; }
int _charger_state_change_( int category, int value, bool is_sleep ) // ---------------------------------------------------------------------------- // Description : // Input Argument : // Return Value : { printk( "[BR] cate: %d, value: %d\n", category, value ); if( category == STATUS_CATEGORY_CABLE ) { switch( value ) { case POWER_SUPPLY_TYPE_BATTERY : /*Stop monitoring the batt. level for Re-charging*/ sec_bci.battery.monitor_field_rechg_vol = false; /*Stop monitoring the temperature*/ sec_bci.battery.monitor_field_temp = false; sec_bci.battery.confirm_full_by_current = 0; //sec_bci.battery.confirm_changing_freq = 0; sec_bci.battery.confirm_recharge = 0; sec_bci.charger.charging_timeout = DEFAULT_CHARGING_TIMEOUT; sec_bci.charger.full_charge_dur_sleep = 0x0; break; case POWER_SUPPLY_TYPE_MAINS : sec_bci.charger.charging_timeout = DEFAULT_CHARGING_TIMEOUT; wake_lock_timeout( &sec_bc_wakelock , HZ ); break; case POWER_SUPPLY_TYPE_USB : break; default : ; } goto Out_Charger_State_Change; } else if( category == STATUS_CATEGORY_CHARGING ) { switch( value ) { case POWER_SUPPLY_STATUS_UNKNOWN : case POWER_SUPPLY_STATUS_NOT_CHARGING : //sec_bci.charger.full_charge = false; /*Stop monitoring the batt. level for Re-charging*/ sec_bci.battery.monitor_field_rechg_vol = false; if( sec_bci.battery.battery_health != POWER_SUPPLY_HEALTH_OVERHEAT && sec_bci.battery.battery_health != POWER_SUPPLY_HEALTH_COLD ) { /*Stop monitoring the temperature*/ sec_bci.battery.monitor_field_temp = false; } break; case POWER_SUPPLY_STATUS_DISCHARGING : //sec_bci.charger.full_charge = false; break; case POWER_SUPPLY_STATUS_FULL : //sec_bci.charger.full_charge = true; /*Start monitoring the batt. level for Re-charging*/ sec_bci.battery.monitor_field_rechg_vol = true; /*Stop monitoring the temperature*/ sec_bci.battery.monitor_field_temp = false; wake_lock_timeout( &sec_bc_wakelock , HZ ); break; case POWER_SUPPLY_STATUS_CHARGING : /*Start monitoring the temperature*/ sec_bci.battery.monitor_field_temp = true; /*Stop monitoring the batt. level for Re-charging*/ sec_bci.battery.monitor_field_rechg_vol = false; break; case POWER_SUPPLY_STATUS_RECHARGING_FOR_FULL : //sec_bci.charger.charging_timeout = DEFAULT_RECHARGING_TIMEOUT; /*Start monitoring the temperature*/ sec_bci.battery.monitor_field_temp = true; /*Stop monitoring the batt. level for Re-charging*/ sec_bci.battery.monitor_field_rechg_vol = false; break; case POWER_SUPPLY_STATUS_RECHARGING_FOR_TEMP : /*Start monitoring the temperature*/ sec_bci.battery.monitor_field_temp = true; /*Stop monitoring the batt. level for Re-charging*/ sec_bci.battery.monitor_field_rechg_vol = false; break; default : break; } } else { } if( !is_sleep ) { struct battery_device_info *di; struct platform_device *pdev; pdev = to_platform_device( this_dev ); di = platform_get_drvdata( pdev ); cancel_delayed_work( &di->battery_monitor_work ); queue_delayed_work( sec_bci.sec_battery_workq, &di->battery_monitor_work, 5 * HZ ); power_supply_changed( &di->sec_battery ); power_supply_changed( &di->sec_ac ); power_supply_changed( &di->sec_usb ); } else { release_gptimer12( &batt_gptimer_12 ); request_gptimer12( &batt_gptimer_12 ); } Out_Charger_State_Change : return 0; }