icezhou 发表于 2016-6-1 17:09:10

T2中使用1236c+mxl603或者608时在有信号强度界面待机死机的问题

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;
            }


bean.yang 发表于 2016-6-1 17:10:18

公版缺陷
页: [1]
查看完整版本: T2中使用1236c+mxl603或者608时在有信号强度界面待机死机的问题