struct ata_eh_context *ehc = &link->eh_context;
struct ata_device *dev, *link_dev = NULL, *lpm_dev = NULL;
enum ata_lpm_policy old_policy = link->lpm_policy;
- bool no_dipm = link->ap->flags & ATA_FLAG_NO_DIPM;
+ bool host_has_dipm = !(link->ap->flags & ATA_FLAG_NO_DIPM);
unsigned int hints = ATA_LPM_EMPTY | ATA_LPM_HIPM;
unsigned int err_mask;
int rc;
if (!link_dev)
link_dev = dev;
- if (!lpm_dev && (dev_has_hipm || (dev_has_dipm && !no_dipm)))
+ if (!lpm_dev &&
+ (dev_has_hipm || (dev_has_dipm && host_has_dipm)))
lpm_dev = dev;
hints &= ~ATA_LPM_EMPTY;
/* disable DIPM before changing link config */
if (policy < ATA_LPM_MED_POWER_WITH_DIPM &&
- (dev_has_dipm && !no_dipm)) {
+ (dev_has_dipm && host_has_dipm)) {
err_mask = ata_dev_set_feature(dev,
SETFEATURES_SATA_DISABLE, SATA_DIPM);
if (err_mask && err_mask != AC_ERR_DEV) {
ata_for_each_dev(dev, link, ENABLED) {
bool dev_has_dipm = ata_id_has_dipm(dev->id);
- if (policy >= ATA_LPM_MED_POWER_WITH_DIPM && !no_dipm &&
+ if (policy >= ATA_LPM_MED_POWER_WITH_DIPM && host_has_dipm &&
dev_has_dipm) {
err_mask = ata_dev_set_feature(dev,
SETFEATURES_SATA_ENABLE, SATA_DIPM);