T2中使用1236c+mxl603或者608时在有信号强度界面待机死机的问题。
这个问题是由于MSD1236C中互斥锁没释放导致的死机,在获取信号强度的函数MDrv_Demod_GetPWR中603的分支里面如果获取MxLWare603_API_ReqTunerRxPower失败这个时候只是将IIC Bypass关闭,上面的加的互斥锁没有释放导致死机。
if (MsOS_ObtainMutex(pMSB1236C->s32_MSB1236C_Mutex, COFDMDMD_MUTEX_TIMEOUT) == FALSE)
{
PRINTE(("MDrv_Demod_GetPWR:Obtain mutex failed !!!\n"));
return FALSE;
}
else
{
*ps32Signal = 0;
if (E_DEMOD_LOCK == MSB1236C_DTV_DVB_T_GetLockStatus())
{
#if(FRONTEND_TUNER_TYPE == TUNER_MXL603)
float fSignal;
MSB1236C_IIC_Bypass_Mode(TRUE);
if (MXL_SUCCESS != MxLWare603_API_ReqTunerRxPower(MXL603_I2C_ADDR, &fSignal))
{
PRINTE(("MxLWare603_API_ReqTunerRxPower failed !!!\n"));
MSB1236C_IIC_Bypass_Mode(FALSE);
return FALSE;
}
MSB1236C_IIC_Bypass_Mode(FALSE);
*ps32Signal = (MS_U32)MSB1236C_DTV_GetSignalStrengthWithRFPower(fSignal);
#else
*ps32Signal = (MS_U32)MSB1236C_DTV_GetSignalStrength();
#endif
应该如下修改,
if (MXL_SUCCESS != MxLWare603_API_ReqTunerRxPower(MXL603_I2C_ADDR, &fSignal))
{
PRINTE(("MxLWare603_API_ReqTunerRxPower failed !!!\n"));
MSB1236C_IIC_Bypass_Mode(FALSE);
MsOS_ReleaseMutex(pMSB1236C->s32_MSB1236C_Mutex);
return FALSE;
}
|