diff options
| author | David S. Miller <davem@davemloft.net> | 2011-11-17 17:31:49 -0500 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2011-11-17 17:31:49 -0500 |
| commit | 596a1b746c56f974240c8df6d8e3a026c54266ff (patch) | |
| tree | a6c50df4b1fcf8c8c912ba64e0d359f672e8d0fe /drivers/net | |
| parent | 38ff1edb52f737d490126728e3d5ba2b8d2f3ba0 (diff) | |
| parent | c4be3c2da1ab4344d3d5f63d6ec1952a3c6e635c (diff) | |
Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/wireless/libertas/if_spi.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2800usb.c | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00dev.c | 22 |
4 files changed, 23 insertions, 2 deletions
diff --git a/drivers/net/wireless/libertas/if_spi.c b/drivers/net/wireless/libertas/if_spi.c index 11b69b300dc0..728baa445259 100644 --- a/drivers/net/wireless/libertas/if_spi.c +++ b/drivers/net/wireless/libertas/if_spi.c | |||
| @@ -995,6 +995,7 @@ static int if_spi_host_to_card(struct lbs_private *priv, | |||
| 995 | spin_unlock_irqrestore(&card->buffer_lock, flags); | 995 | spin_unlock_irqrestore(&card->buffer_lock, flags); |
| 996 | break; | 996 | break; |
| 997 | default: | 997 | default: |
| 998 | kfree(packet); | ||
| 998 | netdev_err(priv->dev, "can't transfer buffer of type %d\n", | 999 | netdev_err(priv->dev, "can't transfer buffer of type %d\n", |
| 999 | type); | 1000 | type); |
| 1000 | err = -EINVAL; | 1001 | err = -EINVAL; |
diff --git a/drivers/net/wireless/rt2x00/rt2800usb.c b/drivers/net/wireless/rt2x00/rt2800usb.c index f1565792f270..377876315b8d 100644 --- a/drivers/net/wireless/rt2x00/rt2800usb.c +++ b/drivers/net/wireless/rt2x00/rt2800usb.c | |||
| @@ -919,6 +919,7 @@ static struct usb_device_id rt2800usb_device_table[] = { | |||
| 919 | { USB_DEVICE(0x050d, 0x935b) }, | 919 | { USB_DEVICE(0x050d, 0x935b) }, |
| 920 | /* Buffalo */ | 920 | /* Buffalo */ |
| 921 | { USB_DEVICE(0x0411, 0x00e8) }, | 921 | { USB_DEVICE(0x0411, 0x00e8) }, |
| 922 | { USB_DEVICE(0x0411, 0x0158) }, | ||
| 922 | { USB_DEVICE(0x0411, 0x016f) }, | 923 | { USB_DEVICE(0x0411, 0x016f) }, |
| 923 | { USB_DEVICE(0x0411, 0x01a2) }, | 924 | { USB_DEVICE(0x0411, 0x01a2) }, |
| 924 | /* Corega */ | 925 | /* Corega */ |
diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h index 2ec5c00235e6..99ff12d0c29d 100644 --- a/drivers/net/wireless/rt2x00/rt2x00.h +++ b/drivers/net/wireless/rt2x00/rt2x00.h | |||
| @@ -943,6 +943,7 @@ struct rt2x00_dev { | |||
| 943 | * Powersaving work | 943 | * Powersaving work |
| 944 | */ | 944 | */ |
| 945 | struct delayed_work autowakeup_work; | 945 | struct delayed_work autowakeup_work; |
| 946 | struct work_struct sleep_work; | ||
| 946 | 947 | ||
| 947 | /* | 948 | /* |
| 948 | * Data queue arrays for RX, TX, Beacon and ATIM. | 949 | * Data queue arrays for RX, TX, Beacon and ATIM. |
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c index e1fb2a8569be..edd317fa7c0a 100644 --- a/drivers/net/wireless/rt2x00/rt2x00dev.c +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c | |||
| @@ -465,6 +465,23 @@ static u8 *rt2x00lib_find_ie(u8 *data, unsigned int len, u8 ie) | |||
| 465 | return NULL; | 465 | return NULL; |
| 466 | } | 466 | } |
| 467 | 467 | ||
| 468 | static void rt2x00lib_sleep(struct work_struct *work) | ||
| 469 | { | ||
| 470 | struct rt2x00_dev *rt2x00dev = | ||
| 471 | container_of(work, struct rt2x00_dev, sleep_work); | ||
| 472 | |||
| 473 | if (!test_bit(DEVICE_STATE_PRESENT, &rt2x00dev->flags)) | ||
| 474 | return; | ||
| 475 | |||
| 476 | /* | ||
| 477 | * Check again is powersaving is enabled, to prevent races from delayed | ||
| 478 | * work execution. | ||
| 479 | */ | ||
| 480 | if (!test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags)) | ||
| 481 | rt2x00lib_config(rt2x00dev, &rt2x00dev->hw->conf, | ||
| 482 | IEEE80211_CONF_CHANGE_PS); | ||
| 483 | } | ||
| 484 | |||
| 468 | static void rt2x00lib_rxdone_check_ps(struct rt2x00_dev *rt2x00dev, | 485 | static void rt2x00lib_rxdone_check_ps(struct rt2x00_dev *rt2x00dev, |
| 469 | struct sk_buff *skb, | 486 | struct sk_buff *skb, |
| 470 | struct rxdone_entry_desc *rxdesc) | 487 | struct rxdone_entry_desc *rxdesc) |
| @@ -512,8 +529,7 @@ static void rt2x00lib_rxdone_check_ps(struct rt2x00_dev *rt2x00dev, | |||
| 512 | cam |= (tim_ie->bitmap_ctrl & 0x01); | 529 | cam |= (tim_ie->bitmap_ctrl & 0x01); |
| 513 | 530 | ||
| 514 | if (!cam && !test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags)) | 531 | if (!cam && !test_bit(CONFIG_POWERSAVING, &rt2x00dev->flags)) |
| 515 | rt2x00lib_config(rt2x00dev, &rt2x00dev->hw->conf, | 532 | queue_work(rt2x00dev->workqueue, &rt2x00dev->sleep_work); |
| 516 | IEEE80211_CONF_CHANGE_PS); | ||
| 517 | } | 533 | } |
| 518 | 534 | ||
| 519 | static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev, | 535 | static int rt2x00lib_rxdone_read_signal(struct rt2x00_dev *rt2x00dev, |
| @@ -1141,6 +1157,7 @@ int rt2x00lib_probe_dev(struct rt2x00_dev *rt2x00dev) | |||
| 1141 | 1157 | ||
| 1142 | INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled); | 1158 | INIT_WORK(&rt2x00dev->intf_work, rt2x00lib_intf_scheduled); |
| 1143 | INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup); | 1159 | INIT_DELAYED_WORK(&rt2x00dev->autowakeup_work, rt2x00lib_autowakeup); |
| 1160 | INIT_WORK(&rt2x00dev->sleep_work, rt2x00lib_sleep); | ||
| 1144 | 1161 | ||
| 1145 | /* | 1162 | /* |
| 1146 | * Let the driver probe the device to detect the capabilities. | 1163 | * Let the driver probe the device to detect the capabilities. |
| @@ -1197,6 +1214,7 @@ void rt2x00lib_remove_dev(struct rt2x00_dev *rt2x00dev) | |||
| 1197 | */ | 1214 | */ |
| 1198 | cancel_work_sync(&rt2x00dev->intf_work); | 1215 | cancel_work_sync(&rt2x00dev->intf_work); |
| 1199 | cancel_delayed_work_sync(&rt2x00dev->autowakeup_work); | 1216 | cancel_delayed_work_sync(&rt2x00dev->autowakeup_work); |
| 1217 | cancel_work_sync(&rt2x00dev->sleep_work); | ||
| 1200 | if (rt2x00_is_usb(rt2x00dev)) { | 1218 | if (rt2x00_is_usb(rt2x00dev)) { |
| 1201 | del_timer_sync(&rt2x00dev->txstatus_timer); | 1219 | del_timer_sync(&rt2x00dev->txstatus_timer); |
| 1202 | cancel_work_sync(&rt2x00dev->rxdone_work); | 1220 | cancel_work_sync(&rt2x00dev->rxdone_work); |
