blob: 986c65d347ea4984f84a8336788a4c57143f7f91 [file] [log] [blame]
Christopher Meisf00ce802025-04-08 08:07:31 +02001#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
10namespace phosphor::software::VR
11{
12
13class 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