diff --git a/frontend/device/kobo/device.lua b/frontend/device/kobo/device.lua index c9e24be74..f132899b4 100644 --- a/frontend/device/kobo/device.lua +++ b/frontend/device/kobo/device.lua @@ -355,21 +355,20 @@ function Kobo:suspend() -]] + -- NOTE: Sets gSleep_Mode_Suspend to 1. Used as a flag throughout the + -- kernel to suspend/resume various subsystems + -- cf. kernel/power/main.c @ L#207 f = io.open("/sys/power/state-extended", "w") if not f then logger.err("Cannot open /sys/power/state-extended for writing!") return false end - -- NOTE: Sets gSleep_Mode_Suspend to 1. Used as a flag throughout the - -- kernel to suspend/resume various subsystems - -- cf. kernel/power/main.c @ L#207 re, err_msg, err_code = f:write("1\n") - logger.info("Write syscall returned: ", re) + io.close(f) + logger.info("Kobo Suspend: Asked the kernel to put subsystems to sleep, ret:", re) if not re then logger.err('write error: ', err_msg, err_code) end - io.close(f) - logger.info("Kobo Suspend: Asked the kernel to put subsystems to sleep") util.sleep(2) logger.info("Kobo Suspend: Waited for 2s because of reasons...") @@ -400,7 +399,14 @@ function Kobo:suspend() logger.info("Kobo Suspend: Asking for a suspend to RAM . . .") f = io.open("/sys/power/state", "w") if not f then - -- TODO: update state-extended? + -- reset state-extend back to 0 since we are giving up + local ext_fd = io.open("/sys/power/state-extended", "w") + if not ext_fd then + logger.err("Cannot open /sys/power/state-extended for writing!") + else + ext_fd:write("0\n") + io.close(ext_fd) + end return false end re, err_msg, err_code = f:write("mem\n") @@ -441,17 +447,29 @@ end function Kobo:resume() -- Now that we're up, unflag subsystems for suspend... - os.execute("echo 0 > /sys/power/state-extended") - logger.info("Kobo Suspend: Unflagged kernel subsystems for suspend") + -- NOTE: Sets gSleep_Mode_Suspend to 0. Used as a flag throughout the + -- kernel to suspend/resume various subsystems + -- cf. kernel/power/main.c @ L#207 + local f = io.open("/sys/power/state-extended", "w") + if not f then + logger.err("Cannot open /sys/power/state-extended for writing!") + return false + end + local re, err_msg, err_code = f:write("0\n") + io.close(f) + logger.info("Kobo Suspend: Unflagged kernel subsystems for suspend, ret:", re) + if not re then + logger.err('write error: ', err_msg, err_code) + end -- HACK: wait a bit (0.1 sec) for the kernel to catch up util.usleep(100000) -- cf. #1862, I can reliably break IR touch input on resume... -- cf. also #1943 for the rationale behind applying this workaorund in every case... - local f = io.open("/sys/devices/virtual/input/input1/neocmd", "r") + f = io.open("/sys/devices/virtual/input/input1/neocmd", "r") if f ~= nil then + f:write("a\n") io.close(f) - os.execute("echo 'a' > /sys/devices/virtual/input/input1/neocmd") end end