#pragma once #include "common/include/i2c/i2c.hpp" #include "i2c-vr/vr.hpp" #include #include #include namespace phosphor::software::VR { class TDA38640A : public VoltageRegulator { public: TDA38640A(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address); 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 Configuration { uint32_t rev; uint32_t checksum; std::vector offsets; std::vector> data; void clear() { rev = 0; checksum = 0; offsets.clear(); data.clear(); } }; sdbusplus::async::task getUserRemainingWrites(uint8_t* remain); sdbusplus::async::task getDeviceId(uint32_t* deviceId); sdbusplus::async::task program(); sdbusplus::async::task getProgStatus(uint8_t* status); sdbusplus::async::task unlockDevice(); sdbusplus::async::task programmingCmd(); sdbusplus::async::task setPage(uint8_t page); sdbusplus::async::task getDeviceRevision(uint8_t* revision); bool parseImage(const uint8_t* image, size_t imageSize); phosphor::i2c::I2C i2cInterface; struct Configuration configuration; }; } // namespace phosphor::software::VR