libata: Add special ata_pio_need_iordy() handling for Compact Flash.
authorDavid Daney <ddaney@caviumnetworks.com>
Wed, 10 Dec 2008 23:39:12 +0000 (15:39 -0800)
committerJeff Garzik <jgarzik@redhat.com>
Thu, 8 Jan 2009 21:10:36 +0000 (16:10 -0500)
According to the Compact Flash specification r4.1, PIO modes 5 and 6
do not use iordy.

Signed-off-by: David Daney <ddaney@caviumnetworks.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/libata-core.c

index 9ae583554c8b79791b42e544caf14648adbfddaf..175df54eb6646c595cc23f3410d80a8eaa61eab4 100644 (file)
@@ -2001,6 +2001,10 @@ unsigned int ata_pio_need_iordy(const struct ata_device *adev)
           as the caller should know this */
        if (adev->link->ap->flags & ATA_FLAG_NO_IORDY)
                return 0;
+       /* CF spec. r4.1 Table 22 says no iordy on PIO5 and PIO6.  */
+       if (ata_id_is_cfa(adev->id)
+           && (adev->pio_mode == XFER_PIO_5 || adev->pio_mode == XFER_PIO_6))
+               return 0;
        /* PIO3 and higher it is mandatory */
        if (adev->pio_mode > XFER_PIO_2)
                return 1;