File Index
Files and directories
Sign in
FILE

rf.c

File preview with syntax highlighting.

linux-6.19.14/drivers/net/wireless/realtek/rtlwifi/rtl8192ee/rf.c C
  1// SPDX-License-Identifier: GPL-2.0
  2/* Copyright(c) 2009-2014  Realtek Corporation.*/
  3
  4#include "../wifi.h"
  5#include "reg.h"
  6#include "def.h"
  7#include "phy.h"
  8#include "rf.h"
  9#include "dm.h"
 10
 11static bool _rtl92ee_phy_rf6052_config_parafile(struct ieee80211_hw *hw);
 12
 13void rtl92ee_phy_rf6052_set_bandwidth(struct ieee80211_hw *hw, u8 bandwidth)
 14{
 15	struct rtl_priv *rtlpriv = rtl_priv(hw);
 16	struct rtl_phy *rtlphy = &rtlpriv->phy;
 17
 18	switch (bandwidth) {
 19	case HT_CHANNEL_WIDTH_20:
 20		rtlphy->rfreg_chnlval[0] = ((rtlphy->rfreg_chnlval[0] &
 21					     0xfffff3ff) | BIT(10) | BIT(11));
 22		rtl_set_rfreg(hw, RF90_PATH_A, RF_CHNLBW, RFREG_OFFSET_MASK,
 23			      rtlphy->rfreg_chnlval[0]);
 24		rtl_set_rfreg(hw, RF90_PATH_B, RF_CHNLBW, RFREG_OFFSET_MASK,
 25			      rtlphy->rfreg_chnlval[0]);
 26		break;
 27	case HT_CHANNEL_WIDTH_20_40:
 28		rtlphy->rfreg_chnlval[0] = ((rtlphy->rfreg_chnlval[0] &
 29					     0xfffff3ff) | BIT(10));
 30		rtl_set_rfreg(hw, RF90_PATH_A, RF_CHNLBW, RFREG_OFFSET_MASK,
 31			      rtlphy->rfreg_chnlval[0]);
 32		rtl_set_rfreg(hw, RF90_PATH_B, RF_CHNLBW, RFREG_OFFSET_MASK,
 33			      rtlphy->rfreg_chnlval[0]);
 34		break;
 35	default:
 36		pr_err("unknown bandwidth: %#X\n", bandwidth);
 37		break;
 38	}
 39}
 40
 41bool rtl92ee_phy_rf6052_config(struct ieee80211_hw *hw)
 42{
 43	struct rtl_priv *rtlpriv = rtl_priv(hw);
 44	struct rtl_phy *rtlphy = &rtlpriv->phy;
 45
 46	if (rtlphy->rf_type == RF_1T1R)
 47		rtlphy->num_total_rfpath = 1;
 48	else
 49		rtlphy->num_total_rfpath = 2;
 50
 51	return _rtl92ee_phy_rf6052_config_parafile(hw);
 52}
 53
 54static bool _rtl92ee_phy_rf6052_config_parafile(struct ieee80211_hw *hw)
 55{
 56	struct rtl_priv *rtlpriv = rtl_priv(hw);
 57	struct rtl_phy *rtlphy = &rtlpriv->phy;
 58	u32 u4_regvalue = 0;
 59	u8 rfpath;
 60	bool rtstatus = true;
 61	struct bb_reg_def *pphyreg;
 62
 63	for (rfpath = 0; rfpath < rtlphy->num_total_rfpath; rfpath++) {
 64		pphyreg = &rtlphy->phyreg_def[rfpath];
 65
 66		switch (rfpath) {
 67		case RF90_PATH_A:
 68		case RF90_PATH_C:
 69			u4_regvalue = rtl_get_bbreg(hw, pphyreg->rfintfs,
 70						    BRFSI_RFENV);
 71			break;
 72		case RF90_PATH_B:
 73		case RF90_PATH_D:
 74			u4_regvalue = rtl_get_bbreg(hw, pphyreg->rfintfs,
 75						    BRFSI_RFENV << 16);
 76			break;
 77		}
 78
 79		rtl_set_bbreg(hw, pphyreg->rfintfe, BRFSI_RFENV << 16, 0x1);
 80		udelay(1);
 81
 82		rtl_set_bbreg(hw, pphyreg->rfintfo, BRFSI_RFENV, 0x1);
 83		udelay(1);
 84
 85		rtl_set_bbreg(hw, pphyreg->rfhssi_para2,
 86			      B3WIREADDREAALENGTH, 0x0);
 87		udelay(1);
 88
 89		rtl_set_bbreg(hw, pphyreg->rfhssi_para2, B3WIREDATALENGTH, 0x0);
 90		udelay(1);
 91
 92		switch (rfpath) {
 93		case RF90_PATH_A:
 94			rtstatus = rtl92ee_phy_config_rf_with_headerfile(hw,
 95						       (enum radio_path)rfpath);
 96			break;
 97		case RF90_PATH_B:
 98			rtstatus = rtl92ee_phy_config_rf_with_headerfile(hw,
 99						       (enum radio_path)rfpath);
100			break;
101		case RF90_PATH_C:
102			break;
103		case RF90_PATH_D:
104			break;
105		}
106
107		switch (rfpath) {
108		case RF90_PATH_A:
109		case RF90_PATH_C:
110			rtl_set_bbreg(hw, pphyreg->rfintfs,
111				      BRFSI_RFENV, u4_regvalue);
112			break;
113		case RF90_PATH_B:
114		case RF90_PATH_D:
115			rtl_set_bbreg(hw, pphyreg->rfintfs,
116				      BRFSI_RFENV << 16, u4_regvalue);
117			break;
118		}
119
120		if (!rtstatus) {
121			rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE,
122				"Radio[%d] Fail!!\n", rfpath);
123			return false;
124		}
125	}
126
127	rtl_dbg(rtlpriv, COMP_INIT, DBG_TRACE, "\n");
128	return rtstatus;
129}
~/ Read-only file preview.