backports: add hid_alloc_report_buf()
authorHauke Mehrtens <hauke@hauke-m.de>
Sun, 18 Aug 2013 23:37:50 +0000 (01:37 +0200)
committerLuis R. Rodriguez <mcgrof@do-not-panic.com>
Tue, 27 Aug 2013 18:43:04 +0000 (11:43 -0700)
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Luis R. Rodriguez <mcgrof@do-not-panic.com>
backport/backport-include/linux/hid.h
backport/compat/Makefile
backport/compat/backport-3.12.c [new file with mode: 0644]

index 2cae9b7ec77149c857586bd2184fec5a7403574d..91d3de6aa9b910d0d70899b10b1a2819056ff1c5 100644 (file)
@@ -79,4 +79,9 @@ extern bool hid_ignore(struct hid_device *);
        dev_dbg(&(hid)->dev, fmt, ##arg)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0)
+#define hid_alloc_report_buf LINUX_BACKPORT(hid_alloc_report_buf)
+u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags);
+#endif
+
 #endif /* __BACKPORT_HID_H */
index 80c0294f4c372f3f643e393893e1704f8c4b7c95..efdeebd5d80353d88a9130892de42dc174ae87da 100644 (file)
@@ -36,6 +36,7 @@ compat-$(CPTCFG_BACKPORT_KERNEL_3_8) += compat-3.8.o
 compat-$(CPTCFG_BACKPORT_KERNEL_3_9) += compat-3.9.o
 compat-$(CPTCFG_BACKPORT_KERNEL_3_10) += backport-3.10.o
 compat-$(CPTCFG_BACKPORT_KERNEL_3_11) += backport-3.11.o
+compat-$(CPTCFG_BACKPORT_KERNEL_3_12) += backport-3.12.o
 
 compat-$(CPTCFG_BACKPORT_BUILD_KFIFO) += kfifo.o
 compat-$(CPTCFG_BACKPORT_BUILD_GENERIC_ATOMIC64) += compat_atomic.o
diff --git a/backport/compat/backport-3.12.c b/backport/compat/backport-3.12.c
new file mode 100644 (file)
index 0000000..8ca9a8e
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2013  Hauke Mehrtens <hauke@hauke-m.de>
+ *
+ * Backport functionality introduced in Linux 3.12.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#include <linux/export.h>
+#include <linux/hid.h>
+
+/*
+ * Allocator for buffer that is going to be passed to hid_output_report()
+ */
+u8 *hid_alloc_report_buf(struct hid_report *report, gfp_t flags)
+{
+       /*
+        * 7 extra bytes are necessary to achieve proper functionality
+        * of implement() working on 8 byte chunks
+        */
+
+       int len = ((report->size - 1) >> 3) + 1 + (report->id > 0) + 7;
+
+       return kmalloc(len, flags);
+}
+EXPORT_SYMBOL_GPL(hid_alloc_report_buf);