41#include "../../PmicButtonBase.hpp"
42#include "../../../platform/SensorCommWrapper.hpp"
44template<
typename Regs>
66 uint8_t idx = (ms >= 2000) ? 3 :
69 return _core.
updateBits(Regs::pmu::POK_SET, 0x03, idx) >= 0;
80 const uint16_t kOnLevelMs[] = {128, 512, 1000, 2000};
81 int v = _core.
readReg(Regs::pmu::POK_SET);
82 if (v < 0)
return false;
83 ms = kOnLevelMs[
static_cast<uint8_t
>(v) & 0x03];
99 uint8_t idx = (ms >= 10000) ? 3 :
101 (ms >= 6000) ? 1 : 0;
102 return _core.
updateBits(Regs::pmu::POK_SET, 0x0C, idx << 2) >= 0;
113 const uint16_t kOffLevelMs[] = {4000, 6000, 8000, 10000};
114 int v = _core.
readReg(Regs::pmu::POK_SET);
115 if (v < 0)
return false;
116 ms = kOffLevelMs[(
static_cast<uint8_t
>(v) >> 2) & 0x03];
132 uint8_t idx = (ms >= 2500) ? 3 :
134 (ms >= 1500) ? 1 : 0;
135 return _core.
updateBits(Regs::pmu::POK_SET, 0x30, idx << 4) >= 0;
146 const uint16_t kIrqLevelMs[] = {1000, 1500, 2000, 2500};
147 int v = _core.
readReg(Regs::pmu::POK_SET);
148 if (v < 0)
return false;
149 ms = kIrqLevelMs[(
static_cast<uint8_t
>(v) >> 4) & 0x03];
bool getOffDurationMs(uint16_t &ms) const override
Get the power-off press duration threshold.
bool setIrqDurationMs(uint16_t ms) override
Set the interrupt-trigger press duration threshold.
bool setOnDurationMs(uint16_t ms) override
Set the power-on press duration threshold.
bool getOnDurationMs(uint16_t &ms) const override
Get the power-on press duration threshold.
bool setOffDurationMs(uint16_t ms) override
Set the power-off press duration threshold.
AXP1xxPwron(SensorCommWrapper &core)
Construct power-on key control interface.
bool getIrqDurationMs(uint16_t &ms) const override
Get the interrupt-trigger press duration threshold.
int readReg(uint8_t reg) const
int updateBits(uint8_t reg, uint8_t mask, uint8_t value_shifted)