Merge branch 'upstream-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jgarzi...
[pandora-kernel.git] / drivers / ata / pata_scc.c
index 1b41296..d9db3f8 100644 (file)
@@ -265,7 +265,7 @@ unsigned long scc_mode_filter(struct ata_device *adev, unsigned long mask)
                printk(KERN_INFO "%s: limit ATAPI UDMA to UDMA4\n", DRV_NAME);
                mask &= ~(0xE0 << ATA_SHIFT_UDMA);
        }
-       return ata_bmdma_mode_filter(adev, mask);
+       return mask;
 }
 
 /**
@@ -415,6 +415,17 @@ static void scc_dev_select (struct ata_port *ap, unsigned int device)
        ata_sff_pause(ap);
 }
 
+/**
+ *     scc_set_devctl - Write device control reg
+ *     @ap: port where the device is
+ *     @ctl: value to write
+ */
+
+static void scc_set_devctl(struct ata_port *ap, u8 ctl)
+{
+       out_be32(ap->ioaddr.ctl_addr, ctl);
+}
+
 /**
  *     scc_bmdma_setup - Set up PCI IDE BMDMA transaction
  *     @qc: Info associated with this ATA transaction.
@@ -430,7 +441,7 @@ static void scc_bmdma_setup (struct ata_queued_cmd *qc)
        void __iomem *mmio = ap->ioaddr.bmdma_addr;
 
        /* load PRD table addr */
-       out_be32(mmio + SCC_DMA_TABLE_OFS, ap->prd_dma);
+       out_be32(mmio + SCC_DMA_TABLE_OFS, ap->bmdma_prd_dma);
 
        /* specify data direction, triple-check start bit is clear */
        dmactl = in_be32(mmio + SCC_DMA_CMD);
@@ -816,54 +827,6 @@ static unsigned int scc_data_xfer (struct ata_device *dev, unsigned char *buf,
        return words << 1;
 }
 
-/**
- *     scc_irq_on - Enable interrupts on a port.
- *     @ap: Port on which interrupts are enabled.
- *
- *     Note: Original code is ata_sff_irq_on().
- */
-
-static u8 scc_irq_on (struct ata_port *ap)
-{
-       struct ata_ioports *ioaddr = &ap->ioaddr;
-       u8 tmp;
-
-       ap->ctl &= ~ATA_NIEN;
-       ap->last_ctl = ap->ctl;
-
-       out_be32(ioaddr->ctl_addr, ap->ctl);
-       tmp = ata_wait_idle(ap);
-
-       ap->ops->sff_irq_clear(ap);
-
-       return tmp;
-}
-
-/**
- *     scc_freeze - Freeze BMDMA controller port
- *     @ap: port to freeze
- *
- *     Note: Original code is ata_sff_freeze().
- */
-
-static void scc_freeze (struct ata_port *ap)
-{
-       struct ata_ioports *ioaddr = &ap->ioaddr;
-
-       ap->ctl |= ATA_NIEN;
-       ap->last_ctl = ap->ctl;
-
-       out_be32(ioaddr->ctl_addr, ap->ctl);
-
-       /* Under certain circumstances, some controllers raise IRQ on
-        * ATA_NIEN manipulation.  Also, many controllers fail to mask
-        * previously pending IRQ on ATA_NIEN assertion.  Clear it.
-        */
-       ap->ops->sff_check_status(ap);
-
-       ap->ops->sff_irq_clear(ap);
-}
-
 /**
  *     scc_pata_prereset - prepare for reset
  *     @ap: ATA port to be reset
@@ -903,8 +866,7 @@ static void scc_postreset(struct ata_link *link, unsigned int *classes)
        }
 
        /* set up device control */
-       if (ap->ioaddr.ctl_addr)
-               out_be32(ap->ioaddr.ctl_addr, ap->ctl);
+       out_be32(ap->ioaddr.ctl_addr, ap->ctl);
 
        DPRINTK("EXIT\n");
 }
@@ -913,7 +875,7 @@ static void scc_postreset(struct ata_link *link, unsigned int *classes)
  *     scc_irq_clear - Clear PCI IDE BMDMA interrupt.
  *     @ap: Port associated with this ATA transaction.
  *
- *     Note: Original code is ata_sff_irq_clear().
+ *     Note: Original code is ata_bmdma_irq_clear().
  */
 
 static void scc_irq_clear (struct ata_port *ap)
@@ -930,7 +892,7 @@ static void scc_irq_clear (struct ata_port *ap)
  *     scc_port_start - Set port up for dma.
  *     @ap: Port to initialize
  *
- *     Allocate space for PRD table using ata_port_start().
+ *     Allocate space for PRD table using ata_bmdma_port_start().
  *     Set PRD table address for PTERADD. (PRD Transfer End Read)
  */
 
@@ -939,11 +901,11 @@ static int scc_port_start (struct ata_port *ap)
        void __iomem *mmio = ap->ioaddr.bmdma_addr;
        int rc;
 
-       rc = ata_port_start(ap);
+       rc = ata_bmdma_port_start(ap);
        if (rc)
                return rc;
 
-       out_be32(mmio + SCC_DMA_PTERADD, ap->prd_dma);
+       out_be32(mmio + SCC_DMA_PTERADD, ap->bmdma_prd_dma);
        return 0;
 }
 
@@ -978,6 +940,7 @@ static struct ata_port_operations scc_pata_ops = {
        .sff_check_status       = scc_check_status,
        .sff_check_altstatus    = scc_check_altstatus,
        .sff_dev_select         = scc_dev_select,
+       .sff_set_devctl         = scc_set_devctl,
 
        .bmdma_setup            = scc_bmdma_setup,
        .bmdma_start            = scc_bmdma_start,
@@ -985,14 +948,11 @@ static struct ata_port_operations scc_pata_ops = {
        .bmdma_status           = scc_bmdma_status,
        .sff_data_xfer          = scc_data_xfer,
 
-       .freeze                 = scc_freeze,
        .prereset               = scc_pata_prereset,
        .softreset              = scc_softreset,
        .postreset              = scc_postreset,
-       .post_internal_cmd      = scc_bmdma_stop,
 
        .sff_irq_clear          = scc_irq_clear,
-       .sff_irq_on             = scc_irq_on,
 
        .port_start             = scc_port_start,
        .port_stop              = scc_port_stop,
@@ -1145,7 +1105,7 @@ static int scc_init_one (struct pci_dev *pdev, const struct pci_device_id *ent)
        if (rc)
                return rc;
 
-       return ata_host_activate(host, pdev->irq, ata_sff_interrupt,
+       return ata_host_activate(host, pdev->irq, ata_bmdma_interrupt,
                                 IRQF_SHARED, &scc_sht);
 }