So I've a RK3188 tablet which accelerometer calibration was completely off. I've spend quite some time figuring out how to fix this so I wanted to share the fix. Note this will only work on some tablets. First lets see if this fix will work for your tablet, from an adb shell do:
cat /proc/acc_info
If that file exists it will contain something like this:
root@rk31board:/ # cat /proc/acc_info
name:bma250
units:256
dir:7
offset:8 0 -4
If it does not exist, the this fix will not work for you. If the numbers after offset are all close to 0 like above, then likely you do not need this fix, but you can still try it.
So rockchip tablets with this particular file store accelerometer calibration data in something which rockchip calls the "sys sector" of nand, if you look in dmesg you will see "rknand_sys_storage_ioctl" messages there. The problem with this approach is that the "sys sector" data survives a factory reset so once the calibration data is off, it stays off, unless we manually force a recalibrate.
Note the next steps need root, make sure that the tablet is flat on a level service, and that it is not sleeping
(otherwise it will not calibrate until you wake it up, registering the powerbutton press during the calibrate)
then do:
echo 1 > /proc/acc_cal
Now run "dmesg | grep acc", you should see something like this:
<4>[ 1497.846716] acc calibrating 1
<4>[ 1497.875330] acc new offset 8 0 0
If you do congrats, you've successfully recalibrated your tablet.
cat /proc/acc_info
If that file exists it will contain something like this:
root@rk31board:/ # cat /proc/acc_info
name:bma250
units:256
dir:7
offset:8 0 -4
If it does not exist, the this fix will not work for you. If the numbers after offset are all close to 0 like above, then likely you do not need this fix, but you can still try it.
So rockchip tablets with this particular file store accelerometer calibration data in something which rockchip calls the "sys sector" of nand, if you look in dmesg you will see "rknand_sys_storage_ioctl" messages there. The problem with this approach is that the "sys sector" data survives a factory reset so once the calibration data is off, it stays off, unless we manually force a recalibrate.
Note the next steps need root, make sure that the tablet is flat on a level service, and that it is not sleeping
(otherwise it will not calibrate until you wake it up, registering the powerbutton press during the calibrate)
then do:
echo 1 > /proc/acc_cal
Now run "dmesg | grep acc", you should see something like this:
<4>[ 1497.846716] acc calibrating 1
<4>[ 1497.875330] acc new offset 8 0 0
If you do congrats, you've successfully recalibrated your tablet.