ide: add struct ide_port_ops (take 2)
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / ide / mips / au1xxx-ide.c
index 85c016bdfd38b4948770c2a60ae7a5bc42b6ca38..51dddc0f154ef7df310194b0966278d350003efe 100644 (file)
@@ -543,7 +543,16 @@ static void auide_setup_ports(hw_regs_t *hw, _auide_hwif *ahwif)
        *ata_regs = ahwif->regbase + (14 << AU1XXX_ATA_REG_OFFSET);
 }
 
+static const struct ide_port_ops au1xxx_port_ops = {
+       .set_pio_mode           = au1xxx_set_pio_mode,
+       .set_dma_mode           = auide_set_dma_mode,
+#ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
+       .mdma_filter            = auide_mdma_filter,
+#endif
+};
+
 static const struct ide_port_info au1xxx_port_info = {
+       .port_ops               = &au1xxx_port_ops,
        .host_flags             = IDE_HFLAG_POST_SET_MODE |
                                  IDE_HFLAG_NO_DMA | /* no SFF-style DMA */
                                  IDE_HFLAG_NO_IO_32BIT |
@@ -599,9 +608,11 @@ static int au_ide_probe(struct device *dev)
                goto out;
        }
 
-       /* FIXME:  This might possibly break PCMCIA IDE devices */
-
-       hwif                            = &ide_hwifs[pdev->id];
+       hwif = ide_find_port();
+       if (hwif == NULL) {
+               ret = -ENOENT;
+               goto out;
+       }
 
        memset(&hw, 0, sizeof(hw));
        auide_setup_ports(&hw, ahwif);
@@ -613,9 +624,6 @@ static int au_ide_probe(struct device *dev)
 
        hwif->dev = dev;
 
-       /* hold should be on in all cases */
-       hwif->hold                      = 1;
-
        hwif->mmio  = 1;
 
        /* If the user has selected DDMA assisted copies,
@@ -626,15 +634,8 @@ static int au_ide_probe(struct device *dev)
        hwif->INSW                      = auide_insw;
        hwif->OUTSW                     = auide_outsw;
 #endif
-
-       hwif->set_pio_mode              = &au1xxx_set_pio_mode;
-       hwif->set_dma_mode              = &auide_set_dma_mode;
-
 #ifdef CONFIG_BLK_DEV_IDE_AU1XXX_MDMA2_DBDMA
        hwif->dma_timeout               = &auide_dma_timeout;
-
-       hwif->mdma_filter               = &auide_mdma_filter;
-
        hwif->dma_host_set              = &auide_dma_host_set;
        hwif->dma_exec_cmd              = &auide_dma_exec_cmd;
        hwif->dma_start                 = &auide_dma_start;
@@ -673,7 +674,7 @@ static int au_ide_remove(struct device *dev)
        ide_hwif_t *hwif = dev_get_drvdata(dev);
        _auide_hwif *ahwif = &auide_hwif;
 
-       ide_unregister(hwif->index, 0, 0);
+       ide_unregister(hwif->index);
 
        iounmap((void *)ahwif->regbase);