Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3717957c authored by Wojciech Dubowik's avatar Wojciech Dubowik Committed by Kalle Valo
Browse files

ath9k: Display calibration data piers in debugfs



Display per frequency calibration data in dump_modal
debugfs entry including reference power, voltage,
tx temperature and noise floor.

Example of chain 0 of OEM card (dump from modal_eeprom):
Chain 0
Freq	 ref	volt	temp	nf_Cal	nf_Pow	rx_temp
5180	-30	0	137	0	0	0
5320	-24	0	137	0	0	0
5500	-15	0	137	0	0	0
5620	-10	0	137	0	0	0
5700	-15	0	137	0	0	0
5745	-16	0	135	0	0	0
5785	-19	0	136	0	0	0
5825	-22	0	136	0	0	0

Example of a card with calibrated noise floor.
Chain 0
Freq	 ref	volt	temp	nf_Cal	nf_Pow	rx_temp
4890	-49	0	128	-107	-97	124
5100	-23	0	128	-101	-96	124
5180	-18	0	128	-101	-96	124
5300	-12	0	128	-102	-97	124
5500	-9	0	128	-101	-97	125
5640	-17	0	128	-101	-98	124
5785	-25	0	128	-101	-98	124
5940	-33	0	128	-106	-99	124

Signed-off-by: default avatarWojciech Dubowik <Wojciech.Dubowik@neratec.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 8da58553
Loading
Loading
Loading
Loading
+63 −1
Original line number Diff line number Diff line
@@ -3436,6 +3436,60 @@ static u32 ar9003_dump_modal_eeprom(char *buf, u32 len, u32 size,
	return len;
}

static u32 ar9003_dump_cal_data(struct ath_hw *ah, char *buf, u32 len, u32 size,
				bool is_2g)
{
	struct ar9300_eeprom *eep = &ah->eeprom.ar9300_eep;
	struct ar9300_base_eep_hdr *pBase;
	struct ar9300_cal_data_per_freq_op_loop *cal_pier;
	int cal_pier_nr;
	int freq;
	int i, j;

	pBase = &eep->baseEepHeader;

	if (is_2g)
		cal_pier_nr = AR9300_NUM_2G_CAL_PIERS;
	else
		cal_pier_nr = AR9300_NUM_5G_CAL_PIERS;

	for (i = 0; i < AR9300_MAX_CHAINS; i++) {
		if (!((pBase->txrxMask >> i) & 1))
			continue;

		len += snprintf(buf + len, size - len, "Chain %d\n", i);

		len += snprintf(buf + len, size - len,
			"Freq\t ref\tvolt\ttemp\tnf_cal\tnf_pow\trx_temp\n");

		for (j = 0; j < cal_pier_nr; j++) {
			if (is_2g) {
				cal_pier = &eep->calPierData2G[i][j];
				freq = 2300 + eep->calFreqPier2G[j];
			} else {
				cal_pier = &eep->calPierData5G[i][j];
				freq = 4800 + eep->calFreqPier5G[j] * 5;
			}

			len += snprintf(buf + len, size - len,
				"%d\t", freq);

			len += snprintf(buf + len, size - len,
				"%d\t%d\t%d\t%d\t%d\t%d\n",
				cal_pier->refPower,
				cal_pier->voltMeas,
				cal_pier->tempMeas,
				cal_pier->rxTempMeas ?
				N2DBM(cal_pier->rxNoisefloorCal) : 0,
				cal_pier->rxTempMeas ?
				N2DBM(cal_pier->rxNoisefloorPower) : 0,
				cal_pier->rxTempMeas);
		}
	}

	return len;
}

static u32 ath9k_hw_ar9003_dump_eeprom(struct ath_hw *ah, bool dump_base_hdr,
				       u8 *buf, u32 len, u32 size)
{
@@ -3447,10 +3501,18 @@ static u32 ath9k_hw_ar9003_dump_eeprom(struct ath_hw *ah, bool dump_base_hdr,
				 "%20s :\n", "2GHz modal Header");
		len = ar9003_dump_modal_eeprom(buf, len, size,
						&eep->modalHeader2G);
		len += scnprintf(buf + len, size - len,

		len += scnprintf(buf + len, size - len, "Calibration data\n");
		len = ar9003_dump_cal_data(ah, buf, len, size, true);

		len +=  snprintf(buf + len, size - len,
				 "%20s :\n", "5GHz modal Header");
		len = ar9003_dump_modal_eeprom(buf, len, size,
						&eep->modalHeader5G);

		len += snprintf(buf + len, size - len, "Calibration data\n");
		len = ar9003_dump_cal_data(ah, buf, len, size, false);

		goto out;
	}