diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/efuse.c')
| -rw-r--r-- | drivers/net/wireless/rtlwifi/efuse.c | 23 | 
1 files changed, 11 insertions, 12 deletions
diff --git a/drivers/net/wireless/rtlwifi/efuse.c b/drivers/net/wireless/rtlwifi/efuse.c index 838a1ed3f19..2ffc7298f68 100644 --- a/drivers/net/wireless/rtlwifi/efuse.c +++ b/drivers/net/wireless/rtlwifi/efuse.c @@ -262,9 +262,9 @@ void read_efuse(struct ieee80211_hw *hw, u16 _offset, u16 _size_byte, u8 *pbuf)  			    sizeof(u8), GFP_ATOMIC);  	if (!efuse_tbl)  		return; -	efuse_word = kmalloc(EFUSE_MAX_WORD_UNIT * sizeof(u16 *), GFP_ATOMIC); +	efuse_word = kzalloc(EFUSE_MAX_WORD_UNIT * sizeof(u16 *), GFP_ATOMIC);  	if (!efuse_word) -		goto done; +		goto out;  	for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++) {  		efuse_word[i] = kmalloc(efuse_max_section * sizeof(u16),  					GFP_ATOMIC); @@ -378,6 +378,7 @@ done:  	for (i = 0; i < EFUSE_MAX_WORD_UNIT; i++)  		kfree(efuse_word[i]);  	kfree(efuse_word); +out:  	kfree(efuse_tbl);  } @@ -1203,20 +1204,18 @@ static void efuse_power_switch(struct ieee80211_hw *hw, u8 write, u8 pwrstate)  static u16 efuse_get_current_size(struct ieee80211_hw *hw)  { -	int continual = true;  	u16 efuse_addr = 0;  	u8 hworden;  	u8 efuse_data, word_cnts; -	while (continual && efuse_one_byte_read(hw, efuse_addr, &efuse_data) -	       && (efuse_addr < EFUSE_MAX_SIZE)) { -		if (efuse_data != 0xFF) { -			hworden = efuse_data & 0x0F; -			word_cnts = efuse_calculate_word_cnts(hworden); -			efuse_addr = efuse_addr + (word_cnts * 2) + 1; -		} else { -			continual = false; -		} +	while (efuse_one_byte_read(hw, efuse_addr, &efuse_data) && +	       efuse_addr < EFUSE_MAX_SIZE) { +		if (efuse_data == 0xFF) +			break; + +		hworden = efuse_data & 0x0F; +		word_cnts = efuse_calculate_word_cnts(hworden); +		efuse_addr = efuse_addr + (word_cnts * 2) + 1;  	}  	return efuse_addr;  | 
