Exemplo n.º 1
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);


}
Exemplo n.º 2
0
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);

}