1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
--- a/compat/Makefile
+++ b/compat/Makefile
@@ -1,10 +1,13 @@
obj-m += compat.o
#compat-objs :=
-obj-$(CONFIG_COMPAT_FIRMWARE_CLASS) += compat_firmware_class.o
compat-y += main.o
+ifdef CONFIG_COMPAT_FIRMWARE_CLASS
+ compat-y += compat_firmware_class.o
+endif
+
# Compat kernel compatibility code
compat-$(CONFIG_COMPAT_KERNEL_2_6_14) += compat-2.6.14.o
compat-$(CONFIG_COMPAT_KERNEL_2_6_18) += compat-2.6.18.o
--- a/compat/compat_firmware_class.c
+++ b/compat/compat_firmware_class.c
@@ -729,19 +729,16 @@ request_firmware_nowait(
return 0;
}
-static int __init firmware_class_init(void)
+int __init firmware_class_init(void)
{
return class_register(&firmware_class);
}
-static void __exit firmware_class_exit(void)
+void __exit firmware_class_exit(void)
{
class_unregister(&firmware_class);
}
-fs_initcall(firmware_class_init);
-module_exit(firmware_class_exit);
-
EXPORT_SYMBOL(release_firmware);
EXPORT_SYMBOL(request_firmware);
EXPORT_SYMBOL(request_firmware_nowait);
--- a/compat/main.c
+++ b/compat/main.c
@@ -32,6 +32,17 @@ module_param(compat_version, charp, 0400
MODULE_PARM_DESC(compat_version,
"Version of the kernel compat backport work");
+#if defined(CONFIG_FW_LOADER) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,33))
+int __init firmware_class_init(void);
+void __exit firmware_class_exit(void);
+#else
+static inline int firmware_class_init(void)
+{
+ return 0;
+}
+static inline void firmware_class_exit(void) {}
+#endif
+
static int __init compat_init(void)
{
/* pm-qos for kernels <= 2.6.24, this is a no-op on newer kernels */
@@ -46,7 +57,8 @@ static int __init compat_init(void)
COMPAT_BASE_TREE " " COMPAT_BASE_TREE_VERSION
"\n");
- return 0;
+ firmware_class_init();
+ return 0;
}
module_init(compat_init);
@@ -55,7 +67,8 @@ static void __exit compat_exit(void)
compat_pm_qos_power_deinit();
compat_system_workqueue_destroy();
- return;
+ firmware_class_exit();
+ return;
}
module_exit(compat_exit);
|