rtw88: fix error handling when setup efuse info
authorPing-Ke Shih <pkshih@realtek.com>
Wed, 2 Oct 2019 06:35:31 +0000 (14:35 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 26 Jan 2020 09:01:03 +0000 (10:01 +0100)
commit f4268729eb1eefe23f6746849c1b5626d9030532 upstream.

Disable efuse if the efuse is enabled when we failed to setup the efuse
information, otherwise the hardware will not turn off.

Fixes: e3037485c68e ("rtw88: new Realtek 802.11ac driver")
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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/wireless/realtek/rtw88/main.c

index 7a3a491..806af37 100644 (file)
@@ -1048,19 +1048,19 @@ static int rtw_chip_efuse_info_setup(struct rtw_dev *rtwdev)
        /* power on mac to read efuse */
        ret = rtw_chip_efuse_enable(rtwdev);
        if (ret)
-               goto out;
+               goto out_unlock;
 
        ret = rtw_parse_efuse_map(rtwdev);
        if (ret)
-               goto out;
+               goto out_disable;
 
        ret = rtw_dump_hw_feature(rtwdev);
        if (ret)
-               goto out;
+               goto out_disable;
 
        ret = rtw_check_supported_rfe(rtwdev);
        if (ret)
-               goto out;
+               goto out_disable;
 
        if (efuse->crystal_cap == 0xff)
                efuse->crystal_cap = 0;
@@ -1087,9 +1087,10 @@ static int rtw_chip_efuse_info_setup(struct rtw_dev *rtwdev)
        efuse->ext_pa_5g = efuse->pa_type_5g & BIT(0) ? 1 : 0;
        efuse->ext_lna_2g = efuse->lna_type_5g & BIT(3) ? 1 : 0;
 
+out_disable:
        rtw_chip_efuse_disable(rtwdev);
 
-out:
+out_unlock:
        mutex_unlock(&rtwdev->mutex);
        return ret;
 }