Lines Matching +full:drive +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0-only
80 static void cs5536_program_dtc(ide_drive_t *drive, u8 tim) in cs5536_program_dtc() argument
82 struct pci_dev *pdev = to_pci_dev(drive->hwif->dev); in cs5536_program_dtc()
83 int dshift = (drive->dn & 1) ? IDE_D1_SHIFT : IDE_D0_SHIFT; in cs5536_program_dtc()
93 * cs5536_cable_detect - detect cable type
103 struct pci_dev *pdev = to_pci_dev(hwif->dev); in cs5536_cable_detect()
115 * cs5536_set_pio_mode - PIO timing setup
117 * @drive: ATA device
120 static void cs5536_set_pio_mode(ide_hwif_t *hwif, ide_drive_t *drive) in cs5536_set_pio_mode() argument
134 struct pci_dev *pdev = to_pci_dev(hwif->dev); in cs5536_set_pio_mode()
135 ide_drive_t *pair = ide_get_pair_dev(drive); in cs5536_set_pio_mode()
136 int cshift = (drive->dn & 1) ? IDE_CAST_D1_SHIFT : IDE_CAST_D0_SHIFT; in cs5536_set_pio_mode()
137 unsigned long timings = (unsigned long)ide_get_drivedata(drive); in cs5536_set_pio_mode()
139 const u8 pio = drive->pio_mode - XFER_PIO_0; in cs5536_set_pio_mode()
143 cmd_pio = min_t(u8, pio, pair->pio_mode - XFER_PIO_0); in cs5536_set_pio_mode()
147 ide_set_drivedata(drive, (void *)timings); in cs5536_set_pio_mode()
149 cs5536_program_dtc(drive, drv_timings[pio]); in cs5536_set_pio_mode()
163 * cs5536_set_dma_mode - DMA timing setup
165 * @drive: ATA device
168 static void cs5536_set_dma_mode(ide_hwif_t *hwif, ide_drive_t *drive) in cs5536_set_dma_mode() argument
178 struct pci_dev *pdev = to_pci_dev(hwif->dev); in cs5536_set_dma_mode()
179 int dshift = (drive->dn & 1) ? IDE_D1_SHIFT : IDE_D0_SHIFT; in cs5536_set_dma_mode()
180 unsigned long timings = (unsigned long)ide_get_drivedata(drive); in cs5536_set_dma_mode()
182 const u8 mode = drive->dma_mode; in cs5536_set_dma_mode() local
186 if (mode >= XFER_UDMA_0) { in cs5536_set_dma_mode()
188 etc |= udma_timings[mode - XFER_UDMA_0] << dshift; in cs5536_set_dma_mode()
192 timings |= mwdma_timings[mode - XFER_MW_DMA_0] << 8; in cs5536_set_dma_mode()
193 ide_set_drivedata(drive, (void *)timings); in cs5536_set_dma_mode()
199 static void cs5536_dma_start(ide_drive_t *drive) in cs5536_dma_start() argument
201 unsigned long timings = (unsigned long)ide_get_drivedata(drive); in cs5536_dma_start()
203 if (drive->current_speed < XFER_UDMA_0 && in cs5536_dma_start()
205 cs5536_program_dtc(drive, timings >> 8); in cs5536_dma_start()
207 ide_dma_start(drive); in cs5536_dma_start()
210 static int cs5536_dma_end(ide_drive_t *drive) in cs5536_dma_end() argument
212 int ret = ide_dma_end(drive); in cs5536_dma_end()
213 unsigned long timings = (unsigned long)ide_get_drivedata(drive); in cs5536_dma_end()
215 if (drive->current_speed < XFER_UDMA_0 && in cs5536_dma_end()
217 cs5536_program_dtc(drive, timings & IDE_DRV_MASK); in cs5536_dma_end()
266 return -ENODEV; in cs5536_init_one()
289 MODULE_DESCRIPTION("low-level driver for the CS5536 IDE controller");