diff options
| author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-04-16 19:40:27 +0100 | 
|---|---|---|
| committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2012-04-16 19:40:27 +0100 | 
| commit | d5efccd5b6843c504042735c1e20d9252daefd98 (patch) | |
| tree | 87994943963bf2f34b3f1fa982d909fd82f56746 /drivers/net/wireless/rtlwifi/usb.c | |
| parent | 516541a00c6a6bced133158f0146b602a18dcbe5 (diff) | |
| parent | e816b57a337ea3b755de72bec38c10c864f23015 (diff) | |
| download | olio-linux-3.10-d5efccd5b6843c504042735c1e20d9252daefd98.tar.xz olio-linux-3.10-d5efccd5b6843c504042735c1e20d9252daefd98.zip  | |
ASoC: Merge tag 'v3.4-rc3' into for-3.5
Linux 3.4-rc3 contains a bunch of Tegra changes which are conflicting
annoyingly with the new development that's going on for Tegra so merge
it up to resolve those conflicts.
Conflicts:
	sound/soc/soc-core.c
	sound/soc/tegra/tegra_i2s.c
	sound/soc/tegra/tegra_spdif.c
Diffstat (limited to 'drivers/net/wireless/rtlwifi/usb.c')
| -rw-r--r-- | drivers/net/wireless/rtlwifi/usb.c | 34 | 
1 files changed, 16 insertions, 18 deletions
diff --git a/drivers/net/wireless/rtlwifi/usb.c b/drivers/net/wireless/rtlwifi/usb.c index 2e1e352864b..d04dbda13f5 100644 --- a/drivers/net/wireless/rtlwifi/usb.c +++ b/drivers/net/wireless/rtlwifi/usb.c @@ -124,46 +124,38 @@ static int _usbctrl_vendorreq_sync_read(struct usb_device *udev, u8 request,  	return status;  } -static u32 _usb_read_sync(struct usb_device *udev, u32 addr, u16 len) +static u32 _usb_read_sync(struct rtl_priv *rtlpriv, u32 addr, u16 len)  { +	struct device *dev = rtlpriv->io.dev; +	struct usb_device *udev = to_usb_device(dev);  	u8 request;  	u16 wvalue;  	u16 index; -	u32 *data; -	u32 ret; +	__le32 *data = &rtlpriv->usb_data[rtlpriv->usb_data_index]; -	data = kmalloc(sizeof(u32), GFP_KERNEL); -	if (!data) -		return -ENOMEM;  	request = REALTEK_USB_VENQT_CMD_REQ;  	index = REALTEK_USB_VENQT_CMD_IDX; /* n/a */  	wvalue = (u16)addr;  	_usbctrl_vendorreq_sync_read(udev, request, wvalue, index, data, len); -	ret = le32_to_cpu(*data); -	kfree(data); -	return ret; +	if (++rtlpriv->usb_data_index >= RTL_USB_MAX_RX_COUNT) +		rtlpriv->usb_data_index = 0; +	return le32_to_cpu(*data);  }  static u8 _usb_read8_sync(struct rtl_priv *rtlpriv, u32 addr)  { -	struct device *dev = rtlpriv->io.dev; - -	return (u8)_usb_read_sync(to_usb_device(dev), addr, 1); +	return (u8)_usb_read_sync(rtlpriv, addr, 1);  }  static u16 _usb_read16_sync(struct rtl_priv *rtlpriv, u32 addr)  { -	struct device *dev = rtlpriv->io.dev; - -	return (u16)_usb_read_sync(to_usb_device(dev), addr, 2); +	return (u16)_usb_read_sync(rtlpriv, addr, 2);  }  static u32 _usb_read32_sync(struct rtl_priv *rtlpriv, u32 addr)  { -	struct device *dev = rtlpriv->io.dev; - -	return _usb_read_sync(to_usb_device(dev), addr, 4); +	return _usb_read_sync(rtlpriv, addr, 4);  }  static void _usb_write_async(struct usb_device *udev, u32 addr, u32 val, @@ -955,6 +947,11 @@ int __devinit rtl_usb_probe(struct usb_interface *intf,  		return -ENOMEM;  	}  	rtlpriv = hw->priv; +	rtlpriv->usb_data = kzalloc(RTL_USB_MAX_RX_COUNT * sizeof(u32), +				    GFP_KERNEL); +	if (!rtlpriv->usb_data) +		return -ENOMEM; +	rtlpriv->usb_data_index = 0;  	init_completion(&rtlpriv->firmware_loading_complete);  	SET_IEEE80211_DEV(hw, &intf->dev);  	udev = interface_to_usbdev(intf); @@ -1025,6 +1022,7 @@ void rtl_usb_disconnect(struct usb_interface *intf)  	/* rtl_deinit_rfkill(hw); */  	rtl_usb_deinit(hw);  	rtl_deinit_core(hw); +	kfree(rtlpriv->usb_data);  	rtlpriv->cfg->ops->deinit_sw_leds(hw);  	rtlpriv->cfg->ops->deinit_sw_vars(hw);  	_rtl_usb_io_handler_release(hw);  |