Skip to content

Commit

Permalink
rtl8xxxu: Only setup USB interrupts for parts which support it
Browse files Browse the repository at this point in the history
Only 1st generation chips do provide USB interrupts, so do not try to
setup interrupts for newer chips (8192eu and 8723bu).

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
  • Loading branch information
Jes Sorensen authored and Kalle Valo committed Mar 10, 2016
1 parent adfc012 commit 0e28b97
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 5 deletions.
18 changes: 13 additions & 5 deletions drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

Expand Down Expand Up @@ -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;
Expand All @@ -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;
}

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

rtl8723a_enable_rf(priv);
ret = rtl8xxxu_submit_int_urb(hw);
if (ret)
goto exit;
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);
Expand Down Expand Up @@ -5902,14 +5908,16 @@ static void rtl8xxxu_stop(struct ieee80211_hw *hw)

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

rtl8723a_disable_rf(priv);

/*
* Disable interrupts
*/
rtl8xxxu_write32(priv, REG_USB_HIMR, 0);
if (priv->usb_interrupts)
rtl8xxxu_write32(priv, REG_USB_HIMR, 0);

rtl8xxxu_free_rx_resources(priv);
rtl8xxxu_free_tx_resources(priv);
Expand Down
1 change: 1 addition & 0 deletions drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 0e28b97

Please sign in to comment.