diff options
Diffstat (limited to 'drivers/ata/libata-core.c')
| -rw-r--r-- | drivers/ata/libata-core.c | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 423c0a6952b..736bee5dafe 100644 --- a/drivers/ata/libata-core.c +++ b/drivers/ata/libata-core.c @@ -3619,8 +3619,14 @@ int sata_link_scr_lpm(struct ata_link *link, enum ata_lpm_policy policy,  		scontrol |= (0x2 << 8);  		break;  	case ATA_LPM_MIN_POWER: -		/* no restrictions on LPM transitions */ -		scontrol &= ~(0x3 << 8); +		if (ata_link_nr_enabled(link) > 0) +			/* no restrictions on LPM transitions */ +			scontrol &= ~(0x3 << 8); +		else { +			/* empty port, power off */ +			scontrol &= ~0xf; +			scontrol |= (0x1 << 2); +		}  		break;  	default:  		WARN_ON(1); @@ -4139,6 +4145,7 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {  	 */  	{ "PIONEER DVD-RW  DVRTD08",	"1.00",	ATA_HORKAGE_NOSETXFER },  	{ "PIONEER DVD-RW  DVR-212D",	"1.28", ATA_HORKAGE_NOSETXFER }, +	{ "PIONEER DVD-RW  DVR-216D",	"1.08", ATA_HORKAGE_NOSETXFER },  	/* End Marker */  	{ } @@ -5480,7 +5487,7 @@ struct ata_port *ata_port_alloc(struct ata_host *host)  	if (!ap)  		return NULL; -	ap->pflags |= ATA_PFLAG_INITIALIZING; +	ap->pflags |= ATA_PFLAG_INITIALIZING | ATA_PFLAG_FROZEN;  	ap->lock = &host->lock;  	ap->print_id = -1;  	ap->host = host;  |