@@ -381,6 +381,65 @@ static void rtw8821c_set_channel_rxdfir(struct rtw_dev *rtwdev, u8 bw)
381381 }
382382}
383383
384+ static void rtw8821c_cck_tx_filter_srrc (struct rtw_dev * rtwdev , u8 channel , u8 bw )
385+ {
386+ struct rtw_hal * hal = & rtwdev -> hal ;
387+
388+ if (channel == 14 ) {
389+ rtw_write32_mask (rtwdev , REG_CCA_FLTR , MASKHWORD , 0xe82c );
390+ rtw_write32_mask (rtwdev , REG_TXSF2 , MASKDWORD , 0x0000b81c );
391+ rtw_write32_mask (rtwdev , REG_TXSF6 , MASKLWORD , 0x0000 );
392+ rtw_write32_mask (rtwdev , REG_TXFILTER , MASKDWORD , 0x00003667 );
393+
394+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWE2 , RFREG_MASK , 0x00002 );
395+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0001e );
396+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00000 );
397+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0001c );
398+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00000 );
399+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0000e );
400+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00000 );
401+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0000c );
402+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00000 );
403+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWE2 , RFREG_MASK , 0x00000 );
404+ } else if (channel == 13 ||
405+ (channel == 11 && bw == RTW_CHANNEL_WIDTH_40 )) {
406+ rtw_write32_mask (rtwdev , REG_CCA_FLTR , MASKHWORD , 0xf8fe );
407+ rtw_write32_mask (rtwdev , REG_TXSF2 , MASKDWORD , 0x64b80c1c );
408+ rtw_write32_mask (rtwdev , REG_TXSF6 , MASKLWORD , 0x8810 );
409+ rtw_write32_mask (rtwdev , REG_TXFILTER , MASKDWORD , 0x01235667 );
410+
411+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWE2 , RFREG_MASK , 0x00002 );
412+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0001e );
413+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00027 );
414+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0001c );
415+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00027 );
416+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0000e );
417+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00029 );
418+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0000c );
419+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00026 );
420+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWE2 , RFREG_MASK , 0x00000 );
421+ } else {
422+ rtw_write32_mask (rtwdev , REG_CCA_FLTR , MASKHWORD , 0xe82c );
423+ rtw_write32_mask (rtwdev , REG_TXSF2 , MASKDWORD ,
424+ hal -> ch_param [0 ]);
425+ rtw_write32_mask (rtwdev , REG_TXSF6 , MASKLWORD ,
426+ hal -> ch_param [1 ] & MASKLWORD );
427+ rtw_write32_mask (rtwdev , REG_TXFILTER , MASKDWORD ,
428+ hal -> ch_param [2 ]);
429+
430+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWE2 , RFREG_MASK , 0x00002 );
431+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0001e );
432+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00000 );
433+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0001c );
434+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00000 );
435+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0000e );
436+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00000 );
437+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWA , RFREG_MASK , 0x0000c );
438+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWD0 , RFREG_MASK , 0x00000 );
439+ rtw_write_rf (rtwdev , RF_PATH_A , RF_LUTWE2 , RFREG_MASK , 0x00000 );
440+ }
441+ }
442+
384443static void rtw8821c_set_channel_bb (struct rtw_dev * rtwdev , u8 channel , u8 bw ,
385444 u8 primary_ch_idx )
386445{
@@ -395,6 +454,13 @@ static void rtw8821c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw,
395454
396455 rtw_write32_mask (rtwdev , REG_TXSCALE_A , 0xf00 , 0x0 );
397456 rtw_write32_mask (rtwdev , REG_CLKTRK , 0x1ffe0000 , 0x96a );
457+
458+ if (rtw_regd_srrc (rtwdev )) {
459+ rtw8821c_cck_tx_filter_srrc (rtwdev , channel , bw );
460+ goto set_bw ;
461+ }
462+
463+ /* CCK TX filter parameters for default case */
398464 if (channel == 14 ) {
399465 rtw_write32_mask (rtwdev , REG_TXSF2 , MASKDWORD , 0x0000b81c );
400466 rtw_write32_mask (rtwdev , REG_TXSF6 , MASKLWORD , 0x0000 );
@@ -430,6 +496,7 @@ static void rtw8821c_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw,
430496 rtw_write32_mask (rtwdev , REG_CLKTRK , 0x1ffe0000 , 0x412 );
431497 }
432498
499+ set_bw :
433500 switch (bw ) {
434501 case RTW_CHANNEL_WIDTH_20 :
435502 default :
0 commit comments