#pragma once #include "common/include/i2c/i2c.hpp" #include "i2c-vr/vr.hpp" #include #include namespace phosphor::software::VR { class ISL69269 : public VoltageRegulator { public: enum class Gen { Gen2, Gen3, Gen3p5 }; ISL69269(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address, Gen gen = Gen::Gen3); sdbusplus::async::task verifyImage(const uint8_t* image, size_t imageSize) final; sdbusplus::async::task updateFirmware(bool force) final; sdbusplus::async::task getCRC(uint32_t* checksum) final; bool forcedUpdateAllowed() final; private: struct Data { uint8_t len; uint8_t pec; uint8_t addr; uint8_t cmd; uint8_t data[30]; }; struct Configuration { uint8_t addr; uint8_t mode; uint8_t cfgId; uint16_t wrCnt; uint32_t devIdExp; uint32_t devRevExp; uint32_t crcExp; struct Data pData[1024]; }; sdbusplus::async::task dmaReadWrite(uint8_t* reg, uint8_t* resp); sdbusplus::async::task getRemainingWrites(uint8_t* remain); sdbusplus::async::task getHexMode(uint8_t* mode); sdbusplus::async::task getDeviceId(uint32_t* deviceId); sdbusplus::async::task getDeviceRevision(uint32_t* revision); sdbusplus::async::task program(); sdbusplus::async::task getProgStatus(); sdbusplus::async::task restoreCfg(); bool parseImage(const uint8_t* image, size_t imageSize); bool checkImage(); phosphor::i2c::I2C i2cInterface; Gen generation; uint8_t mode; struct Configuration configuration; }; } // namespace phosphor::software::VR