These changes are required to backport blueooth. A lot can be optimized
here still, but for now we keep this here.

--- a/drivers/bluetooth/hci_ldisc.c
+++ b/drivers/bluetooth/hci_ldisc.c
@@ -282,8 +282,13 @@ static int hci_uart_tty_open(struct tty_
 	/* FIXME: why is this needed. Note don't use ldisc_ref here as the
 	   open path is before the ldisc is referencable */
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30))
 	if (tty->ldisc->ops->flush_buffer)
 		tty->ldisc->ops->flush_buffer(tty);
+#else
+	if (tty->ldisc.ops->flush_buffer)
+		tty->ldisc.ops->flush_buffer(tty);
+#endif
 	tty_driver_flush_buffer(tty);
 
 	return 0;
@@ -398,7 +403,9 @@ static int hci_uart_register_dev(struct
 	hdev->flush = hci_uart_flush;
 	hdev->send  = hci_uart_send_frame;
 	hdev->destruct = hci_uart_destruct;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)
 	hdev->parent = hu->tty->dev;
+#endif
 
 	hdev->owner = THIS_MODULE;
 
@@ -498,7 +505,11 @@ static int hci_uart_tty_ioctl(struct tty
 		return hu->hdev_flags;
 
 	default:
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
 		err = n_tty_ioctl_helper(tty, file, cmd, arg);
+#else
+		err = n_tty_ioctl(tty, file, cmd, arg);
+#endif
 		break;
 	};
 
--- a/net/bluetooth/af_bluetooth.c
+++ b/net/bluetooth/af_bluetooth.c
@@ -125,8 +125,12 @@ int bt_sock_unregister(int proto)
 }
 EXPORT_SYMBOL(bt_sock_unregister);
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int bt_sock_create(struct net *net, struct socket *sock, int proto,
 			  int kern)
+#else
+static int bt_sock_create(struct net *net, struct socket *sock, int proto)
+#endif
 {
 	int err;
 
@@ -144,7 +148,11 @@ static int bt_sock_create(struct net *ne
 	read_lock(&bt_proto_lock);
 
 	if (bt_proto[proto] && try_module_get(bt_proto[proto]->owner)) {
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 		err = bt_proto[proto]->create(net, sock, proto, kern);
+#else
+		err = bt_proto[proto]->create(net, sock, proto);
+#endif
 		bt_sock_reclassify_lock(sock, proto);
 		module_put(bt_proto[proto]->owner);
 	}
@@ -478,7 +486,11 @@ int bt_sock_ioctl(struct socket *sock, u
 		if (sk->sk_state == BT_LISTEN)
 			return -EINVAL;
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31))
 		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
+#else
+		amount = sk->sk_sndbuf - atomic_read(&sk->sk_wmem_alloc);
+#endif
 		if (amount < 0)
 			amount = 0;
 		err = put_user(amount, (int __user *) arg);
--- a/net/bluetooth/cmtp/capi.c
+++ b/net/bluetooth/cmtp/capi.c
@@ -384,7 +384,11 @@ static void cmtp_reset_ctr(struct capi_c
 
 	BT_DBG("ctrl %p", ctrl);
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30))
 	capi_ctr_down(ctrl);
+#else
+	capi_ctr_reseted(ctrl);
+#endif
 
 	atomic_inc(&session->terminate);
 	wake_up_process(session->task);
--- a/net/bluetooth/hci_sock.c
+++ b/net/bluetooth/hci_sock.c
@@ -561,7 +561,11 @@ drop:
 	goto done;
 }
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31))
 static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int len)
+#else
+static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int len)
+#endif
 {
 	struct hci_ufilter uf = { .opcode = 0 };
 	struct sock *sk = sock->sk;
@@ -716,8 +720,12 @@ static struct proto hci_sk_proto = {
 	.obj_size	= sizeof(struct hci_pinfo)
 };
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int hci_sock_create(struct net *net, struct socket *sock, int protocol,
 			   int kern)
+#else
+static int hci_sock_create(struct net *net, struct socket *sock, int protocol)
+#endif
 {
 	struct sock *sk;
 
--- a/net/bluetooth/hci_sysfs.c
+++ b/net/bluetooth/hci_sysfs.c
@@ -72,7 +72,11 @@ static struct attribute_group bt_link_gr
 	.attrs = bt_link_attrs,
 };
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31))
 static const struct attribute_group *bt_link_groups[] = {
+#else
+static struct attribute_group *bt_link_groups[] = {
+#endif
 	&bt_link_group,
 	NULL
 };
@@ -130,7 +134,11 @@ static void del_conn(struct work_struct
 		dev = device_find_child(&conn->dev, NULL, __match_tty);
 		if (!dev)
 			break;
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,29))
 		device_move(dev, NULL, DPM_ORDER_DEV_LAST);
+#else
+		device_move(dev, NULL);
+#endif
 		put_device(dev);
 	}
 
@@ -380,7 +388,11 @@ static struct attribute_group bt_host_gr
 	.attrs = bt_host_attrs,
 };
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31))
 static const struct attribute_group *bt_host_groups[] = {
+#else
+static struct attribute_group *bt_host_groups[] = {
+#endif
 	&bt_host_group,
 	NULL
 };
--- a/net/bluetooth/hidp/core.c
+++ b/net/bluetooth/hidp/core.c
@@ -398,6 +398,7 @@ err:
 	return ret;
 }
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data, size_t count,
 		unsigned char report_type)
 {
@@ -456,6 +457,16 @@ err:
 	mutex_unlock(&session->report_mutex);
 	return ret;
 }
+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
+static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data, size_t count)
+{
+	if (hidp_send_ctrl_message(hid->driver_data,
+			HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE,
+			data, count))
+		return -ENOMEM;
+	return count;
+}
+#endif
 
 static void hidp_idle_timeout(unsigned long arg)
 {
@@ -757,8 +768,14 @@ static int hidp_session(void *arg)
 	}
 
 	if (session->hid) {
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
 		hid_destroy_device(session->hid);
 		session->hid = NULL;
+#else
+		if (session->hid->claimed & HID_CLAIMED_INPUT)
+			hidinput_disconnect(session->hid);
+		hid_free_device(session->hid);
+#endif
 	}
 
 	/* Wakeup user-space polling for socket errors */
@@ -869,6 +886,70 @@ static void hidp_close(struct hid_device
 {
 }
 
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27))
+static const struct {
+	__u16 idVendor;
+	__u16 idProduct;
+	unsigned quirks;
+} hidp_blacklist[] = {
+	/* Apple wireless Mighty Mouse */
+	{ 0x05ac, 0x030c, HID_QUIRK_MIGHTYMOUSE | HID_QUIRK_INVERT_HWHEEL },
+
+	{ }	/* Terminating entry */
+};
+static void hidp_setup_quirks(struct hid_device *hid)
+{
+	unsigned int n;
+
+	for (n = 0; hidp_blacklist[n].idVendor; n++)
+		if (hidp_blacklist[n].idVendor == le16_to_cpu(hid->vendor) &&
+				hidp_blacklist[n].idProduct == le16_to_cpu(hid->product))
+			hid->quirks = hidp_blacklist[n].quirks;
+}
+
+static void hidp_setup_hid(struct hidp_session *session,
+				struct hidp_connadd_req *req)
+{
+	struct hid_device *hid = session->hid;
+	struct hid_report *report;
+	bdaddr_t src, dst;
+
+	session->hid = hid;
+
+	hid->driver_data = session;
+
+	baswap(&src, &bt_sk(session->ctrl_sock->sk)->src);
+	baswap(&dst, &bt_sk(session->ctrl_sock->sk)->dst);
+
+	hid->bus     = BUS_BLUETOOTH;
+	hid->vendor  = req->vendor;
+	hid->product = req->product;
+	hid->version = req->version;
+	hid->country = req->country;
+
+	strncpy(hid->name, req->name, 128);
+	strncpy(hid->phys, batostr(&src), 64);
+	strncpy(hid->uniq, batostr(&dst), 64);
+
+	hid->dev = hidp_get_device(session);
+	hid->hid_open  = hidp_open;
+	hid->hid_close = hidp_close;
+
+	hid->hidinput_input_event = hidp_hidinput_event;
+
+	hidp_setup_quirks(hid);
+
+	list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].report_list, list)
+		hidp_send_report(session, report);
+
+	list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].report_list, list)
+		hidp_send_report(session, report);
+
+	if (hidinput_connect(hid) == 0)
+		hid->claimed |= HID_CLAIMED_INPUT;
+}
+#else
+
 static int hidp_parse(struct hid_device *hid)
 {
 	struct hidp_session *session = hid->driver_data;
@@ -956,7 +1037,9 @@ static int hidp_setup_hid(struct hidp_se
 	hid->dev.parent = &session->conn->dev;
 	hid->ll_driver = &hidp_hid_driver;
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38))
 	hid->hid_get_raw_report = hidp_get_raw_report;
+#endif
 	hid->hid_output_raw_report = hidp_output_raw_report;
 
 	return 0;
@@ -967,6 +1050,7 @@ fault:
 
 	return err;
 }
+#endif
 
 int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
 {
@@ -982,6 +1066,39 @@ int hidp_add_connection(struct hidp_conn
 
 	BT_DBG("rd_data %p rd_size %d", req->rd_data, req->rd_size);
 
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27))
+	if (req->rd_size > 0) {
+		unsigned char *buf = kmalloc(req->rd_size, GFP_KERNEL);
+
+		if (!buf) {
+			kfree(session);
+			return -ENOMEM;
+		}
+
+		if (copy_from_user(buf, req->rd_data, req->rd_size)) {
+			kfree(buf);
+			kfree(session);
+			return -EFAULT;
+		}
+
+		session->hid = hid_parse_report(buf, req->rd_size);
+
+		kfree(buf);
+
+		if (!session->hid) {
+			kfree(session);
+			return -EINVAL;
+		}
+	}
+
+	if (!session->hid) {
+		session->input = input_allocate_device();
+		if (!session->input) {
+			kfree(session);
+			return -ENOMEM;
+		}
+	}
+#endif
 	down_write(&hidp_session_sem);
 
 	s = __hidp_get_session(&bt_sk(ctrl_sock->sk)->dst);
@@ -1029,6 +1146,7 @@ int hidp_add_connection(struct hidp_conn
 
 	__hidp_link_session(session);
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
 	if (req->rd_size > 0) {
 		err = hidp_setup_hid(session, req);
 		if (err)
@@ -1040,6 +1158,16 @@ int hidp_add_connection(struct hidp_conn
 		if (err < 0)
 			goto purge;
 	}
+#else
+	if (session->input) {
+		err = hidp_setup_input(session, req);
+		if (err < 0)
+			goto failed;
+	}
+
+	if (session->hid)
+		hidp_setup_hid(session, req);
+#endif
 
 	hidp_set_timer(session);
 
@@ -1098,6 +1226,7 @@ unlink:
 		session->input = NULL;
 	}
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
 	if (session->hid) {
 		hid_destroy_device(session->hid);
 		session->hid = NULL;
@@ -1111,10 +1240,15 @@ purge:
 
 	skb_queue_purge(&session->ctrl_transmit);
 	skb_queue_purge(&session->intr_transmit);
+#endif
 
 failed:
 	up_write(&hidp_session_sem);
 
+#if (LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27))
+	if (session->hid)
+		hid_free_device(session->hid);
+#endif
 	kfree(session);
 	return err;
 }
@@ -1195,6 +1329,7 @@ int hidp_get_conninfo(struct hidp_connin
 	return err;
 }
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
 static const struct hid_device_id hidp_table[] = {
 	{ HID_BLUETOOTH_DEVICE(HID_ANY_ID, HID_ANY_ID) },
 	{ }
@@ -1204,6 +1339,7 @@ static struct hid_driver hidp_driver = {
 	.name = "generic-bluetooth",
 	.id_table = hidp_table,
 };
+#endif
 
 static int __init hidp_init(void)
 {
@@ -1211,11 +1347,14 @@ static int __init hidp_init(void)
 
 	BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
 	ret = hid_register_driver(&hidp_driver);
 	if (ret)
 		goto err;
+#endif
 
 	ret = hidp_init_sockets();
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
 	if (ret)
 		goto err_drv;
 
@@ -1223,13 +1362,16 @@ static int __init hidp_init(void)
 err_drv:
 	hid_unregister_driver(&hidp_driver);
 err:
+#endif
 	return ret;
 }
 
 static void __exit hidp_exit(void)
 {
 	hidp_cleanup_sockets();
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27))
 	hid_unregister_driver(&hidp_driver);
+#endif
 }
 
 module_init(hidp_init);
--- a/net/bluetooth/rfcomm/sock.c
+++ b/net/bluetooth/rfcomm/sock.c
@@ -325,8 +325,13 @@ static struct sock *rfcomm_sock_alloc(st
 	return sk;
 }
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int rfcomm_sock_create(struct net *net, struct socket *sock,
 			      int protocol, int kern)
+#else
+static int rfcomm_sock_create(struct net *net, struct socket *sock,
+			      int protocol)
+#endif
 {
 	struct sock *sk;
 
@@ -680,7 +685,11 @@ static int rfcomm_sock_setsockopt_old(st
 	return err;
 }
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31))
 static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
+#else
+static int rfcomm_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
+#endif
 {
 	struct sock *sk = sock->sk;
 	struct bt_security sec;
--- a/net/bluetooth/rfcomm/tty.c
+++ b/net/bluetooth/rfcomm/tty.c
@@ -731,8 +731,12 @@ static int rfcomm_tty_open(struct tty_st
 	remove_wait_queue(&dev->wait, &wait);
 
 	if (err == 0)
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,29))
 		device_move(dev->tty_dev, rfcomm_get_device(dev),
 			    DPM_ORDER_DEV_AFTER_PARENT);
+#else
+		device_move(dev->tty_dev, rfcomm_get_device(dev));
+#endif
 
 	rfcomm_tty_copy_pending(dev);
 
@@ -752,7 +756,11 @@ static void rfcomm_tty_close(struct tty_
 
 	if (atomic_dec_and_test(&dev->opened)) {
 		if (dev->tty_dev->parent)
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,29))
 			device_move(dev->tty_dev, NULL, DPM_ORDER_DEV_LAST);
+#else
+			device_move(dev->tty_dev, NULL);
+#endif
 
 		/* Close DLC and dettach TTY */
 		rfcomm_dlc_close(dev->dlc, 0);
@@ -828,7 +836,11 @@ static int rfcomm_tty_write_room(struct
 	return room;
 }
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38))
 static int rfcomm_tty_ioctl(struct tty_struct *tty, unsigned int cmd, unsigned long arg)
+#else
+static int rfcomm_tty_ioctl(struct tty_struct *tty, struct file *filp, unsigned int cmd, unsigned long arg)
+#endif
 {
 	BT_DBG("tty %p cmd 0x%02x", tty, cmd);
 
@@ -1087,7 +1099,11 @@ static void rfcomm_tty_hangup(struct tty
 	}
 }
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38))
 static int rfcomm_tty_tiocmget(struct tty_struct *tty)
+#else
+static int rfcomm_tty_tiocmget(struct tty_struct *tty, struct file *filp)
+#endif
 {
 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
 
@@ -1096,7 +1112,11 @@ static int rfcomm_tty_tiocmget(struct tt
 	return dev->modem_status;
 }
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38))
 static int rfcomm_tty_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
+#else
+static int rfcomm_tty_tiocmset(struct tty_struct *tty, struct file *filp, unsigned int set, unsigned int clear)
+#endif
 {
 	struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
 	struct rfcomm_dlc *dlc = dev->dlc;
--- a/net/bluetooth/sco.c
+++ b/net/bluetooth/sco.c
@@ -441,8 +441,12 @@ static struct sock *sco_sock_alloc(struc
 	return sk;
 }
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
 			   int kern)
+#else
+static int sco_sock_create(struct net *net, struct socket *sock, int protocol)
+#endif
 {
 	struct sock *sk;
 
@@ -658,7 +662,11 @@ static int sco_sock_sendmsg(struct kiocb
 	return err;
 }
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31))
 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
+#else
+static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
+#endif
 {
 	struct sock *sk = sock->sk;
 	int err = 0;
--- a/net/bluetooth/bnep/sock.c
+++ b/net/bluetooth/bnep/sock.c
@@ -196,8 +196,12 @@ static struct proto bnep_proto = {
 	.obj_size	= sizeof(struct bt_sock)
 };
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int bnep_sock_create(struct net *net, struct socket *sock, int protocol,
 			    int kern)
+#else
+static int bnep_sock_create(struct net *net, struct socket *sock, int protocol)
+#endif
 {
 	struct sock *sk;
 
--- a/net/bluetooth/cmtp/sock.c
+++ b/net/bluetooth/cmtp/sock.c
@@ -190,8 +190,12 @@ static struct proto cmtp_proto = {
 	.obj_size	= sizeof(struct bt_sock)
 };
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int cmtp_sock_create(struct net *net, struct socket *sock, int protocol,
 			    int kern)
+#else
+static int cmtp_sock_create(struct net *net, struct socket *sock, int protocol)
+#endif
 {
 	struct sock *sk;
 
--- a/net/bluetooth/hidp/sock.c
+++ b/net/bluetooth/hidp/sock.c
@@ -242,8 +242,12 @@ static struct proto hidp_proto = {
 	.obj_size	= sizeof(struct bt_sock)
 };
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int hidp_sock_create(struct net *net, struct socket *sock, int protocol,
 			    int kern)
+#else
+static int hidp_sock_create(struct net *net, struct socket *sock, int protocol)
+#endif
 {
 	struct sock *sk;
 
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -582,7 +582,14 @@ static int l2cap_sock_setsockopt_old(str
 	return err;
 }
 
+
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,31))
 static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
+#else
+static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, int optlen)
+#endif
+
+
 {
 	struct sock *sk = sock->sk;
 	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
@@ -1062,8 +1069,12 @@ static struct sock *l2cap_sock_alloc(str
 	return sk;
 }
 
+#if defined(CONFIG_COMPAT_BT_SOCK_CREATE_NEEDS_KERN)
 static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
 			     int kern)
+#else
+static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol)
+#endif
 {
 	struct sock *sk;
 
@@ -1075,7 +1086,11 @@ static int l2cap_sock_create(struct net
 			sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
 		return -ESOCKTNOSUPPORT;
 
+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,32))
 	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
+#else
+	if (sock->type == SOCK_RAW && !capable(CAP_NET_RAW))
+#endif
 		return -EPERM;
 
 	sock->ops = &l2cap_sock_ops;
