blob: 986c65d347ea4984f84a8336788a4c57143f7f91 [file] [log] [blame] [edit]
#pragma once
#include "common/include/i2c/i2c.hpp"
#include "i2c-vr/vr.hpp"
#include <sdbusplus/async.hpp>
#include <cstdint>
namespace phosphor::software::VR
{
class ISL69269 : public VoltageRegulator
{
public:
ISL69269(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address);
sdbusplus::async::task<bool> verifyImage(const uint8_t* image,
size_t imageSize) final;
sdbusplus::async::task<bool> updateFirmware(bool force) final;
sdbusplus::async::task<bool> getCRC(uint32_t* checksum) final;
sdbusplus::async::task<bool> reset() final;
bool forcedUpdateAllowed() final;
private:
struct Data
{
uint8_t len;
uint8_t pec;
uint8_t addr;
uint8_t cmd;
uint8_t data[30];
};
struct Configuration
{
uint8_t addr;
uint8_t mode;
uint8_t cfgId;
uint16_t wrCnt;
uint32_t devIdExp;
uint32_t devRevExp;
uint32_t crcExp;
struct Data pData[1024];
};
sdbusplus::async::task<bool> dmaReadWrite(uint8_t* reg, uint8_t* resp);
sdbusplus::async::task<bool> getRemainingWrites(uint8_t* remain);
sdbusplus::async::task<bool> getHexMode(uint8_t* mode);
sdbusplus::async::task<bool> getDeviceId(uint32_t* deviceId);
sdbusplus::async::task<bool> getDeviceRevision(uint32_t* revision);
sdbusplus::async::task<bool> program();
sdbusplus::async::task<bool> getProgStatus();
sdbusplus::async::task<bool> restoreCfg();
bool parseImage(const uint8_t* image, size_t imageSize);
bool checkImage();
phosphor::i2c::I2C i2cInterface;
uint8_t mode;
struct Configuration configuration;
};
} // namespace phosphor::software::VR