|
@@ -275,13 +275,11 @@ static int __init eisa_request_resources(struct eisa_root_device *root,
|
|
|
}
|
|
|
|
|
|
if (slot) {
|
|
|
- edev->res[i].name = NULL;
|
|
|
edev->res[i].start = SLOT_ADDRESS(root, slot)
|
|
|
+ (i * 0x400);
|
|
|
edev->res[i].end = edev->res[i].start + 0xff;
|
|
|
edev->res[i].flags = IORESOURCE_IO;
|
|
|
} else {
|
|
|
- edev->res[i].name = NULL;
|
|
|
edev->res[i].start = SLOT_ADDRESS(root, slot)
|
|
|
+ EISA_VENDOR_ID_OFFSET;
|
|
|
edev->res[i].end = edev->res[i].start + 3;
|
|
@@ -327,20 +325,19 @@ static int __init eisa_probe(struct eisa_root_device *root)
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
|
- if (eisa_request_resources(root, edev, 0)) {
|
|
|
- dev_warn(root->dev,
|
|
|
- "EISA: Cannot allocate resource for mainboard\n");
|
|
|
+ if (eisa_init_device(root, edev, 0)) {
|
|
|
kfree(edev);
|
|
|
if (!root->force_probe)
|
|
|
- return -EBUSY;
|
|
|
+ return -ENODEV;
|
|
|
goto force_probe;
|
|
|
}
|
|
|
|
|
|
- if (eisa_init_device(root, edev, 0)) {
|
|
|
- eisa_release_resources(edev);
|
|
|
+ if (eisa_request_resources(root, edev, 0)) {
|
|
|
+ dev_warn(root->dev,
|
|
|
+ "EISA: Cannot allocate resource for mainboard\n");
|
|
|
kfree(edev);
|
|
|
if (!root->force_probe)
|
|
|
- return -ENODEV;
|
|
|
+ return -EBUSY;
|
|
|
goto force_probe;
|
|
|
}
|
|
|
|
|
@@ -363,16 +360,15 @@ static int __init eisa_probe(struct eisa_root_device *root)
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (eisa_request_resources(root, edev, i)) {
|
|
|
- dev_warn(root->dev,
|
|
|
- "Cannot allocate resource for EISA slot %d\n",
|
|
|
- i);
|
|
|
+ if (eisa_init_device(root, edev, i)) {
|
|
|
kfree(edev);
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (eisa_init_device(root, edev, i)) {
|
|
|
- eisa_release_resources(edev);
|
|
|
+ if (eisa_request_resources(root, edev, i)) {
|
|
|
+ dev_warn(root->dev,
|
|
|
+ "Cannot allocate resource for EISA slot %d\n",
|
|
|
+ i);
|
|
|
kfree(edev);
|
|
|
continue;
|
|
|
}
|