diff options
Diffstat (limited to 'drivers/input/joystick/grip.c')
-rw-r--r-- | drivers/input/joystick/grip.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/input/joystick/grip.c b/drivers/input/joystick/grip.c index a936e7aedb10..20cb98ac2d79 100644 --- a/drivers/input/joystick/grip.c +++ b/drivers/input/joystick/grip.c | |||
@@ -192,6 +192,9 @@ static void grip_poll(struct gameport *gameport) | |||
192 | for (i = 0; i < 2; i++) { | 192 | for (i = 0; i < 2; i++) { |
193 | 193 | ||
194 | dev = grip->dev[i]; | 194 | dev = grip->dev[i]; |
195 | if (!dev) | ||
196 | continue; | ||
197 | |||
195 | grip->reads++; | 198 | grip->reads++; |
196 | 199 | ||
197 | switch (grip->mode[i]) { | 200 | switch (grip->mode[i]) { |
@@ -381,12 +384,15 @@ static int grip_connect(struct gameport *gameport, struct gameport_driver *drv) | |||
381 | if (t > 0) | 384 | if (t > 0) |
382 | set_bit(t, input_dev->keybit); | 385 | set_bit(t, input_dev->keybit); |
383 | 386 | ||
384 | input_register_device(grip->dev[i]); | 387 | err = input_register_device(grip->dev[i]); |
388 | if (err) | ||
389 | goto fail4; | ||
385 | } | 390 | } |
386 | 391 | ||
387 | return 0; | 392 | return 0; |
388 | 393 | ||
389 | fail3: for (i = 0; i < 2; i++) | 394 | fail4: input_free_device(grip->dev[i]); |
395 | fail3: while (--i >= 0) | ||
390 | if (grip->dev[i]) | 396 | if (grip->dev[i]) |
391 | input_unregister_device(grip->dev[i]); | 397 | input_unregister_device(grip->dev[i]); |
392 | fail2: gameport_close(gameport); | 398 | fail2: gameport_close(gameport); |
@@ -411,6 +417,7 @@ static void grip_disconnect(struct gameport *gameport) | |||
411 | static struct gameport_driver grip_drv = { | 417 | static struct gameport_driver grip_drv = { |
412 | .driver = { | 418 | .driver = { |
413 | .name = "grip", | 419 | .name = "grip", |
420 | .owner = THIS_MODULE, | ||
414 | }, | 421 | }, |
415 | .description = DRIVER_DESC, | 422 | .description = DRIVER_DESC, |
416 | .connect = grip_connect, | 423 | .connect = grip_connect, |