162306a36Sopenharmony_ci/* SPDX-License-Identifier: ISC */
262306a36Sopenharmony_ci/* Copyright (C) 2019 MediaTek Inc. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef __MT7615_EEPROM_H
562306a36Sopenharmony_ci#define __MT7615_EEPROM_H
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include "mt7615.h"
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#define MT7615_EEPROM_DCOC_OFFSET		MT7615_EEPROM_SIZE
1162306a36Sopenharmony_ci#define MT7615_EEPROM_DCOC_SIZE			256
1262306a36Sopenharmony_ci#define MT7615_EEPROM_DCOC_COUNT		34
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#define MT7615_EEPROM_TXDPD_OFFSET		(MT7615_EEPROM_SIZE + \
1562306a36Sopenharmony_ci						 MT7615_EEPROM_DCOC_COUNT * \
1662306a36Sopenharmony_ci						 MT7615_EEPROM_DCOC_SIZE)
1762306a36Sopenharmony_ci#define MT7615_EEPROM_TXDPD_SIZE		216
1862306a36Sopenharmony_ci#define MT7615_EEPROM_TXDPD_COUNT		(44 + 3)
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define MT7615_EEPROM_FULL_SIZE			(MT7615_EEPROM_TXDPD_OFFSET + \
2162306a36Sopenharmony_ci						 MT7615_EEPROM_TXDPD_COUNT * \
2262306a36Sopenharmony_ci						 MT7615_EEPROM_TXDPD_SIZE)
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cienum mt7615_eeprom_field {
2562306a36Sopenharmony_ci	MT_EE_CHIP_ID =				0x000,
2662306a36Sopenharmony_ci	MT_EE_VERSION =				0x002,
2762306a36Sopenharmony_ci	MT_EE_MAC_ADDR =			0x004,
2862306a36Sopenharmony_ci	MT_EE_NIC_CONF_0 =			0x034,
2962306a36Sopenharmony_ci	MT_EE_NIC_CONF_1 =			0x036,
3062306a36Sopenharmony_ci	MT_EE_WIFI_CONF =			0x03e,
3162306a36Sopenharmony_ci	MT_EE_CALDATA_FLASH =			0x052,
3262306a36Sopenharmony_ci	MT_EE_TX0_2G_TARGET_POWER =		0x058,
3362306a36Sopenharmony_ci	MT_EE_TX0_5G_G0_TARGET_POWER =		0x070,
3462306a36Sopenharmony_ci	MT7663_EE_5G_RATE_POWER =		0x089,
3562306a36Sopenharmony_ci	MT_EE_TX1_5G_G0_TARGET_POWER =		0x098,
3662306a36Sopenharmony_ci	MT_EE_2G_RATE_POWER =			0x0be,
3762306a36Sopenharmony_ci	MT_EE_5G_RATE_POWER =			0x0d5,
3862306a36Sopenharmony_ci	MT7663_EE_TX0_2G_TARGET_POWER =		0x0e3,
3962306a36Sopenharmony_ci	MT_EE_EXT_PA_2G_TARGET_POWER =		0x0f2,
4062306a36Sopenharmony_ci	MT_EE_EXT_PA_5G_TARGET_POWER =		0x0f3,
4162306a36Sopenharmony_ci	MT_EE_TX2_5G_G0_TARGET_POWER =		0x142,
4262306a36Sopenharmony_ci	MT_EE_TX3_5G_G0_TARGET_POWER =		0x16a,
4362306a36Sopenharmony_ci	MT7663_EE_HW_CONF1 =			0x1b0,
4462306a36Sopenharmony_ci	MT7663_EE_TX0_5G_G0_TARGET_POWER =	0x245,
4562306a36Sopenharmony_ci	MT7663_EE_TX1_5G_G0_TARGET_POWER =	0x2b5,
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci	MT7615_EE_MAX =				0x3bf,
4862306a36Sopenharmony_ci	MT7622_EE_MAX =				0x3db,
4962306a36Sopenharmony_ci	MT7663_EE_MAX =				0x600,
5062306a36Sopenharmony_ci};
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci#define MT_EE_RATE_POWER_MASK			GENMASK(5, 0)
5362306a36Sopenharmony_ci#define MT_EE_RATE_POWER_SIGN			BIT(6)
5462306a36Sopenharmony_ci#define MT_EE_RATE_POWER_EN			BIT(7)
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#define MT_EE_CALDATA_FLASH_TX_DPD		BIT(0)
5762306a36Sopenharmony_ci#define MT_EE_CALDATA_FLASH_RX_CAL		BIT(1)
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#define MT_EE_NIC_CONF_TX_MASK			GENMASK(7, 4)
6062306a36Sopenharmony_ci#define MT_EE_NIC_CONF_RX_MASK			GENMASK(3, 0)
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci#define MT_EE_HW_CONF1_TX_MASK			GENMASK(2, 0)
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_ci#define MT_EE_NIC_CONF_TSSI_2G			BIT(5)
6562306a36Sopenharmony_ci#define MT_EE_NIC_CONF_TSSI_5G			BIT(6)
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci#define MT_EE_NIC_WIFI_CONF_BAND_SEL		GENMASK(5, 4)
6862306a36Sopenharmony_cienum mt7615_eeprom_band {
6962306a36Sopenharmony_ci	MT_EE_DUAL_BAND,
7062306a36Sopenharmony_ci	MT_EE_5GHZ,
7162306a36Sopenharmony_ci	MT_EE_2GHZ,
7262306a36Sopenharmony_ci	MT_EE_DBDC,
7362306a36Sopenharmony_ci};
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_cienum mt7615_channel_group {
7662306a36Sopenharmony_ci	MT_CH_5G_JAPAN,
7762306a36Sopenharmony_ci	MT_CH_5G_UNII_1,
7862306a36Sopenharmony_ci	MT_CH_5G_UNII_2A,
7962306a36Sopenharmony_ci	MT_CH_5G_UNII_2B,
8062306a36Sopenharmony_ci	MT_CH_5G_UNII_2E_1,
8162306a36Sopenharmony_ci	MT_CH_5G_UNII_2E_2,
8262306a36Sopenharmony_ci	MT_CH_5G_UNII_2E_3,
8362306a36Sopenharmony_ci	MT_CH_5G_UNII_3,
8462306a36Sopenharmony_ci	__MT_CH_MAX
8562306a36Sopenharmony_ci};
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_cistatic inline enum mt7615_channel_group
8862306a36Sopenharmony_cimt7615_get_channel_group(int channel)
8962306a36Sopenharmony_ci{
9062306a36Sopenharmony_ci	if (channel >= 184 && channel <= 196)
9162306a36Sopenharmony_ci		return MT_CH_5G_JAPAN;
9262306a36Sopenharmony_ci	if (channel <= 48)
9362306a36Sopenharmony_ci		return MT_CH_5G_UNII_1;
9462306a36Sopenharmony_ci	if (channel <= 64)
9562306a36Sopenharmony_ci		return MT_CH_5G_UNII_2A;
9662306a36Sopenharmony_ci	if (channel <= 114)
9762306a36Sopenharmony_ci		return MT_CH_5G_UNII_2E_1;
9862306a36Sopenharmony_ci	if (channel <= 144)
9962306a36Sopenharmony_ci		return MT_CH_5G_UNII_2E_2;
10062306a36Sopenharmony_ci	if (channel <= 161)
10162306a36Sopenharmony_ci		return MT_CH_5G_UNII_2E_3;
10262306a36Sopenharmony_ci	return MT_CH_5G_UNII_3;
10362306a36Sopenharmony_ci}
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_cistatic inline bool
10662306a36Sopenharmony_cimt7615_ext_pa_enabled(struct mt7615_dev *dev, enum nl80211_band band)
10762306a36Sopenharmony_ci{
10862306a36Sopenharmony_ci	u8 *eep = dev->mt76.eeprom.data;
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_ci	if (band == NL80211_BAND_5GHZ)
11162306a36Sopenharmony_ci		return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_5G);
11262306a36Sopenharmony_ci	else
11362306a36Sopenharmony_ci		return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_2G);
11462306a36Sopenharmony_ci}
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci#endif
117