Dobrica Pavlinušić's random unstructured stuff
phj00: Revision 4
[Lenovo Thinkpad Tablet]
{toc: } ^ EC_battery https://github.com/dpavlin/linux/blob/thinktabletopensource-2.6.36/drivers/power/EC_battery.c ^^ battery info from shell .pre dpavlin@tegra20:~$ cat batt-info.sh #!/bin/sh printf 'BatCapacity: %d %%\n' `i2cget -y 5 0x58 0x00 w` printf 'BatFullCapacity: %d\n' `i2cget -y 5 0x58 0x07 w` printf 'BatDesignCapacity: %d\n' `i2cget -y 5 0x58 0x08 w` printf 'ChargerStatus: %d\n' `i2cget -y 5 0x58 0x0b w` printf 'UsbStatus: %d\n' `i2cget -y 5 0x58 0x5b w` printf 'voltage: %d\n' `i2cget -y 5 0x58 0x01 w` printf 'temperature: %d\n' `i2cget -y 5 0x58 0x0a w` ec_status=`i2cget -y 5 0x58 0x0b w` case $ec_status in 0x0000) ec_status_dec="discharging" ;; 0x0001) ec_status_dec="charging" ;; 0x0002) ec_status_dec="full" ;; *) echo "unknown $ec_status" && exit 1 esac printf 'EC_status: %d [%s]\n' $ec_status $ec_status_dec dpavlin@tegra20:~$ sudo ./batt-info.sh BatCapacity: 29 % BatFullCapacity: 2670 BatDesignCapacity: 3250 ChargerStatus: 1 UsbStatus: 0 voltage: 7477 temperature: 2912 EC_status: 1 [charging] .pre ^^ kernel 2.6 /sys/EcControl .pre shell@android:/sys/EcControl # grep . * AssetNumber: BTMAC:6c71d912972f BatCapacity:66 BatCtlDisable:BatCtlDisable BatCtlEnable:0 BatCurrent:-21 BatDesignCapacity:3250 BatFullCapacity:2786 BatLifeTime:0 BatLock:ok BatStatus:Charging BatteryUpdateMode:-2 BoardID:-258 Brandname:ThinkPad Tablet ChargeLED:ChargeLED ChargerStatus:1 Coldboot:0 DeviceStatus:0000000000001000 ECFwStatus:aa ECRead:0x0c12 ECWrite:ECWrite ECflashMode:0 ECflashread:B ECflashwrite:ECflashwrite EcVer:3f001900 FactoryStatus:INAKRUIN GPSPower:0 IMEIwithBarcode:ffffffffffffff15 LEDAndroidOff:LEDAndroidOff MFGBuildDate:2012/10/31 MTMSN:���������������� ManufactureDate:ffff-ff-ff MicSwitch:2 NBUsbChargingCurrent:65278 OffLED:OffLED OriStsLED:OriStsLED PassCode:ECEG PlanarSN:11S63Y1836Z1ZLFT2A70PT PowerLED:PowerLED PsensorPower:2 RebootAfterEcUpdate:RebootAfterEcUpdate RecoveryMode:RecoveryMode Reset:Reset Resume:0 SerialNumber:49834956515650807177804989678086 SerialNumberwithoutBarcode:���������������������� Shutdown:Shutdown SkuNumber:003f Suspend:Suspend SysStatus:1 ThreeGPower:1 UUID:5668546668516867494852664949695065575056546755496857495057555070 UsbStatus:0 WIFIMAC:ffffffffffff .pre ^^ shell i2c tests Sensor is not detected in i2cdetect since it returns 00 as first byte. Arbitration errors on this bus (which are probably caused caused by scanning other side of i2c mux or parent i2c controller -- I have to re-check this) break communication with EC. .pre linux-2.6/drivers/power/EC_battery.c # ready? root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x48 w 0x0008 # ready = ret & 0x00000008; # BatCtlEnable_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x5b w 0x0000 # EcVer_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x30 w 0x3f00 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x31 w 0x2100 # UUID_show for(i=0;i<16;i++) { val32 = i2c_smbus_read_word_data(EC_Bat_device->client,0x60); val16 = val32 & 0x0000ffff; TransformToByte(val16, &val8[2*i], &val8[2*i+1]); msleep(10); } root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x5768 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x6668 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x6567 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x5456 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x5070 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x5552 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x5651 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x5770 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x6948 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x4949 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x5549 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x6856 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x4966 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x4869 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x6965 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w 0x4854 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x60 w # 17 repeat? 0x5768 # BatCapacity_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x00 w 0x004d # BatFullCapacity_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x07 w 0x0773 # BatDesignCapacity_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x08 w 0x0965 # BTMAC_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x62 w 0xbd9d root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x62 w 0x68ac root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x62 w 0x742f ## repeat? root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x62 w 0xbd9d # ChargerStatus_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x0b w 0x0001 # UsbStatus_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x5b w 0x0000 # ECRead_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0xF1 w 0x0c12 # Shutdown_store i2c_smbus_write_word_data(EC_Bat_device->client,0x52,0); # Suspend_store i2c_smbus_write_word_data(EC_Bat_device->client,0x53,0); # Coldboot_store Coldboot_val = buffer & 0x0000FFFF; i2c_smbus_write_word_data(EC_Bat_device->client,0x55,Coldboot_val); # Resume_store Resume_val = buffer & 0x0000FFFF; i2c_smbus_write_word_data(EC_Bat_device->client,0x56,Resume_val); # RecoveryMode_store i2c_smbus_write_word_data(EC_Bat_device->client,0x58,val); # MicSwitch_store //echo 0 > MicSwitch(front) , echo 1 > MicSwitch(back), echo 2 > MicSwitch(normal) //echo 3 > MicSwitch(echo cancellation test), echo 4 > MicSwitch(disable echo cancellation) i2c_smbus_write_word_data(EC_Bat_device->client,0x44,MicSwitch_val); # ThreeGPower_store //echo 1 > ThreeGPower(poweron) , echo 0 > ThreeGPower(poweroff), echo 2 > ThreeGPower(backtoOriginstate) i2c_smbus_write_word_data(EC_Bat_device->client,0x45,ThreeGPower_val); # enable_ThreeGPower ThreeGPower_val = 1; # 1 = enable, 0 = disable i2c_smbus_write_word_data(EC_Bat_device->client,0x45,ThreeGPower_val); # SerialNumber_show for(i=0;i<=7;i++) { val32 = i2c_smbus_read_word_data(EC_Bat_device->client,0x66); root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 0 0x5451 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 1 0x5468 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 2 0x8048 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 3 0x5277 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 4 0x8290 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 5 0x5157 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 6 0x4956 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 7 0x4983 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x66 w # 0 0x5451 # SkuNumber_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x68 w 0xffff # LEDAndroidOff_store i2c_smbus_write_word_data(EC_Bat_device->client,0x5a,0); # Reset_store i2c_smbus_write_word_data(EC_Bat_device->client,0x54,0); # BatCurrent_show i2c_smbus_read_word_data(EC_Bat_device->client,0x03); root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x03 w 0xff43 root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x03 w 0xff42 # BatLifeTime_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x70 w 0x0000 # BoardID_show root@tegra20:/mnt/nuc/Tegra# i2cget -y 5 0x58 0x32 w 0xfefe # GPSPower_store # if(GPS_val == 0) OFF i2c_smbus_write_word_data(EC_Bat_device->client,0x47,0); # else if(GPS_val == 1) ON i2c_smbus_write_word_data(EC_Bat_device->client,0x4a,0); # PsensorPower_store //echo 0 > PsensorPower(off), echo 1 > PsensorPower(on), echo 2 > PsensorPower(normal control) i2c_smbus_write_word_data(EC_Bat_device->client,0x4b, PsensorPower_val); root@tegra20:/mnt/nuc/Tegra# i2cset -y 5 0x58 0x4b 0x1 w .pre |