diff mbox

ata: Detect Delkin Devices compact flash

Message ID 808c8e9d1002231041la0d2cd9y35e9bce347d4d2db@mail.gmail.com
State Not Applicable
Delegated to: David Miller
Headers show

Commit Message

Ben Gardner Feb. 23, 2010, 6:41 p.m. UTC
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>
---
--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Jeff Garzik March 1, 2010, 8:12 p.m. UTC | #1
On 02/23/2010 01:41 PM, Ben Gardner wrote:
> 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>

applied


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- linux-2.6.33-rc8.orig/include/linux/ata.h
+++ linux-2.6.33-rc8/include/linux/ata.h
@@ -841,7 +841,8 @@ 

 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