aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ide/pci/siimage.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/ide/pci/siimage.c')
-rw-r--r--drivers/ide/pci/siimage.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/drivers/ide/pci/siimage.c b/drivers/ide/pci/siimage.c
index c9ecab8aeb61..3e4b99380709 100644
--- a/drivers/ide/pci/siimage.c
+++ b/drivers/ide/pci/siimage.c
@@ -735,14 +735,14 @@ static void __devinit init_iops_siimage(ide_hwif_t *hwif)
735} 735}
736 736
737/** 737/**
738 * ata66_siimage - check for 80 pin cable 738 * sil_cable_detect - cable detection
739 * @hwif: interface to check 739 * @hwif: interface to check
740 * 740 *
741 * Check for the presence of an ATA66 capable cable on the 741 * Check for the presence of an ATA66 capable cable on the
742 * interface. 742 * interface.
743 */ 743 */
744 744
745static u8 __devinit ata66_siimage(ide_hwif_t *hwif) 745static u8 __devinit sil_cable_detect(ide_hwif_t *hwif)
746{ 746{
747 struct pci_dev *dev = to_pci_dev(hwif->dev); 747 struct pci_dev *dev = to_pci_dev(hwif->dev);
748 unsigned long addr = siimage_selreg(hwif, 0); 748 unsigned long addr = siimage_selreg(hwif, 0);
@@ -769,25 +769,14 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif)
769{ 769{
770 u8 sata = is_sata(hwif); 770 u8 sata = is_sata(hwif);
771 771
772 hwif->set_pio_mode = &sil_set_pio_mode;
773 hwif->set_dma_mode = &sil_set_dma_mode;
774 hwif->quirkproc = &sil_quirkproc;
775
776 if (sata) { 772 if (sata) {
777 static int first = 1; 773 static int first = 1;
778 774
779 hwif->reset_poll = &sil_sata_reset_poll;
780 hwif->pre_reset = &sil_sata_pre_reset;
781 hwif->udma_filter = &sil_sata_udma_filter;
782
783 if (first) { 775 if (first) {
784 printk(KERN_INFO "siimage: For full SATA support you should use the libata sata_sil module.\n"); 776 printk(KERN_INFO "siimage: For full SATA support you should use the libata sata_sil module.\n");
785 first = 0; 777 first = 0;
786 } 778 }
787 } else 779 }
788 hwif->udma_filter = &sil_pata_udma_filter;
789
790 hwif->cable_detect = ata66_siimage;
791 780
792 if (hwif->dma_base == 0) 781 if (hwif->dma_base == 0)
793 return; 782 return;
@@ -802,21 +791,40 @@ static void __devinit init_hwif_siimage(ide_hwif_t *hwif)
802 } 791 }
803} 792}
804 793
805#define DECLARE_SII_DEV(name_str) \ 794static const struct ide_port_ops sil_pata_port_ops = {
795 .set_pio_mode = sil_set_pio_mode,
796 .set_dma_mode = sil_set_dma_mode,
797 .quirkproc = sil_quirkproc,
798 .udma_filter = sil_pata_udma_filter,
799 .cable_detect = sil_cable_detect,
800};
801
802static const struct ide_port_ops sil_sata_port_ops = {
803 .set_pio_mode = sil_set_pio_mode,
804 .set_dma_mode = sil_set_dma_mode,
805 .reset_poll = sil_sata_reset_poll,
806 .pre_reset = sil_sata_pre_reset,
807 .quirkproc = sil_quirkproc,
808 .udma_filter = sil_sata_udma_filter,
809 .cable_detect = sil_cable_detect,
810};
811
812#define DECLARE_SII_DEV(name_str, p_ops) \
806 { \ 813 { \
807 .name = name_str, \ 814 .name = name_str, \
808 .init_chipset = init_chipset_siimage, \ 815 .init_chipset = init_chipset_siimage, \
809 .init_iops = init_iops_siimage, \ 816 .init_iops = init_iops_siimage, \
810 .init_hwif = init_hwif_siimage, \ 817 .init_hwif = init_hwif_siimage, \
818 .port_ops = p_ops, \
811 .pio_mask = ATA_PIO4, \ 819 .pio_mask = ATA_PIO4, \
812 .mwdma_mask = ATA_MWDMA2, \ 820 .mwdma_mask = ATA_MWDMA2, \
813 .udma_mask = ATA_UDMA6, \ 821 .udma_mask = ATA_UDMA6, \
814 } 822 }
815 823
816static const struct ide_port_info siimage_chipsets[] __devinitdata = { 824static const struct ide_port_info siimage_chipsets[] __devinitdata = {
817 /* 0 */ DECLARE_SII_DEV("SiI680"), 825 /* 0 */ DECLARE_SII_DEV("SiI680", &sil_pata_port_ops),
818 /* 1 */ DECLARE_SII_DEV("SiI3112 Serial ATA"), 826 /* 1 */ DECLARE_SII_DEV("SiI3112 Serial ATA", &sil_sata_port_ops),
819 /* 2 */ DECLARE_SII_DEV("Adaptec AAR-1210SA") 827 /* 2 */ DECLARE_SII_DEV("Adaptec AAR-1210SA", &sil_sata_port_ops)
820}; 828};
821 829
822/** 830/**