Commit a530201a authored by Bartlomiej Zolnierkiewicz's avatar Bartlomiej Zolnierkiewicz
Browse files

cy82c693: correct DMA modes clipping



* Mask device DMA masks by ATA_{S,M}WDMA2 in cy82c693_ide_dma_on().

* Remove clipping of DMA modes by id->tDMA in cy82c693_dma_enable():
  - id->tDMA may not be defined on newer devices
  - id->vendor6/id->tDMA word is in LE endianness
    (cy82c693 seems to be Alpha specific though)

* Bump driver version.

Acked-by: default avatarSergei Shtylyov <sshtylyov@ru.mvista.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent aea5d375
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
/*
 * linux/drivers/ide/pci/cy82c693.c		Version 0.42	Oct 23, 2007
 * linux/drivers/ide/pci/cy82c693.c		Version 0.43	Nov 7, 2007
 *
 *  Copyright (C) 1998-2000 Andreas S. Krebs (akrebs@altavista.net), Maintainer
 *  Copyright (C) 1998-2002 Andre Hedrick <andre@linux-ide.org>, Integrator
@@ -183,9 +183,6 @@ static void cy82c693_dma_enable (ide_drive_t *drive, int mode, int single)
	if (mode>2)	/* make sure we set a valid mode */
		mode = 2;

	if (mode > drive->id->tDMA)  /* to be absolutly sure we have a valid mode */
		mode = drive->id->tDMA;
	
	index = (HWIF(drive)->channel==0) ? CY82_INDEX_CHANNEL0 : CY82_INDEX_CHANNEL1;

#if CY82C693_DEBUG_LOGS
@@ -251,6 +248,9 @@ static int cy82c693_ide_dma_on (ide_drive_t *drive)
			mmode = id->dma_mword & (id->dma_mword >> 8);
			smode = id->dma_1word & (id->dma_1word >> 8);

			mmode &= ATA_MWDMA2;
			smode &= ATA_SWDMA2;

			if (mmode != 0) {
				/* enable multi */
				cy82c693_dma_enable(drive, (mmode >> 1), 0);