The call issue of CM10 ROMs is present for some people. There will be a trouble when making a call each other could not hear voice or the other side would only hear big noise.
If you reboot the phone once a day (e.g. at the morning) it usually won't occur during the whole day, sometimes it will not fix the problem by reboot.
I checked the offical V30C and V28G radio logcat , and found it is differnet to the CM10 radio logcat.
you can verify this by
when making a call.
The offical V28G logcat radio is something like this:
As you can see,
1. when the call start, the ril send
LGE_SET_CPATH 3
LGE_SET_CPATH 1 (if you make the call via headset, it will be LGE_SET_CPATH 2)
2. during the call session, the ril send
LGE_SET_CPATH 8
3. after ending the call , the ril send
LGE_SET_CPATH 0
so, I make a fix for the LGEInfineon.java(thank rmcc provide the original code, if I didn't remenber wrong...), try to simulate this command sequence in it(not very accu, but I think it will be OK).
you can put this file in your source tree “device/lge/star-common/ril/telephony/java/com/android/internal/telephony”, then rebuild the CM10 source.
Hope this can fix the CM10 call bug.
PS: lipisak built a CM10 here: http://xdaforums.com/showpost.php?p=34672614&postcount=47
[WARNING]: I am not sure whether this fix will fix the audio bug or not, so it is a DEV test....
2012/11/27:
Another found : In V30C lge-ril.so, it used /dev/block/mmcblk0p5 as a datastorge for write_nvidia function, which will write IMEI, SWV, SWOV, INFO in it. But as CM partitions definition, /dev/block/mmcblk0p5 is used as boot.img....... I am not sure it will cause problem or not. But a dirty fix of lge-ril.so, which will use a hexeditor modified the binary code, would workaround this.
If in your logcat -b radio found these: write IMEI ok, write IMEI ng. write SWV ok, write SWV ng, write SWOV ok, write SWOV ng, write INFO ok, write INFO ng. then your boot.img would be corrupted.[Thank wkpark pointed out that In V30C, /dev/block/mmcblk0p5 is /misc not /data/ve, /dev/block/mmcblk0p10 is the /data/ve in V30C]
2012/11/29:
Fix MSC partition problem[PLEASE NOTE: THIS ASSUME YOU USE THE OLD GB BOOTLOADER & PARTITION, not OFFICIAL BOOTLOADER & PARTITION]
1. use the attached liblgeril.so, this is a quick fix in binary : mmcblk0p5=>mmcblk0p3
2. modified your kernel source code arch/arm/mach-tegra/lge/star/include/lge/board-star-nv.h
then recompile your kernel.
3. fix init.rc. modify the rild group id:
4. fix uevent.tegra.rc, add a line at bottom:
2012/12/04:
Found a temp fix for this, when you encounter the call bug, just reboot into recovery, do nothing, reboot. This will fix the phone for a while..
2012/12/07:
By compare linux 3.6.9 kernel source to V30C kernel source code, I found that the V30C kernel source wm8994.c has some bugs in it. There are a copy/paste bug and many "switch" "case" "break" mismatch bugs. I made a patch file to fix this. Goto your kernel source sound/soc/codes, input patch wm8994.c < wm8994.diff
2012/12/25:
Another fix for audio problem:
During the wm8994 suspend/resume , it use a unsafe version of read/write registers. I just modify the code , use a mutex lock protect version of register read/write.
Hope this can make some help.
https://github.com/marsgod/lge-kernel-star/commit/02fab112d1dc63387b4474fbcf99e7bb9d617236
I guess when an incoming call trigger, the wm8994 resume, it will take a long time 'restore' the wm8994 registers(because it use the I2C interface), if this process were interrupted by another read/write wm8994 attemp, it will cause problem.
2012/12/29:
Based on above patch, I built two kernel for P990 & SU660, as the attached files. Please have a try.
Just use CWM flash these zip files. The zip file will only update your kernel & modules, there is NO need make a factory reset or clean your cache/data.
EDIT: for P990 kernel , please check http://xdaforums.com/showpost.php?p=36032539&postcount=661
If you reboot the phone once a day (e.g. at the morning) it usually won't occur during the whole day, sometimes it will not fix the problem by reboot.
I checked the offical V30C and V28G radio logcat , and found it is differnet to the CM10 radio logcat.
you can verify this by
Code:
adb logcat -b radio
when making a call.
The offical V28G logcat radio is something like this:
Code:
D/GSM ( 351): [getVoiceMailNumber] isNetworkRoaming: false
D/PHONE ( 351): VM: PhoneSubInfo.getVoiceMailNUmber:
D/GSM ( 351): isTwoDigitShortCode
D/GSM ( 351): dialing w/ mmi 'null'...
D/GSM ( 351): [GSMConn] acquireWakeLock
D/RILJ ( 351): [0162]> DIAL
D/RILC ( 88): [0162]> DIAL (num=88888888,clir=0)
D/RILC ( 88): [0162]< DIAL
D/RILJ ( 351): [0162]< DIAL
D/RILC ( 88): [UNSL]< RIL_UNSOL_LGE_XCALLSTAT {1,2}
D/RILC ( 88): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [UNSL]< LGE_XCALLSTAT
D/RILJ ( 351): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [0163]> LGE_SET_CPATH 3
D/RILC ( 88): [0163]> RIL_REQUEST_LGE_SET_CPATH (3)
D/RILJ ( 351): [0164]> LGE_SET_CPATH 1
D/RILC ( 88): [0164]> RIL_REQUEST_LGE_SET_CPATH (1)
D/RILC ( 88): [0163]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0163]< LGE_SET_CPATH
D/RILC ( 88): [0164]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0164]< LGE_SET_CPATH
D/RILJ ( 351): [0165]> GET_CURRENT_CALLS
D/RILC ( 88): [0165]> GET_CURRENT_CALLS
D/RILC ( 88): [0166]> GET_CURRENT_CALLS
D/RILC ( 88): [0165]< GET_CURRENT_CALLS {[id=1,DIALING,toa=129,norm,mo,als=0,voc,noevp,88888888,cli=0,name='(null)',0}
D/RILJ ( 351): [0165]< GET_CURRENT_CALLS [id=1,DIALING,toa=129,norm,mo,0,voc,noevp,,cli=1,,0]
D/RILC ( 88): [0166]< GET_CURRENT_CALLS {[id=1,DIALING,toa=129,norm,mo,als=0,voc,noevp,88888888,cli=0,name='(null)',0}
D/RILJ ( 351): [0166]< GET_CURRENT_CALLS [id=1,DIALING,toa=129,norm,mo,0,voc,noevp,,cli=1,,0]
D/RILJ ( 351): [0167]> LGE_SET_CPATH 8
D/RILC ( 88): [0167]> RIL_REQUEST_LGE_SET_CPATH (8)
D/RILJ ( 351): [0168]> LGE_SET_CPATH 8
D/RILC ( 88): [0168]> RIL_REQUEST_LGE_SET_CPATH (8)
D/RILC ( 88): [0167]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0167]< LGE_SET_CPATH
D/RILJ ( 351): [0168]< LGE_SET_CPATH
D/RILJ ( 351): [0169]> LGE_SET_CPATH 8
D/RILC ( 88): [0169]> RIL_REQUEST_LGE_SET_CPATH (8)
D/RILC ( 88): [0169]< RIL_REQUEST_LGE_SET_CPATH
D/RILC ( 88): [0170]> RIL_REQUEST_LGE_SET_CPATH (8)
D/RILC ( 88): [0170]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0170]< LGE_SET_CPATH
D/RILC ( 88): [UNSL]< RIL_UNSOL_LGE_XCALLSTAT {1,3}
D/RILJ ( 351): [UNSL]< LGE_XCALLSTAT
D/RILC ( 88): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILC ( 88): [UNSL]< RIL_UNSOL_LGE_XCALLSTAT {1,3}
D/RILC ( 88): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [0171]> GET_CURRENT_CALLS
D/RILJ ( 351): [UNSL]< LGE_XCALLSTAT
D/RILC ( 88): [0171]> GET_CURRENT_CALLS
D/RILJ ( 351): [0172]> GET_CURRENT_CALLS
D/RILC ( 88): [0172]> GET_CURRENT_CALLS
D/RILC ( 88): [0171]< GET_CURRENT_CALLS {[id=1,ALERTING,toa=129,norm,mo,als=0,voc,noevp,88888888,cli=0,name='(null)',0}
D/RILJ ( 351): [0171]< GET_CURRENT_CALLS [id=1,ALERTING,toa=129,norm,mo,0,voc,noevp,,cli=1,,0]
D/RILC ( 88): [0172]< GET_CURRENT_CALLS {[id=1,ALERTING,toa=129,norm,mo,als=0,voc,noevp,88888888,cli=0,name='(null)',0}
D/RILJ ( 351): [0172]< GET_CURRENT_CALLS [id=1,ALERTING,toa=129,norm,mo,0,voc,noevp,,cli=1,,0]
D/RILJ ( 351): [0173]> LGE_SET_CPATH 8
D/RILC ( 88): [0173]> RIL_REQUEST_LGE_SET_CPATH (8)
D/RILC ( 88): [0173]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0173]< LGE_SET_CPATH
D/RILC ( 88): [UNSL]< RIL_UNSOL_LGE_XCALLSTAT {1,7}
D/RILJ ( 351): [UNSL]< LGE_XCALLSTAT
D/RILC ( 88): [UNSL]< RIL_UNSOL_LGE_XCALLSTAT {1,0}
D/RILC ( 88): [UNSL]< RIL_UNSOL_LGE_COLP {88888888,type=129,subaddr=,satype=-1, alpha=}
D/RILC ( 88): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [UNSL]< LGE_XCALLSTAT
D/RILJ ( 351): [UNSL]< LGE_COLP COLP { number: 88888888, type: 129, subaddr:, satype: -1, alpha: }
D/RILJ ( 351): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [0174]> GET_CURRENT_CALLS
D/RILC ( 88): [0174]> GET_CURRENT_CALLS
D/RILC ( 88): [0174]< GET_CURRENT_CALLS {[id=1,ACTIVE,toa=129,norm,mo,als=0,voc,noevp,88888888,cli=0,name='(null)',0}
D/RILJ ( 351): [0175]> LGE_SET_CPATH 8
D/RILJ ( 351): [0174]< GET_CURRENT_CALLS [id=1,ACTIVE,toa=129,norm,mo,0,voc,noevp,,cli=1,,0]
D/RILC ( 88): [0175]> RIL_REQUEST_LGE_SET_CPATH (8)
D/RILC ( 88): [0175]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0175]< LGE_SET_CPATH
D/RILJ ( 351): [0176]> LGE_SET_CPATH 8
D/RILC ( 88): [0176]> RIL_REQUEST_LGE_SET_CPATH (8)
D/RILC ( 88): [0176]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0176]< LGE_SET_CPATH
D/RILC ( 88): [UNSL]< UNSOL_SIGNAL_STRENGTH {[signalStrength=18,bitErrorRate=-1, CDMA_SS.dbm=-1,CDMA_SSecio=-1, EVDO_SS.dbm=-1,EVDO_SS.ecio=-1, EVDO_SS.signalNoiseRatio=-1, LTE_SS.signalStrength=-1,LTE_SS.rsrp=-1,LTE_SS.rsrq=-1, LTE_SS.rssnr=-1,LTE_SS.cqi=-1]}
D/RILJ ( 351): [0177]> LGE_HANG_UP_CALL
D/RILC ( 88): [0177]> RIL_REQUEST_LGE_HANG_UP_CALL
D/RILC ( 88): [0177]< RIL_REQUEST_LGE_HANG_UP_CALL
D/RILJ ( 351): [0177]< LGE_HANG_UP_CALL
D/RILJ ( 351): [0178]> GET_CURRENT_CALLS
D/RILC ( 88): [0178]> GET_CURRENT_CALLS
D/RILC ( 88): [0178]< GET_CURRENT_CALLS {[id=1,ACTIVE,toa=129,norm,mo,als=0,voc,noevp,88888888,cli=0,name='(null)',0}
D/RILJ ( 351): [0178]< GET_CURRENT_CALLS [id=1,ACTIVE,toa=129,norm,mo,0,voc,noevp,,cli=1,,0]
D/RILJ ( 351): [0179]> LGE_SET_CPATH 8
D/RILC ( 88): [0179]> RIL_REQUEST_LGE_SET_CPATH (8)
D/RILC ( 88): [0179]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0179]< LGE_SET_CPATH
D/RILC ( 88): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILC ( 88): [UNSL]< RIL_UNSOL_LGE_XCALLSTAT {1,6}
D/RILC ( 88): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [UNSL]< LGE_XCALLSTAT
D/RILJ ( 351): [UNSL]< UNSOL_RESPONSE_CALL_STATE_CHANGED
D/RILJ ( 351): [0180]> GET_CURRENT_CALLS
D/RILC ( 88): [0180]> GET_CURRENT_CALLS
D/RILJ ( 351): [0181]> GET_CURRENT_CALLS
D/RILC ( 88): [0181]> GET_CURRENT_CALLS
D/RILC ( 88): [0180]< GET_CURRENT_CALLS }
D/RILJ ( 351): [0180]< GET_CURRENT_CALLS
D/RILC ( 88): [0181]< GET_CURRENT_CALLS }
D/RILJ ( 351): [0181]< GET_CURRENT_CALLS
D/RILJ ( 351): [0182]> LGE_SET_CPATH 0
D/RILC ( 88): [0182]> RIL_REQUEST_LGE_SET_CPATH (0)
D/RILC ( 88): [0182]< RIL_REQUEST_LGE_SET_CPATH
D/RILJ ( 351): [0182]< LGE_SET_CPATH
D/RILC ( 88): [UNSL]< UNSOL_SIGNAL_STRENGTH {[signalStrength=19,bitErrorRate=-1, CDMA_SS.dbm=-1,CDMA_SSecio=-1, EVDO_SS.dbm=-1,EVDO_SS.ecio=-1, EVDO_SS.signalNoiseRatio=-1, LTE_SS.signalStrength=-1,LTE_SS.rsrp=-1,LTE_SS.rsrq=-1, LTE_SS.rssnr=-1,LTE_SS.cqi=-1]}
As you can see,
1. when the call start, the ril send
LGE_SET_CPATH 3
LGE_SET_CPATH 1 (if you make the call via headset, it will be LGE_SET_CPATH 2)
2. during the call session, the ril send
LGE_SET_CPATH 8
3. after ending the call , the ril send
LGE_SET_CPATH 0
so, I make a fix for the LGEInfineon.java(thank rmcc provide the original code, if I didn't remenber wrong...), try to simulate this command sequence in it(not very accu, but I think it will be OK).
you can put this file in your source tree “device/lge/star-common/ril/telephony/java/com/android/internal/telephony”, then rebuild the CM10 source.
Hope this can fix the CM10 call bug.
PS: lipisak built a CM10 here: http://xdaforums.com/showpost.php?p=34672614&postcount=47
[WARNING]: I am not sure whether this fix will fix the audio bug or not, so it is a DEV test....
2012/11/27:
Another found : In V30C lge-ril.so, it used /dev/block/mmcblk0p5 as a datastorge for write_nvidia function, which will write IMEI, SWV, SWOV, INFO in it. But as CM partitions definition, /dev/block/mmcblk0p5 is used as boot.img....... I am not sure it will cause problem or not. But a dirty fix of lge-ril.so, which will use a hexeditor modified the binary code, would workaround this.
If in your logcat -b radio found these: write IMEI ok, write IMEI ng. write SWV ok, write SWV ng, write SWOV ok, write SWOV ng, write INFO ok, write INFO ng. then your boot.img would be corrupted.[Thank wkpark pointed out that In V30C, /dev/block/mmcblk0p5 is /misc not /data/ve, /dev/block/mmcblk0p10 is the /data/ve in V30C]
2012/11/29:
Fix MSC partition problem[PLEASE NOTE: THIS ASSUME YOU USE THE OLD GB BOOTLOADER & PARTITION, not OFFICIAL BOOTLOADER & PARTITION]
1. use the attached liblgeril.so, this is a quick fix in binary : mmcblk0p5=>mmcblk0p3
2. modified your kernel source code arch/arm/mach-tegra/lge/star/include/lge/board-star-nv.h
Code:
#ifdef CONFIG_CM_BOOTLOADER_COMPAT
#define LGE_NVDATA_PARTITION "/dev/block/mmcblk0p3"
#else
#define LGE_NVDATA_PARTITION "/dev/block/mmcblk0p5"
#endif
3. fix init.rc. modify the rild group id:
Code:
group radio cache inet misc audio sdcard_rw log system media_rw
Code:
/dev/block/mmcblk0p3 0660 system radio
2012/12/04:
Found a temp fix for this, when you encounter the call bug, just reboot into recovery, do nothing, reboot. This will fix the phone for a while..
2012/12/07:
By compare linux 3.6.9 kernel source to V30C kernel source code, I found that the V30C kernel source wm8994.c has some bugs in it. There are a copy/paste bug and many "switch" "case" "break" mismatch bugs. I made a patch file to fix this. Goto your kernel source sound/soc/codes, input patch wm8994.c < wm8994.diff
2012/12/25:
Another fix for audio problem:
During the wm8994 suspend/resume , it use a unsafe version of read/write registers. I just modify the code , use a mutex lock protect version of register read/write.
Hope this can make some help.
https://github.com/marsgod/lge-kernel-star/commit/02fab112d1dc63387b4474fbcf99e7bb9d617236
I guess when an incoming call trigger, the wm8994 resume, it will take a long time 'restore' the wm8994 registers(because it use the I2C interface), if this process were interrupted by another read/write wm8994 attemp, it will cause problem.
2012/12/29:
Based on above patch, I built two kernel for P990 & SU660, as the attached files. Please have a try.
Just use CWM flash these zip files. The zip file will only update your kernel & modules, there is NO need make a factory reset or clean your cache/data.
EDIT: for P990 kernel , please check http://xdaforums.com/showpost.php?p=36032539&postcount=661
Attachments
Last edited: