1 #pragma once 2 3 #include "common/include/i2c/i2c.hpp" 4 #include "i2c-vr/vr.hpp" 5 6 #include <sdbusplus/async.hpp> 7 8 #include <cstdint> 9 10 namespace phosphor::software::VR 11 { 12 13 class ISL69269 : public VoltageRegulator 14 { 15 public: 16 ISL69269(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address); 17 18 sdbusplus::async::task<bool> verifyImage(const uint8_t* image, 19 size_t imageSize) final; 20 21 sdbusplus::async::task<bool> updateFirmware(bool force) final; 22 sdbusplus::async::task<bool> getCRC(uint32_t* checksum) final; 23 sdbusplus::async::task<bool> reset() final; 24 25 bool forcedUpdateAllowed() final; 26 27 private: 28 struct Data 29 { 30 uint8_t len; 31 uint8_t pec; 32 uint8_t addr; 33 uint8_t cmd; 34 uint8_t data[30]; 35 }; 36 37 struct Configuration 38 { 39 uint8_t addr; 40 uint8_t mode; 41 uint8_t cfgId; 42 uint16_t wrCnt; 43 uint32_t devIdExp; 44 uint32_t devRevExp; 45 uint32_t crcExp; 46 struct Data pData[1024]; 47 }; 48 sdbusplus::async::task<bool> dmaReadWrite(uint8_t* reg, uint8_t* resp); 49 sdbusplus::async::task<bool> getRemainingWrites(uint8_t* remain); 50 sdbusplus::async::task<bool> getHexMode(uint8_t* mode); 51 sdbusplus::async::task<bool> getDeviceId(uint32_t* deviceId); 52 sdbusplus::async::task<bool> getDeviceRevision(uint32_t* revision); 53 sdbusplus::async::task<bool> program(); 54 sdbusplus::async::task<bool> getProgStatus(); 55 sdbusplus::async::task<bool> restoreCfg(); 56 57 bool parseImage(const uint8_t* image, size_t imageSize); 58 bool checkImage(); 59 60 phosphor::i2c::I2C i2cInterface; 61 uint8_t mode; 62 63 struct Configuration configuration; 64 }; 65 } // namespace phosphor::software::VR 66