diff options
| author | Bartlomiej Zolnierkiewicz <bzolnier@gmail.com> | 2010-01-18 18:15:47 +0100 | 
|---|---|---|
| committer | Jeff Garzik <jgarzik@redhat.com> | 2010-03-01 14:58:45 -0500 | 
| commit | 3403c24529ddfb4a47f5cfe8496370997f1b0758 (patch) | |
| tree | ce9a7a889d03f34a747902b308d2f61a059e4944 /drivers/ata | |
| parent | 8ebf473860e8166e3d4f152a02e22b9cdddcd440 (diff) | |
| download | linux-3403c24529ddfb4a47f5cfe8496370997f1b0758.tar.bz2 | |
pata_cypress: fix PIO timings underclocking
Timing registers should be programmed with the desired number of clocks
minus one clock.
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/ata')
| -rw-r--r-- | drivers/ata/pata_cypress.c | 10 | 
1 files changed, 6 insertions, 4 deletions
| diff --git a/drivers/ata/pata_cypress.c b/drivers/ata/pata_cypress.c index 8fb040bf7361..ff6c37de5a12 100644 --- a/drivers/ata/pata_cypress.c +++ b/drivers/ata/pata_cypress.c @@ -62,14 +62,16 @@ static void cy82c693_set_piomode(struct ata_port *ap, struct ata_device *adev)  		return;  	} -	time_16 = clamp_val(t.recover, 0, 15) | (clamp_val(t.active, 0, 15) << 4); -	time_8 = clamp_val(t.act8b, 0, 15) | (clamp_val(t.rec8b, 0, 15) << 4); +	time_16 = clamp_val(t.recover - 1, 0, 15) | +		  (clamp_val(t.active - 1, 0, 15) << 4); +	time_8 = clamp_val(t.act8b - 1, 0, 15) | +		 (clamp_val(t.rec8b - 1, 0, 15) << 4);  	if (adev->devno == 0) {  		pci_read_config_dword(pdev, CY82_IDE_ADDRSETUP, &addr);  		addr &= ~0x0F;	/* Mask bits */ -		addr |= clamp_val(t.setup, 0, 15); +		addr |= clamp_val(t.setup - 1, 0, 15);  		pci_write_config_dword(pdev, CY82_IDE_ADDRSETUP, addr);  		pci_write_config_byte(pdev, CY82_IDE_MASTER_IOR, time_16); @@ -79,7 +81,7 @@ static void cy82c693_set_piomode(struct ata_port *ap, struct ata_device *adev)  		pci_read_config_dword(pdev, CY82_IDE_ADDRSETUP, &addr);  		addr &= ~0xF0;	/* Mask bits */ -		addr |= (clamp_val(t.setup, 0, 15) << 4); +		addr |= (clamp_val(t.setup - 1, 0, 15) << 4);  		pci_write_config_dword(pdev, CY82_IDE_ADDRSETUP, addr);  		pci_write_config_byte(pdev, CY82_IDE_SLAVE_IOR, time_16); |