Input: serio core - handle errors returned by device_bind_driver()
authorDmitry Torokhov <dtor@insightbb.com>
Thu, 12 Oct 2006 05:06:23 +0000 (01:06 -0400)
committerDmitry Torokhov <dtor@insightbb.com>
Thu, 12 Oct 2006 05:06:23 +0000 (01:06 -0400)
Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
drivers/input/serio/serio.c

index 480fdc5d20b360dacb7c55e4e53aadce5300191e..211943f85cb66e1dee2b77aac5c3e30ce3d6c07a 100644 (file)
@@ -118,6 +118,8 @@ static int serio_match_port(const struct serio_device_id *ids, struct serio *ser
 
 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)) {
@@ -126,9 +128,19 @@ static void serio_bind_driver(struct serio *serio, struct serio_driver *drv)
                        serio->dev.driver = NULL;
                        goto out;
                }
-               device_bind_driver(&serio->dev);
+               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:
+ out:
        up_write(&serio_bus.subsys.rwsem);
 }