diff options
author | Jiri Kosina <jkosina@suse.cz> | 2009-05-15 09:46:44 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2009-05-15 09:51:36 -0400 |
commit | 0f6f4319a72a2b32d19643ff811f25633d8b0207 (patch) | |
tree | c9b482414ff2d974736a7e829d22aaf50b94d82b /drivers | |
parent | fac733f029251a393c42a8313432f2d9fe43bb83 (diff) |
HID: fix hid-ff drivers so that devices work even without ff support
Currently, the hid-*ff force feedback drivers, which claim the blacklisted
device on a HID bus, are only compiled in if the user selects force feedback
support.
However we want the device to be supported even when the kernel is configured
without force feedback.
This patch fixes the drivers in a way that they get compiled even if force
feedback is turned off; all the force feedback support code is compiled out in
such case, and the driver works as a usual driver on HID bus, claiming and
initializing the device, making it operational without FF effects.
Reported-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/hid/Kconfig | 70 | ||||
-rw-r--r-- | drivers/hid/Makefile | 8 | ||||
-rw-r--r-- | drivers/hid/hid-drff.c | 8 | ||||
-rw-r--r-- | drivers/hid/hid-gaff.c | 8 | ||||
-rw-r--r-- | drivers/hid/hid-tmff.c | 17 | ||||
-rw-r--r-- | drivers/hid/hid-zpff.c | 7 |
6 files changed, 94 insertions, 24 deletions
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index 4cdf846da62c..7831a0318d3c 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig | |||
@@ -116,9 +116,16 @@ config HID_CYPRESS | |||
116 | ---help--- | 116 | ---help--- |
117 | Support for cypress mouse and barcode readers. | 117 | Support for cypress mouse and barcode readers. |
118 | 118 | ||
119 | config DRAGONRISE_FF | 119 | config HID_DRAGONRISE |
120 | tristate "DragonRise Inc. force feedback support" | 120 | tristate "DragonRise Inc. support" if EMBEDDED |
121 | depends on USB_HID | 121 | depends on USB_HID |
122 | default !EMBEDDED | ||
123 | ---help--- | ||
124 | Say Y here if you have DragonRise Inc.game controllers. | ||
125 | |||
126 | config DRAGONRISE_FF | ||
127 | bool "DragonRise Inc. force feedback support" | ||
128 | depends on HID_DRAGONRISE | ||
122 | select INPUT_FF_MEMLESS | 129 | select INPUT_FF_MEMLESS |
123 | ---help--- | 130 | ---help--- |
124 | Say Y here if you want to enable force feedback support for DragonRise Inc. | 131 | Say Y here if you want to enable force feedback support for DragonRise Inc. |
@@ -160,7 +167,7 @@ config HID_LOGITECH | |||
160 | Support for Logitech devices that are not fully compliant with HID standard. | 167 | Support for Logitech devices that are not fully compliant with HID standard. |
161 | 168 | ||
162 | config LOGITECH_FF | 169 | config LOGITECH_FF |
163 | bool "Logitech force feedback" | 170 | bool "Logitech force feedback support" |
164 | depends on HID_LOGITECH | 171 | depends on HID_LOGITECH |
165 | select INPUT_FF_MEMLESS | 172 | select INPUT_FF_MEMLESS |
166 | help | 173 | help |
@@ -176,7 +183,7 @@ config LOGITECH_FF | |||
176 | force feedback. | 183 | force feedback. |
177 | 184 | ||
178 | config LOGIRUMBLEPAD2_FF | 185 | config LOGIRUMBLEPAD2_FF |
179 | bool "Logitech Rumblepad 2 force feedback" | 186 | bool "Logitech Rumblepad 2 force feedback support" |
180 | depends on HID_LOGITECH | 187 | depends on HID_LOGITECH |
181 | select INPUT_FF_MEMLESS | 188 | select INPUT_FF_MEMLESS |
182 | help | 189 | help |
@@ -211,11 +218,19 @@ config HID_PANTHERLORD | |||
211 | ---help--- | 218 | ---help--- |
212 | Support for PantherLord/GreenAsia based device support. | 219 | Support for PantherLord/GreenAsia based device support. |
213 | 220 | ||
221 | config HID_PANTHERLORD | ||
222 | tristate "Pantherlord support" if EMBEDDED | ||
223 | depends on USB_HID | ||
224 | default !EMBEDDED | ||
225 | ---help--- | ||
226 | Say Y here if you have a PantherLord/GreenAsia based game controller | ||
227 | or adapter. | ||
228 | |||
214 | config PANTHERLORD_FF | 229 | config PANTHERLORD_FF |
215 | bool "Pantherlord force feedback support" | 230 | bool "Pantherlord force feedback support" |
216 | depends on HID_PANTHERLORD | 231 | depends on HID_PANTHERLORD |
217 | select INPUT_FF_MEMLESS | 232 | select INPUT_FF_MEMLESS |
218 | help | 233 | ---help--- |
219 | Say Y here if you have a PantherLord/GreenAsia based game controller | 234 | Say Y here if you have a PantherLord/GreenAsia based game controller |
220 | or adapter and want to enable force feedback support for it. | 235 | or adapter and want to enable force feedback support for it. |
221 | 236 | ||
@@ -247,9 +262,17 @@ config HID_SUNPLUS | |||
247 | ---help--- | 262 | ---help--- |
248 | Support for Sunplus wireless desktop. | 263 | Support for Sunplus wireless desktop. |
249 | 264 | ||
250 | config GREENASIA_FF | 265 | config HID_GREENASIA |
251 | tristate "GreenAsia (Product ID 0x12) force feedback support" | 266 | tristate "GreenAsia (Product ID 0x12) support" if EMBEDDED |
252 | depends on USB_HID | 267 | depends on USB_HID |
268 | default !EMBEDDED | ||
269 | ---help--- | ||
270 | Say Y here if you have a GreenAsia (Product ID 0x12) based game | ||
271 | controller or adapter. | ||
272 | |||
273 | config GREENASIA_FF | ||
274 | bool "GreenAsia (Product ID 0x12) force feedback support" | ||
275 | depends on HID_GREENASIA | ||
253 | select INPUT_FF_MEMLESS | 276 | select INPUT_FF_MEMLESS |
254 | ---help--- | 277 | ---help--- |
255 | Say Y here if you have a GreenAsia (Product ID 0x12) based game controller | 278 | Say Y here if you have a GreenAsia (Product ID 0x12) based game controller |
@@ -278,13 +301,22 @@ config HID_TOPSEED | |||
278 | ---help--- | 301 | ---help--- |
279 | Say Y if you have a TopSeed Cyberlink remote control. | 302 | Say Y if you have a TopSeed Cyberlink remote control. |
280 | 303 | ||
281 | config THRUSTMASTER_FF | 304 | config HID_THRUSTMASTER |
282 | tristate "ThrustMaster devices support" | 305 | tristate "ThrustMaster devices support" if EMBEDDED |
283 | depends on USB_HID | 306 | depends on USB_HID |
307 | default !EMBEDDED | ||
308 | ---help--- | ||
309 | Say Y here if you have a THRUSTMASTER FireStore Dual Power 2 or | ||
310 | a THRUSTMASTER Ferrari GT Rumble Wheel. | ||
311 | |||
312 | config THRUSTMASTER_FF | ||
313 | bool "ThrustMaster devices force feedback support" | ||
314 | depends on HID_THRUSTMASTER | ||
284 | select INPUT_FF_MEMLESS | 315 | select INPUT_FF_MEMLESS |
285 | help | 316 | ---help--- |
286 | Say Y here if you have a THRUSTMASTER FireStore Dual Power 2 or | 317 | Say Y here if you have a THRUSTMASTER FireStore Dual Power 2 or |
287 | a THRUSTMASTER Ferrari GT Rumble Force or Force Feedback Wheel. | 318 | a THRUSTMASTER Ferrari GT Rumble Force or Force Feedback Wheel and |
319 | want to enable force feedback support for it. | ||
288 | 320 | ||
289 | config HID_WACOM | 321 | config HID_WACOM |
290 | tristate "Wacom Bluetooth devices support" if EMBEDDED | 322 | tristate "Wacom Bluetooth devices support" if EMBEDDED |
@@ -293,13 +325,21 @@ config HID_WACOM | |||
293 | ---help--- | 325 | ---help--- |
294 | Support for Wacom Graphire Bluetooth tablet. | 326 | Support for Wacom Graphire Bluetooth tablet. |
295 | 327 | ||
296 | config ZEROPLUS_FF | 328 | config HID_ZEROPLUS |
297 | tristate "Zeroplus based game controller support" | 329 | tristate "Zeroplus based game controller support" if EMBEDDED |
298 | depends on USB_HID | 330 | depends on USB_HID |
299 | select INPUT_FF_MEMLESS | 331 | default !EMBEDDED |
300 | help | 332 | ---help--- |
301 | Say Y here if you have a Zeroplus based game controller. | 333 | Say Y here if you have a Zeroplus based game controller. |
302 | 334 | ||
335 | config ZEROPLUS_FF | ||
336 | bool "Zeroplus based game controller force feedback support" | ||
337 | depends on HID_ZEROPLUS | ||
338 | select INPUT_FF_MEMLESS | ||
339 | ---help--- | ||
340 | Say Y here if you have a Zeroplus based game controller and want | ||
341 | to have force feedback support for it. | ||
342 | |||
303 | endmenu | 343 | endmenu |
304 | 344 | ||
305 | endif # HID_SUPPORT | 345 | endif # HID_SUPPORT |
diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index eddd5b633b63..db35151673b1 100644 --- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile | |||
@@ -22,7 +22,7 @@ obj-$(CONFIG_HID_BELKIN) += hid-belkin.o | |||
22 | obj-$(CONFIG_HID_CHERRY) += hid-cherry.o | 22 | obj-$(CONFIG_HID_CHERRY) += hid-cherry.o |
23 | obj-$(CONFIG_HID_CHICONY) += hid-chicony.o | 23 | obj-$(CONFIG_HID_CHICONY) += hid-chicony.o |
24 | obj-$(CONFIG_HID_CYPRESS) += hid-cypress.o | 24 | obj-$(CONFIG_HID_CYPRESS) += hid-cypress.o |
25 | obj-$(CONFIG_DRAGONRISE_FF) += hid-drff.o | 25 | obj-$(CONFIG_HID_DRAGONRISE) += hid-drff.o |
26 | obj-$(CONFIG_HID_EZKEY) += hid-ezkey.o | 26 | obj-$(CONFIG_HID_EZKEY) += hid-ezkey.o |
27 | obj-$(CONFIG_HID_GYRATION) += hid-gyration.o | 27 | obj-$(CONFIG_HID_GYRATION) += hid-gyration.o |
28 | obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o | 28 | obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o |
@@ -37,10 +37,10 @@ obj-$(CONFIG_HID_SAMSUNG) += hid-samsung.o | |||
37 | obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o | 37 | obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o |
38 | obj-$(CONFIG_HID_SONY) += hid-sony.o | 38 | obj-$(CONFIG_HID_SONY) += hid-sony.o |
39 | obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o | 39 | obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o |
40 | obj-$(CONFIG_GREENASIA_FF) += hid-gaff.o | 40 | obj-$(CONFIG_HID_GREENASIA) += hid-gaff.o |
41 | obj-$(CONFIG_THRUSTMASTER_FF) += hid-tmff.o | 41 | obj-$(CONFIG_HID_THRUSTMASTER) += hid-tmff.o |
42 | obj-$(CONFIG_HID_TOPSEED) += hid-topseed.o | 42 | obj-$(CONFIG_HID_TOPSEED) += hid-topseed.o |
43 | obj-$(CONFIG_ZEROPLUS_FF) += hid-zpff.o | 43 | obj-$(CONFIG_HID_ZEROPLUS) += hid-zpff.o |
44 | obj-$(CONFIG_HID_WACOM) += hid-wacom.o | 44 | obj-$(CONFIG_HID_WACOM) += hid-wacom.o |
45 | 45 | ||
46 | obj-$(CONFIG_USB_HID) += usbhid/ | 46 | obj-$(CONFIG_USB_HID) += usbhid/ |
diff --git a/drivers/hid/hid-drff.c b/drivers/hid/hid-drff.c index 34f3eb65100b..a239d20ad7a5 100644 --- a/drivers/hid/hid-drff.c +++ b/drivers/hid/hid-drff.c | |||
@@ -32,6 +32,8 @@ | |||
32 | #include <linux/hid.h> | 32 | #include <linux/hid.h> |
33 | 33 | ||
34 | #include "hid-ids.h" | 34 | #include "hid-ids.h" |
35 | |||
36 | #ifdef CONFIG_DRAGONRISE_FF | ||
35 | #include "usbhid/usbhid.h" | 37 | #include "usbhid/usbhid.h" |
36 | 38 | ||
37 | struct drff_device { | 39 | struct drff_device { |
@@ -135,6 +137,12 @@ static int drff_init(struct hid_device *hid) | |||
135 | 137 | ||
136 | return 0; | 138 | return 0; |
137 | } | 139 | } |
140 | #else | ||
141 | static inline int drff_init(struct hid_device *hid) | ||
142 | { | ||
143 | return 0; | ||
144 | } | ||
145 | #endif | ||
138 | 146 | ||
139 | static int dr_probe(struct hid_device *hdev, const struct hid_device_id *id) | 147 | static int dr_probe(struct hid_device *hdev, const struct hid_device_id *id) |
140 | { | 148 | { |
diff --git a/drivers/hid/hid-gaff.c b/drivers/hid/hid-gaff.c index 510ad3ab8d33..8a11ccddaf2e 100644 --- a/drivers/hid/hid-gaff.c +++ b/drivers/hid/hid-gaff.c | |||
@@ -31,6 +31,8 @@ | |||
31 | #include <linux/usb.h> | 31 | #include <linux/usb.h> |
32 | #include <linux/hid.h> | 32 | #include <linux/hid.h> |
33 | #include "hid-ids.h" | 33 | #include "hid-ids.h" |
34 | |||
35 | #ifdef CONFIG_GREENASIA_FF | ||
34 | #include "usbhid/usbhid.h" | 36 | #include "usbhid/usbhid.h" |
35 | 37 | ||
36 | struct gaff_device { | 38 | struct gaff_device { |
@@ -130,6 +132,12 @@ static int gaff_init(struct hid_device *hid) | |||
130 | 132 | ||
131 | return 0; | 133 | return 0; |
132 | } | 134 | } |
135 | #else | ||
136 | static inline int gaff_init(struct hid_device *hdev) | ||
137 | { | ||
138 | return 0; | ||
139 | } | ||
140 | #endif | ||
133 | 141 | ||
134 | static int ga_probe(struct hid_device *hdev, const struct hid_device_id *id) | 142 | static int ga_probe(struct hid_device *hdev, const struct hid_device_id *id) |
135 | { | 143 | { |
diff --git a/drivers/hid/hid-tmff.c b/drivers/hid/hid-tmff.c index 7c1f7b50330c..fcd6ccd02fee 100644 --- a/drivers/hid/hid-tmff.c +++ b/drivers/hid/hid-tmff.c | |||
@@ -33,11 +33,6 @@ | |||
33 | 33 | ||
34 | #include "hid-ids.h" | 34 | #include "hid-ids.h" |
35 | 35 | ||
36 | #include "usbhid/usbhid.h" | ||
37 | |||
38 | /* Usages for thrustmaster devices I know about */ | ||
39 | #define THRUSTMASTER_USAGE_FF (HID_UP_GENDESK | 0xbb) | ||
40 | |||
41 | static const signed short ff_rumble[] = { | 36 | static const signed short ff_rumble[] = { |
42 | FF_RUMBLE, | 37 | FF_RUMBLE, |
43 | -1 | 38 | -1 |
@@ -48,6 +43,12 @@ static const signed short ff_joystick[] = { | |||
48 | -1 | 43 | -1 |
49 | }; | 44 | }; |
50 | 45 | ||
46 | #ifdef CONFIG_THRUSTMASTER_FF | ||
47 | #include "usbhid/usbhid.h" | ||
48 | |||
49 | /* Usages for thrustmaster devices I know about */ | ||
50 | #define THRUSTMASTER_USAGE_FF (HID_UP_GENDESK | 0xbb) | ||
51 | |||
51 | struct tmff_device { | 52 | struct tmff_device { |
52 | struct hid_report *report; | 53 | struct hid_report *report; |
53 | struct hid_field *ff_field; | 54 | struct hid_field *ff_field; |
@@ -209,6 +210,12 @@ fail: | |||
209 | kfree(tmff); | 210 | kfree(tmff); |
210 | return error; | 211 | return error; |
211 | } | 212 | } |
213 | #else | ||
214 | static inline int tmff_init(struct hid_device *hid, const signed short *ff_bits) | ||
215 | { | ||
216 | return 0; | ||
217 | } | ||
218 | #endif | ||
212 | 219 | ||
213 | static int tm_probe(struct hid_device *hdev, const struct hid_device_id *id) | 220 | static int tm_probe(struct hid_device *hdev, const struct hid_device_id *id) |
214 | { | 221 | { |
diff --git a/drivers/hid/hid-zpff.c b/drivers/hid/hid-zpff.c index 85a198a18537..57f710757bf4 100644 --- a/drivers/hid/hid-zpff.c +++ b/drivers/hid/hid-zpff.c | |||
@@ -27,6 +27,7 @@ | |||
27 | 27 | ||
28 | #include "hid-ids.h" | 28 | #include "hid-ids.h" |
29 | 29 | ||
30 | #ifdef CONFIG_ZEROPLUS_FF | ||
30 | #include "usbhid/usbhid.h" | 31 | #include "usbhid/usbhid.h" |
31 | 32 | ||
32 | struct zpff_device { | 33 | struct zpff_device { |
@@ -108,6 +109,12 @@ static int zpff_init(struct hid_device *hid) | |||
108 | 109 | ||
109 | return 0; | 110 | return 0; |
110 | } | 111 | } |
112 | #else | ||
113 | static inline int zpff_init(struct hid_device *hid) | ||
114 | { | ||
115 | return 0; | ||
116 | } | ||
117 | #endif | ||
111 | 118 | ||
112 | static int zp_probe(struct hid_device *hdev, const struct hid_device_id *id) | 119 | static int zp_probe(struct hid_device *hdev, const struct hid_device_id *id) |
113 | { | 120 | { |