Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / drivers / ide / pci / triflex.c
index 52e088e..56d8493 100644 (file)
@@ -27,7 +27,6 @@
  *     Not publically available.
  */
 
-#include <linux/config.h>
 #include <linux/types.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/ide.h>
 #include <linux/init.h>
 
-static struct pci_dev *triflex_dev;
-
-#ifdef CONFIG_PROC_FS
-static int triflex_get_info(char *buf, char **addr, off_t offset, int count)
-{
-       char *p = buf;
-       int len;
-
-       struct pci_dev *dev     = triflex_dev;
-       unsigned long bibma = pci_resource_start(dev, 4);
-       u8  c0 = 0, c1 = 0;
-       u32 pri_timing, sec_timing;
-
-       p += sprintf(p, "\n                                Compaq Triflex Chipset\n");
-       
-       pci_read_config_dword(dev, 0x70, &pri_timing);
-       pci_read_config_dword(dev, 0x74, &sec_timing);
-
-       /*
-        * at that point bibma+0x2 et bibma+0xa are byte registers
-        * to investigate:
-        */
-       c0 = inb((unsigned short)bibma + 0x02);
-       c1 = inb((unsigned short)bibma + 0x0a);
-
-       p += sprintf(p, "--------------- Primary Channel "
-                       "---------------- Secondary Channel "
-                       "-------------\n");
-       p += sprintf(p, "                %sabled "
-                       "                        %sabled\n",
-                       (c0&0x80) ? "dis" : " en",
-                       (c1&0x80) ? "dis" : " en");
-       p += sprintf(p, "--------------- drive0 --------- drive1 "
-                       "-------- drive0 ---------- drive1 ------\n");
-       p += sprintf(p, "DMA enabled:    %s              %s "
-                       "            %s               %s\n",
-                       (c0&0x20) ? "yes" : "no ",
-                       (c0&0x40) ? "yes" : "no ",
-                       (c1&0x20) ? "yes" : "no ",
-                       (c1&0x40) ? "yes" : "no " );
-
-       p += sprintf(p, "DMA\n");
-       p += sprintf(p, "PIO\n");
-
-       len = (p - buf) - offset;
-       *addr = buf + offset;
-       
-       return len > count ? count : len;
-}
-#endif
-
 static int triflex_tune_chipset(ide_drive_t *drive, u8 xferspeed)
 {
        ide_hwif_t *hwif = HWIF(drive);
@@ -169,28 +117,19 @@ static int triflex_config_drive_xfer_rate(ide_drive_t *drive)
 {
        ide_hwif_t *hwif        = HWIF(drive);
        struct hd_driveid *id   = drive->id;
-       
-       if (id && (id->capability & 1) && drive->autodma) {
-               if (__ide_dma_bad_drive(drive))
-                       goto tune_pio;
-               if (id->field_valid & 2) {
-                       if ((id->dma_mword & hwif->mwdma_mask) ||
-                               (id->dma_1word & hwif->swdma_mask)) {
-                               if (!triflex_config_drive_for_dma(drive))
-                                       goto tune_pio;
-                       }
-               } else 
-                       goto tune_pio;
-       } else {
-tune_pio:
-               hwif->tuneproc(drive, 255);
-               return hwif->ide_dma_off_quietly(drive);
+
+       if ((id->capability & 1) && drive->autodma) {
+               if (ide_use_dma(drive)) {
+                       if (triflex_config_drive_for_dma(drive))
+                               return hwif->ide_dma_on(drive);
+               }
        }
 
-       return hwif->ide_dma_on(drive);
+       hwif->tuneproc(drive, 255);
+       return hwif->ide_dma_off_quietly(drive);
 }
 
-static void __init init_hwif_triflex(ide_hwif_t *hwif)
+static void __devinit init_hwif_triflex(ide_hwif_t *hwif)
 {
        hwif->tuneproc = &triflex_tune_drive;
        hwif->speedproc = &triflex_tune_chipset;
@@ -206,18 +145,8 @@ static void __init init_hwif_triflex(ide_hwif_t *hwif)
        hwif->drives[1].autodma = hwif->autodma;
 }
 
-static unsigned int __init init_chipset_triflex(struct pci_dev *dev, 
-               const char *name) 
-{
-#ifdef CONFIG_PROC_FS
-       ide_pci_create_host_proc("triflex", triflex_get_info);
-#endif
-       return 0;       
-}
-
 static ide_pci_device_t triflex_device __devinitdata = {
        .name           = "TRIFLEX",
-       .init_chipset   = init_chipset_triflex,
        .init_hwif      = init_hwif_triflex,
        .channels       = 2,
        .autodma        = AUTODMA,
@@ -228,10 +157,7 @@ static ide_pci_device_t triflex_device __devinitdata = {
 static int __devinit triflex_init_one(struct pci_dev *dev, 
                const struct pci_device_id *id)
 {
-       ide_setup_pci_device(dev, &triflex_device);
-       triflex_dev = dev;
-
-       return 0;
+       return ide_setup_pci_device(dev, &triflex_device);
 }
 
 static struct pci_device_id triflex_pci_tbl[] = {
@@ -242,7 +168,7 @@ static struct pci_device_id triflex_pci_tbl[] = {
 MODULE_DEVICE_TABLE(pci, triflex_pci_tbl);
 
 static struct pci_driver driver = {
-       .name           = "TRIFLEX IDE",
+       .name           = "TRIFLEX_IDE",
        .id_table       = triflex_pci_tbl,
        .probe          = triflex_init_one,
 };