blob: 789bc34372a8f52ef62e9aefa9e8f5c348a42897 [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;
Christopher Meisf00ce802025-04-08 08:07:31 +020023
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