NvBool Adt7461TemperatureGet( NvOdmTmonDeviceHandle hTmon, NvOdmTmonZoneID ZoneId, NvS32* pDegreesC) { NvU8 Data; NvBool ExtRange; ADT7461ChannelID ChannelId; ADT7461PrivData* pPrivData; const ADT7461RegisterInfo* pReg; NV_ASSERT(hTmon && hTmon->pPrivate && pDegreesC); pPrivData = hTmon->pPrivate; ExtRange = ((pPrivData->ShadowConfig & ADT7461ConfigBits_ExtendedRange) != 0); ChannelId = pPrivData->ConnectivityMap[ZoneId]; pReg = &pPrivData->pDeviceInfo->Channels[ChannelId].Tdata; if(!Adt7461ReadReg(pPrivData, pReg, &Data)) return NV_FALSE; *pDegreesC = ADT7461_T_DATA_TO_VALUE(ExtRange, Data); /* NVODM_ADT7461_PRINTF(("Adt7461TemperatureGet ChannelId=%d,ExtRange=%d,Data=%d,ZoneId=%d,t=%d\n",ChannelId,ExtRange,Data,ZoneId,*pDegreesC)); pReg = &pPrivData->pDeviceInfo->Channels[1].Tdata; if(!Adt7461ReadReg(pPrivData, pReg, &Data)) return NV_FALSE; NVODM_ADT7461_PRINTF(("Adt7461TemperatureGet ChannelId=1,Data=%d\n",Data));//*/ return NV_TRUE; }
NvBool Adt7461ParameterConfig( NvOdmTmonDeviceHandle hTmon, NvOdmTmonZoneID ZoneId, NvOdmTmonConfigParam ParamId, NvS32* pSetting) { NvU8 Data; NvBool ExtRange, OdmProtected; ADT7461PrivData* pPrivData; const ADT7461RegisterInfo* pReg; const ADT7461ChannelInfo* pChannel; NV_ASSERT(hTmon && hTmon->pPrivate && pSetting); pPrivData = hTmon->pPrivate; #if PRE_ER_GMT_THERMALSENSOR ExtRange = 0; /* not support ADT thermal sensor*/ #else ExtRange = ((pPrivData->ShadowConfig & ADT7461ConfigBits_ExtendedRange) != 0); #endif pChannel = &pPrivData->pDeviceInfo->Channels[( pPrivData->ConnectivityMap[ZoneId])]; switch (ParamId) { case NvOdmTmonConfigParam_IntrLimitHigh: #if PRE_ER_WORKAROUND return NV_TRUE; #endif pReg = &pChannel->IntrLimitHigh; OdmProtected = pChannel->ChannelPolicy.IntrLimitsOdmProtected; break; case NvOdmTmonConfigParam_IntrLimitLow: #if PRE_ER_WORKAROUND return NV_TRUE; #endif pReg = &pChannel->IntrLimitLow; OdmProtected = pChannel->ChannelPolicy.IntrLimitsOdmProtected; break; case NvOdmTmonConfigParam_HwLimitCrit: #if PRE_ER_WORKAROUND return NV_TRUE; #endif pReg = &pChannel->ComparatorLimit; OdmProtected = pChannel->ChannelPolicy.HwLimitCritOdmProtected; break; case NvOdmTmonConfigParam_SampleMs: OdmProtected = pChannel->ChannelPolicy.RateOdmProtected; return Adt7461ConfigureSampleInterval( pPrivData, OdmProtected, pSetting); default: // unsupported parameter *pSetting = ODM_TMON_PARAMETER_UNSPECIFIED; return NV_TRUE; } // Common processing for temperature limits configuration if ((OdmProtected) || ((*pSetting) == ODM_TMON_PARAMETER_UNSPECIFIED)) { // Read ADT7461 register and convert data to current parameter value if(!Adt7461ReadReg(pPrivData, pReg, &Data)) return NV_FALSE; *pSetting = ADT7461_T_DATA_TO_VALUE(ExtRange, Data); } else { // Clip target setting to temperature range if ((*pSetting) > ADT7461_T_RANGE_LIMIT_HIGH(ExtRange)) *pSetting = ADT7461_T_RANGE_LIMIT_HIGH(ExtRange); else if ((*pSetting) < ADT7461_T_RANGE_LIMIT_LOW(ExtRange)) *pSetting = ADT7461_T_RANGE_LIMIT_LOW(ExtRange); // Convert new configuration setting and write to ADT7461 register Data = ADT7461_T_VALUE_TO_DATA(ExtRange, *pSetting); if(!Adt7461WriteReg(pPrivData, pReg, Data)) return NV_FALSE; } return NV_TRUE; }
NvBool Adt7461TemperatureGet( NvOdmTmonDeviceHandle hTmon, NvOdmTmonZoneID ZoneId, NvS32* pDegreesC) { NvU8 Data; NvBool ExtRange; ADT7461ChannelID ChannelId; ADT7461PrivData* pPrivData; const ADT7461RegisterInfo* pReg; #if (DEBUG_THERMALSENSOR || CONFIG_TEGRA_TMON_PROC) ADT7461RegisterInfo reg; int i; #endif NV_ASSERT(hTmon && hTmon->pPrivate && pDegreesC); pPrivData = hTmon->pPrivate; #if PRE_ER_GMT_THERMALSENSOR ExtRange = 0; /* not support ADT thermal sensor*/ #else ExtRange = ((pPrivData->ShadowConfig & ADT7461ConfigBits_ExtendedRange) != 0); #endif ChannelId = pPrivData->ConnectivityMap[ZoneId]; pReg = &pPrivData->pDeviceInfo->Channels[ChannelId].Tdata; if(!Adt7461ReadReg(pPrivData, pReg, &Data)) return NV_FALSE; *pDegreesC = ADT7461_T_DATA_TO_VALUE(ExtRange, Data); #if CONFIG_TEGRA_TMON_PROC reg.RdAddr = pReg->RdAddr - 1; /* local temperature register address */ reg.WrAddr = pReg->WrAddr - 1; if(!Adt7461ReadReg(pPrivData, ®, &Data)) return NV_FALSE; /* export temperature to /proc/localtmon */ localTemperatureC = (NvS32)ADT7461_T_DATA_TO_VALUE(ExtRange, Data); #endif #if DEBUG_THERMALSENSOR printk("ChannelId:0x%x\n", ChannelId); printk("Temperature Data register pReg:0x%x\n", pReg); printk("Temperature *pDegreesC:0x%x\n", *pDegreesC); i = 0 ; reg.RdAddr = pReg->RdAddr - 1; reg.WrAddr = pReg->WrAddr - 1; while(i < 40 ){ if(!Adt7461ReadReg(pPrivData, ®, &Data)) return NV_FALSE; printk("register pReg:0x%x\n", reg.RdAddr); printk("Data:0x%x, %d\n", ADT7461_T_DATA_TO_VALUE(ExtRange, Data), (NvS32)ADT7461_T_DATA_TO_VALUE(ExtRange, Data)); i++; reg.RdAddr++; } #endif return NV_TRUE; }