Pārlūkot izejas kodu

Input: gameport core - handle errors returned by device_bind_driver()

Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
Dmitry Torokhov 18 gadi atpakaļ
vecāks
revīzija
23de1510e2
1 mainītis faili ar 16 papildinājumiem un 2 dzēšanām
  1. 16 2
      drivers/input/gameport/gameport.c

+ 16 - 2
drivers/input/gameport/gameport.c

@@ -191,6 +191,8 @@ static void gameport_run_poll_handler(unsigned long d)
 
 static void gameport_bind_driver(struct gameport *gameport, struct gameport_driver *drv)
 {
+	int error;
+
 	down_write(&gameport_bus.subsys.rwsem);
 
 	gameport->dev.driver = &drv->driver;
@@ -198,8 +200,20 @@ static void gameport_bind_driver(struct gameport *gameport, struct gameport_driv
 		gameport->dev.driver = NULL;
 		goto out;
 	}
-	device_bind_driver(&gameport->dev);
-out:
+
+	error = device_bind_driver(&gameport->dev);
+	if (error) {
+		printk(KERN_WARNING
+			"gameport: device_bind_driver() failed "
+			"for %s (%s) and %s, error: %d\n",
+			gameport->phys, gameport->name,
+			drv->description, error);
+		drv->disconnect(gameport);
+		gameport->dev.driver = NULL;
+		goto out;
+	}
+
+ out:
 	up_write(&gameport_bus.subsys.rwsem);
 }