Commit 982c609448b9d724e1c3a0d5aeee388c064479f0

Authored by Bjorn Helgaas
Committed by Linus Torvalds
1 parent 070c699983

[PATCH] pnp: PNP: adjust pnp_register_driver signature

Remove the assumption that pnp_register_driver() returns the number of devices
claimed.  Returning the count is unreliable because devices may be hot-plugged
in the future.

This changes the convention to "zero for success, or a negative error value,"
which matches pci_register_driver(), acpi_bus_register_driver(), and
platform_driver_register().

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Cc: Adam Belay <ambx1@neo.rr.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 3 changed files with 11 additions and 27 deletions Side-by-side Diff

Documentation/pnp.txt
... ... @@ -115,6 +115,9 @@
115 115 pnp_register_driver
116 116 - adds a PnP driver to the Plug and Play Layer
117 117 - this includes driver model integration
  118 +- returns zero for success or a negative error number for failure; count
  119 + calls to the .add() method if you need to know how many devices bind to
  120 + the driver
118 121  
119 122 pnp_unregister_driver
120 123 - removes a PnP driver from the Plug and Play Layer
... ... @@ -47,7 +47,7 @@
47 47 {
48 48 dev->card_link = NULL;
49 49 }
50   -
  50 +
51 51 static void card_remove_first(struct pnp_dev * dev)
52 52 {
53 53 struct pnp_card_driver * drv = to_pnp_card_driver(dev->driver);
... ... @@ -361,7 +361,7 @@
361 361  
362 362 int pnp_register_card_driver(struct pnp_card_driver * drv)
363 363 {
364   - int count;
  364 + int error;
365 365 struct list_head *pos, *temp;
366 366  
367 367 drv->link.name = drv->name;
368 368  
369 369  
370 370  
... ... @@ -372,21 +372,19 @@
372 372 drv->link.suspend = drv->suspend ? card_suspend : NULL;
373 373 drv->link.resume = drv->resume ? card_resume : NULL;
374 374  
375   - count = pnp_register_driver(&drv->link);
376   - if (count < 0)
377   - return count;
  375 + error = pnp_register_driver(&drv->link);
  376 + if (error < 0)
  377 + return error;
378 378  
379 379 spin_lock(&pnp_lock);
380 380 list_add_tail(&drv->global_list, &pnp_card_drivers);
381 381 spin_unlock(&pnp_lock);
382 382  
383   - count = 0;
384   -
385 383 list_for_each_safe(pos,temp,&pnp_cards){
386 384 struct pnp_card *card = list_entry(pos, struct pnp_card, global_list);
387   - count += card_probe(card,drv);
  385 + card_probe(card,drv);
388 386 }
389   - return count;
  387 + return 0;
390 388 }
391 389  
392 390 /**
drivers/pnp/driver.c
... ... @@ -201,31 +201,14 @@
201 201 .resume = pnp_bus_resume,
202 202 };
203 203  
204   -
205   -static int count_devices(struct device * dev, void * c)
206   -{
207   - int * count = c;
208   - (*count)++;
209   - return 0;
210   -}
211   -
212 204 int pnp_register_driver(struct pnp_driver *drv)
213 205 {
214   - int count;
215   -
216 206 pnp_dbg("the driver '%s' has been registered", drv->name);
217 207  
218 208 drv->driver.name = drv->name;
219 209 drv->driver.bus = &pnp_bus_type;
220 210  
221   - count = driver_register(&drv->driver);
222   -
223   - /* get the number of initial matches */
224   - if (count >= 0){
225   - count = 0;
226   - driver_for_each_device(&drv->driver, NULL, &count, count_devices);
227   - }
228   - return count;
  211 + return driver_register(&drv->driver);
229 212 }
230 213  
231 214 void pnp_unregister_driver(struct pnp_driver *drv)