drivers/staging/rtl8723bs/hal/HalPhyRf.c

Source file repositories/reference/linux-study-clean/drivers/staging/rtl8723bs/hal/HalPhyRf.c

File Facts

System
Linux kernel
Corpus path
drivers/staging/rtl8723bs/hal/HalPhyRf.c
Extension
.c
Size
10153 bytes
Lines
274
Domain
Driver Families
Bucket
drivers/staging
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

if (pDM_Odm->RFCalibrateInfo.ThermalValue_AVG[i]) {
			ThermalValue_AVG += pDM_Odm->RFCalibrateInfo.ThermalValue_AVG[i];
			ThermalValue_AVG_count++;
		}
	}

	/* Calculate Average ThermalValue after average enough times */
	if (ThermalValue_AVG_count) {
		ThermalValue = (u8)(ThermalValue_AVG / ThermalValue_AVG_count);
	}

	/* 4 5. Calculate delta, delta_LCK */
	/* delta" here is used to determine whether thermal value changes or not. */
	delta =
		(ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue) ?
		(ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue) :
		(pDM_Odm->RFCalibrateInfo.ThermalValue - ThermalValue);
	delta_LCK =
		(ThermalValue > pDM_Odm->RFCalibrateInfo.ThermalValue_LCK) ?
		(ThermalValue - pDM_Odm->RFCalibrateInfo.ThermalValue_LCK) :
		(pDM_Odm->RFCalibrateInfo.ThermalValue_LCK - ThermalValue);

	/* 4 6. If necessary, do LCK. */
	/*  Delta temperature is equal to or larger than 20 centigrade. */
	if (delta_LCK >= c.Threshold_IQK) {
		pDM_Odm->RFCalibrateInfo.ThermalValue_LCK = ThermalValue;
		if (c.PHY_LCCalibrate)
			(*c.PHY_LCCalibrate)(pDM_Odm);
	}

	/* 3 7. If necessary, move the index of swing table to adjust Tx power. */
	if (delta > 0 && pDM_Odm->RFCalibrateInfo.TxPowerTrackControl) {
		/* delta" here is used to record the absolute value of difference. */
		delta =
			ThermalValue > pHalData->EEPROMThermalMeter ?
			(ThermalValue - pHalData->EEPROMThermalMeter) :
			(pHalData->EEPROMThermalMeter - ThermalValue);

		if (delta >= TXPWR_TRACK_TABLE_SIZE)
			delta = TXPWR_TRACK_TABLE_SIZE - 1;

		/* 4 7.1 The Final Power Index = BaseIndex + PowerIndexOffset */
		if (ThermalValue > pHalData->EEPROMThermalMeter) {
			pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[RF_PATH_A] =
				pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_A];
			pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_A] =
				deltaSwingTableIdx_TUP_A[delta];

			/*  Record delta swing for mix mode power tracking */
			pDM_Odm->Absolute_OFDMSwingIdx[RF_PATH_A] =
				deltaSwingTableIdx_TUP_A[delta];

			if (c.RfPathCount > 1) {
				pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[RF_PATH_B] =
					pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_B];
				pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_B] =
					deltaSwingTableIdx_TUP_B[delta];

				/*  Record delta swing for mix mode power tracking */
				pDM_Odm->Absolute_OFDMSwingIdx[RF_PATH_B] =
					deltaSwingTableIdx_TUP_B[delta];
			}

		} else {
			pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[RF_PATH_A] =
				pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_A];
			pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_A] =
				-1 * deltaSwingTableIdx_TDOWN_A[delta];

			/*  Record delta swing for mix mode power tracking */
			pDM_Odm->Absolute_OFDMSwingIdx[RF_PATH_A] =
				-1 * deltaSwingTableIdx_TDOWN_A[delta];

			if (c.RfPathCount > 1) {
				pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[RF_PATH_B] =
					pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_B];
				pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[RF_PATH_B] =
					-1 * deltaSwingTableIdx_TDOWN_B[delta];

				 /*  Record delta swing for mix mode power tracking */
				pDM_Odm->Absolute_OFDMSwingIdx[RF_PATH_B] =
					-1 * deltaSwingTableIdx_TDOWN_B[delta];
			}
		}

		for (p = RF_PATH_A; p < c.RfPathCount; p++) {
			if (
				pDM_Odm->RFCalibrateInfo.DeltaPowerIndex[p] ==
				pDM_Odm->RFCalibrateInfo.DeltaPowerIndexLast[p]
			) /*  If Thermal value changes but lookup table value still the same */

Annotation

Implementation Notes