Path: blob/master/ALFA-W1F1/RTL8814AU/core/rtw_odm.c
1307 views
/******************************************************************************1*2* Copyright(c) 2013 - 2017 Realtek Corporation.3*4* This program is free software; you can redistribute it and/or modify it5* under the terms of version 2 of the GNU General Public License as6* published by the Free Software Foundation.7*8* This program is distributed in the hope that it will be useful, but WITHOUT9* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or10* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for11* more details.12*13*****************************************************************************/1415#include <rtw_odm.h>16#include <hal_data.h>1718u32 rtw_phydm_ability_ops(_adapter *adapter, HAL_PHYDM_OPS ops, u32 ability)19{20HAL_DATA_TYPE *pHalData = GET_HAL_DATA(adapter);21struct dm_struct *podmpriv = &pHalData->odmpriv;22u32 result = 0;2324switch (ops) {25case HAL_PHYDM_DIS_ALL_FUNC:26podmpriv->support_ability = DYNAMIC_FUNC_DISABLE;27halrf_cmn_info_set(podmpriv, HALRF_CMNINFO_ABILITY, DYNAMIC_FUNC_DISABLE);28break;29case HAL_PHYDM_FUNC_SET:30podmpriv->support_ability |= ability;31break;32case HAL_PHYDM_FUNC_CLR:33podmpriv->support_ability &= ~(ability);34break;35case HAL_PHYDM_ABILITY_BK:36/* dm flag backup*/37podmpriv->bk_support_ability = podmpriv->support_ability;38pHalData->bk_rf_ability = halrf_cmn_info_get(podmpriv, HALRF_CMNINFO_ABILITY);39break;40case HAL_PHYDM_ABILITY_RESTORE:41/* restore dm flag */42podmpriv->support_ability = podmpriv->bk_support_ability;43halrf_cmn_info_set(podmpriv, HALRF_CMNINFO_ABILITY, pHalData->bk_rf_ability);44break;45case HAL_PHYDM_ABILITY_SET:46podmpriv->support_ability = ability;47break;48case HAL_PHYDM_ABILITY_GET:49result = podmpriv->support_ability;50break;51}52return result;53}5455/* set ODM_CMNINFO_IC_TYPE based on chip_type */56void rtw_odm_init_ic_type(_adapter *adapter)57{58struct dm_struct *odm = adapter_to_phydm(adapter);59u32 ic_type = chip_type_to_odm_ic_type(rtw_get_chip_type(adapter));6061rtw_warn_on(!ic_type);6263odm_cmn_info_init(odm, ODM_CMNINFO_IC_TYPE, ic_type);64}6566void rtw_odm_adaptivity_ver_msg(void *sel, _adapter *adapter)67{68RTW_PRINT_SEL(sel, "ADAPTIVITY_VERSION "ADAPTIVITY_VERSION"\n");69}7071#define RTW_ADAPTIVITY_EN_DISABLE 072#define RTW_ADAPTIVITY_EN_ENABLE 17374void rtw_odm_adaptivity_en_msg(void *sel, _adapter *adapter)75{76struct registry_priv *regsty = &adapter->registrypriv;7778RTW_PRINT_SEL(sel, "RTW_ADAPTIVITY_EN_");7980if (regsty->adaptivity_en == RTW_ADAPTIVITY_EN_DISABLE)81_RTW_PRINT_SEL(sel, "DISABLE\n");82else if (regsty->adaptivity_en == RTW_ADAPTIVITY_EN_ENABLE)83_RTW_PRINT_SEL(sel, "ENABLE\n");84else85_RTW_PRINT_SEL(sel, "INVALID\n");86}8788#define RTW_ADAPTIVITY_MODE_NORMAL 089#define RTW_ADAPTIVITY_MODE_CARRIER_SENSE 19091void rtw_odm_adaptivity_mode_msg(void *sel, _adapter *adapter)92{93struct registry_priv *regsty = &adapter->registrypriv;9495RTW_PRINT_SEL(sel, "RTW_ADAPTIVITY_MODE_");9697if (regsty->adaptivity_mode == RTW_ADAPTIVITY_MODE_NORMAL)98_RTW_PRINT_SEL(sel, "NORMAL\n");99else if (regsty->adaptivity_mode == RTW_ADAPTIVITY_MODE_CARRIER_SENSE)100_RTW_PRINT_SEL(sel, "CARRIER_SENSE\n");101else102_RTW_PRINT_SEL(sel, "INVALID\n");103}104105void rtw_odm_adaptivity_config_msg(void *sel, _adapter *adapter)106{107rtw_odm_adaptivity_ver_msg(sel, adapter);108rtw_odm_adaptivity_en_msg(sel, adapter);109rtw_odm_adaptivity_mode_msg(sel, adapter);110}111112bool rtw_odm_adaptivity_needed(_adapter *adapter)113{114struct registry_priv *regsty = &adapter->registrypriv;115bool ret = _FALSE;116117if (regsty->adaptivity_en == RTW_ADAPTIVITY_EN_ENABLE)118ret = _TRUE;119120return ret;121}122123void rtw_odm_adaptivity_parm_msg(void *sel, _adapter *adapter)124{125struct dm_struct *odm = adapter_to_phydm(adapter);126127rtw_odm_adaptivity_config_msg(sel, adapter);128129RTW_PRINT_SEL(sel, "%10s %16s\n"130, "th_l2h_ini", "th_edcca_hl_diff");131RTW_PRINT_SEL(sel, "0x%-8x %-16d\n"132, (u8)odm->th_l2h_ini133, odm->th_edcca_hl_diff134);135}136137void rtw_odm_adaptivity_parm_set(_adapter *adapter, s8 th_l2h_ini, s8 th_edcca_hl_diff)138{139struct dm_struct *odm = adapter_to_phydm(adapter);140141odm->th_l2h_ini = th_l2h_ini;142odm->th_edcca_hl_diff = th_edcca_hl_diff;143}144145void rtw_odm_get_perpkt_rssi(void *sel, _adapter *adapter)146{147struct dm_struct *odm = adapter_to_phydm(adapter);148149RTW_PRINT_SEL(sel, "rx_rate = %s, rssi_a = %d(%%), rssi_b = %d(%%)\n",150HDATA_RATE(odm->rx_rate), odm->rssi_a, odm->rssi_b);151}152153154void rtw_odm_acquirespinlock(_adapter *adapter, enum rt_spinlock_type type)155{156PHAL_DATA_TYPE pHalData = GET_HAL_DATA(adapter);157_irqL irqL;158159switch (type) {160case RT_IQK_SPINLOCK:161_enter_critical_bh(&pHalData->IQKSpinLock, &irqL);162default:163break;164}165}166167void rtw_odm_releasespinlock(_adapter *adapter, enum rt_spinlock_type type)168{169PHAL_DATA_TYPE pHalData = GET_HAL_DATA(adapter);170_irqL irqL;171172switch (type) {173case RT_IQK_SPINLOCK:174_exit_critical_bh(&pHalData->IQKSpinLock, &irqL);175default:176break;177}178}179180inline u8 rtw_odm_get_dfs_domain(struct dvobj_priv *dvobj)181{182#ifdef CONFIG_DFS_MASTER183struct dm_struct *pDM_Odm = dvobj_to_phydm(dvobj);184185return pDM_Odm->dfs_region_domain;186#else187return PHYDM_DFS_DOMAIN_UNKNOWN;188#endif189}190191inline u8 rtw_odm_dfs_domain_unknown(struct dvobj_priv *dvobj)192{193#ifdef CONFIG_DFS_MASTER194return rtw_odm_get_dfs_domain(dvobj) == PHYDM_DFS_DOMAIN_UNKNOWN;195#else196return 1;197#endif198}199200#ifdef CONFIG_DFS_MASTER201inline void rtw_odm_radar_detect_reset(_adapter *adapter)202{203phydm_radar_detect_reset(adapter_to_phydm(adapter));204}205206inline void rtw_odm_radar_detect_disable(_adapter *adapter)207{208phydm_radar_detect_disable(adapter_to_phydm(adapter));209}210211/* called after ch, bw is set */212inline void rtw_odm_radar_detect_enable(_adapter *adapter)213{214phydm_radar_detect_enable(adapter_to_phydm(adapter));215}216217inline BOOLEAN rtw_odm_radar_detect(_adapter *adapter)218{219return phydm_radar_detect(adapter_to_phydm(adapter));220}221222inline u8 rtw_odm_radar_detect_polling_int_ms(struct dvobj_priv *dvobj)223{224return phydm_dfs_polling_time(dvobj_to_phydm(dvobj));225}226#endif /* CONFIG_DFS_MASTER */227228void rtw_odm_parse_rx_phy_status_chinfo(union recv_frame *rframe, u8 *phys)229{230#ifndef DBG_RX_PHYSTATUS_CHINFO231#define DBG_RX_PHYSTATUS_CHINFO 0232#endif233234#if (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1)235_adapter *adapter = rframe->u.hdr.adapter;236struct dm_struct *phydm = adapter_to_phydm(adapter);237struct rx_pkt_attrib *attrib = &rframe->u.hdr.attrib;238u8 *wlanhdr = get_recvframe_data(rframe);239240if (phydm->support_ic_type & PHYSTS_2ND_TYPE_IC) {241/*242* 8723D:243* type_0(CCK)244* l_rxsc245* is filled with primary channel SC, not real rxsc.246* 0:LSC, 1:USC247* type_1(OFDM)248* rf_mode249* RF bandwidth when RX250* l_rxsc(legacy), ht_rxsc251* see below RXSC N-series252* type_2(Not used)253*/254/*255* 8821C, 8822B:256* type_0(CCK)257* l_rxsc258* is filled with primary channel SC, not real rxsc.259* 0:LSC, 1:USC260* type_1(OFDM)261* rf_mode262* RF bandwidth when RX263* l_rxsc(legacy), ht_rxsc264* see below RXSC AC-series265* type_2(Not used)266*/267268if ((*phys & 0xf) == 0) {269struct phy_sts_rpt_jgr2_type0 *phys_t0 = (struct phy_sts_rpt_jgr2_type0 *)phys;270271if (DBG_RX_PHYSTATUS_CHINFO) {272RTW_PRINT("phys_t%u ta="MAC_FMT" %s, %s(band:%u, ch:%u, l_rxsc:%u)\n"273, *phys & 0xf274, MAC_ARG(get_ta(wlanhdr))275, is_broadcast_mac_addr(get_ra(wlanhdr)) ? "BC" : is_multicast_mac_addr(get_ra(wlanhdr)) ? "MC" : "UC"276, HDATA_RATE(attrib->data_rate)277, phys_t0->band, phys_t0->channel, phys_t0->rxsc278);279}280281} else if ((*phys & 0xf) == 1) {282struct phy_sts_rpt_jgr2_type1 *phys_t1 = (struct phy_sts_rpt_jgr2_type1 *)phys;283u8 rxsc = (attrib->data_rate > DESC_RATE11M && attrib->data_rate < DESC_RATEMCS0) ? phys_t1->l_rxsc : phys_t1->ht_rxsc;284u8 pkt_cch = 0;285u8 pkt_bw = CHANNEL_WIDTH_20;286287#if ODM_IC_11N_SERIES_SUPPORT288if (phydm->support_ic_type & ODM_IC_11N_SERIES) {289/* RXSC N-series */290#define RXSC_DUP 0291#define RXSC_LSC 1292#define RXSC_USC 2293#define RXSC_40M 3294295static const s8 cch_offset_by_rxsc[4] = {0, -2, 2, 0};296297if (phys_t1->rf_mode == 0) {298pkt_cch = phys_t1->channel;299pkt_bw = CHANNEL_WIDTH_20;300} else if (phys_t1->rf_mode == 1) {301if (rxsc == RXSC_LSC || rxsc == RXSC_USC) {302pkt_cch = phys_t1->channel + cch_offset_by_rxsc[rxsc];303pkt_bw = CHANNEL_WIDTH_20;304} else if (rxsc == RXSC_40M) {305pkt_cch = phys_t1->channel;306pkt_bw = CHANNEL_WIDTH_40;307}308} else309rtw_warn_on(1);310311goto type1_end;312}313#endif /* ODM_IC_11N_SERIES_SUPPORT */314315#if ODM_IC_11AC_SERIES_SUPPORT316if (phydm->support_ic_type & ODM_IC_11AC_SERIES) {317/* RXSC AC-series */318#define RXSC_DUP 0 /* 0: RX from all SC of current rf_mode */319320#define RXSC_LL20M_OF_160M 8 /* 1~8: RX from 20MHz SC */321#define RXSC_L20M_OF_160M 6322#define RXSC_L20M_OF_80M 4323#define RXSC_L20M_OF_40M 2324#define RXSC_U20M_OF_40M 1325#define RXSC_U20M_OF_80M 3326#define RXSC_U20M_OF_160M 5327#define RXSC_UU20M_OF_160M 7328329#define RXSC_L40M_OF_160M 12 /* 9~12: RX from 40MHz SC */330#define RXSC_L40M_OF_80M 10331#define RXSC_U40M_OF_80M 9332#define RXSC_U40M_OF_160M 11333334#define RXSC_L80M_OF_160M 14 /* 13~14: RX from 80MHz SC */335#define RXSC_U80M_OF_160M 13336337static const s8 cch_offset_by_rxsc[15] = {0, 2, -2, 6, -6, 10, -10, 14, -14, 4, -4, 12, -12, 8, -8};338339if (phys_t1->rf_mode == 0) {340/* RF 20MHz */341pkt_cch = phys_t1->channel;342pkt_bw = CHANNEL_WIDTH_20;343goto type1_end;344}345346if (rxsc == 0) {347/* RF and RX with same BW */348if (attrib->data_rate >= DESC_RATEMCS0) {349pkt_cch = phys_t1->channel;350pkt_bw = phys_t1->rf_mode;351}352goto type1_end;353}354355if ((phys_t1->rf_mode == 1 && rxsc >= 1 && rxsc <= 2) /* RF 40MHz, RX 20MHz */356|| (phys_t1->rf_mode == 2 && rxsc >= 1 && rxsc <= 4) /* RF 80MHz, RX 20MHz */357|| (phys_t1->rf_mode == 3 && rxsc >= 1 && rxsc <= 8) /* RF 160MHz, RX 20MHz */358) {359pkt_cch = phys_t1->channel + cch_offset_by_rxsc[rxsc];360pkt_bw = CHANNEL_WIDTH_20;361} else if ((phys_t1->rf_mode == 2 && rxsc >= 9 && rxsc <= 10) /* RF 80MHz, RX 40MHz */362|| (phys_t1->rf_mode == 3 && rxsc >= 9 && rxsc <= 12) /* RF 160MHz, RX 40MHz */363) {364if (attrib->data_rate >= DESC_RATEMCS0) {365pkt_cch = phys_t1->channel + cch_offset_by_rxsc[rxsc];366pkt_bw = CHANNEL_WIDTH_40;367}368} else if ((phys_t1->rf_mode == 3 && rxsc >= 13 && rxsc <= 14) /* RF 160MHz, RX 80MHz */369) {370if (attrib->data_rate >= DESC_RATEMCS0) {371pkt_cch = phys_t1->channel + cch_offset_by_rxsc[rxsc];372pkt_bw = CHANNEL_WIDTH_80;373}374} else375rtw_warn_on(1);376377}378#endif /* ODM_IC_11AC_SERIES_SUPPORT */379380type1_end:381if (DBG_RX_PHYSTATUS_CHINFO) {382RTW_PRINT("phys_t%u ta="MAC_FMT" %s, %s(band:%u, ch:%u, rf_mode:%u, l_rxsc:%u, ht_rxsc:%u) => %u,%u\n"383, *phys & 0xf384, MAC_ARG(get_ta(wlanhdr))385, is_broadcast_mac_addr(get_ra(wlanhdr)) ? "BC" : is_multicast_mac_addr(get_ra(wlanhdr)) ? "MC" : "UC"386, HDATA_RATE(attrib->data_rate)387, phys_t1->band, phys_t1->channel, phys_t1->rf_mode, phys_t1->l_rxsc, phys_t1->ht_rxsc388, pkt_cch, pkt_bw389);390}391392/* for now, only return cneter channel of 20MHz packet */393if (pkt_cch && pkt_bw == CHANNEL_WIDTH_20)394attrib->ch = pkt_cch;395396} else {397struct phy_sts_rpt_jgr2_type2 *phys_t2 = (struct phy_sts_rpt_jgr2_type2 *)phys;398399if (DBG_RX_PHYSTATUS_CHINFO) {400RTW_PRINT("phys_t%u ta="MAC_FMT" %s, %s(band:%u, ch:%u, l_rxsc:%u, ht_rxsc:%u)\n"401, *phys & 0xf402, MAC_ARG(get_ta(wlanhdr))403, is_broadcast_mac_addr(get_ra(wlanhdr)) ? "BC" : is_multicast_mac_addr(get_ra(wlanhdr)) ? "MC" : "UC"404, HDATA_RATE(attrib->data_rate)405, phys_t2->band, phys_t2->channel, phys_t2->l_rxsc, phys_t2->ht_rxsc406);407}408}409}410#endif /* (ODM_PHY_STATUS_NEW_TYPE_SUPPORT == 1) */411412}413414#if defined(CONFIG_RTL8822C) && defined(CONFIG_LPS_PG)415void416debug_DACK(417struct dm_struct *dm418)419{420//P_PHYDM_FUNC dm;421//dm = &(SysMib.ODM.Phydm);422//PIQK_OFFLOAD_PARM pIQK_info;423//pIQK_info= &(SysMib.ODM.IQKParm);424u8 i;425u32 temp1, temp2, temp3;426427temp1 = odm_get_bb_reg(dm, 0x1860, bMaskDWord);428temp2 = odm_get_bb_reg(dm, 0x4160, bMaskDWord);429temp3 = odm_get_bb_reg(dm, 0x9b4, bMaskDWord);430431odm_set_bb_reg(dm, 0x9b4, bMaskDWord, 0xdb66db00);432433//pathA434odm_set_bb_reg(dm, 0x1830, BIT(30), 0x0);435odm_set_bb_reg(dm, 0x1860, 0xfc000000, 0x3c);436437RTW_INFO("path A i\n");438//i439for (i = 0; i < 0xf; i++) {440odm_set_bb_reg(dm, 0x18b0, 0xf0000000, i);441RTW_INFO("[0][0][%d] = 0x%08x\n", i, (u16)odm_get_bb_reg(dm,0x2810,0x7fc0000));442//pIQK_info->msbk_d[0][0][i] = (u16)odm_get_bb_reg(dm,0x2810,0x7fc0000);443}444RTW_INFO("path A q\n");445//q446for (i = 0; i < 0xf; i++) {447odm_set_bb_reg(dm, 0x18cc, 0xf0000000, i);448RTW_INFO("[0][1][%d] = 0x%08x\n", i, (u16)odm_get_bb_reg(dm,0x283c,0x7fc0000));449//pIQK_info->msbk_d[0][1][i] = (u16)odm_get_bb_reg(dm,0x283c,0x7fc0000);450}451//pathB452odm_set_bb_reg(dm, 0x4130, BIT(30), 0x0);453odm_set_bb_reg(dm, 0x4160, 0xfc000000, 0x3c);454455RTW_INFO("\npath B i\n");456//i457for (i = 0; i < 0xf; i++) {458odm_set_bb_reg(dm, 0x41b0, 0xf0000000, i);459RTW_INFO("[1][0][%d] = 0x%08x\n", i, (u16)odm_get_bb_reg(dm,0x4510,0x7fc0000));460//pIQK_info->msbk_d[1][0][i] = (u16)odm_get_bb_reg(dm,0x2810,0x7fc0000);461}462RTW_INFO("path B q\n");463//q464for (i = 0; i < 0xf; i++) {465odm_set_bb_reg(dm, 0x41cc, 0xf0000000, i);466RTW_INFO("[1][1][%d] = 0x%08x\n", i, (u16)odm_get_bb_reg(dm,0x453c,0x7fc0000));467//pIQK_info->msbk_d[1][1][i] = (u16)odm_get_bb_reg(dm,0x283c,0x7fc0000);468}469470//restore to normal471odm_set_bb_reg(dm, 0x1830, BIT(30), 0x1);472odm_set_bb_reg(dm, 0x4130, BIT(30), 0x1);473odm_set_bb_reg(dm, 0x1860, bMaskDWord, temp1);474odm_set_bb_reg(dm, 0x4160, bMaskDWord, temp2);475odm_set_bb_reg(dm, 0x9b4, bMaskDWord, temp3);476477478}479480void481debug_IQK(482struct dm_struct *dm,483IN u8 idx,484IN u8 path485)486{487u8 i, ch;488u32 tmp;489u32 bit_mask_20_16 = BIT(20) | BIT(19) | BIT(18) | BIT(17) | BIT(16);490491RTW_INFO("idx = %d, path = %d\n", idx, path);492493odm_set_bb_reg(dm, 0x1b00, MASKDWORD, 0x8 | path << 1);494495if (idx == TX_IQK) {//TXCFIR496odm_set_bb_reg(dm, R_0x1b20, BIT(31) | BIT(30), 0x3);497} else {//RXCFIR498odm_set_bb_reg(dm, R_0x1b20, BIT(31) | BIT(30), 0x1);499}500odm_set_bb_reg(dm, R_0x1bd4, BIT(21), 0x1);501odm_set_bb_reg(dm, R_0x1bd4, bit_mask_20_16, 0x10);502for (i = 0; i <= 16; i++) {503odm_set_bb_reg(dm, R_0x1bd8, MASKDWORD, 0xe0000001 | i << 2);504tmp = odm_get_bb_reg(dm, R_0x1bfc, MASKDWORD);505RTW_INFO("iqk_cfir_real[%d][%d][%d] = 0x%x\n", path, idx, i, ((tmp & 0x0fff0000) >> 16));506//iqk_info->iqk_cfir_real[ch][path][idx][i] =507// (tmp & 0x0fff0000) >> 16;508RTW_INFO("iqk_cfir_imag[%d][%d][%d] = 0x%x\n", path, idx, i, (tmp & 0x0fff));509//iqk_info->iqk_cfir_imag[ch][path][idx][i] = tmp & 0x0fff;510}511odm_set_bb_reg(dm, R_0x1b20, BIT(31) | BIT(30), 0x0);512//odm_set_bb_reg(dm, R_0x1bd8, MASKDWORD, 0x0);513}514515__odm_func__ void516debug_information_8822c(517struct dm_struct *dm)518{519struct dm_dpk_info *dpk_info = &dm->dpk_info;520521u32 reg_rf18;522523if (odm_get_bb_reg(dm, R_0x1e7c, BIT(30)))524dpk_info->is_tssi_mode = true;525else526dpk_info->is_tssi_mode = false;527528reg_rf18 = odm_get_rf_reg(dm, RF_PATH_A, RF_0x18, RFREG_MASK);529530dpk_info->dpk_band = (u8)((reg_rf18 & BIT(16)) >> 16); /*0/1:G/A*/531dpk_info->dpk_ch = (u8)reg_rf18 & 0xff;532dpk_info->dpk_bw = (u8)((reg_rf18 & 0x3000) >> 12); /*3/2/1:20/40/80*/533534RTW_INFO("[DPK] TSSI/ Band/ CH/ BW = %d / %s / %d / %s\n",535dpk_info->is_tssi_mode, dpk_info->dpk_band == 0 ? "2G" : "5G",536dpk_info->dpk_ch,537dpk_info->dpk_bw == 3 ? "20M" : (dpk_info->dpk_bw == 2 ? "40M" : "80M"));538}539540extern void _dpk_get_coef_8822c(void *dm_void, u8 path);541542__odm_func__ void543debug_reload_data_8822c(544void *dm_void)545{546struct dm_struct *dm = (struct dm_struct *)dm_void;547struct dm_dpk_info *dpk_info = &dm->dpk_info;548549u8 path;550u32 u32tmp;551552debug_information_8822c(dm);553554for (path = 0; path < DPK_RF_PATH_NUM_8822C; path++) {555556RTW_INFO("[DPK] Reload path: 0x%x\n", path);557558odm_set_bb_reg(dm, R_0x1b00, MASKDWORD, 0x8 | (path << 1));559560/*txagc bnd*/561if (dpk_info->dpk_band == 0x0)562u32tmp = odm_get_bb_reg(dm, R_0x1b60, MASKDWORD);563else564u32tmp = odm_get_bb_reg(dm, R_0x1b60, MASKDWORD);565566RTW_INFO("[DPK] txagc bnd = 0x%08x\n", u32tmp);567568u32tmp = odm_get_bb_reg(dm, R_0x1b64, MASKBYTE3);569RTW_INFO("[DPK] dpk_txagc = 0x%08x\n", u32tmp);570571//debug_coef_write_8822c(dm, path, dpk_info->dpk_path_ok & BIT(path) >> path);572_dpk_get_coef_8822c(dm, path);573574//debug_one_shot_8822c(dm, path, DPK_ON);575576odm_set_bb_reg(dm, R_0x1b00, 0x0000000f, 0xc);577578if (path == RF_PATH_A)579u32tmp = odm_get_bb_reg(dm, R_0x1b04, 0x0fffffff);580else581u32tmp = odm_get_bb_reg(dm, R_0x1b5c, 0x0fffffff);582583RTW_INFO("[DPK] dpk_gs = 0x%08x\n", u32tmp);584585}586}587588void odm_lps_pg_debug_8822c(void *dm_void)589{590struct dm_struct *dm = (struct dm_struct *)dm_void;591592debug_DACK(dm);593debug_IQK(dm, TX_IQK, RF_PATH_A);594debug_IQK(dm, RX_IQK, RF_PATH_A);595debug_IQK(dm, TX_IQK, RF_PATH_B);596debug_IQK(dm, RX_IQK, RF_PATH_B);597debug_reload_data_8822c(dm);598}599#endif /* defined(CONFIG_RTL8822C) && defined(CONFIG_LPS_PG) */600601602603