static void serio_bind_driver(struct serio *serio, struct serio_driver *drv) { int error; down_write(&serio_bus.subsys.rwsem); if (serio_match_port(drv->id_table, serio)) { serio->dev.driver = &drv->driver; if (serio_connect_driver(serio, drv)) { serio->dev.driver = NULL; goto out; } error = device_bind_driver(&serio->dev); if (error) { printk(KERN_WARNING "serio: device_bind_driver() failed " "for %s (%s) and %s, error: %d\n", serio->phys, serio->name, drv->description, error); serio_disconnect_driver(serio); serio->dev.driver = NULL; goto out; } } out: up_write(&serio_bus.subsys.rwsem); }
static int serio_bind_driver(struct serio *serio, struct serio_driver *drv) { int error; if (serio_match_port(drv->id_table, serio)) { serio->dev.driver = &drv->driver; if (serio_connect_driver(serio, drv)) { serio->dev.driver = NULL; return -ENODEV; } error = device_bind_driver(&serio->dev); if (error) { dev_warn(&serio->dev, "device_bind_driver() failed for %s (%s) and %s, error: %d\n", serio->phys, serio->name, drv->description, error); serio_disconnect_driver(serio); serio->dev.driver = NULL; return error; } } return 0; }
static void serio_bind_driver(struct serio *serio, struct serio_driver *drv) { down_write(&serio_bus.subsys.rwsem); if (serio_match_port(drv->id_table, serio)) { serio->dev.driver = &drv->driver; if (serio_connect_driver(serio, drv)) { serio->dev.driver = NULL; goto out; } device_bind_driver(&serio->dev); } out: up_write(&serio_bus.subsys.rwsem); }