summaryrefslogtreecommitdiffstats
path: root/linux-2.6-bluetooth-autosuspend.patch
diff options
context:
space:
mode:
authorKyle McMartin <kyle@redhat.com>2010-12-09 13:46:11 -0500
committerKyle McMartin <kyle@redhat.com>2010-12-09 13:46:11 -0500
commit72b3729657a0c46f187e4a6c500b239a0e4d391a (patch)
tree47c746511fa3f4ef828d70bc2011f71d2cec86f1 /linux-2.6-bluetooth-autosuspend.patch
parent738764956426a09304f07623f75f711a013ef55a (diff)
downloadkernel-72b3729657a0c46f187e4a6c500b239a0e4d391a.tar.gz
kernel-72b3729657a0c46f187e4a6c500b239a0e4d391a.tar.xz
kernel-72b3729657a0c46f187e4a6c500b239a0e4d391a.zip
Revert "Merge branch 'kernel-git' strategy 'theirs'"
This reverts commit a3f45c4a9c4acadb3b0e3531a0d4d3649f711ebf, reversing changes made to ee99a68c51ebd08409e45b63796f3c971c27e3d6.
Diffstat (limited to 'linux-2.6-bluetooth-autosuspend.patch')
-rw-r--r--linux-2.6-bluetooth-autosuspend.patch159
1 files changed, 159 insertions, 0 deletions
diff --git a/linux-2.6-bluetooth-autosuspend.patch b/linux-2.6-bluetooth-autosuspend.patch
new file mode 100644
index 000000000..663b79979
--- /dev/null
+++ b/linux-2.6-bluetooth-autosuspend.patch
@@ -0,0 +1,159 @@
+commit 6aa42966dea9a1fc02a714211ea489c3278bf8d4
+Author: Matthew Garrett <mjg@redhat.com>
+Date: Thu Sep 16 13:34:55 2010 -0400
+
+ bluetooth: Take a runtime pm reference on hid connections
+
+ Bluetooth runtime PM interacts badly with input devices - the connection
+ will be dropped if the device becomes idle, resulting in noticable lag when
+ the user interacts with the input device again. Bump the pm runtime count
+ when the device is associated and release it when it's disassociated in
+ order to avoid this.
+
+ Signed-off-by: Matthew Garrett <mjg@redhat.com>
+
+diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
+index bfe641b..a4489a7 100644
+--- a/net/bluetooth/hidp/core.c
++++ b/net/bluetooth/hidp/core.c
+@@ -36,6 +36,7 @@
+ #include <linux/file.h>
+ #include <linux/init.h>
+ #include <linux/wait.h>
++#include <linux/pm_runtime.h>
+ #include <net/sock.h>
+
+ #include <linux/input.h>
+@@ -622,6 +623,14 @@ static int hidp_session(void *arg)
+ return 0;
+ }
+
++static struct hci_dev *hidp_get_hci(struct hidp_session *session)
++{
++ bdaddr_t *src = &bt_sk(session->ctrl_sock->sk)->src;
++ bdaddr_t *dst = &bt_sk(session->ctrl_sock->sk)->dst;
++
++ return hci_get_route(dst, src);
++}
++
+ static struct device *hidp_get_device(struct hidp_session *session)
+ {
+ bdaddr_t *src = &bt_sk(session->ctrl_sock->sk)->src;
+@@ -819,6 +828,7 @@ fault:
+ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
+ {
+ struct hidp_session *session, *s;
++ struct hci_dev *hdev;
+ int err;
+
+ BT_DBG("");
+@@ -889,6 +899,10 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock,
+ hidp_input_event(session->input, EV_LED, 0, 0);
+ }
+
++ hdev = hidp_get_hci(session);
++ pm_runtime_get(hdev->parent);
++ hci_dev_put(hdev);
++
+ up_write(&hidp_session_sem);
+ return 0;
+
+@@ -925,6 +939,7 @@ failed:
+ int hidp_del_connection(struct hidp_conndel_req *req)
+ {
+ struct hidp_session *session;
++ struct hci_dev *hdev;
+ int err = 0;
+
+ BT_DBG("");
+@@ -952,6 +967,9 @@ int hidp_del_connection(struct hidp_conndel_req *req)
+ } else
+ err = -ENOENT;
+
++ hdev = hidp_get_hci(session);
++ pm_runtime_put(hdev->parent);
++ hci_dev_put(hdev);
+ up_read(&hidp_session_sem);
+ return err;
+ }
+
+commit 482eca592615e85b048753750b101d051b77fde9
+Author: Matthew Garrett <mjg@redhat.com>
+Date: Thu Sep 16 13:49:24 2010 -0400
+
+ bluetooth: Remove some unnecessary error messages
+
+ The main reason for these urbs to error out on submission is that runtime
+ pm has kicked in, which is unnecessary noise. Let's just drop them.
+
+ Signed-off-by: Matthew Garrett <mjg@redhat.com>
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index d22ce3c..3ace025 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -229,11 +229,8 @@ static void btusb_intr_complete(struct urb *urb)
+ usb_anchor_urb(urb, &data->intr_anchor);
+
+ err = usb_submit_urb(urb, GFP_ATOMIC);
+- if (err < 0) {
+- BT_ERR("%s urb %p failed to resubmit (%d)",
+- hdev->name, urb, -err);
++ if (err < 0)
+ usb_unanchor_urb(urb);
+- }
+ }
+
+ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
+@@ -313,11 +310,8 @@ static void btusb_bulk_complete(struct urb *urb)
+ usb_mark_last_busy(data->udev);
+
+ err = usb_submit_urb(urb, GFP_ATOMIC);
+- if (err < 0) {
+- BT_ERR("%s urb %p failed to resubmit (%d)",
+- hdev->name, urb, -err);
++ if (err < 0)
+ usb_unanchor_urb(urb);
+- }
+ }
+
+ static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)
+@@ -402,11 +396,8 @@ static void btusb_isoc_complete(struct urb *urb)
+ usb_anchor_urb(urb, &data->isoc_anchor);
+
+ err = usb_submit_urb(urb, GFP_ATOMIC);
+- if (err < 0) {
+- BT_ERR("%s urb %p failed to resubmit (%d)",
+- hdev->name, urb, -err);
++ if (err < 0)
+ usb_unanchor_urb(urb);
+- }
+ }
+
+ static void inline __fill_isoc_descriptor(struct urb *urb, int len, int mtu)
+
+commit fd763c5b14ed99ac2401f8e8f1a07c3687ae01cc
+Author: Matthew Garrett <mjg@redhat.com>
+Date: Thu Sep 16 13:37:38 2010 -0400
+
+ bluetooth: Enable USB autosuspend by default on btusb
+
+ We've done this for a while in Fedora without any obvious problems other
+ than some interaction with input devices. Those should be fixed now, so
+ let's try this in mainline.
+
+ Signed-off-by: Matthew Garrett <mjg@redhat.com>
+
+diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
+index 3ace025..03b64e4 100644
+--- a/drivers/bluetooth/btusb.c
++++ b/drivers/bluetooth/btusb.c
+@@ -1014,6 +1014,8 @@ static int btusb_probe(struct usb_interface *intf,
+
+ usb_set_intfdata(intf, data);
+
++ usb_enable_autosuspend(interface_to_usbdev(intf));
++
+ return 0;
+ }
+