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 24 bool forcedUpdateAllowed() final; 25 26 private: 27 struct Data 28 { 29 uint8_t len; 30 uint8_t pec; 31 uint8_t addr; 32 uint8_t cmd; 33 uint8_t data[30]; 34 }; 35 36 struct Configuration 37 { 38 uint8_t addr; 39 uint8_t mode; 40 uint8_t cfgId; 41 uint16_t wrCnt; 42 uint32_t devIdExp; 43 uint32_t devRevExp; 44 uint32_t crcExp; 45 struct Data pData[1024]; 46 }; 47 sdbusplus::async::task<bool> dmaReadWrite(uint8_t* reg, uint8_t* resp); 48 sdbusplus::async::task<bool> getRemainingWrites(uint8_t* remain); 49 sdbusplus::async::task<bool> getHexMode(uint8_t* mode); 50 sdbusplus::async::task<bool> getDeviceId(uint32_t* deviceId); 51 sdbusplus::async::task<bool> getDeviceRevision(uint32_t* revision); 52 sdbusplus::async::task<bool> program(); 53 sdbusplus::async::task<bool> getProgStatus(); 54 sdbusplus::async::task<bool> restoreCfg(); 55 56 bool parseImage(const uint8_t* image, size_t imageSize); 57 bool checkImage(); 58 59 phosphor::i2c::I2C i2cInterface; 60 uint8_t mode; 61 62 struct Configuration configuration; 63 }; 64 } // namespace phosphor::software::VR 65