libata: Early CFA adapters are not required to support mode setting
authorAlan <alan@lxorguk.ukuu.org.uk>
Mon, 5 Feb 2007 16:28:30 +0000 (16:28 +0000)
committerJeff Garzik <jeff@garzik.org>
Fri, 9 Feb 2007 22:39:40 +0000 (17:39 -0500)
If we are doing a PIO setup for a CFA card and it blows up with a device
error then assume it is an older CFA card which doesn't support this
rather than failing the device out of existance.

Stands seperate to the quieting patch but that is obviously useful with
this change.

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-core.c

index 6a2083a6d175da596260128ca25aaa5331f05447..479f95a5c0a3fd92a0a086c62cfdee21e866f6ad 100644 (file)
@@ -2333,6 +2333,10 @@ static int ata_dev_set_mode(struct ata_device *dev)
                dev->flags |= ATA_DFLAG_PIO;
 
        err_mask = ata_dev_set_xfermode(dev);
+       /* Old CFA may refuse this command, which is just fine */
+       if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id))
+               err_mask &= ~AC_ERR_DEV;
+
        if (err_mask) {
                ata_dev_printk(dev, KERN_ERR, "failed to set xfermode "
                               "(err_mask=0x%x)\n", err_mask);