static void max17040_get_vcell(void) { u8 msb; u8 lsb; int avalue=0; int voltage=0; dbg_func_in(); msb = max17040_read_reg(MAX17040_VCELL_MSB); lsb = max17040_read_reg(MAX17040_VCELL_LSB); //check i2c error if(msb<0 ||lsb <0) { max17040_data.i2c_state_vol =1; } else { max17040_data.i2c_state_vol =0; max17040_data.prev_voltage=max17040_data.vcell; } voltage=(msb<<4)|((lsb&0xf0)>>4); avalue=(voltage*125)/100; // sleep_dbg(" MSB [%d] : LSB [%d] : LOW VOLTAGE [%d] : VOLTAGE_NOW [%d]\n",msb,lsb,voltage,avalue); /* voltage changes but the event is not sent. //temp code if(avalue!=max17040_data.vcell) max17040_data.event=Events; */ mutex_lock(&max17040_data.data_mutex); max17040_data.vcell = avalue; mutex_unlock(&max17040_data.data_mutex); //Factory cable debug #ifdef CONFIG_SKY_SMB136S_CHARGER //printk("Max17040_data.vcell = %d\n", max17040_data.vcell); if(pm8058_chg_nobattery_factory_cable()) max17040_data.vcell = 4100; #endif dbg_func_out(); }
static void max17040_get_soc(void) { u8 msb; u8 lsb; int avalue=0; int soc=0; #ifdef MAX17040_SLEEP_DEBUG int sky_state=0; #endif dbg_func_in(); msb = max17040_read_reg(MAX17040_SOC_MSB); lsb = max17040_read_reg(MAX17040_SOC_LSB); //check i2c error if(msb<0 ||lsb <0) { max17040_data.i2c_state =1; } else { max17040_data.i2c_state =0; max17040_data.prev_soc=max17040_data.soc; } #ifdef MAX17040_DEBUG_QUICK //quick start code soc=SKY_MULT_1000(msb)+(SKY_MULT_1000(lsb)/SKY_SOC_LSB); soc=soc/1000; #else /*//description read i2c data [msb=20,lsb=10] avalue=20*1000+(10*1000)/256 */ avalue=SKY_MULT_1000(msb)+(SKY_MULT_1000(lsb)/SKY_SOC_LSB); //Ajdusted soc%=(SOC%-EMPTY)/(FULL-EMPTY)*100 if(avalue>1200) soc=(((avalue-SKY_MULT_100(SKY_SOC_EMPTY))*100)/(SKY_MULT_100(SKY_SOC_FULL)-SKY_MULT_100(SKY_SOC_EMPTY))); else soc=0; if(avalue >1000 && avalue <1200) soc=1; #endif //logic code if(soc>100) //soc>100 soc=100; if(soc==100) charge_state=1; else charge_state=0; #ifdef CONFIG_SKY_CHARGING if(pm8058_chg_nobattery_factory_cable()) soc = 10; #endif if(max17040_data.event) // ps2 team shs : soc is changed { sleep_dbg("CONFIG CAPACITY [%d] : BATTERY STATS : [%d]\n",soc,sky_state); sleep_dbg("SOC MSB [%d] : LSB [%d] : Lower SOC [%d] : Adjusted SOC [%d] : charge_state [%d] \n",msb,lsb,avalue,soc,charge_state); } if(soc!=max17040_data.soc) max17040_data.event=Events; if(soc==0)//ps1 team shs : 0% persent is occured events max17040_data.event=Events; max17040_check_power(soc); mutex_lock(&max17040_data.data_mutex); max17040_data.soc = soc; mutex_unlock(&max17040_data.data_mutex); dbg_func_out(); }