From fe852e1f689bd2a11839671de6ae352ff3293f1c Mon Sep 17 00:00:00 2001 From: Larry Davis Date: Thu, 9 Jan 2020 00:22:23 -0800 Subject: [PATCH] fix: wait for reads to end before sleeping, prevent reads when asleep. fixes #10 --- VoodooI2CGoodix/VoodooI2CGoodixTouchDriver.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/VoodooI2CGoodix/VoodooI2CGoodixTouchDriver.cpp b/VoodooI2CGoodix/VoodooI2CGoodixTouchDriver.cpp index 4e71412..150d898 100644 --- a/VoodooI2CGoodix/VoodooI2CGoodixTouchDriver.cpp +++ b/VoodooI2CGoodix/VoodooI2CGoodixTouchDriver.cpp @@ -391,8 +391,21 @@ void VoodooI2CGoodixTouchDriver::stop(IOService* provider) { } IOReturn VoodooI2CGoodixTouchDriver::setPowerState(unsigned long powerState, IOService* whatDevice) { - if (whatDevice != this) { - return kIOReturnInvalid; + if (powerState == 0) { + if (awake) { + awake = false; + while (read_in_progress) { + IOLog("%s::Waiting for read to finish before sleeping...\n", getName()); + IOSleep(10); + } + IOLog("%s::Going to sleep\n", getName()); + } + } + else { + if (!awake) { + awake = true; + IOLog("%s::Waking up\n", getName()); + } } return kIOPMAckImplied;