0001
0002
0003
0004
0005 #ifndef __RTW8723D_H__
0006 #define __RTW8723D_H__
0007
0008 enum rtw8723d_path {
0009 PATH_S1,
0010 PATH_S0,
0011 PATH_NR,
0012 };
0013
0014 enum rtw8723d_iqk_round {
0015 IQK_ROUND_0,
0016 IQK_ROUND_1,
0017 IQK_ROUND_2,
0018 IQK_ROUND_HYBRID,
0019 IQK_ROUND_SIZE,
0020 IQK_ROUND_INVALID = 0xff,
0021 };
0022
0023 enum rtw8723d_iqk_result {
0024 IQK_S1_TX_X,
0025 IQK_S1_TX_Y,
0026 IQK_S1_RX_X,
0027 IQK_S1_RX_Y,
0028 IQK_S0_TX_X,
0029 IQK_S0_TX_Y,
0030 IQK_S0_RX_X,
0031 IQK_S0_RX_Y,
0032 IQK_NR,
0033 IQK_SX_NR = IQK_NR / PATH_NR,
0034 };
0035
0036 struct rtw8723de_efuse {
0037 u8 mac_addr[ETH_ALEN];
0038 u8 vender_id[2];
0039 u8 device_id[2];
0040 u8 sub_vender_id[2];
0041 u8 sub_device_id[2];
0042 };
0043
0044 struct rtw8723d_efuse {
0045 __le16 rtl_id;
0046 u8 rsvd[2];
0047 u8 afe;
0048 u8 rsvd1[11];
0049
0050
0051 struct rtw_txpwr_idx txpwr_idx_table[4];
0052
0053 u8 channel_plan;
0054 u8 xtal_k;
0055 u8 thermal_meter;
0056 u8 iqk_lck;
0057 u8 pa_type;
0058 u8 lna_type_2g[2];
0059 u8 lna_type_5g[2];
0060 u8 rf_board_option;
0061 u8 rf_feature_option;
0062 u8 rf_bt_setting;
0063 u8 eeprom_version;
0064 u8 eeprom_customer_id;
0065 u8 tx_bb_swing_setting_2g;
0066 u8 res_c7;
0067 u8 tx_pwr_calibrate_rate;
0068 u8 rf_antenna_option;
0069 u8 rfe_option;
0070 u8 country_code[2];
0071 u8 res[3];
0072 struct rtw8723de_efuse e;
0073 };
0074
0075 extern const struct rtw_chip_info rtw8723d_hw_spec;
0076
0077
0078 #define GET_PHY_STAT_P0_PWDB(phy_stat) \
0079 le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8))
0080
0081
0082 #define GET_PHY_STAT_P1_PWDB_A(phy_stat) \
0083 le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(15, 8))
0084 #define GET_PHY_STAT_P1_PWDB_B(phy_stat) \
0085 le32_get_bits(*((__le32 *)(phy_stat) + 0x00), GENMASK(23, 16))
0086 #define GET_PHY_STAT_P1_RF_MODE(phy_stat) \
0087 le32_get_bits(*((__le32 *)(phy_stat) + 0x03), GENMASK(29, 28))
0088 #define GET_PHY_STAT_P1_L_RXSC(phy_stat) \
0089 le32_get_bits(*((__le32 *)(phy_stat) + 0x01), GENMASK(11, 8))
0090 #define GET_PHY_STAT_P1_HT_RXSC(phy_stat) \
0091 le32_get_bits(*((__le32 *)(phy_stat) + 0x01), GENMASK(15, 12))
0092 #define GET_PHY_STAT_P1_RXEVM_A(phy_stat) \
0093 le32_get_bits(*((__le32 *)(phy_stat) + 0x04), GENMASK(7, 0))
0094 #define GET_PHY_STAT_P1_CFO_TAIL_A(phy_stat) \
0095 le32_get_bits(*((__le32 *)(phy_stat) + 0x05), GENMASK(7, 0))
0096 #define GET_PHY_STAT_P1_RXSNR_A(phy_stat) \
0097 le32_get_bits(*((__le32 *)(phy_stat) + 0x06), GENMASK(7, 0))
0098
0099 static inline s32 iqkxy_to_s32(s32 val)
0100 {
0101
0102 return sign_extend32(val, 9);
0103 }
0104
0105 static inline s32 iqk_mult(s32 x, s32 y, s32 *ext)
0106 {
0107
0108 s32 t;
0109
0110 t = x * y;
0111 if (ext)
0112 *ext = (t >> 7) & 0x1;
0113
0114 return (t >> 8);
0115 }
0116
0117 #define OFDM_SWING_A(swing) FIELD_GET(GENMASK(9, 0), swing)
0118 #define OFDM_SWING_B(swing) FIELD_GET(GENMASK(15, 10), swing)
0119 #define OFDM_SWING_C(swing) FIELD_GET(GENMASK(21, 16), swing)
0120 #define OFDM_SWING_D(swing) FIELD_GET(GENMASK(31, 22), swing)
0121 #define RTW_DEF_OFDM_SWING_INDEX 28
0122 #define RTW_DEF_CCK_SWING_INDEX 28
0123
0124 #define MAX_TOLERANCE 5
0125 #define IQK_TX_X_ERR 0x142
0126 #define IQK_TX_Y_ERR 0x42
0127 #define IQK_RX_X_UPPER 0x11a
0128 #define IQK_RX_X_LOWER 0xe6
0129 #define IQK_RX_Y_LMT 0x1a
0130 #define IQK_TX_OK BIT(0)
0131 #define IQK_RX_OK BIT(1)
0132 #define PATH_IQK_RETRY 2
0133
0134 #define SPUR_THRES 0x16
0135 #define CCK_DFIR_NR 3
0136 #define DIS_3WIRE 0xccf000c0
0137 #define EN_3WIRE 0xccc000c0
0138 #define START_PSD 0x400000
0139 #define FREQ_CH13 0xfccd
0140 #define FREQ_CH14 0xff9a
0141 #define RFCFGCH_CHANNEL_MASK GENMASK(7, 0)
0142 #define RFCFGCH_BW_MASK (BIT(11) | BIT(10))
0143 #define RFCFGCH_BW_20M (BIT(11) | BIT(10))
0144 #define RFCFGCH_BW_40M BIT(10)
0145 #define BIT_MASK_RFMOD BIT(0)
0146 #define BIT_LCK BIT(15)
0147
0148 #define REG_GPIO_INTM 0x0048
0149 #define REG_BTG_SEL 0x0067
0150 #define BIT_MASK_BTG_WL BIT(7)
0151 #define REG_LTECOEX_PATH_CONTROL 0x0070
0152 #define REG_LTECOEX_CTRL 0x07c0
0153 #define REG_LTECOEX_WRITE_DATA 0x07c4
0154 #define REG_LTECOEX_READ_DATA 0x07c8
0155 #define REG_PSDFN 0x0808
0156 #define REG_BB_PWR_SAV1_11N 0x0874
0157 #define REG_ANA_PARAM1 0x0880
0158 #define REG_ANALOG_P4 0x088c
0159 #define REG_PSDRPT 0x08b4
0160 #define REG_FPGA1_RFMOD 0x0900
0161 #define REG_BB_SEL_BTG 0x0948
0162 #define REG_BBRX_DFIR 0x0954
0163 #define BIT_MASK_RXBB_DFIR GENMASK(27, 24)
0164 #define BIT_RXBB_DFIR_EN BIT(19)
0165 #define REG_CCK0_SYS 0x0a00
0166 #define BIT_CCK_SIDE_BAND BIT(4)
0167 #define REG_CCK_ANT_SEL_11N 0x0a04
0168 #define REG_PWRTH 0x0a08
0169 #define REG_CCK_FA_RST_11N 0x0a2c
0170 #define BIT_MASK_CCK_CNT_KEEP BIT(12)
0171 #define BIT_MASK_CCK_CNT_EN BIT(13)
0172 #define BIT_MASK_CCK_CNT_KPEN (BIT_MASK_CCK_CNT_KEEP | BIT_MASK_CCK_CNT_EN)
0173 #define BIT_MASK_CCK_FA_KEEP BIT(14)
0174 #define BIT_MASK_CCK_FA_EN BIT(15)
0175 #define BIT_MASK_CCK_FA_KPEN (BIT_MASK_CCK_FA_KEEP | BIT_MASK_CCK_FA_EN)
0176 #define REG_CCK_FA_LSB_11N 0x0a5c
0177 #define REG_CCK_FA_MSB_11N 0x0a58
0178 #define REG_CCK_CCA_CNT_11N 0x0a60
0179 #define BIT_MASK_CCK_FA_MSB GENMASK(7, 0)
0180 #define BIT_MASK_CCK_FA_LSB GENMASK(15, 8)
0181 #define REG_PWRTH2 0x0aa8
0182 #define REG_CSRATIO 0x0aaa
0183 #define REG_OFDM_FA_HOLDC_11N 0x0c00
0184 #define BIT_MASK_OFDM_FA_KEEP BIT(31)
0185 #define REG_BB_RX_PATH_11N 0x0c04
0186 #define REG_TRMUX_11N 0x0c08
0187 #define REG_OFDM_FA_RSTC_11N 0x0c0c
0188 #define BIT_MASK_OFDM_FA_RST BIT(31)
0189 #define REG_A_RXIQI 0x0c14
0190 #define BIT_MASK_RXIQ_S1_X 0x000003FF
0191 #define BIT_MASK_RXIQ_S1_Y1 0x0000FC00
0192 #define BIT_SET_RXIQ_S1_Y1(y) ((y) & 0x3F)
0193 #define REG_OFDM0_RXDSP 0x0c40
0194 #define BIT_MASK_RXDSP GENMASK(28, 24)
0195 #define BIT_EN_RXDSP BIT(9)
0196 #define REG_OFDM_0_ECCA_THRESHOLD 0x0c4c
0197 #define BIT_MASK_OFDM0_EXT_A BIT(31)
0198 #define BIT_MASK_OFDM0_EXT_C BIT(29)
0199 #define BIT_MASK_OFDM0_EXTS (BIT(31) | BIT(29) | BIT(28))
0200 #define BIT_SET_OFDM0_EXTS(a, c, d) (((a) << 31) | ((c) << 29) | ((d) << 28))
0201 #define REG_OFDM0_XAAGC1 0x0c50
0202 #define REG_OFDM0_XBAGC1 0x0c58
0203 #define REG_AGCRSSI 0x0c78
0204 #define REG_OFDM_0_XA_TX_IQ_IMBALANCE 0x0c80
0205 #define BIT_MASK_TXIQ_ELM_A 0x03ff
0206 #define BIT_SET_TXIQ_ELM_ACD(a, c, d) (((d) << 22) | (((c) & 0x3F) << 16) | \
0207 ((a) & 0x03ff))
0208 #define BIT_MASK_TXIQ_ELM_C GENMASK(21, 16)
0209 #define BIT_SET_TXIQ_ELM_C2(c) ((c) & 0x3F)
0210 #define BIT_MASK_TXIQ_ELM_D GENMASK(31, 22)
0211 #define REG_TXIQK_MATRIXA_LSB2_11N 0x0c94
0212 #define BIT_SET_TXIQ_ELM_C1(c) (((c) & 0x000003C0) >> 6)
0213 #define REG_RXIQK_MATRIX_LSB_11N 0x0ca0
0214 #define BIT_MASK_RXIQ_S1_Y2 0xF0000000
0215 #define BIT_SET_RXIQ_S1_Y2(y) (((y) >> 6) & 0xF)
0216 #define REG_TXIQ_AB_S0 0x0cd0
0217 #define BIT_MASK_TXIQ_A_S0 0x000007FE
0218 #define BIT_MASK_TXIQ_A_EXT_S0 BIT(0)
0219 #define BIT_MASK_TXIQ_B_S0 0x0007E000
0220 #define REG_TXIQ_CD_S0 0x0cd4
0221 #define BIT_MASK_TXIQ_C_S0 0x000007FE
0222 #define BIT_MASK_TXIQ_C_EXT_S0 BIT(0)
0223 #define BIT_MASK_TXIQ_D_S0 GENMASK(22, 13)
0224 #define BIT_MASK_TXIQ_D_EXT_S0 BIT(12)
0225 #define REG_RXIQ_AB_S0 0x0cd8
0226 #define BIT_MASK_RXIQ_X_S0 0x000003FF
0227 #define BIT_MASK_RXIQ_Y_S0 0x003FF000
0228 #define REG_OFDM_FA_TYPE1_11N 0x0cf0
0229 #define BIT_MASK_OFDM_FF_CNT GENMASK(15, 0)
0230 #define BIT_MASK_OFDM_SF_CNT GENMASK(31, 16)
0231 #define REG_OFDM_FA_RSTD_11N 0x0d00
0232 #define BIT_MASK_OFDM_FA_RST1 BIT(27)
0233 #define BIT_MASK_OFDM_FA_KEEP1 BIT(31)
0234 #define REG_CTX 0x0d03
0235 #define BIT_MASK_CTX_TYPE GENMASK(6, 4)
0236 #define REG_OFDM1_CFOTRK 0x0d2c
0237 #define BIT_EN_CFOTRK BIT(28)
0238 #define REG_OFDM1_CSI1 0x0d40
0239 #define REG_OFDM1_CSI2 0x0d44
0240 #define REG_OFDM1_CSI3 0x0d48
0241 #define REG_OFDM1_CSI4 0x0d4c
0242 #define REG_OFDM_FA_TYPE2_11N 0x0da0
0243 #define BIT_MASK_OFDM_CCA_CNT GENMASK(15, 0)
0244 #define BIT_MASK_OFDM_PF_CNT GENMASK(31, 16)
0245 #define REG_OFDM_FA_TYPE3_11N 0x0da4
0246 #define BIT_MASK_OFDM_RI_CNT GENMASK(15, 0)
0247 #define BIT_MASK_OFDM_CRC_CNT GENMASK(31, 16)
0248 #define REG_OFDM_FA_TYPE4_11N 0x0da8
0249 #define BIT_MASK_OFDM_MNS_CNT GENMASK(15, 0)
0250 #define REG_FPGA0_IQK_11N 0x0e28
0251 #define BIT_MASK_IQK_MOD 0xffffff00
0252 #define EN_IQK 0x808000
0253 #define RST_IQK 0x000000
0254 #define REG_TXIQK_TONE_A_11N 0x0e30
0255 #define REG_RXIQK_TONE_A_11N 0x0e34
0256 #define REG_TXIQK_PI_A_11N 0x0e38
0257 #define REG_RXIQK_PI_A_11N 0x0e3c
0258 #define REG_TXIQK_11N 0x0e40
0259 #define BIT_SET_TXIQK_11N(x, y) (0x80007C00 | ((x) << 16) | (y))
0260 #define REG_RXIQK_11N 0x0e44
0261 #define REG_IQK_AGC_PTS_11N 0x0e48
0262 #define REG_IQK_AGC_RSP_11N 0x0e4c
0263 #define REG_TX_IQK_TONE_B 0x0e50
0264 #define REG_RX_IQK_TONE_B 0x0e54
0265 #define REG_IQK_RES_TX 0x0e94
0266 #define BIT_MASK_RES_TX GENMASK(25, 16)
0267 #define REG_IQK_RES_TY 0x0e9c
0268 #define BIT_MASK_RES_TY GENMASK(25, 16)
0269 #define REG_IQK_RES_RX 0x0ea4
0270 #define BIT_MASK_RES_RX GENMASK(25, 16)
0271 #define REG_IQK_RES_RY 0x0eac
0272 #define BIT_IQK_TX_FAIL BIT(28)
0273 #define BIT_IQK_RX_FAIL BIT(27)
0274 #define BIT_IQK_DONE BIT(26)
0275 #define BIT_MASK_RES_RY GENMASK(25, 16)
0276 #define REG_PAGE_F_RST_11N 0x0f14
0277 #define BIT_MASK_F_RST_ALL BIT(16)
0278 #define REG_IGI_C_11N 0x0f84
0279 #define REG_IGI_D_11N 0x0f88
0280 #define REG_HT_CRC32_CNT_11N 0x0f90
0281 #define BIT_MASK_HT_CRC_OK GENMASK(15, 0)
0282 #define BIT_MASK_HT_CRC_ERR GENMASK(31, 16)
0283 #define REG_OFDM_CRC32_CNT_11N 0x0f94
0284 #define BIT_MASK_OFDM_LCRC_OK GENMASK(15, 0)
0285 #define BIT_MASK_OFDM_LCRC_ERR GENMASK(31, 16)
0286 #define REG_HT_CRC32_CNT_11N_AGG 0x0fb8
0287
0288 #endif