Input: serio/gameport - check whether driver core calls succeeded

Signed-off-by: Randy Dunlap <rdunlap@xenotime.net>
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>

authored by Randy Dunlap and committed by Dmitry Torokhov 73b59a3b 2c1dd69d

+100 -31
+49 -17
drivers/input/gameport/gameport.c
··· 53 54 static struct bus_type gameport_bus; 55 56 static void gameport_add_port(struct gameport *gameport); 57 static void gameport_destroy_port(struct gameport *gameport); 58 static void gameport_reconnect_port(struct gameport *gameport); ··· 212 213 static void gameport_find_driver(struct gameport *gameport) 214 { 215 down_write(&gameport_bus.subsys.rwsem); 216 - device_attach(&gameport->dev); 217 up_write(&gameport_bus.subsys.rwsem); 218 } 219 ··· 323 spin_unlock_irqrestore(&gameport_event_lock, flags); 324 } 325 326 - 327 static struct gameport_event *gameport_get_event(void) 328 { 329 struct gameport_event *event; ··· 348 static void gameport_handle_event(void) 349 { 350 struct gameport_event *event; 351 - struct gameport_driver *gameport_drv; 352 353 mutex_lock(&gameport_mutex); 354 ··· 374 break; 375 376 case GAMEPORT_REGISTER_DRIVER: 377 - gameport_drv = event->object; 378 - driver_register(&gameport_drv->driver); 379 break; 380 381 default: ··· 536 if (gameport->parent) 537 gameport->dev.parent = &gameport->parent->dev; 538 539 spin_lock_init(&gameport->timer_lock); 540 init_timer(&gameport->poll_timer); 541 gameport->poll_timer.function = gameport_run_poll_handler; ··· 549 */ 550 static void gameport_add_port(struct gameport *gameport) 551 { 552 if (gameport->parent) 553 gameport->parent->child = gameport; 554 ··· 565 printk(KERN_INFO "gameport: %s is %s, speed %dkHz\n", 566 gameport->name, gameport->phys, gameport->speed); 567 568 - device_add(&gameport->dev); 569 - gameport->registered = 1; 570 } 571 572 /* ··· 595 596 if (gameport->registered) { 597 device_del(&gameport->dev); 598 - list_del_init(&gameport->node); 599 gameport->registered = 0; 600 } 601 602 gameport_remove_pending_events(gameport); 603 put_device(&gameport->dev); ··· 717 } 718 719 static struct bus_type gameport_bus = { 720 - .name = "gameport", 721 - .probe = gameport_driver_probe, 722 - .remove = gameport_driver_remove, 723 }; 724 725 void __gameport_register_driver(struct gameport_driver *drv, struct module *owner) 726 { ··· 802 803 static int __init gameport_init(void) 804 { 805 - gameport_task = kthread_run(gameport_thread, NULL, "kgameportd"); 806 - if (IS_ERR(gameport_task)) { 807 - printk(KERN_ERR "gameport: Failed to start kgameportd\n"); 808 - return PTR_ERR(gameport_task); 809 - } 810 811 gameport_bus.dev_attrs = gameport_device_attrs; 812 gameport_bus.drv_attrs = gameport_driver_attrs; 813 gameport_bus.match = gameport_bus_match; 814 - bus_register(&gameport_bus); 815 816 return 0; 817 }
··· 53 54 static struct bus_type gameport_bus; 55 56 + static void gameport_add_driver(struct gameport_driver *drv); 57 static void gameport_add_port(struct gameport *gameport); 58 static void gameport_destroy_port(struct gameport *gameport); 59 static void gameport_reconnect_port(struct gameport *gameport); ··· 211 212 static void gameport_find_driver(struct gameport *gameport) 213 { 214 + int error; 215 + 216 down_write(&gameport_bus.subsys.rwsem); 217 + error = device_attach(&gameport->dev); 218 + if (error < 0) 219 + printk(KERN_WARNING 220 + "gameport: device_attach() failed for %s (%s), error: %d\n", 221 + gameport->phys, gameport->name, error); 222 up_write(&gameport_bus.subsys.rwsem); 223 } 224 ··· 316 spin_unlock_irqrestore(&gameport_event_lock, flags); 317 } 318 319 static struct gameport_event *gameport_get_event(void) 320 { 321 struct gameport_event *event; ··· 342 static void gameport_handle_event(void) 343 { 344 struct gameport_event *event; 345 346 mutex_lock(&gameport_mutex); 347 ··· 369 break; 370 371 case GAMEPORT_REGISTER_DRIVER: 372 + gameport_add_driver(event->object); 373 break; 374 375 default: ··· 532 if (gameport->parent) 533 gameport->dev.parent = &gameport->parent->dev; 534 535 + INIT_LIST_HEAD(&gameport->node); 536 spin_lock_init(&gameport->timer_lock); 537 init_timer(&gameport->poll_timer); 538 gameport->poll_timer.function = gameport_run_poll_handler; ··· 544 */ 545 static void gameport_add_port(struct gameport *gameport) 546 { 547 + int error; 548 + 549 if (gameport->parent) 550 gameport->parent->child = gameport; 551 ··· 558 printk(KERN_INFO "gameport: %s is %s, speed %dkHz\n", 559 gameport->name, gameport->phys, gameport->speed); 560 561 + error = device_add(&gameport->dev); 562 + if (error) 563 + printk(KERN_ERR 564 + "gameport: device_add() failed for %s (%s), error: %d\n", 565 + gameport->phys, gameport->name, error); 566 + else 567 + gameport->registered = 1; 568 } 569 570 /* ··· 583 584 if (gameport->registered) { 585 device_del(&gameport->dev); 586 gameport->registered = 0; 587 } 588 + 589 + list_del_init(&gameport->node); 590 591 gameport_remove_pending_events(gameport); 592 put_device(&gameport->dev); ··· 704 } 705 706 static struct bus_type gameport_bus = { 707 + .name = "gameport", 708 + .probe = gameport_driver_probe, 709 + .remove = gameport_driver_remove, 710 }; 711 + 712 + static void gameport_add_driver(struct gameport_driver *drv) 713 + { 714 + int error; 715 + 716 + error = driver_register(&drv->driver); 717 + if (error) 718 + printk(KERN_ERR 719 + "gameport: driver_register() failed for %s, error: %d\n", 720 + drv->driver.name, error); 721 + } 722 723 void __gameport_register_driver(struct gameport_driver *drv, struct module *owner) 724 { ··· 778 779 static int __init gameport_init(void) 780 { 781 + int error; 782 783 gameport_bus.dev_attrs = gameport_device_attrs; 784 gameport_bus.drv_attrs = gameport_driver_attrs; 785 gameport_bus.match = gameport_bus_match; 786 + error = bus_register(&gameport_bus); 787 + if (error) { 788 + printk(KERN_ERR "gameport: failed to register gameport bus, error: %d\n", error); 789 + return error; 790 + } 791 + 792 + gameport_task = kthread_run(gameport_thread, NULL, "kgameportd"); 793 + if (IS_ERR(gameport_task)) { 794 + bus_unregister(&gameport_bus); 795 + error = PTR_ERR(gameport_task); 796 + printk(KERN_ERR "gameport: Failed to start kgameportd, error: %d\n", error); 797 + return error; 798 + } 799 800 return 0; 801 }
+51 -14
drivers/input/serio/serio.c
··· 62 63 static struct bus_type serio_bus; 64 65 static void serio_add_port(struct serio *serio); 66 static void serio_destroy_port(struct serio *serio); 67 static void serio_reconnect_port(struct serio *serio); ··· 141 142 static void serio_find_driver(struct serio *serio) 143 { 144 down_write(&serio_bus.subsys.rwsem); 145 - device_attach(&serio->dev); 146 up_write(&serio_bus.subsys.rwsem); 147 } 148 ··· 279 static void serio_handle_event(void) 280 { 281 struct serio_event *event; 282 - struct serio_driver *serio_drv; 283 284 mutex_lock(&serio_mutex); 285 ··· 310 break; 311 312 case SERIO_REGISTER_DRIVER: 313 - serio_drv = event->object; 314 - driver_register(&serio_drv->driver); 315 break; 316 317 default: ··· 530 531 __module_get(THIS_MODULE); 532 533 spin_lock_init(&serio->lock); 534 mutex_init(&serio->drv_mutex); 535 device_initialize(&serio->dev); ··· 548 */ 549 static void serio_add_port(struct serio *serio) 550 { 551 if (serio->parent) { 552 serio_pause_rx(serio->parent); 553 serio->parent->child = serio; ··· 559 list_add_tail(&serio->node, &serio_list); 560 if (serio->start) 561 serio->start(serio); 562 - device_add(&serio->dev); 563 - sysfs_create_group(&serio->dev.kobj, &serio_id_attr_group); 564 - serio->registered = 1; 565 } 566 567 /* ··· 601 if (serio->registered) { 602 sysfs_remove_group(&serio->dev.kobj, &serio_id_attr_group); 603 device_del(&serio->dev); 604 - list_del_init(&serio->node); 605 serio->registered = 0; 606 } 607 608 serio_remove_pending_events(serio); 609 put_device(&serio->dev); 610 } ··· 774 .remove = serio_driver_remove, 775 }; 776 777 void __serio_register_driver(struct serio_driver *drv, struct module *owner) 778 { 779 drv->driver.bus = &serio_bus; ··· 932 933 static int __init serio_init(void) 934 { 935 - serio_task = kthread_run(serio_thread, NULL, "kseriod"); 936 - if (IS_ERR(serio_task)) { 937 - printk(KERN_ERR "serio: Failed to start kseriod\n"); 938 - return PTR_ERR(serio_task); 939 - } 940 941 serio_bus.dev_attrs = serio_device_attrs; 942 serio_bus.drv_attrs = serio_driver_attrs; 943 serio_bus.match = serio_bus_match; 944 serio_bus.uevent = serio_uevent; 945 serio_bus.resume = serio_resume; 946 - bus_register(&serio_bus); 947 948 return 0; 949 }
··· 62 63 static struct bus_type serio_bus; 64 65 + static void serio_add_driver(struct serio_driver *drv); 66 static void serio_add_port(struct serio *serio); 67 static void serio_destroy_port(struct serio *serio); 68 static void serio_reconnect_port(struct serio *serio); ··· 140 141 static void serio_find_driver(struct serio *serio) 142 { 143 + int error; 144 + 145 down_write(&serio_bus.subsys.rwsem); 146 + error = device_attach(&serio->dev); 147 + if (error < 0) 148 + printk(KERN_WARNING 149 + "serio: device_attach() failed for %s (%s), error: %d\n", 150 + serio->phys, serio->name, error); 151 up_write(&serio_bus.subsys.rwsem); 152 } 153 ··· 272 static void serio_handle_event(void) 273 { 274 struct serio_event *event; 275 276 mutex_lock(&serio_mutex); 277 ··· 304 break; 305 306 case SERIO_REGISTER_DRIVER: 307 + serio_add_driver(event->object); 308 break; 309 310 default: ··· 525 526 __module_get(THIS_MODULE); 527 528 + INIT_LIST_HEAD(&serio->node); 529 spin_lock_init(&serio->lock); 530 mutex_init(&serio->drv_mutex); 531 device_initialize(&serio->dev); ··· 542 */ 543 static void serio_add_port(struct serio *serio) 544 { 545 + int error; 546 + 547 if (serio->parent) { 548 serio_pause_rx(serio->parent); 549 serio->parent->child = serio; ··· 551 list_add_tail(&serio->node, &serio_list); 552 if (serio->start) 553 serio->start(serio); 554 + error = device_add(&serio->dev); 555 + if (error) 556 + printk(KERN_ERR 557 + "serio: device_add() failed for %s (%s), error: %d\n", 558 + serio->phys, serio->name, error); 559 + else { 560 + serio->registered = 1; 561 + error = sysfs_create_group(&serio->dev.kobj, &serio_id_attr_group); 562 + if (error) 563 + printk(KERN_ERR 564 + "serio: sysfs_create_group() failed for %s (%s), error: %d\n", 565 + serio->phys, serio->name, error); 566 + } 567 } 568 569 /* ··· 583 if (serio->registered) { 584 sysfs_remove_group(&serio->dev.kobj, &serio_id_attr_group); 585 device_del(&serio->dev); 586 serio->registered = 0; 587 } 588 589 + list_del_init(&serio->node); 590 serio_remove_pending_events(serio); 591 put_device(&serio->dev); 592 } ··· 756 .remove = serio_driver_remove, 757 }; 758 759 + static void serio_add_driver(struct serio_driver *drv) 760 + { 761 + int error; 762 + 763 + error = driver_register(&drv->driver); 764 + if (error) 765 + printk(KERN_ERR 766 + "serio: driver_register() failed for %s, error: %d\n", 767 + drv->driver.name, error); 768 + } 769 + 770 void __serio_register_driver(struct serio_driver *drv, struct module *owner) 771 { 772 drv->driver.bus = &serio_bus; ··· 903 904 static int __init serio_init(void) 905 { 906 + int error; 907 908 serio_bus.dev_attrs = serio_device_attrs; 909 serio_bus.drv_attrs = serio_driver_attrs; 910 serio_bus.match = serio_bus_match; 911 serio_bus.uevent = serio_uevent; 912 serio_bus.resume = serio_resume; 913 + error = bus_register(&serio_bus); 914 + if (error) { 915 + printk(KERN_ERR "serio: failed to register serio bus, error: %d\n", error); 916 + return error; 917 + } 918 + 919 + serio_task = kthread_run(serio_thread, NULL, "kseriod"); 920 + if (IS_ERR(serio_task)) { 921 + bus_unregister(&serio_bus); 922 + error = PTR_ERR(serio_task); 923 + printk(KERN_ERR "serio: Failed to start kseriod, error: %d\n", error); 924 + return error; 925 + } 926 927 return 0; 928 }