rt2x00: Disable auto wakeup before waking up device.
In all drivers ensure that auto wakeup is disabled before waking up the device. This is needed to prevent connection stability issues and problems in waking up the device. Based upon a patch from Ondrej Zary <linux@rainbow-software.org> Signed-off-by: Gertjan van Wingerde <gwingerde@gmail.com> Cc: Ondrej Zary <linux@rainbow-software.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
8a64c0f6b7
commit
5731858d00
5 changed files with 17 additions and 5 deletions
|
@ -525,6 +525,10 @@ static void rt2400pci_config_ps(struct rt2x00_dev *rt2x00dev,
|
|||
|
||||
rt2x00_set_field32(®, CSR20_AUTOWAKE, 1);
|
||||
rt2x00pci_register_write(rt2x00dev, CSR20, reg);
|
||||
} else {
|
||||
rt2x00pci_register_read(rt2x00dev, CSR20, ®);
|
||||
rt2x00_set_field32(®, CSR20_AUTOWAKE, 0);
|
||||
rt2x00pci_register_write(rt2x00dev, CSR20, reg);
|
||||
}
|
||||
|
||||
rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
|
||||
|
|
|
@ -573,6 +573,10 @@ static void rt2500pci_config_ps(struct rt2x00_dev *rt2x00dev,
|
|||
|
||||
rt2x00_set_field32(®, CSR20_AUTOWAKE, 1);
|
||||
rt2x00pci_register_write(rt2x00dev, CSR20, reg);
|
||||
} else {
|
||||
rt2x00pci_register_read(rt2x00dev, CSR20, ®);
|
||||
rt2x00_set_field32(®, CSR20_AUTOWAKE, 0);
|
||||
rt2x00pci_register_write(rt2x00dev, CSR20, reg);
|
||||
}
|
||||
|
||||
rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
|
||||
|
|
|
@ -648,6 +648,10 @@ static void rt2500usb_config_ps(struct rt2x00_dev *rt2x00dev,
|
|||
|
||||
rt2x00_set_field16(®, MAC_CSR18_AUTO_WAKE, 1);
|
||||
rt2500usb_register_write(rt2x00dev, MAC_CSR18, reg);
|
||||
} else {
|
||||
rt2500usb_register_read(rt2x00dev, MAC_CSR18, ®);
|
||||
rt2x00_set_field16(®, MAC_CSR18_AUTO_WAKE, 0);
|
||||
rt2500usb_register_write(rt2x00dev, MAC_CSR18, reg);
|
||||
}
|
||||
|
||||
rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
|
||||
|
|
|
@ -1014,13 +1014,13 @@ static void rt2800_config_ps(struct rt2x00_dev *rt2x00dev,
|
|||
|
||||
rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
|
||||
} else {
|
||||
rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
|
||||
|
||||
rt2800_register_read(rt2x00dev, AUTOWAKEUP_CFG, ®);
|
||||
rt2x00_set_field32(®, AUTOWAKEUP_CFG_AUTO_LEAD_TIME, 0);
|
||||
rt2x00_set_field32(®, AUTOWAKEUP_CFG_TBCN_BEFORE_WAKE, 0);
|
||||
rt2x00_set_field32(®, AUTOWAKEUP_CFG_AUTOWAKE, 0);
|
||||
rt2800_register_write(rt2x00dev, AUTOWAKEUP_CFG, reg);
|
||||
|
||||
rt2x00dev->ops->lib->set_device_state(rt2x00dev, state);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -860,15 +860,15 @@ static void rt73usb_config_ps(struct rt2x00_dev *rt2x00dev,
|
|||
rt2x00usb_vendor_request_sw(rt2x00dev, USB_DEVICE_MODE, 0,
|
||||
USB_MODE_SLEEP, REGISTER_TIMEOUT);
|
||||
} else {
|
||||
rt2x00usb_vendor_request_sw(rt2x00dev, USB_DEVICE_MODE, 0,
|
||||
USB_MODE_WAKEUP, REGISTER_TIMEOUT);
|
||||
|
||||
rt2x00usb_register_read(rt2x00dev, MAC_CSR11, ®);
|
||||
rt2x00_set_field32(®, MAC_CSR11_DELAY_AFTER_TBCN, 0);
|
||||
rt2x00_set_field32(®, MAC_CSR11_TBCN_BEFORE_WAKEUP, 0);
|
||||
rt2x00_set_field32(®, MAC_CSR11_AUTOWAKE, 0);
|
||||
rt2x00_set_field32(®, MAC_CSR11_WAKEUP_LATENCY, 0);
|
||||
rt2x00usb_register_write(rt2x00dev, MAC_CSR11, reg);
|
||||
|
||||
rt2x00usb_vendor_request_sw(rt2x00dev, USB_DEVICE_MODE, 0,
|
||||
USB_MODE_WAKEUP, REGISTER_TIMEOUT);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue