aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/joystick
diff options
context:
space:
mode:
authorJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
committerJonathan Herman <hermanjl@cs.unc.edu>2013-01-17 16:15:55 -0500
commit8dea78da5cee153b8af9c07a2745f6c55057fe12 (patch)
treea8f4d49d63b1ecc92f2fddceba0655b2472c5bd9 /drivers/input/joystick
parent406089d01562f1e2bf9f089fd7637009ebaad589 (diff)
Patched in Tegra support.
Diffstat (limited to 'drivers/input/joystick')
-rw-r--r--drivers/input/joystick/a3d.c13
-rw-r--r--drivers/input/joystick/adi.c17
-rw-r--r--drivers/input/joystick/amijoy.c4
-rw-r--r--drivers/input/joystick/as5011.c48
-rw-r--r--drivers/input/joystick/cobra.c13
-rw-r--r--drivers/input/joystick/gf2k.c13
-rw-r--r--drivers/input/joystick/grip.c13
-rw-r--r--drivers/input/joystick/grip_mp.c13
-rw-r--r--drivers/input/joystick/guillemot.c13
-rw-r--r--drivers/input/joystick/iforce/iforce-main.c3
-rw-r--r--drivers/input/joystick/iforce/iforce-packets.c16
-rw-r--r--drivers/input/joystick/iforce/iforce-usb.c18
-rw-r--r--drivers/input/joystick/iforce/iforce.h1
-rw-r--r--drivers/input/joystick/interact.c13
-rw-r--r--drivers/input/joystick/joydump.c13
-rw-r--r--drivers/input/joystick/magellan.c17
-rw-r--r--drivers/input/joystick/maplecontrol.c6
-rw-r--r--drivers/input/joystick/sidewinder.c13
-rw-r--r--drivers/input/joystick/spaceball.c17
-rw-r--r--drivers/input/joystick/spaceorb.c17
-rw-r--r--drivers/input/joystick/stinger.c17
-rw-r--r--drivers/input/joystick/tmdc.c13
-rw-r--r--drivers/input/joystick/twidjoy.c17
-rw-r--r--drivers/input/joystick/walkera0701.c7
-rw-r--r--drivers/input/joystick/warrior.c17
-rw-r--r--drivers/input/joystick/xpad.c91
-rw-r--r--drivers/input/joystick/zhenhua.c17
27 files changed, 327 insertions, 133 deletions
diff --git a/drivers/input/joystick/a3d.c b/drivers/input/joystick/a3d.c
index 85bc8dc07cf..1639ab2b94b 100644
--- a/drivers/input/joystick/a3d.c
+++ b/drivers/input/joystick/a3d.c
@@ -413,4 +413,15 @@ static struct gameport_driver a3d_drv = {
413 .disconnect = a3d_disconnect, 413 .disconnect = a3d_disconnect,
414}; 414};
415 415
416module_gameport_driver(a3d_drv); 416static int __init a3d_init(void)
417{
418 return gameport_register_driver(&a3d_drv);
419}
420
421static void __exit a3d_exit(void)
422{
423 gameport_unregister_driver(&a3d_drv);
424}
425
426module_init(a3d_init);
427module_exit(a3d_exit);
diff --git a/drivers/input/joystick/adi.c b/drivers/input/joystick/adi.c
index 0cbfd2dfabf..b992fbf91f2 100644
--- a/drivers/input/joystick/adi.c
+++ b/drivers/input/joystick/adi.c
@@ -557,6 +557,10 @@ static void adi_disconnect(struct gameport *gameport)
557 kfree(port); 557 kfree(port);
558} 558}
559 559
560/*
561 * The gameport device structure.
562 */
563
560static struct gameport_driver adi_drv = { 564static struct gameport_driver adi_drv = {
561 .driver = { 565 .driver = {
562 .name = "adi", 566 .name = "adi",
@@ -566,4 +570,15 @@ static struct gameport_driver adi_drv = {
566 .disconnect = adi_disconnect, 570 .disconnect = adi_disconnect,
567}; 571};
568 572
569module_gameport_driver(adi_drv); 573static int __init adi_init(void)
574{
575 return gameport_register_driver(&adi_drv);
576}
577
578static void __exit adi_exit(void)
579{
580 gameport_unregister_driver(&adi_drv);
581}
582
583module_init(adi_init);
584module_exit(adi_exit);
diff --git a/drivers/input/joystick/amijoy.c b/drivers/input/joystick/amijoy.c
index c65b5fa69f1..0bc86204213 100644
--- a/drivers/input/joystick/amijoy.c
+++ b/drivers/input/joystick/amijoy.c
@@ -35,6 +35,7 @@
35#include <linux/interrupt.h> 35#include <linux/interrupt.h>
36#include <linux/mutex.h> 36#include <linux/mutex.h>
37 37
38#include <asm/system.h>
38#include <asm/amigahw.h> 39#include <asm/amigahw.h>
39#include <asm/amigaints.h> 40#include <asm/amigaints.h>
40 41
@@ -107,9 +108,6 @@ static int __init amijoy_init(void)
107 int i, j; 108 int i, j;
108 int err; 109 int err;
109 110
110 if (!MACH_IS_AMIGA)
111 return -ENODEV;
112
113 for (i = 0; i < 2; i++) { 111 for (i = 0; i < 2; i++) {
114 if (!amijoy[i]) 112 if (!amijoy[i])
115 continue; 113 continue;
diff --git a/drivers/input/joystick/as5011.c b/drivers/input/joystick/as5011.c
index 121cd63d333..f6732b57ca0 100644
--- a/drivers/input/joystick/as5011.c
+++ b/drivers/input/joystick/as5011.c
@@ -30,7 +30,6 @@
30#include <linux/delay.h> 30#include <linux/delay.h>
31#include <linux/input/as5011.h> 31#include <linux/input/as5011.h>
32#include <linux/slab.h> 32#include <linux/slab.h>
33#include <linux/module.h>
34 33
35#define DRIVER_DESC "Driver for Austria Microsystems AS5011 joystick" 34#define DRIVER_DESC "Driver for Austria Microsystems AS5011 joystick"
36#define MODULE_DEVICE_ALIAS "as5011" 35#define MODULE_DEVICE_ALIAS "as5011"
@@ -85,10 +84,7 @@ static int as5011_i2c_write(struct i2c_client *client,
85{ 84{
86 uint8_t data[2] = { aregaddr, avalue }; 85 uint8_t data[2] = { aregaddr, avalue };
87 struct i2c_msg msg = { 86 struct i2c_msg msg = {
88 .addr = client->addr, 87 client->addr, I2C_M_IGNORE_NAK, 2, (uint8_t *)data
89 .flags = I2C_M_IGNORE_NAK,
90 .len = 2,
91 .buf = (uint8_t *)data
92 }; 88 };
93 int error; 89 int error;
94 90
@@ -101,18 +97,8 @@ static int as5011_i2c_read(struct i2c_client *client,
101{ 97{
102 uint8_t data[2] = { aregaddr }; 98 uint8_t data[2] = { aregaddr };
103 struct i2c_msg msg_set[2] = { 99 struct i2c_msg msg_set[2] = {
104 { 100 { client->addr, I2C_M_REV_DIR_ADDR, 1, (uint8_t *)data },
105 .addr = client->addr, 101 { client->addr, I2C_M_RD | I2C_M_NOSTART, 1, (uint8_t *)data }
106 .flags = I2C_M_REV_DIR_ADDR,
107 .len = 1,
108 .buf = (uint8_t *)data
109 },
110 {
111 .addr = client->addr,
112 .flags = I2C_M_RD | I2C_M_NOSTART,
113 .len = 1,
114 .buf = (uint8_t *)data
115 }
116 }; 102 };
117 int error; 103 int error;
118 104
@@ -157,7 +143,7 @@ out:
157 return IRQ_HANDLED; 143 return IRQ_HANDLED;
158} 144}
159 145
160static int as5011_configure_chip(struct as5011_device *as5011, 146static int __devinit as5011_configure_chip(struct as5011_device *as5011,
161 const struct as5011_platform_data *plat_dat) 147 const struct as5011_platform_data *plat_dat)
162{ 148{
163 struct i2c_client *client = as5011->i2c_client; 149 struct i2c_client *client = as5011->i2c_client;
@@ -225,8 +211,8 @@ static int as5011_configure_chip(struct as5011_device *as5011,
225 return 0; 211 return 0;
226} 212}
227 213
228static int as5011_probe(struct i2c_client *client, 214static int __devinit as5011_probe(struct i2c_client *client,
229 const struct i2c_device_id *id) 215 const struct i2c_device_id *id)
230{ 216{
231 const struct as5011_platform_data *plat_data; 217 const struct as5011_platform_data *plat_data;
232 struct as5011_device *as5011; 218 struct as5011_device *as5011;
@@ -244,7 +230,6 @@ static int as5011_probe(struct i2c_client *client,
244 } 230 }
245 231
246 if (!i2c_check_functionality(client->adapter, 232 if (!i2c_check_functionality(client->adapter,
247 I2C_FUNC_NOSTART |
248 I2C_FUNC_PROTOCOL_MANGLING)) { 233 I2C_FUNC_PROTOCOL_MANGLING)) {
249 dev_err(&client->dev, 234 dev_err(&client->dev,
250 "need i2c bus that supports protocol mangling\n"); 235 "need i2c bus that supports protocol mangling\n");
@@ -295,8 +280,7 @@ static int as5011_probe(struct i2c_client *client,
295 280
296 error = request_threaded_irq(as5011->button_irq, 281 error = request_threaded_irq(as5011->button_irq,
297 NULL, as5011_button_interrupt, 282 NULL, as5011_button_interrupt,
298 IRQF_TRIGGER_RISING | 283 IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
299 IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
300 "as5011_button", as5011); 284 "as5011_button", as5011);
301 if (error < 0) { 285 if (error < 0) {
302 dev_err(&client->dev, 286 dev_err(&client->dev,
@@ -310,7 +294,7 @@ static int as5011_probe(struct i2c_client *client,
310 294
311 error = request_threaded_irq(as5011->axis_irq, NULL, 295 error = request_threaded_irq(as5011->axis_irq, NULL,
312 as5011_axis_interrupt, 296 as5011_axis_interrupt,
313 plat_data->axis_irqflags | IRQF_ONESHOT, 297 plat_data->axis_irqflags,
314 "as5011_joystick", as5011); 298 "as5011_joystick", as5011);
315 if (error) { 299 if (error) {
316 dev_err(&client->dev, 300 dev_err(&client->dev,
@@ -341,7 +325,7 @@ err_free_mem:
341 return error; 325 return error;
342} 326}
343 327
344static int as5011_remove(struct i2c_client *client) 328static int __devexit as5011_remove(struct i2c_client *client)
345{ 329{
346 struct as5011_device *as5011 = i2c_get_clientdata(client); 330 struct as5011_device *as5011 = i2c_get_clientdata(client);
347 331
@@ -366,8 +350,18 @@ static struct i2c_driver as5011_driver = {
366 .name = "as5011", 350 .name = "as5011",
367 }, 351 },
368 .probe = as5011_probe, 352 .probe = as5011_probe,
369 .remove = as5011_remove, 353 .remove = __devexit_p(as5011_remove),
370 .id_table = as5011_id, 354 .id_table = as5011_id,
371}; 355};
372 356
373module_i2c_driver(as5011_driver); 357static int __init as5011_init(void)
358{
359 return i2c_add_driver(&as5011_driver);
360}
361module_init(as5011_init);
362
363static void __exit as5011_exit(void)
364{
365 i2c_del_driver(&as5011_driver);
366}
367module_exit(as5011_exit);
diff --git a/drivers/input/joystick/cobra.c b/drivers/input/joystick/cobra.c
index 65367e44d71..3497b87c3d0 100644
--- a/drivers/input/joystick/cobra.c
+++ b/drivers/input/joystick/cobra.c
@@ -261,4 +261,15 @@ static struct gameport_driver cobra_drv = {
261 .disconnect = cobra_disconnect, 261 .disconnect = cobra_disconnect,
262}; 262};
263 263
264module_gameport_driver(cobra_drv); 264static int __init cobra_init(void)
265{
266 return gameport_register_driver(&cobra_drv);
267}
268
269static void __exit cobra_exit(void)
270{
271 gameport_unregister_driver(&cobra_drv);
272}
273
274module_init(cobra_init);
275module_exit(cobra_exit);
diff --git a/drivers/input/joystick/gf2k.c b/drivers/input/joystick/gf2k.c
index ab1cf288200..0536b1b2f01 100644
--- a/drivers/input/joystick/gf2k.c
+++ b/drivers/input/joystick/gf2k.c
@@ -373,4 +373,15 @@ static struct gameport_driver gf2k_drv = {
373 .disconnect = gf2k_disconnect, 373 .disconnect = gf2k_disconnect,
374}; 374};
375 375
376module_gameport_driver(gf2k_drv); 376static int __init gf2k_init(void)
377{
378 return gameport_register_driver(&gf2k_drv);
379}
380
381static void __exit gf2k_exit(void)
382{
383 gameport_unregister_driver(&gf2k_drv);
384}
385
386module_init(gf2k_init);
387module_exit(gf2k_exit);
diff --git a/drivers/input/joystick/grip.c b/drivers/input/joystick/grip.c
index 9e1beff57c3..fc55899ba6c 100644
--- a/drivers/input/joystick/grip.c
+++ b/drivers/input/joystick/grip.c
@@ -424,4 +424,15 @@ static struct gameport_driver grip_drv = {
424 .disconnect = grip_disconnect, 424 .disconnect = grip_disconnect,
425}; 425};
426 426
427module_gameport_driver(grip_drv); 427static int __init grip_init(void)
428{
429 return gameport_register_driver(&grip_drv);
430}
431
432static void __exit grip_exit(void)
433{
434 gameport_unregister_driver(&grip_drv);
435}
436
437module_init(grip_init);
438module_exit(grip_exit);
diff --git a/drivers/input/joystick/grip_mp.c b/drivers/input/joystick/grip_mp.c
index c0f9c7b7eb4..2d47baf4776 100644
--- a/drivers/input/joystick/grip_mp.c
+++ b/drivers/input/joystick/grip_mp.c
@@ -687,4 +687,15 @@ static struct gameport_driver grip_drv = {
687 .disconnect = grip_disconnect, 687 .disconnect = grip_disconnect,
688}; 688};
689 689
690module_gameport_driver(grip_drv); 690static int __init grip_init(void)
691{
692 return gameport_register_driver(&grip_drv);
693}
694
695static void __exit grip_exit(void)
696{
697 gameport_unregister_driver(&grip_drv);
698}
699
700module_init(grip_init);
701module_exit(grip_exit);
diff --git a/drivers/input/joystick/guillemot.c b/drivers/input/joystick/guillemot.c
index 55196f730af..4058d4b272f 100644
--- a/drivers/input/joystick/guillemot.c
+++ b/drivers/input/joystick/guillemot.c
@@ -281,4 +281,15 @@ static struct gameport_driver guillemot_drv = {
281 .disconnect = guillemot_disconnect, 281 .disconnect = guillemot_disconnect,
282}; 282};
283 283
284module_gameport_driver(guillemot_drv); 284static int __init guillemot_init(void)
285{
286 return gameport_register_driver(&guillemot_drv);
287}
288
289static void __exit guillemot_exit(void)
290{
291 gameport_unregister_driver(&guillemot_drv);
292}
293
294module_init(guillemot_init);
295module_exit(guillemot_exit);
diff --git a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c
index daeeb4c7e3b..405febd94f2 100644
--- a/drivers/input/joystick/iforce/iforce-main.c
+++ b/drivers/input/joystick/iforce/iforce-main.c
@@ -317,8 +317,7 @@ int iforce_init_device(struct iforce *iforce)
317 break; 317 break;
318 318
319 if (i == 20) { /* 5 seconds */ 319 if (i == 20) { /* 5 seconds */
320 dev_err(&input_dev->dev, 320 err("Timeout waiting for response from device.");
321 "Timeout waiting for response from device.\n");
322 error = -ENODEV; 321 error = -ENODEV;
323 goto fail; 322 goto fail;
324 } 323 }
diff --git a/drivers/input/joystick/iforce/iforce-packets.c b/drivers/input/joystick/iforce/iforce-packets.c
index 08f98f2eaf8..a17b5001600 100644
--- a/drivers/input/joystick/iforce/iforce-packets.c
+++ b/drivers/input/joystick/iforce/iforce-packets.c
@@ -257,8 +257,7 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet)
257 257
258 status = usb_submit_urb(iforce->ctrl, GFP_ATOMIC); 258 status = usb_submit_urb(iforce->ctrl, GFP_ATOMIC);
259 if (status) { 259 if (status) {
260 dev_err(&iforce->intf->dev, 260 err("usb_submit_urb failed %d", status);
261 "usb_submit_urb failed %d\n", status);
262 return -1; 261 return -1;
263 } 262 }
264 263
@@ -266,14 +265,12 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet)
266 iforce->ctrl->status != -EINPROGRESS, HZ); 265 iforce->ctrl->status != -EINPROGRESS, HZ);
267 266
268 if (iforce->ctrl->status) { 267 if (iforce->ctrl->status) {
269 dev_dbg(&iforce->intf->dev, 268 dbg("iforce->ctrl->status = %d", iforce->ctrl->status);
270 "iforce->ctrl->status = %d\n",
271 iforce->ctrl->status);
272 usb_unlink_urb(iforce->ctrl); 269 usb_unlink_urb(iforce->ctrl);
273 return -1; 270 return -1;
274 } 271 }
275#else 272#else
276 printk(KERN_DEBUG "iforce_get_id_packet: iforce->bus = USB!\n"); 273 dbg("iforce_get_id_packet: iforce->bus = USB!");
277#endif 274#endif
278 } 275 }
279 break; 276 break;
@@ -292,15 +289,12 @@ int iforce_get_id_packet(struct iforce *iforce, char *packet)
292 return -1; 289 return -1;
293 } 290 }
294#else 291#else
295 dev_err(&iforce->dev->dev, 292 err("iforce_get_id_packet: iforce->bus = SERIO!");
296 "iforce_get_id_packet: iforce->bus = SERIO!\n");
297#endif 293#endif
298 break; 294 break;
299 295
300 default: 296 default:
301 dev_err(&iforce->dev->dev, 297 err("iforce_get_id_packet: iforce->bus = %d", iforce->bus);
302 "iforce_get_id_packet: iforce->bus = %d\n",
303 iforce->bus);
304 break; 298 break;
305 } 299 }
306 300
diff --git a/drivers/input/joystick/iforce/iforce-usb.c b/drivers/input/joystick/iforce/iforce-usb.c
index d96aa27dfcd..6c96631ae5d 100644
--- a/drivers/input/joystick/iforce/iforce-usb.c
+++ b/drivers/input/joystick/iforce/iforce-usb.c
@@ -64,7 +64,7 @@ void iforce_usb_xmit(struct iforce *iforce)
64 64
65 if ( (n=usb_submit_urb(iforce->out, GFP_ATOMIC)) ) { 65 if ( (n=usb_submit_urb(iforce->out, GFP_ATOMIC)) ) {
66 clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); 66 clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags);
67 dev_warn(&iforce->intf->dev, "usb_submit_urb failed %d\n", n); 67 dev_warn(&iforce->dev->dev, "usb_submit_urb failed %d\n", n);
68 } 68 }
69 69
70 /* The IFORCE_XMIT_RUNNING bit is not cleared here. That's intended. 70 /* The IFORCE_XMIT_RUNNING bit is not cleared here. That's intended.
@@ -76,7 +76,6 @@ void iforce_usb_xmit(struct iforce *iforce)
76static void iforce_usb_irq(struct urb *urb) 76static void iforce_usb_irq(struct urb *urb)
77{ 77{
78 struct iforce *iforce = urb->context; 78 struct iforce *iforce = urb->context;
79 struct device *dev = &iforce->intf->dev;
80 int status; 79 int status;
81 80
82 switch (urb->status) { 81 switch (urb->status) {
@@ -87,12 +86,11 @@ static void iforce_usb_irq(struct urb *urb)
87 case -ENOENT: 86 case -ENOENT:
88 case -ESHUTDOWN: 87 case -ESHUTDOWN:
89 /* this urb is terminated, clean up */ 88 /* this urb is terminated, clean up */
90 dev_dbg(dev, "%s - urb shutting down with status: %d\n", 89 dbg("%s - urb shutting down with status: %d",
91 __func__, urb->status); 90 __func__, urb->status);
92 return; 91 return;
93 default: 92 default:
94 dev_dbg(dev, "%s - urb has status of: %d\n", 93 dbg("%s - urb has status of: %d", __func__, urb->status);
95 __func__, urb->status);
96 goto exit; 94 goto exit;
97 } 95 }
98 96
@@ -102,8 +100,8 @@ static void iforce_usb_irq(struct urb *urb)
102exit: 100exit:
103 status = usb_submit_urb (urb, GFP_ATOMIC); 101 status = usb_submit_urb (urb, GFP_ATOMIC);
104 if (status) 102 if (status)
105 dev_err(dev, "%s - usb_submit_urb failed with result %d\n", 103 err ("%s - usb_submit_urb failed with result %d",
106 __func__, status); 104 __func__, status);
107} 105}
108 106
109static void iforce_usb_out(struct urb *urb) 107static void iforce_usb_out(struct urb *urb)
@@ -112,8 +110,7 @@ static void iforce_usb_out(struct urb *urb)
112 110
113 if (urb->status) { 111 if (urb->status) {
114 clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags); 112 clear_bit(IFORCE_XMIT_RUNNING, iforce->xmit_flags);
115 dev_dbg(&iforce->intf->dev, "urb->status %d, exiting\n", 113 dbg("urb->status %d, exiting", urb->status);
116 urb->status);
117 return; 114 return;
118 } 115 }
119 116
@@ -158,7 +155,6 @@ static int iforce_usb_probe(struct usb_interface *intf,
158 155
159 iforce->bus = IFORCE_USB; 156 iforce->bus = IFORCE_USB;
160 iforce->usbdev = dev; 157 iforce->usbdev = dev;
161 iforce->intf = intf;
162 158
163 iforce->cr.bRequestType = USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_INTERFACE; 159 iforce->cr.bRequestType = USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_INTERFACE;
164 iforce->cr.wIndex = 0; 160 iforce->cr.wIndex = 0;
diff --git a/drivers/input/joystick/iforce/iforce.h b/drivers/input/joystick/iforce/iforce.h
index b1d7d9b0eb8..9f494b75848 100644
--- a/drivers/input/joystick/iforce/iforce.h
+++ b/drivers/input/joystick/iforce/iforce.h
@@ -115,7 +115,6 @@ struct iforce {
115#endif 115#endif
116#ifdef CONFIG_JOYSTICK_IFORCE_USB 116#ifdef CONFIG_JOYSTICK_IFORCE_USB
117 struct usb_device *usbdev; /* USB transfer */ 117 struct usb_device *usbdev; /* USB transfer */
118 struct usb_interface *intf;
119 struct urb *irq, *out, *ctrl; 118 struct urb *irq, *out, *ctrl;
120 struct usb_ctrlrequest cr; 119 struct usb_ctrlrequest cr;
121#endif 120#endif
diff --git a/drivers/input/joystick/interact.c b/drivers/input/joystick/interact.c
index 88c22623a2e..16fb19d1ca2 100644
--- a/drivers/input/joystick/interact.c
+++ b/drivers/input/joystick/interact.c
@@ -311,4 +311,15 @@ static struct gameport_driver interact_drv = {
311 .disconnect = interact_disconnect, 311 .disconnect = interact_disconnect,
312}; 312};
313 313
314module_gameport_driver(interact_drv); 314static int __init interact_init(void)
315{
316 return gameport_register_driver(&interact_drv);
317}
318
319static void __exit interact_exit(void)
320{
321 gameport_unregister_driver(&interact_drv);
322}
323
324module_init(interact_init);
325module_exit(interact_exit);
diff --git a/drivers/input/joystick/joydump.c b/drivers/input/joystick/joydump.c
index 7eb878bab96..cd894a0564a 100644
--- a/drivers/input/joystick/joydump.c
+++ b/drivers/input/joystick/joydump.c
@@ -159,4 +159,15 @@ static struct gameport_driver joydump_drv = {
159 .disconnect = joydump_disconnect, 159 .disconnect = joydump_disconnect,
160}; 160};
161 161
162module_gameport_driver(joydump_drv); 162static int __init joydump_init(void)
163{
164 return gameport_register_driver(&joydump_drv);
165}
166
167static void __exit joydump_exit(void)
168{
169 gameport_unregister_driver(&joydump_drv);
170}
171
172module_init(joydump_init);
173module_exit(joydump_exit);
diff --git a/drivers/input/joystick/magellan.c b/drivers/input/joystick/magellan.c
index 9fb153eef2f..40e40780747 100644
--- a/drivers/input/joystick/magellan.c
+++ b/drivers/input/joystick/magellan.c
@@ -222,4 +222,19 @@ static struct serio_driver magellan_drv = {
222 .disconnect = magellan_disconnect, 222 .disconnect = magellan_disconnect,
223}; 223};
224 224
225module_serio_driver(magellan_drv); 225/*
226 * The functions for inserting/removing us as a module.
227 */
228
229static int __init magellan_init(void)
230{
231 return serio_register_driver(&magellan_drv);
232}
233
234static void __exit magellan_exit(void)
235{
236 serio_unregister_driver(&magellan_drv);
237}
238
239module_init(magellan_init);
240module_exit(magellan_exit);
diff --git a/drivers/input/joystick/maplecontrol.c b/drivers/input/joystick/maplecontrol.c
index 59c10ec5a2a..77cfde571bd 100644
--- a/drivers/input/joystick/maplecontrol.c
+++ b/drivers/input/joystick/maplecontrol.c
@@ -78,7 +78,7 @@ static void dc_pad_close(struct input_dev *dev)
78} 78}
79 79
80/* allow the controller to be used */ 80/* allow the controller to be used */
81static int probe_maple_controller(struct device *dev) 81static int __devinit probe_maple_controller(struct device *dev)
82{ 82{
83 static const short btn_bit[32] = { 83 static const short btn_bit[32] = {
84 BTN_C, BTN_B, BTN_A, BTN_START, -1, -1, -1, -1, 84 BTN_C, BTN_B, BTN_A, BTN_START, -1, -1, -1, -1,
@@ -157,7 +157,7 @@ fail:
157 return error; 157 return error;
158} 158}
159 159
160static int remove_maple_controller(struct device *dev) 160static int __devexit remove_maple_controller(struct device *dev)
161{ 161{
162 struct maple_device *mdev = to_maple_dev(dev); 162 struct maple_device *mdev = to_maple_dev(dev);
163 struct dc_pad *pad = maple_get_drvdata(mdev); 163 struct dc_pad *pad = maple_get_drvdata(mdev);
@@ -175,7 +175,7 @@ static struct maple_driver dc_pad_driver = {
175 .drv = { 175 .drv = {
176 .name = "Dreamcast_controller", 176 .name = "Dreamcast_controller",
177 .probe = probe_maple_controller, 177 .probe = probe_maple_controller,
178 .remove = remove_maple_controller, 178 .remove = __devexit_p(remove_maple_controller),
179 }, 179 },
180}; 180};
181 181
diff --git a/drivers/input/joystick/sidewinder.c b/drivers/input/joystick/sidewinder.c
index 04c69af3714..b8d86115644 100644
--- a/drivers/input/joystick/sidewinder.c
+++ b/drivers/input/joystick/sidewinder.c
@@ -820,4 +820,15 @@ static struct gameport_driver sw_drv = {
820 .disconnect = sw_disconnect, 820 .disconnect = sw_disconnect,
821}; 821};
822 822
823module_gameport_driver(sw_drv); 823static int __init sw_init(void)
824{
825 return gameport_register_driver(&sw_drv);
826}
827
828static void __exit sw_exit(void)
829{
830 gameport_unregister_driver(&sw_drv);
831}
832
833module_init(sw_init);
834module_exit(sw_exit);
diff --git a/drivers/input/joystick/spaceball.c b/drivers/input/joystick/spaceball.c
index 80a7b27a457..0cd9b29356a 100644
--- a/drivers/input/joystick/spaceball.c
+++ b/drivers/input/joystick/spaceball.c
@@ -296,4 +296,19 @@ static struct serio_driver spaceball_drv = {
296 .disconnect = spaceball_disconnect, 296 .disconnect = spaceball_disconnect,
297}; 297};
298 298
299module_serio_driver(spaceball_drv); 299/*
300 * The functions for inserting/removing us as a module.
301 */
302
303static int __init spaceball_init(void)
304{
305 return serio_register_driver(&spaceball_drv);
306}
307
308static void __exit spaceball_exit(void)
309{
310 serio_unregister_driver(&spaceball_drv);
311}
312
313module_init(spaceball_init);
314module_exit(spaceball_exit);
diff --git a/drivers/input/joystick/spaceorb.c b/drivers/input/joystick/spaceorb.c
index a41f291652e..a694bf8e557 100644
--- a/drivers/input/joystick/spaceorb.c
+++ b/drivers/input/joystick/spaceorb.c
@@ -237,4 +237,19 @@ static struct serio_driver spaceorb_drv = {
237 .disconnect = spaceorb_disconnect, 237 .disconnect = spaceorb_disconnect,
238}; 238};
239 239
240module_serio_driver(spaceorb_drv); 240/*
241 * The functions for inserting/removing us as a module.
242 */
243
244static int __init spaceorb_init(void)
245{
246 return serio_register_driver(&spaceorb_drv);
247}
248
249static void __exit spaceorb_exit(void)
250{
251 serio_unregister_driver(&spaceorb_drv);
252}
253
254module_init(spaceorb_init);
255module_exit(spaceorb_exit);
diff --git a/drivers/input/joystick/stinger.c b/drivers/input/joystick/stinger.c
index 0f51a60e14a..e0db9f5e4b4 100644
--- a/drivers/input/joystick/stinger.c
+++ b/drivers/input/joystick/stinger.c
@@ -208,4 +208,19 @@ static struct serio_driver stinger_drv = {
208 .disconnect = stinger_disconnect, 208 .disconnect = stinger_disconnect,
209}; 209};
210 210
211module_serio_driver(stinger_drv); 211/*
212 * The functions for inserting/removing us as a module.
213 */
214
215static int __init stinger_init(void)
216{
217 return serio_register_driver(&stinger_drv);
218}
219
220static void __exit stinger_exit(void)
221{
222 serio_unregister_driver(&stinger_drv);
223}
224
225module_init(stinger_init);
226module_exit(stinger_exit);
diff --git a/drivers/input/joystick/tmdc.c b/drivers/input/joystick/tmdc.c
index 5ef9bcdb034..d6c60980711 100644
--- a/drivers/input/joystick/tmdc.c
+++ b/drivers/input/joystick/tmdc.c
@@ -436,4 +436,15 @@ static struct gameport_driver tmdc_drv = {
436 .disconnect = tmdc_disconnect, 436 .disconnect = tmdc_disconnect,
437}; 437};
438 438
439module_gameport_driver(tmdc_drv); 439static int __init tmdc_init(void)
440{
441 return gameport_register_driver(&tmdc_drv);
442}
443
444static void __exit tmdc_exit(void)
445{
446 gameport_unregister_driver(&tmdc_drv);
447}
448
449module_init(tmdc_init);
450module_exit(tmdc_exit);
diff --git a/drivers/input/joystick/twidjoy.c b/drivers/input/joystick/twidjoy.c
index 2556a819357..3f4ec73c955 100644
--- a/drivers/input/joystick/twidjoy.c
+++ b/drivers/input/joystick/twidjoy.c
@@ -257,4 +257,19 @@ static struct serio_driver twidjoy_drv = {
257 .disconnect = twidjoy_disconnect, 257 .disconnect = twidjoy_disconnect,
258}; 258};
259 259
260module_serio_driver(twidjoy_drv); 260/*
261 * The functions for inserting/removing us as a module.
262 */
263
264static int __init twidjoy_init(void)
265{
266 return serio_register_driver(&twidjoy_drv);
267}
268
269static void __exit twidjoy_exit(void)
270{
271 serio_unregister_driver(&twidjoy_drv);
272}
273
274module_init(twidjoy_init);
275module_exit(twidjoy_exit);
diff --git a/drivers/input/joystick/walkera0701.c b/drivers/input/joystick/walkera0701.c
index f8f892b076e..4dfa1eed4b7 100644
--- a/drivers/input/joystick/walkera0701.c
+++ b/drivers/input/joystick/walkera0701.c
@@ -196,7 +196,6 @@ static void walkera0701_close(struct input_dev *dev)
196 struct walkera_dev *w = input_get_drvdata(dev); 196 struct walkera_dev *w = input_get_drvdata(dev);
197 197
198 parport_disable_irq(w->parport); 198 parport_disable_irq(w->parport);
199 hrtimer_cancel(&w->timer);
200} 199}
201 200
202static int walkera0701_connect(struct walkera_dev *w, int parport) 201static int walkera0701_connect(struct walkera_dev *w, int parport)
@@ -225,9 +224,6 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
225 if (parport_claim(w->pardevice)) 224 if (parport_claim(w->pardevice))
226 goto init_err1; 225 goto init_err1;
227 226
228 hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
229 w->timer.function = timer_handler;
230
231 w->input_dev = input_allocate_device(); 227 w->input_dev = input_allocate_device();
232 if (!w->input_dev) 228 if (!w->input_dev)
233 goto init_err2; 229 goto init_err2;
@@ -258,6 +254,8 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
258 if (err) 254 if (err)
259 goto init_err3; 255 goto init_err3;
260 256
257 hrtimer_init(&w->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
258 w->timer.function = timer_handler;
261 return 0; 259 return 0;
262 260
263 init_err3: 261 init_err3:
@@ -273,6 +271,7 @@ static int walkera0701_connect(struct walkera_dev *w, int parport)
273 271
274static void walkera0701_disconnect(struct walkera_dev *w) 272static void walkera0701_disconnect(struct walkera_dev *w)
275{ 273{
274 hrtimer_cancel(&w->timer);
276 input_unregister_device(w->input_dev); 275 input_unregister_device(w->input_dev);
277 parport_release(w->pardevice); 276 parport_release(w->pardevice);
278 parport_unregister_device(w->pardevice); 277 parport_unregister_device(w->pardevice);
diff --git a/drivers/input/joystick/warrior.c b/drivers/input/joystick/warrior.c
index 23b3071abb6..f72c83e15e6 100644
--- a/drivers/input/joystick/warrior.c
+++ b/drivers/input/joystick/warrior.c
@@ -217,4 +217,19 @@ static struct serio_driver warrior_drv = {
217 .disconnect = warrior_disconnect, 217 .disconnect = warrior_disconnect,
218}; 218};
219 219
220module_serio_driver(warrior_drv); 220/*
221 * The functions for inserting/removing us as a module.
222 */
223
224static int __init warrior_init(void)
225{
226 return serio_register_driver(&warrior_drv);
227}
228
229static void __exit warrior_exit(void)
230{
231 serio_unregister_driver(&warrior_drv);
232}
233
234module_init(warrior_init);
235module_exit(warrior_exit);
diff --git a/drivers/input/joystick/xpad.c b/drivers/input/joystick/xpad.c
index d6cbfe9df21..d72887585a1 100644
--- a/drivers/input/joystick/xpad.c
+++ b/drivers/input/joystick/xpad.c
@@ -98,15 +98,15 @@
98#define XTYPE_XBOX360W 2 98#define XTYPE_XBOX360W 2
99#define XTYPE_UNKNOWN 3 99#define XTYPE_UNKNOWN 3
100 100
101static bool dpad_to_buttons; 101static int dpad_to_buttons;
102module_param(dpad_to_buttons, bool, S_IRUGO); 102module_param(dpad_to_buttons, bool, S_IRUGO);
103MODULE_PARM_DESC(dpad_to_buttons, "Map D-PAD to buttons rather than axes for unknown pads"); 103MODULE_PARM_DESC(dpad_to_buttons, "Map D-PAD to buttons rather than axes for unknown pads");
104 104
105static bool triggers_to_buttons; 105static int triggers_to_buttons;
106module_param(triggers_to_buttons, bool, S_IRUGO); 106module_param(triggers_to_buttons, bool, S_IRUGO);
107MODULE_PARM_DESC(triggers_to_buttons, "Map triggers to buttons rather than axes for unknown pads"); 107MODULE_PARM_DESC(triggers_to_buttons, "Map triggers to buttons rather than axes for unknown pads");
108 108
109static bool sticks_to_null; 109static int sticks_to_null;
110module_param(sticks_to_null, bool, S_IRUGO); 110module_param(sticks_to_null, bool, S_IRUGO);
111MODULE_PARM_DESC(sticks_to_null, "Do not map sticks at all for unknown pads"); 111MODULE_PARM_DESC(sticks_to_null, "Do not map sticks at all for unknown pads");
112 112
@@ -118,12 +118,11 @@ static const struct xpad_device {
118 u8 xtype; 118 u8 xtype;
119} xpad_device[] = { 119} xpad_device[] = {
120 { 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", 0, XTYPE_XBOX }, 120 { 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", 0, XTYPE_XBOX },
121 { 0x045e, 0x0289, "Microsoft X-Box pad v2 (US)", 0, XTYPE_XBOX },
121 { 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", 0, XTYPE_XBOX }, 122 { 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", 0, XTYPE_XBOX },
122 { 0x045e, 0x0287, "Microsoft Xbox Controller S", 0, XTYPE_XBOX }, 123 { 0x045e, 0x0287, "Microsoft Xbox Controller S", 0, XTYPE_XBOX },
123 { 0x045e, 0x0289, "Microsoft X-Box pad v2 (US)", 0, XTYPE_XBOX },
124 { 0x045e, 0x028e, "Microsoft X-Box 360 pad", 0, XTYPE_XBOX360 },
125 { 0x045e, 0x0291, "Xbox 360 Wireless Receiver (XBOX)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
126 { 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W }, 124 { 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W },
125 { 0x0c12, 0x8809, "RedOctane Xbox Dance Pad", DANCEPAD_MAP_CONFIG, XTYPE_XBOX },
127 { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX }, 126 { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX },
128 { 0x046d, 0xc242, "Logitech Chillstream Controller", 0, XTYPE_XBOX360 }, 127 { 0x046d, 0xc242, "Logitech Chillstream Controller", 0, XTYPE_XBOX360 },
129 { 0x046d, 0xca84, "Logitech Xbox Cordless Controller", 0, XTYPE_XBOX }, 128 { 0x046d, 0xca84, "Logitech Xbox Cordless Controller", 0, XTYPE_XBOX },
@@ -137,43 +136,34 @@ static const struct xpad_device {
137 { 0x0738, 0x4540, "Mad Catz Beat Pad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, 136 { 0x0738, 0x4540, "Mad Catz Beat Pad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
138 { 0x0738, 0x4556, "Mad Catz Lynx Wireless Controller", 0, XTYPE_XBOX }, 137 { 0x0738, 0x4556, "Mad Catz Lynx Wireless Controller", 0, XTYPE_XBOX },
139 { 0x0738, 0x4716, "Mad Catz Wired Xbox 360 Controller", 0, XTYPE_XBOX360 }, 138 { 0x0738, 0x4716, "Mad Catz Wired Xbox 360 Controller", 0, XTYPE_XBOX360 },
140 { 0x0738, 0x4728, "Mad Catz Street Fighter IV FightPad", XTYPE_XBOX360 },
141 { 0x0738, 0x4738, "Mad Catz Wired Xbox 360 Controller (SFIV)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, 139 { 0x0738, 0x4738, "Mad Catz Wired Xbox 360 Controller (SFIV)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
142 { 0x0738, 0x6040, "Mad Catz Beat Pad Pro", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, 140 { 0x0738, 0x6040, "Mad Catz Beat Pad Pro", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
143 { 0x0738, 0xbeef, "Mad Catz JOYTECH NEO SE Advanced GamePad", XTYPE_XBOX360 },
144 { 0x0c12, 0x8802, "Zeroplus Xbox Controller", 0, XTYPE_XBOX }, 141 { 0x0c12, 0x8802, "Zeroplus Xbox Controller", 0, XTYPE_XBOX },
145 { 0x0c12, 0x8809, "RedOctane Xbox Dance Pad", DANCEPAD_MAP_CONFIG, XTYPE_XBOX },
146 { 0x0c12, 0x880a, "Pelican Eclipse PL-2023", 0, XTYPE_XBOX }, 142 { 0x0c12, 0x880a, "Pelican Eclipse PL-2023", 0, XTYPE_XBOX },
147 { 0x0c12, 0x8810, "Zeroplus Xbox Controller", 0, XTYPE_XBOX }, 143 { 0x0c12, 0x8810, "Zeroplus Xbox Controller", 0, XTYPE_XBOX },
148 { 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", 0, XTYPE_XBOX }, 144 { 0x0c12, 0x9902, "HAMA VibraX - *FAULTY HARDWARE*", 0, XTYPE_XBOX },
149 { 0x0d2f, 0x0002, "Andamiro Pump It Up pad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
150 { 0x0e4c, 0x1097, "Radica Gamester Controller", 0, XTYPE_XBOX }, 145 { 0x0e4c, 0x1097, "Radica Gamester Controller", 0, XTYPE_XBOX },
151 { 0x0e4c, 0x2390, "Radica Games Jtech Controller", 0, XTYPE_XBOX }, 146 { 0x0e4c, 0x2390, "Radica Games Jtech Controller", 0, XTYPE_XBOX },
152 { 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", 0, XTYPE_XBOX }, 147 { 0x0e6f, 0x0003, "Logic3 Freebird wireless Controller", 0, XTYPE_XBOX },
153 { 0x0e6f, 0x0005, "Eclipse wireless Controller", 0, XTYPE_XBOX }, 148 { 0x0e6f, 0x0005, "Eclipse wireless Controller", 0, XTYPE_XBOX },
154 { 0x0e6f, 0x0006, "Edge wireless Controller", 0, XTYPE_XBOX }, 149 { 0x0e6f, 0x0006, "Edge wireless Controller", 0, XTYPE_XBOX },
155 { 0x0e6f, 0x0105, "HSM3 Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, 150 { 0x0e6f, 0x0006, "Pelican 'TSZ' Wired Xbox 360 Controller", 0, XTYPE_XBOX360 },
156 { 0x0e6f, 0x0201, "Pelican PL-3601 'TSZ' Wired Xbox 360 Controller", 0, XTYPE_XBOX360 }, 151 { 0x0e6f, 0x0201, "Pelican PL-3601 'TSZ' Wired Xbox 360 Controller", 0, XTYPE_XBOX360 },
157 { 0x0e6f, 0x0213, "Afterglow Gamepad for Xbox 360", 0, XTYPE_XBOX360 },
158 { 0x0e8f, 0x0201, "SmartJoy Frag Xpad/PS2 adaptor", 0, XTYPE_XBOX }, 152 { 0x0e8f, 0x0201, "SmartJoy Frag Xpad/PS2 adaptor", 0, XTYPE_XBOX },
159 { 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
160 { 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
161 { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX }, 153 { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX },
162 { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX }, 154 { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX },
163 { 0x102c, 0xff0c, "Joytech Wireless Advanced Controller", 0, XTYPE_XBOX }, 155 { 0x102c, 0xff0c, "Joytech Wireless Advanced Controller", 0, XTYPE_XBOX },
164 { 0x12ab, 0x0004, "Honey Bee Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
165 { 0x12ab, 0x8809, "Xbox DDR dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, 156 { 0x12ab, 0x8809, "Xbox DDR dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
157 { 0x12ab, 0x0004, "Honey Bee Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
158 { 0x0e6f, 0x0105, "HSM3 Xbox360 dancepad", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
166 { 0x1430, 0x4748, "RedOctane Guitar Hero X-plorer", 0, XTYPE_XBOX360 }, 159 { 0x1430, 0x4748, "RedOctane Guitar Hero X-plorer", 0, XTYPE_XBOX360 },
167 { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX }, 160 { 0x1430, 0x8888, "TX6500+ Dance Pad (first generation)", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX },
168 { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 }, 161 { 0x146b, 0x0601, "BigBen Interactive XBOX 360 Controller", 0, XTYPE_XBOX360 },
169 { 0x1689, 0xfd00, "Razer Onza Tournament Edition", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, 162 { 0x045e, 0x028e, "Microsoft X-Box 360 pad", 0, XTYPE_XBOX360 },
170 { 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 }, 163 { 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 },
171 { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, 164 { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 },
172 { 0x1bad, 0xf016, "Mad Catz Xbox 360 Controller", 0, XTYPE_XBOX360 }, 165 { 0x0f0d, 0x0016, "Hori Real Arcade Pro.EX", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
173 { 0x1bad, 0xf028, "Street Fighter IV FightPad", 0, XTYPE_XBOX360 }, 166 { 0x0f0d, 0x000d, "Hori Fighting Stick EX2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 },
174 { 0x1bad, 0xf901, "Gamestop Xbox 360 Controller", 0, XTYPE_XBOX360 },
175 { 0x1bad, 0xf903, "Tron Xbox 360 controller", 0, XTYPE_XBOX360 },
176 { 0x24c6, 0x5300, "PowerA MINI PROEX Controller", 0, XTYPE_XBOX360 },
177 { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX }, 167 { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX },
178 { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN } 168 { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN }
179}; 169};
@@ -243,29 +233,25 @@ static const signed short xpad_abs_triggers[] = {
243 { XPAD_XBOX360_VENDOR_PROTOCOL(vend,1) }, \ 233 { XPAD_XBOX360_VENDOR_PROTOCOL(vend,1) }, \
244 { XPAD_XBOX360_VENDOR_PROTOCOL(vend,129) } 234 { XPAD_XBOX360_VENDOR_PROTOCOL(vend,129) }
245 235
246static struct usb_device_id xpad_table[] = { 236static struct usb_device_id xpad_table [] = {
247 { USB_INTERFACE_INFO('X', 'B', 0) }, /* X-Box USB-IF not approved class */ 237 { USB_INTERFACE_INFO('X', 'B', 0) }, /* X-Box USB-IF not approved class */
248 XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */ 238 XPAD_XBOX360_VENDOR(0x045e), /* Microsoft X-Box 360 controllers */
249 XPAD_XBOX360_VENDOR(0x046d), /* Logitech X-Box 360 style controllers */ 239 XPAD_XBOX360_VENDOR(0x046d), /* Logitech X-Box 360 style controllers */
250 XPAD_XBOX360_VENDOR(0x0738), /* Mad Catz X-Box 360 controllers */ 240 XPAD_XBOX360_VENDOR(0x0738), /* Mad Catz X-Box 360 controllers */
251 { USB_DEVICE(0x0738, 0x4540) }, /* Mad Catz Beat Pad */
252 XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */ 241 XPAD_XBOX360_VENDOR(0x0e6f), /* 0x0e6f X-Box 360 controllers */
253 XPAD_XBOX360_VENDOR(0x12ab), /* X-Box 360 dance pads */ 242 XPAD_XBOX360_VENDOR(0x12ab), /* X-Box 360 dance pads */
254 XPAD_XBOX360_VENDOR(0x1430), /* RedOctane X-Box 360 controllers */ 243 XPAD_XBOX360_VENDOR(0x1430), /* RedOctane X-Box 360 controllers */
255 XPAD_XBOX360_VENDOR(0x146b), /* BigBen Interactive Controllers */ 244 XPAD_XBOX360_VENDOR(0x146b), /* BigBen Interactive Controllers */
256 XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */ 245 XPAD_XBOX360_VENDOR(0x1bad), /* Harminix Rock Band Guitar and Drums */
257 XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */ 246 XPAD_XBOX360_VENDOR(0x0f0d), /* Hori Controllers */
258 XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */
259 XPAD_XBOX360_VENDOR(0x24c6), /* PowerA Controllers */
260 { } 247 { }
261}; 248};
262 249
263MODULE_DEVICE_TABLE(usb, xpad_table); 250MODULE_DEVICE_TABLE (usb, xpad_table);
264 251
265struct usb_xpad { 252struct usb_xpad {
266 struct input_dev *dev; /* input device interface */ 253 struct input_dev *dev; /* input device interface */
267 struct usb_device *udev; /* usb device */ 254 struct usb_device *udev; /* usb device */
268 struct usb_interface *intf; /* usb interface */
269 255
270 int pad_present; 256 int pad_present;
271 257
@@ -471,7 +457,6 @@ static void xpad360w_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned cha
471static void xpad_irq_in(struct urb *urb) 457static void xpad_irq_in(struct urb *urb)
472{ 458{
473 struct usb_xpad *xpad = urb->context; 459 struct usb_xpad *xpad = urb->context;
474 struct device *dev = &xpad->intf->dev;
475 int retval, status; 460 int retval, status;
476 461
477 status = urb->status; 462 status = urb->status;
@@ -484,11 +469,11 @@ static void xpad_irq_in(struct urb *urb)
484 case -ENOENT: 469 case -ENOENT:
485 case -ESHUTDOWN: 470 case -ESHUTDOWN:
486 /* this urb is terminated, clean up */ 471 /* this urb is terminated, clean up */
487 dev_dbg(dev, "%s - urb shutting down with status: %d\n", 472 dbg("%s - urb shutting down with status: %d",
488 __func__, status); 473 __func__, status);
489 return; 474 return;
490 default: 475 default:
491 dev_dbg(dev, "%s - nonzero urb status received: %d\n", 476 dbg("%s - nonzero urb status received: %d",
492 __func__, status); 477 __func__, status);
493 goto exit; 478 goto exit;
494 } 479 }
@@ -507,15 +492,12 @@ static void xpad_irq_in(struct urb *urb)
507exit: 492exit:
508 retval = usb_submit_urb(urb, GFP_ATOMIC); 493 retval = usb_submit_urb(urb, GFP_ATOMIC);
509 if (retval) 494 if (retval)
510 dev_err(dev, "%s - usb_submit_urb failed with result %d\n", 495 err ("%s - usb_submit_urb failed with result %d",
511 __func__, retval); 496 __func__, retval);
512} 497}
513 498
514static void xpad_bulk_out(struct urb *urb) 499static void xpad_bulk_out(struct urb *urb)
515{ 500{
516 struct usb_xpad *xpad = urb->context;
517 struct device *dev = &xpad->intf->dev;
518
519 switch (urb->status) { 501 switch (urb->status) {
520 case 0: 502 case 0:
521 /* success */ 503 /* success */
@@ -524,20 +506,16 @@ static void xpad_bulk_out(struct urb *urb)
524 case -ENOENT: 506 case -ENOENT:
525 case -ESHUTDOWN: 507 case -ESHUTDOWN:
526 /* this urb is terminated, clean up */ 508 /* this urb is terminated, clean up */
527 dev_dbg(dev, "%s - urb shutting down with status: %d\n", 509 dbg("%s - urb shutting down with status: %d", __func__, urb->status);
528 __func__, urb->status);
529 break; 510 break;
530 default: 511 default:
531 dev_dbg(dev, "%s - nonzero urb status received: %d\n", 512 dbg("%s - nonzero urb status received: %d", __func__, urb->status);
532 __func__, urb->status);
533 } 513 }
534} 514}
535 515
536#if defined(CONFIG_JOYSTICK_XPAD_FF) || defined(CONFIG_JOYSTICK_XPAD_LEDS) 516#if defined(CONFIG_JOYSTICK_XPAD_FF) || defined(CONFIG_JOYSTICK_XPAD_LEDS)
537static void xpad_irq_out(struct urb *urb) 517static void xpad_irq_out(struct urb *urb)
538{ 518{
539 struct usb_xpad *xpad = urb->context;
540 struct device *dev = &xpad->intf->dev;
541 int retval, status; 519 int retval, status;
542 520
543 status = urb->status; 521 status = urb->status;
@@ -551,21 +529,19 @@ static void xpad_irq_out(struct urb *urb)
551 case -ENOENT: 529 case -ENOENT:
552 case -ESHUTDOWN: 530 case -ESHUTDOWN:
553 /* this urb is terminated, clean up */ 531 /* this urb is terminated, clean up */
554 dev_dbg(dev, "%s - urb shutting down with status: %d\n", 532 dbg("%s - urb shutting down with status: %d", __func__, status);
555 __func__, status);
556 return; 533 return;
557 534
558 default: 535 default:
559 dev_dbg(dev, "%s - nonzero urb status received: %d\n", 536 dbg("%s - nonzero urb status received: %d", __func__, status);
560 __func__, status);
561 goto exit; 537 goto exit;
562 } 538 }
563 539
564exit: 540exit:
565 retval = usb_submit_urb(urb, GFP_ATOMIC); 541 retval = usb_submit_urb(urb, GFP_ATOMIC);
566 if (retval) 542 if (retval)
567 dev_err(dev, "%s - usb_submit_urb failed with result %d\n", 543 err("%s - usb_submit_urb failed with result %d",
568 __func__, retval); 544 __func__, retval);
569} 545}
570 546
571static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad) 547static int xpad_init_output(struct usb_interface *intf, struct usb_xpad *xpad)
@@ -678,8 +654,7 @@ static int xpad_play_effect(struct input_dev *dev, void *data, struct ff_effect
678 return usb_submit_urb(xpad->irq_out, GFP_ATOMIC); 654 return usb_submit_urb(xpad->irq_out, GFP_ATOMIC);
679 655
680 default: 656 default:
681 dev_dbg(&xpad->dev->dev, 657 dbg("%s - rumble command sent to unsupported xpad type: %d",
682 "%s - rumble command sent to unsupported xpad type: %d\n",
683 __func__, xpad->xtype); 658 __func__, xpad->xtype);
684 return -1; 659 return -1;
685 } 660 }
@@ -792,7 +767,7 @@ static int xpad_open(struct input_dev *dev)
792 struct usb_xpad *xpad = input_get_drvdata(dev); 767 struct usb_xpad *xpad = input_get_drvdata(dev);
793 768
794 /* URB was submitted in probe */ 769 /* URB was submitted in probe */
795 if (xpad->xtype == XTYPE_XBOX360W) 770 if(xpad->xtype == XTYPE_XBOX360W)
796 return 0; 771 return 0;
797 772
798 xpad->irq_in->dev = xpad->udev; 773 xpad->irq_in->dev = xpad->udev;
@@ -869,7 +844,6 @@ static int xpad_probe(struct usb_interface *intf, const struct usb_device_id *id
869 } 844 }
870 845
871 xpad->udev = udev; 846 xpad->udev = udev;
872 xpad->intf = intf;
873 xpad->mapping = xpad_device[i].mapping; 847 xpad->mapping = xpad_device[i].mapping;
874 xpad->xtype = xpad_device[i].xtype; 848 xpad->xtype = xpad_device[i].xtype;
875 849
@@ -1067,7 +1041,18 @@ static struct usb_driver xpad_driver = {
1067 .id_table = xpad_table, 1041 .id_table = xpad_table,
1068}; 1042};
1069 1043
1070module_usb_driver(xpad_driver); 1044static int __init usb_xpad_init(void)
1045{
1046 return usb_register(&xpad_driver);
1047}
1048
1049static void __exit usb_xpad_exit(void)
1050{
1051 usb_deregister(&xpad_driver);
1052}
1053
1054module_init(usb_xpad_init);
1055module_exit(usb_xpad_exit);
1071 1056
1072MODULE_AUTHOR(DRIVER_AUTHOR); 1057MODULE_AUTHOR(DRIVER_AUTHOR);
1073MODULE_DESCRIPTION(DRIVER_DESC); 1058MODULE_DESCRIPTION(DRIVER_DESC);
diff --git a/drivers/input/joystick/zhenhua.c b/drivers/input/joystick/zhenhua.c
index c4de4388fd7..b5853125c89 100644
--- a/drivers/input/joystick/zhenhua.c
+++ b/drivers/input/joystick/zhenhua.c
@@ -225,4 +225,19 @@ static struct serio_driver zhenhua_drv = {
225 .disconnect = zhenhua_disconnect, 225 .disconnect = zhenhua_disconnect,
226}; 226};
227 227
228module_serio_driver(zhenhua_drv); 228/*
229 * The functions for inserting/removing us as a module.
230 */
231
232static int __init zhenhua_init(void)
233{
234 return serio_register_driver(&zhenhua_drv);
235}
236
237static void __exit zhenhua_exit(void)
238{
239 serio_unregister_driver(&zhenhua_drv);
240}
241
242module_init(zhenhua_init);
243module_exit(zhenhua_exit);