xref: /openbmc/phosphor-bmc-code-mgmt/i2c-vr/isl69269/isl69269.hpp (revision 9ce83ded4fb60a348277158b66258fa27d505462)
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