diff options
Diffstat (limited to 'drivers/ide/pci/sis5513.c')
-rw-r--r-- | drivers/ide/pci/sis5513.c | 59 |
1 files changed, 6 insertions, 53 deletions
diff --git a/drivers/ide/pci/sis5513.c b/drivers/ide/pci/sis5513.c index 1afff659ab55..2ba0669f36a1 100644 --- a/drivers/ide/pci/sis5513.c +++ b/drivers/ide/pci/sis5513.c | |||
@@ -667,67 +667,20 @@ static int config_chipset_for_dma (ide_drive_t *drive) | |||
667 | return ide_dma_enable(drive); | 667 | return ide_dma_enable(drive); |
668 | } | 668 | } |
669 | 669 | ||
670 | static int sis5513_config_drive_xfer_rate (ide_drive_t *drive) | 670 | static int sis5513_config_xfer_rate(ide_drive_t *drive) |
671 | { | 671 | { |
672 | ide_hwif_t *hwif = HWIF(drive); | 672 | config_art_rwp_pio(drive, 5); |
673 | struct hd_driveid *id = drive->id; | ||
674 | 673 | ||
675 | drive->init_speed = 0; | 674 | drive->init_speed = 0; |
676 | 675 | ||
677 | if (id && (id->capability & 1) && drive->autodma) { | 676 | if (ide_use_dma(drive) && config_chipset_for_dma(drive)) |
678 | 677 | return 0; | |
679 | if (ide_use_dma(drive)) { | ||
680 | if (config_chipset_for_dma(drive)) | ||
681 | return hwif->ide_dma_on(drive); | ||
682 | } | ||
683 | |||
684 | goto fast_ata_pio; | ||
685 | 678 | ||
686 | } else if ((id->capability & 8) || (id->field_valid & 2)) { | 679 | if (ide_use_fast_pio(drive)) |
687 | fast_ata_pio: | ||
688 | sis5513_tune_drive(drive, 5); | 680 | sis5513_tune_drive(drive, 5); |
689 | return hwif->ide_dma_off_quietly(drive); | ||
690 | } | ||
691 | /* IORDY not supported */ | ||
692 | return 0; | ||
693 | } | ||
694 | |||
695 | /* initiates/aborts (U)DMA read/write operations on a drive. */ | ||
696 | static int sis5513_config_xfer_rate (ide_drive_t *drive) | ||
697 | { | ||
698 | config_drive_art_rwp(drive); | ||
699 | config_art_rwp_pio(drive, 5); | ||
700 | return sis5513_config_drive_xfer_rate(drive); | ||
701 | } | ||
702 | |||
703 | /* | ||
704 | Future simpler config_xfer_rate : | ||
705 | When ide_find_best_mode is made bad-drive aware | ||
706 | - remove config_drive_xfer_rate and config_chipset_for_dma, | ||
707 | - replace config_xfer_rate with the following | ||
708 | |||
709 | static int sis5513_config_xfer_rate (ide_drive_t *drive) | ||
710 | { | ||
711 | u16 w80 = HWIF(drive)->udma_four; | ||
712 | u16 speed; | ||
713 | |||
714 | config_drive_art_rwp(drive); | ||
715 | config_art_rwp_pio(drive, 5); | ||
716 | |||
717 | speed = ide_find_best_mode(drive, | ||
718 | XFER_PIO | XFER_EPIO | XFER_SWDMA | XFER_MWDMA | | ||
719 | (chipset_family >= ATA_33 ? XFER_UDMA : 0) | | ||
720 | (w80 && chipset_family >= ATA_66 ? XFER_UDMA_66 : 0) | | ||
721 | (w80 && chipset_family >= ATA_100a ? XFER_UDMA_100 : 0) | | ||
722 | (w80 && chipset_family >= ATA_133a ? XFER_UDMA_133 : 0)); | ||
723 | |||
724 | sis5513_tune_chipset(drive, speed); | ||
725 | 681 | ||
726 | if (drive->autodma && (speed & XFER_MODE) != XFER_PIO) | 682 | return -1; |
727 | return HWIF(drive)->ide_dma_on(drive); | ||
728 | return HWIF(drive)->ide_dma_off_quietly(drive); | ||
729 | } | 683 | } |
730 | */ | ||
731 | 684 | ||
732 | /* Chip detection and general config */ | 685 | /* Chip detection and general config */ |
733 | static unsigned int __devinit init_chipset_sis5513 (struct pci_dev *dev, const char *name) | 686 | static unsigned int __devinit init_chipset_sis5513 (struct pci_dev *dev, const char *name) |