rtw88: 8723d: Add cfg_ldo25 to control LDO25
authorPing-Ke Shih <pkshih@realtek.com>
Mon, 20 Apr 2020 05:50:52 +0000 (13:50 +0800)
committerKalle Valo <kvalo@codeaurora.org>
Tue, 21 Apr 2020 12:59:22 +0000 (15:59 +0300)
Implement rtw_chip_ops::cfg_ldo25 to enable/disable LDO25 with proper
voltage.

Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200420055054.14592-7-yhchuang@realtek.com
drivers/net/wireless/realtek/rtw88/reg.h
drivers/net/wireless/realtek/rtw88/rtw8723d.c
drivers/net/wireless/realtek/rtw88/rtw8822b.c

index 9d94534..2afd547 100644 (file)
 #define REG_LDO_EFUSE_CTRL     0x0034
 #define BIT_MASK_EFUSE_BANK_SEL        (BIT(8) | BIT(9))
 
+#define BIT_LDO25_VOLTAGE_V25  0x03
+#define BIT_MASK_LDO25_VOLTAGE GENMASK(6, 4)
+#define BIT_SHIFT_LDO25_VOLTAGE        4
+#define BIT_LDO25_EN           BIT(7)
+
 #define REG_GPIO_MUXCFG                0x0040
 #define BIT_FSPI_EN            BIT(19)
 #define BIT_BT_AOD_GPIO3       BIT(9)
index 4fe4335..04f8d73 100644 (file)
 #include "reg.h"
 #include "debug.h"
 
+static void rtw8723d_cfg_ldo25(struct rtw_dev *rtwdev, bool enable)
+{
+       u8 ldo_pwr;
+
+       ldo_pwr = rtw_read8(rtwdev, REG_LDO_EFUSE_CTRL + 3);
+       if (enable) {
+               ldo_pwr &= ~BIT_MASK_LDO25_VOLTAGE;
+               ldo_pwr = (BIT_LDO25_VOLTAGE_V25 << 4) | BIT_LDO25_EN;
+       } else {
+               ldo_pwr &= ~BIT_LDO25_EN;
+       }
+       rtw_write8(rtwdev, REG_LDO_EFUSE_CTRL + 3, ldo_pwr);
+}
+
 static struct rtw_chip_ops rtw8723d_ops = {
        .read_rf                = rtw_phy_read_rf_sipi,
        .write_rf               = rtw_phy_write_rf_reg_sipi,
        .set_antenna            = NULL,
+       .cfg_ldo25              = rtw8723d_cfg_ldo25,
        .config_bfee            = NULL,
        .set_gid_table          = NULL,
        .cfg_csi_rate           = NULL,
index c02f3a7..9a2e18e 100644 (file)
@@ -1030,7 +1030,7 @@ static void rtw8822b_cfg_ldo25(struct rtw_dev *rtwdev, bool enable)
        u8 ldo_pwr;
 
        ldo_pwr = rtw_read8(rtwdev, REG_LDO_EFUSE_CTRL + 3);
-       ldo_pwr = enable ? ldo_pwr | BIT(7) : ldo_pwr & ~BIT(7);
+       ldo_pwr = enable ? ldo_pwr | BIT_LDO25_EN : ldo_pwr & ~BIT_LDO25_EN;
        rtw_write8(rtwdev, REG_LDO_EFUSE_CTRL + 3, ldo_pwr);
 }