From e0df9952fd13904da646adae0409b5c76c67f298 Mon Sep 17 00:00:00 2001 From: Solomon Peachy Date: Wed, 18 Sep 2024 08:13:24 -0400 Subject: ata: Alter ata_is_active() when drive doesn't support power management Due to the heisenberg principle, we don't want to check the battery level when the ATA drive is "spun up". Unfortunately some ATA devices *cough most SD adapters cough* don't support mandatory ATA power management commands like flushing caches and (safely) shutting down so we have to leave them "spinning". This leads to us never updating our battery status with these out-of-spec devices. Work around this issue by having is_active() always return false if that's what we have. Change-Id: I629f3fdbc7e5cffb0a4d546c80cb5fca8529c0e6 --- firmware/drivers/ata.c | 2 +- firmware/target/arm/s5l8702/ipod6g/storage_ata-6g.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'firmware') diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index 7b9c4910cf..b4d8a388ec 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -845,7 +845,7 @@ void ata_spindown(int seconds) bool ata_disk_is_active(void) { - return ata_state >= ATA_SPINUP; + return ata_disk_can_poweroff() ? (ata_state >= ATA_SPINUP) : 0; } void ata_sleepnow(void) diff --git a/firmware/target/arm/s5l8702/ipod6g/storage_ata-6g.c b/firmware/target/arm/s5l8702/ipod6g/storage_ata-6g.c index 9629b3e30f..ee192ae3d1 100644 --- a/firmware/target/arm/s5l8702/ipod6g/storage_ata-6g.c +++ b/firmware/target/arm/s5l8702/ipod6g/storage_ata-6g.c @@ -521,7 +521,7 @@ static void ata_set_active(void) bool ata_disk_is_active(void) { - return ata_powered; + return ata_disk_can_poweroff() ? ata_powered : 0; } static int ata_set_feature(uint32_t feature, uint32_t param) -- cgit v1.2.3