summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Gardner <gardner.ben@gmail.com>2010-02-23 12:41:22 -0600
committerJeff Garzik <jgarzik@redhat.com>2010-03-01 15:11:32 -0500
commit4b7d1c0509d0d07edc731f990791dc5518e51617 (patch)
tree25b85383e6b994fb4246e1c0ea5ba12b1b853d17
parent7e044a12c73f474e59f1ddecf08d6781c7830f0f (diff)
downloadlinux-4b7d1c0509d0d07edc731f990791dc5518e51617.tar.gz
ata: Detect Delkin Devices compact flash
I have a Delkin Devices compact flash card that isn't being recognized using the
SATA/PATA drivers.
The card is recognized and works with the deprecated ATA drivers.

The error I am seeing is:
ata1.00: failed to IDENTIFY (device reports invalid type, err_mask=0x0)

I tracked it down to ata_id_is_cfa() in include/linux/ata.h.
The Delkin card has id[0] set to 0x844a and id[83] set to 0.
This isn't what the kernel expects and is probably incorrect.

The simplest work-around is to add a check for 0x844a to ata_id_is_cfa().

Signed-off-by: Ben Gardner <gardner.ben@gmail.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
-rw-r--r--include/linux/ata.h3
1 files changed, 2 insertions, 1 deletions
diff --git a/include/linux/ata.h b/include/linux/ata.h
index 20f31567ccee..b4c85e2adef5 100644
--- a/include/linux/ata.h
+++ b/include/linux/ata.h
@@ -841,7 +841,8 @@ static inline int ata_id_current_chs_valid(const u16 *id)
 
 static inline int ata_id_is_cfa(const u16 *id)
 {
-	if (id[ATA_ID_CONFIG] == 0x848A)	/* Traditional CF */
+	if ((id[ATA_ID_CONFIG] == 0x848A) ||	/* Traditional CF */
+	    (id[ATA_ID_CONFIG] == 0x844A))	/* Delkin Devices CF */
 		return 1;
 	/*
 	 * CF specs don't require specific value in the word 0 anymore and yet