diff options
Diffstat (limited to 'drivers/ide/pci/sgiioc4.c')
-rw-r--r-- | drivers/ide/pci/sgiioc4.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/ide/pci/sgiioc4.c b/drivers/ide/pci/sgiioc4.c index be73acb2080d..c79ff5b41088 100644 --- a/drivers/ide/pci/sgiioc4.c +++ b/drivers/ide/pci/sgiioc4.c | |||
@@ -588,10 +588,6 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
588 | hw_regs_t hw; | 588 | hw_regs_t hw; |
589 | struct ide_port_info d = sgiioc4_port_info; | 589 | struct ide_port_info d = sgiioc4_port_info; |
590 | 590 | ||
591 | hwif = ide_find_port_slot(&d); | ||
592 | if (hwif == NULL) | ||
593 | return -ENOMEM; | ||
594 | |||
595 | /* Get the CmdBlk and CtrlBlk Base Registers */ | 591 | /* Get the CmdBlk and CtrlBlk Base Registers */ |
596 | bar0 = pci_resource_start(dev, 0); | 592 | bar0 = pci_resource_start(dev, 0); |
597 | virt_base = ioremap(bar0, pci_resource_len(dev, 0)); | 593 | virt_base = ioremap(bar0, pci_resource_len(dev, 0)); |
@@ -621,6 +617,11 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
621 | hw.irq = dev->irq; | 617 | hw.irq = dev->irq; |
622 | hw.chipset = ide_pci; | 618 | hw.chipset = ide_pci; |
623 | hw.dev = &dev->dev; | 619 | hw.dev = &dev->dev; |
620 | |||
621 | hwif = ide_find_port_slot(&d); | ||
622 | if (hwif == NULL) | ||
623 | goto err; | ||
624 | |||
624 | ide_init_port_hw(hwif, &hw); | 625 | ide_init_port_hw(hwif, &hw); |
625 | 626 | ||
626 | /* The IOC4 uses MMIO rather than Port IO. */ | 627 | /* The IOC4 uses MMIO rather than Port IO. */ |
@@ -637,6 +638,10 @@ sgiioc4_ide_setup_pci_device(struct pci_dev *dev) | |||
637 | return -EIO; | 638 | return -EIO; |
638 | 639 | ||
639 | return 0; | 640 | return 0; |
641 | err: | ||
642 | release_mem_region(cmd_phys_base, IOC4_CMD_CTL_BLK_SIZE); | ||
643 | iounmap(virt_base); | ||
644 | return -ENOMEM; | ||
640 | } | 645 | } |
641 | 646 | ||
642 | static unsigned int __devinit | 647 | static unsigned int __devinit |