From: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx> Subject: [PATCH] pdc202xx_old: convert to ide2libata Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@xxxxxxxxx> --- drivers/ata/pata_pdc202xx_old.h | 12 ++++++ drivers/ide/pdc202xx_old.c | 80 +++------------------------------------- 2 files changed, 18 insertions(+), 74 deletions(-) Index: b/drivers/ata/pata_pdc202xx_old.h =================================================================== --- a/drivers/ata/pata_pdc202xx_old.h +++ b/drivers/ata/pata_pdc202xx_old.h @@ -1,7 +1,11 @@ static int pdc2026x_cable_detect(struct ata_port *ap) { +#ifndef __IDE2LIBATA struct pci_dev *pdev = to_pci_dev(ap->host->dev); +#else + struct pci_dev *pdev = to_pci_dev(ap->dev); +#endif u16 cis; pci_read_config_word(pdev, 0x50, &cis); @@ -23,7 +27,11 @@ static int pdc2026x_cable_detect(struct static void pdc202xx_configure_piomode(struct ata_port *ap, struct ata_device *adev, int pio) { +#ifndef __IDE2LIBATA struct pci_dev *pdev = to_pci_dev(ap->host->dev); +#else + struct pci_dev *pdev = to_pci_dev(ap->dev); +#endif int port = 0x60 + 8 * ap->port_no + 4 * adev->devno; static u16 pio_timing[5] = { 0x0913, 0x050C , 0x0308, 0x0206, 0x0104 @@ -70,7 +78,11 @@ static void pdc202xx_set_piomode(struct static void pdc202xx_set_dmamode(struct ata_port *ap, struct ata_device *adev) { +#ifndef __IDE2LIBATA struct pci_dev *pdev = to_pci_dev(ap->host->dev); +#else + struct pci_dev *pdev = to_pci_dev(ap->dev); +#endif int port = 0x60 + 8 * ap->port_no + 4 * adev->devno; static u8 udma_timing[6][2] = { { 0x60, 0x03 }, /* 33 Mhz Clock */ Index: b/drivers/ide/pdc202xx_old.c =================================================================== --- a/drivers/ide/pdc202xx_old.c +++ b/drivers/ide/pdc202xx_old.c @@ -21,66 +21,8 @@ #define DRV_NAME "pdc202xx_old" -static void pdc202xx_set_mode(ide_hwif_t *hwif, ide_drive_t *drive) -{ - struct pci_dev *dev = to_pci_dev(hwif->dev); - u8 drive_pci = 0x60 + (drive->dn << 2); - const u8 speed = drive->dma_mode; - - u8 AP = 0, BP = 0, CP = 0; - u8 TA = 0, TB = 0, TC = 0; - - pci_read_config_byte(dev, drive_pci, &AP); - pci_read_config_byte(dev, drive_pci + 1, &BP); - pci_read_config_byte(dev, drive_pci + 2, &CP); - - switch(speed) { - case XFER_UDMA_5: - case XFER_UDMA_4: TB = 0x20; TC = 0x01; break; - case XFER_UDMA_2: TB = 0x20; TC = 0x01; break; - case XFER_UDMA_3: - case XFER_UDMA_1: TB = 0x40; TC = 0x02; break; - case XFER_UDMA_0: - case XFER_MW_DMA_2: TB = 0x60; TC = 0x03; break; - case XFER_MW_DMA_1: TB = 0x60; TC = 0x04; break; - case XFER_MW_DMA_0: TB = 0xE0; TC = 0x0F; break; - case XFER_PIO_4: TA = 0x01; TB = 0x04; break; - case XFER_PIO_3: TA = 0x02; TB = 0x06; break; - case XFER_PIO_2: TA = 0x03; TB = 0x08; break; - case XFER_PIO_1: TA = 0x05; TB = 0x0C; break; - case XFER_PIO_0: - default: TA = 0x09; TB = 0x13; break; - } - - if (speed < XFER_SW_DMA_0) { - /* - * preserve SYNC_INT / ERDDY_EN bits while clearing - * Prefetch_EN / IORDY_EN / PA[3:0] bits of register A - */ - AP &= ~0x3f; - if (ide_pio_need_iordy(drive, speed - XFER_PIO_0)) - AP |= 0x20; /* set IORDY_EN bit */ - if (drive->media == ide_disk) - AP |= 0x10; /* set Prefetch_EN bit */ - /* clear PB[4:0] bits of register B */ - BP &= ~0x1f; - pci_write_config_byte(dev, drive_pci, AP | TA); - pci_write_config_byte(dev, drive_pci + 1, BP | TB); - } else { - /* clear MB[2:0] bits of register B */ - BP &= ~0xe0; - /* clear MC[3:0] bits of register C */ - CP &= ~0x0f; - pci_write_config_byte(dev, drive_pci + 1, BP | TB); - pci_write_config_byte(dev, drive_pci + 2, CP | TC); - } -} - -static void pdc202xx_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) -{ - drive->dma_mode = drive->pio_mode; - pdc202xx_set_mode(hwif, drive); -} +#include <linux/ide2libata.h> +#include "../ata/pata_pdc202xx_old.h" static int pdc202xx_test_irq(ide_hwif_t *hwif) { @@ -103,16 +45,6 @@ static int pdc202xx_test_irq(ide_hwif_t } } -static int pdc2026x_cable_detect(ide_hwif_t *hwif) -{ - struct pci_dev *dev = to_pci_dev(hwif->dev); - u16 CIS, mask = hwif->channel ? (1 << 11) : (1 << 10); - - pci_read_config_word(dev, 0x50, &CIS); - - return (CIS & mask) ? ATA_CBL_PATA40 : ATA_CBL_PATA80; -} - /* * Set the control register to use the 66MHz system * clock for UDMA 3/4/5 mode operation when necessary. @@ -233,14 +165,14 @@ static void __devinit pdc202ata4_fixup_i IDE_HFLAG_OFF_BOARD) static const struct ide_port_ops pdc20246_port_ops = { - .set_pio_mode = pdc202xx_set_pio_mode, - .set_dma_mode = pdc202xx_set_mode, + .set_pio_mode = pdc202xx_set_piomode, + .set_dma_mode = pdc202xx_set_dmamode, .test_irq = pdc202xx_test_irq, }; static const struct ide_port_ops pdc2026x_port_ops = { - .set_pio_mode = pdc202xx_set_pio_mode, - .set_dma_mode = pdc202xx_set_mode, + .set_pio_mode = pdc202xx_set_piomode, + .set_dma_mode = pdc202xx_set_dmamode, .cable_detect = pdc2026x_cable_detect, }; -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html