diff options
author | Kristen Carlson Accardi <kristen@linux.intel.com> | 2011-03-04 13:24:11 -0500 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2011-05-19 20:50:53 -0400 |
commit | 8a745f1f39b7a20047a362b67ce9151c07d14440 (patch) | |
tree | f8f08be7a284d195f30a8b2e6fc63b714e4f7f21 /drivers/ata | |
parent | 0afc6f5ba95419fd505e60637f7645425f16e407 (diff) |
libata: Power off empty ports
Give users the option of completely powering off unoccupied
SATA ports using the existing min_power link_power_management_policy
option. When the use selects this option on an empty port, we
will power the port off by setting DET to off. For occupied ports,
behavior is unchanged.
Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>
Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r-- | drivers/ata/libata-core.c | 10 | ||||
-rw-r--r-- | drivers/ata/libata-eh.c | 2 |
2 files changed, 9 insertions, 3 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c index 76c3c15cb1e6..736bee5dafeb 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, | |||
3619 | scontrol |= (0x2 << 8); | 3619 | scontrol |= (0x2 << 8); |
3620 | break; | 3620 | break; |
3621 | case ATA_LPM_MIN_POWER: | 3621 | case ATA_LPM_MIN_POWER: |
3622 | /* no restrictions on LPM transitions */ | 3622 | if (ata_link_nr_enabled(link) > 0) |
3623 | scontrol &= ~(0x3 << 8); | 3623 | /* no restrictions on LPM transitions */ |
3624 | scontrol &= ~(0x3 << 8); | ||
3625 | else { | ||
3626 | /* empty port, power off */ | ||
3627 | scontrol &= ~0xf; | ||
3628 | scontrol |= (0x1 << 2); | ||
3629 | } | ||
3624 | break; | 3630 | break; |
3625 | default: | 3631 | default: |
3626 | WARN_ON(1); | 3632 | WARN_ON(1); |
diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c index dad9fd660f37..dfb6e9d3d759 100644 --- a/drivers/ata/libata-eh.c +++ b/drivers/ata/libata-eh.c | |||
@@ -3423,7 +3423,7 @@ fail: | |||
3423 | return rc; | 3423 | return rc; |
3424 | } | 3424 | } |
3425 | 3425 | ||
3426 | static int ata_link_nr_enabled(struct ata_link *link) | 3426 | int ata_link_nr_enabled(struct ata_link *link) |
3427 | { | 3427 | { |
3428 | struct ata_device *dev; | 3428 | struct ata_device *dev; |
3429 | int cnt = 0; | 3429 | int cnt = 0; |