示例#1
0
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;
}
示例#2
0
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;

}
示例#3
0
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;
}
示例#4
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;
}
示例#5
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;
}