aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata/sata_sil.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ata/sata_sil.c')
-rw-r--r--drivers/ata/sata_sil.c47
1 files changed, 16 insertions, 31 deletions
diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c
index 1f3fdcf29876..00f2465dcdce 100644
--- a/drivers/ata/sata_sil.c
+++ b/drivers/ata/sata_sil.c
@@ -210,8 +210,6 @@ static const struct ata_port_operations sil_ops = {
210 .scr_read = sil_scr_read, 210 .scr_read = sil_scr_read,
211 .scr_write = sil_scr_write, 211 .scr_write = sil_scr_write,
212 .port_start = ata_port_start, 212 .port_start = ata_port_start,
213 .port_stop = ata_port_stop,
214 .host_stop = ata_pci_host_stop,
215}; 213};
216 214
217static const struct ata_port_info sil_port_info[] = { 215static const struct ata_port_info sil_port_info[] = {
@@ -621,38 +619,36 @@ static void sil_init_controller(struct pci_dev *pdev,
621static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent) 619static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
622{ 620{
623 static int printed_version; 621 static int printed_version;
624 struct ata_probe_ent *probe_ent = NULL; 622 struct device *dev = &pdev->dev;
623 struct ata_probe_ent *probe_ent;
625 unsigned long base; 624 unsigned long base;
626 void __iomem *mmio_base; 625 void __iomem *mmio_base;
627 int rc; 626 int rc;
628 unsigned int i; 627 unsigned int i;
629 int pci_dev_busy = 0;
630 628
631 if (!printed_version++) 629 if (!printed_version++)
632 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n"); 630 dev_printk(KERN_DEBUG, &pdev->dev, "version " DRV_VERSION "\n");
633 631
634 rc = pci_enable_device(pdev); 632 rc = pcim_enable_device(pdev);
635 if (rc) 633 if (rc)
636 return rc; 634 return rc;
637 635
638 rc = pci_request_regions(pdev, DRV_NAME); 636 rc = pci_request_regions(pdev, DRV_NAME);
639 if (rc) { 637 if (rc) {
640 pci_dev_busy = 1; 638 pcim_pin_device(pdev);
641 goto err_out; 639 return rc;
642 } 640 }
643 641
644 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK); 642 rc = pci_set_dma_mask(pdev, ATA_DMA_MASK);
645 if (rc) 643 if (rc)
646 goto err_out_regions; 644 return rc;
647 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK); 645 rc = pci_set_consistent_dma_mask(pdev, ATA_DMA_MASK);
648 if (rc) 646 if (rc)
649 goto err_out_regions; 647 return rc;
650 648
651 probe_ent = kzalloc(sizeof(*probe_ent), GFP_KERNEL); 649 probe_ent = devm_kzalloc(dev, sizeof(*probe_ent), GFP_KERNEL);
652 if (probe_ent == NULL) { 650 if (probe_ent == NULL)
653 rc = -ENOMEM; 651 return -ENOMEM;
654 goto err_out_regions;
655 }
656 652
657 INIT_LIST_HEAD(&probe_ent->node); 653 INIT_LIST_HEAD(&probe_ent->node);
658 probe_ent->dev = pci_dev_to_dev(pdev); 654 probe_ent->dev = pci_dev_to_dev(pdev);
@@ -666,11 +662,9 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
666 probe_ent->irq_flags = IRQF_SHARED; 662 probe_ent->irq_flags = IRQF_SHARED;
667 probe_ent->port_flags = sil_port_info[ent->driver_data].flags; 663 probe_ent->port_flags = sil_port_info[ent->driver_data].flags;
668 664
669 mmio_base = pci_iomap(pdev, 5, 0); 665 mmio_base = pcim_iomap(pdev, 5, 0);
670 if (mmio_base == NULL) { 666 if (mmio_base == NULL)
671 rc = -ENOMEM; 667 return -ENOMEM;
672 goto err_out_free_ent;
673 }
674 668
675 probe_ent->mmio_base = mmio_base; 669 probe_ent->mmio_base = mmio_base;
676 670
@@ -690,20 +684,11 @@ static int sil_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
690 684
691 pci_set_master(pdev); 685 pci_set_master(pdev);
692 686
693 /* FIXME: check ata_device_add return value */ 687 if (!ata_device_add(probe_ent))
694 ata_device_add(probe_ent); 688 return -ENODEV;
695 kfree(probe_ent);
696 689
690 devm_kfree(dev, probe_ent);
697 return 0; 691 return 0;
698
699err_out_free_ent:
700 kfree(probe_ent);
701err_out_regions:
702 pci_release_regions(pdev);
703err_out:
704 if (!pci_dev_busy)
705 pci_disable_device(pdev);
706 return rc;
707} 692}
708 693
709#ifdef CONFIG_PM 694#ifdef CONFIG_PM