diff options
| -rw-r--r-- | drivers/eisa/eisa-bus.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/drivers/eisa/eisa-bus.c b/drivers/eisa/eisa-bus.c index 8842cde69177..612afeaec3cb 100644 --- a/drivers/eisa/eisa-bus.c +++ b/drivers/eisa/eisa-bus.c | |||
| @@ -277,18 +277,19 @@ static int __init eisa_request_resources(struct eisa_root_device *root, | |||
| 277 | } | 277 | } |
| 278 | 278 | ||
| 279 | if (slot) { | 279 | if (slot) { |
| 280 | edev->res[i].name = NULL; | ||
| 280 | edev->res[i].start = SLOT_ADDRESS(root, slot) | 281 | edev->res[i].start = SLOT_ADDRESS(root, slot) |
| 281 | + (i * 0x400); | 282 | + (i * 0x400); |
| 282 | edev->res[i].end = edev->res[i].start + 0xff; | 283 | edev->res[i].end = edev->res[i].start + 0xff; |
| 283 | edev->res[i].flags = IORESOURCE_IO; | 284 | edev->res[i].flags = IORESOURCE_IO; |
| 284 | } else { | 285 | } else { |
| 286 | edev->res[i].name = NULL; | ||
| 285 | edev->res[i].start = SLOT_ADDRESS(root, slot) | 287 | edev->res[i].start = SLOT_ADDRESS(root, slot) |
| 286 | + EISA_VENDOR_ID_OFFSET; | 288 | + EISA_VENDOR_ID_OFFSET; |
| 287 | edev->res[i].end = edev->res[i].start + 3; | 289 | edev->res[i].end = edev->res[i].start + 3; |
| 288 | edev->res[i].flags = IORESOURCE_IO | IORESOURCE_BUSY; | 290 | edev->res[i].flags = IORESOURCE_IO | IORESOURCE_BUSY; |
| 289 | } | 291 | } |
| 290 | 292 | ||
| 291 | dev_printk(KERN_DEBUG, &edev->dev, "%pR\n", &edev->res[i]); | ||
| 292 | if (request_resource(root->res, &edev->res[i])) | 293 | if (request_resource(root->res, &edev->res[i])) |
| 293 | goto failed; | 294 | goto failed; |
| 294 | } | 295 | } |
| @@ -328,19 +329,20 @@ static int __init eisa_probe(struct eisa_root_device *root) | |||
| 328 | return -ENOMEM; | 329 | return -ENOMEM; |
| 329 | } | 330 | } |
| 330 | 331 | ||
| 331 | if (eisa_init_device(root, edev, 0)) { | 332 | if (eisa_request_resources(root, edev, 0)) { |
| 333 | dev_warn(root->dev, | ||
| 334 | "EISA: Cannot allocate resource for mainboard\n"); | ||
| 332 | kfree(edev); | 335 | kfree(edev); |
| 333 | if (!root->force_probe) | 336 | if (!root->force_probe) |
| 334 | return -ENODEV; | 337 | return -EBUSY; |
| 335 | goto force_probe; | 338 | goto force_probe; |
| 336 | } | 339 | } |
| 337 | 340 | ||
| 338 | if (eisa_request_resources(root, edev, 0)) { | 341 | if (eisa_init_device(root, edev, 0)) { |
| 339 | dev_warn(root->dev, | 342 | eisa_release_resources(edev); |
| 340 | "EISA: Cannot allocate resource for mainboard\n"); | ||
| 341 | kfree(edev); | 343 | kfree(edev); |
| 342 | if (!root->force_probe) | 344 | if (!root->force_probe) |
| 343 | return -EBUSY; | 345 | return -ENODEV; |
| 344 | goto force_probe; | 346 | goto force_probe; |
| 345 | } | 347 | } |
| 346 | 348 | ||
| @@ -363,11 +365,6 @@ static int __init eisa_probe(struct eisa_root_device *root) | |||
| 363 | continue; | 365 | continue; |
| 364 | } | 366 | } |
| 365 | 367 | ||
| 366 | if (eisa_init_device(root, edev, i)) { | ||
| 367 | kfree(edev); | ||
| 368 | continue; | ||
| 369 | } | ||
| 370 | |||
| 371 | if (eisa_request_resources(root, edev, i)) { | 368 | if (eisa_request_resources(root, edev, i)) { |
| 372 | dev_warn(root->dev, | 369 | dev_warn(root->dev, |
| 373 | "Cannot allocate resource for EISA slot %d\n", | 370 | "Cannot allocate resource for EISA slot %d\n", |
| @@ -376,6 +373,12 @@ static int __init eisa_probe(struct eisa_root_device *root) | |||
| 376 | continue; | 373 | continue; |
| 377 | } | 374 | } |
| 378 | 375 | ||
| 376 | if (eisa_init_device(root, edev, i)) { | ||
| 377 | eisa_release_resources(edev); | ||
| 378 | kfree(edev); | ||
| 379 | continue; | ||
| 380 | } | ||
| 381 | |||
| 379 | if (edev->state == (EISA_CONFIG_ENABLED | EISA_CONFIG_FORCED)) | 382 | if (edev->state == (EISA_CONFIG_ENABLED | EISA_CONFIG_FORCED)) |
| 380 | enabled_str = " (forced enabled)"; | 383 | enabled_str = " (forced enabled)"; |
| 381 | else if (edev->state == EISA_CONFIG_FORCED) | 384 | else if (edev->state == EISA_CONFIG_FORCED) |
