ata: fix ata_id_sense_reporting_enabled() and ata_id_has_sense_reporting()
[linux-2.6-microblaze.git] / include / linux / ata.h
index 21292b5..868bfd5 100644 (file)
@@ -771,16 +771,21 @@ static inline bool ata_id_has_read_log_dma_ext(const u16 *id)
 
 static inline bool ata_id_has_sense_reporting(const u16 *id)
 {
-       if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
+       if (!(id[ATA_ID_CFS_ENABLE_2] & BIT(15)))
+               return false;
+       if ((id[ATA_ID_COMMAND_SET_3] & (BIT(15) | BIT(14))) != BIT(14))
                return false;
-       return id[ATA_ID_COMMAND_SET_3] & (1 << 6);
+       return id[ATA_ID_COMMAND_SET_3] & BIT(6);
 }
 
 static inline bool ata_id_sense_reporting_enabled(const u16 *id)
 {
-       if (!(id[ATA_ID_CFS_ENABLE_2] & (1 << 15)))
+       if (!ata_id_has_sense_reporting(id))
+               return false;
+       /* ata_id_has_sense_reporting() == true, word 86 must have bit 15 set */
+       if ((id[ATA_ID_COMMAND_SET_4] & (BIT(15) | BIT(14))) != BIT(14))
                return false;
-       return id[ATA_ID_COMMAND_SET_4] & (1 << 6);
+       return id[ATA_ID_COMMAND_SET_4] & BIT(6);
 }
 
 /**