|
@@ -136,18 +136,17 @@ probe_failed:
|
|
driver_sysfs_remove(dev);
|
|
driver_sysfs_remove(dev);
|
|
dev->driver = NULL;
|
|
dev->driver = NULL;
|
|
|
|
|
|
- if (ret == -ENODEV || ret == -ENXIO) {
|
|
|
|
- /* Driver matched, but didn't support device
|
|
|
|
- * or device not found.
|
|
|
|
- * Not an error; keep going.
|
|
|
|
- */
|
|
|
|
- ret = 0;
|
|
|
|
- } else {
|
|
|
|
|
|
+ if (ret != -ENODEV && ret != -ENXIO) {
|
|
/* driver matched but the probe failed */
|
|
/* driver matched but the probe failed */
|
|
printk(KERN_WARNING
|
|
printk(KERN_WARNING
|
|
"%s: probe of %s failed with error %d\n",
|
|
"%s: probe of %s failed with error %d\n",
|
|
drv->name, dev->bus_id, ret);
|
|
drv->name, dev->bus_id, ret);
|
|
}
|
|
}
|
|
|
|
+ /*
|
|
|
|
+ * Ignore errors returned by ->probe so that the next driver can try
|
|
|
|
+ * its luck.
|
|
|
|
+ */
|
|
|
|
+ ret = 0;
|
|
done:
|
|
done:
|
|
kfree(data);
|
|
kfree(data);
|
|
atomic_dec(&probe_count);
|
|
atomic_dec(&probe_count);
|