Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0e28b975 authored by Jes Sorensen's avatar Jes Sorensen Committed by Kalle Valo
Browse files

rtl8xxxu: Only setup USB interrupts for parts which support it



Only 1st generation chips do provide USB interrupts, so do not try to
setup interrupts for newer chips (8192eu and 8723bu).

Signed-off-by: default avatarJes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent adfc0124
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -1707,6 +1707,7 @@ static int rtl8xxxu_identify_chip(struct rtl8xxxu_priv *priv)
			priv->rtlchip = 0x8723b;
		} else {
			sprintf(priv->chip_name, "8723AU");
			priv->usb_interrupts = 1;
			priv->rtlchip = 0x8723a;
		}

@@ -1744,12 +1745,14 @@ static int rtl8xxxu_identify_chip(struct rtl8xxxu_priv *priv)
			priv->rf_paths = 2;
			priv->rx_paths = 2;
			priv->tx_paths = 1;
			priv->usb_interrupts = 1;
			priv->rtlchip = 0x8191c;
		} else {
			sprintf(priv->chip_name, "8192CU");
			priv->rf_paths = 2;
			priv->rx_paths = 2;
			priv->tx_paths = 2;
			priv->usb_interrupts = 1;
			priv->rtlchip = 0x8192c;
		}
		priv->has_wifi = 1;
@@ -1759,6 +1762,7 @@ static int rtl8xxxu_identify_chip(struct rtl8xxxu_priv *priv)
		priv->rx_paths = 1;
		priv->tx_paths = 1;
		priv->rtlchip = 0x8188c;
		priv->usb_interrupts = 1;
		priv->has_wifi = 1;
	}

@@ -5825,9 +5829,11 @@ static int rtl8xxxu_start(struct ieee80211_hw *hw)
	init_usb_anchor(&priv->int_anchor);

	rtl8723a_enable_rf(priv);
	if (priv->usb_interrupts) {
		ret = rtl8xxxu_submit_int_urb(hw);
		if (ret)
			goto exit;
	}

	for (i = 0; i < RTL8XXXU_TX_URBS; i++) {
		tx_urb = kmalloc(sizeof(struct rtl8xxxu_tx_urb), GFP_KERNEL);
@@ -5902,6 +5908,7 @@ static void rtl8xxxu_stop(struct ieee80211_hw *hw)

	usb_kill_anchored_urbs(&priv->rx_anchor);
	usb_kill_anchored_urbs(&priv->tx_anchor);
	if (priv->usb_interrupts)
		usb_kill_anchored_urbs(&priv->int_anchor);

	rtl8723a_disable_rf(priv);
@@ -5909,6 +5916,7 @@ static void rtl8xxxu_stop(struct ieee80211_hw *hw)
	/*
	 * Disable interrupts
	 */
	if (priv->usb_interrupts)
		rtl8xxxu_write32(priv, REG_USB_HIMR, 0);

	rtl8xxxu_free_rx_resources(priv);
+1 −0
Original line number Diff line number Diff line
@@ -693,6 +693,7 @@ struct rtl8xxxu_priv {
	u32 has_polarity_ctrl:1;
	u32 has_eeprom:1;
	u32 boot_eeprom:1;
	u32 usb_interrupts:1;
	u32 ep_tx_high_queue:1;
	u32 ep_tx_normal_queue:1;
	u32 ep_tx_low_queue:1;