16c92544dSBjoern A. Zeeb /* SPDX-License-Identifier: ISC */
26c92544dSBjoern A. Zeeb /*
36c92544dSBjoern A. Zeeb  * Copyright (C) 2016 Felix Fietkau <nbd@nbd.name>
46c92544dSBjoern A. Zeeb  */
56c92544dSBjoern A. Zeeb 
66c92544dSBjoern A. Zeeb #ifndef __MT76x2_EEPROM_H
76c92544dSBjoern A. Zeeb #define __MT76x2_EEPROM_H
86c92544dSBjoern A. Zeeb 
96c92544dSBjoern A. Zeeb #include "../mt76x02_eeprom.h"
106c92544dSBjoern A. Zeeb 
116c92544dSBjoern A. Zeeb enum mt76x2_cal_channel_group {
126c92544dSBjoern A. Zeeb 	MT_CH_5G_JAPAN,
136c92544dSBjoern A. Zeeb 	MT_CH_5G_UNII_1,
146c92544dSBjoern A. Zeeb 	MT_CH_5G_UNII_2,
156c92544dSBjoern A. Zeeb 	MT_CH_5G_UNII_2E_1,
166c92544dSBjoern A. Zeeb 	MT_CH_5G_UNII_2E_2,
176c92544dSBjoern A. Zeeb 	MT_CH_5G_UNII_3,
186c92544dSBjoern A. Zeeb 	__MT_CH_MAX
196c92544dSBjoern A. Zeeb };
206c92544dSBjoern A. Zeeb 
216c92544dSBjoern A. Zeeb struct mt76x2_tx_power_info {
226c92544dSBjoern A. Zeeb 	u8 target_power;
236c92544dSBjoern A. Zeeb 
246c92544dSBjoern A. Zeeb 	s8 delta_bw40;
256c92544dSBjoern A. Zeeb 	s8 delta_bw80;
266c92544dSBjoern A. Zeeb 
276c92544dSBjoern A. Zeeb 	struct {
286c92544dSBjoern A. Zeeb 		s8 tssi_slope;
296c92544dSBjoern A. Zeeb 		s8 tssi_offset;
306c92544dSBjoern A. Zeeb 		s8 target_power;
316c92544dSBjoern A. Zeeb 		s8 delta;
326c92544dSBjoern A. Zeeb 	} chain[MT_MAX_CHAINS];
336c92544dSBjoern A. Zeeb };
346c92544dSBjoern A. Zeeb 
356c92544dSBjoern A. Zeeb struct mt76x2_temp_comp {
366c92544dSBjoern A. Zeeb 	u8 temp_25_ref;
376c92544dSBjoern A. Zeeb 	int lower_bound; /* J */
386c92544dSBjoern A. Zeeb 	int upper_bound; /* J */
396c92544dSBjoern A. Zeeb 	unsigned int high_slope; /* J / dB */
406c92544dSBjoern A. Zeeb 	unsigned int low_slope; /* J / dB */
416c92544dSBjoern A. Zeeb };
426c92544dSBjoern A. Zeeb 
43cbb3ec25SBjoern A. Zeeb void mt76x2_get_rate_power(struct mt76x02_dev *dev, struct mt76x02_rate_power *t,
446c92544dSBjoern A. Zeeb 			   struct ieee80211_channel *chan);
456c92544dSBjoern A. Zeeb void mt76x2_get_power_info(struct mt76x02_dev *dev,
466c92544dSBjoern A. Zeeb 			   struct mt76x2_tx_power_info *t,
476c92544dSBjoern A. Zeeb 			   struct ieee80211_channel *chan);
486c92544dSBjoern A. Zeeb int mt76x2_get_temp_comp(struct mt76x02_dev *dev, struct mt76x2_temp_comp *t);
496c92544dSBjoern A. Zeeb void mt76x2_read_rx_gain(struct mt76x02_dev *dev);
506c92544dSBjoern A. Zeeb 
516c92544dSBjoern A. Zeeb static inline bool
mt76x2_has_ext_lna(struct mt76x02_dev * dev)526c92544dSBjoern A. Zeeb mt76x2_has_ext_lna(struct mt76x02_dev *dev)
536c92544dSBjoern A. Zeeb {
546c92544dSBjoern A. Zeeb 	u32 val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1);
556c92544dSBjoern A. Zeeb 
566c92544dSBjoern A. Zeeb 	if (dev->mphy.chandef.chan->band == NL80211_BAND_2GHZ)
576c92544dSBjoern A. Zeeb 		return val & MT_EE_NIC_CONF_1_LNA_EXT_2G;
586c92544dSBjoern A. Zeeb 	else
596c92544dSBjoern A. Zeeb 		return val & MT_EE_NIC_CONF_1_LNA_EXT_5G;
606c92544dSBjoern A. Zeeb }
616c92544dSBjoern A. Zeeb 
626c92544dSBjoern A. Zeeb static inline bool
mt76x2_temp_tx_alc_enabled(struct mt76x02_dev * dev)636c92544dSBjoern A. Zeeb mt76x2_temp_tx_alc_enabled(struct mt76x02_dev *dev)
646c92544dSBjoern A. Zeeb {
656c92544dSBjoern A. Zeeb 	u16 val;
666c92544dSBjoern A. Zeeb 
676c92544dSBjoern A. Zeeb 	val = mt76x02_eeprom_get(dev, MT_EE_TX_POWER_EXT_PA_5G);
686c92544dSBjoern A. Zeeb 	if (!(val & BIT(15)))
696c92544dSBjoern A. Zeeb 		return false;
706c92544dSBjoern A. Zeeb 
716c92544dSBjoern A. Zeeb 	return mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1) &
726c92544dSBjoern A. Zeeb 	       MT_EE_NIC_CONF_1_TEMP_TX_ALC;
736c92544dSBjoern A. Zeeb }
746c92544dSBjoern A. Zeeb 
756c92544dSBjoern A. Zeeb static inline bool
mt76x2_tssi_enabled(struct mt76x02_dev * dev)766c92544dSBjoern A. Zeeb mt76x2_tssi_enabled(struct mt76x02_dev *dev)
776c92544dSBjoern A. Zeeb {
786c92544dSBjoern A. Zeeb 	return !mt76x2_temp_tx_alc_enabled(dev) &&
796c92544dSBjoern A. Zeeb 	       (mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1) &
806c92544dSBjoern A. Zeeb 		MT_EE_NIC_CONF_1_TX_ALC_EN);
816c92544dSBjoern A. Zeeb }
826c92544dSBjoern A. Zeeb 
836c92544dSBjoern A. Zeeb #endif
84