1*3f2f3e6aSKevin Tung #pragma once 2*3f2f3e6aSKevin Tung 3*3f2f3e6aSKevin Tung #include "common/include/pmbus.hpp" 4*3f2f3e6aSKevin Tung #include "mps.hpp" 5*3f2f3e6aSKevin Tung 6*3f2f3e6aSKevin Tung namespace phosphor::software::VR 7*3f2f3e6aSKevin Tung { 8*3f2f3e6aSKevin Tung 9*3f2f3e6aSKevin Tung class MP297X : public MPSVoltageRegulator 10*3f2f3e6aSKevin Tung { 11*3f2f3e6aSKevin Tung public: MP297X(sdbusplus::async::context & ctx,uint16_t bus,uint16_t address)12*3f2f3e6aSKevin Tung MP297X(sdbusplus::async::context& ctx, uint16_t bus, uint16_t address) : 13*3f2f3e6aSKevin Tung MPSVoltageRegulator(ctx, bus, address) 14*3f2f3e6aSKevin Tung {} 15*3f2f3e6aSKevin Tung 16*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> verifyImage(const uint8_t* image, 17*3f2f3e6aSKevin Tung size_t imageSize) final; 18*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> updateFirmware(bool force) final; 19*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> getCRC(uint32_t* checksum) final; 20*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> parseDeviceConfiguration() final; 21*3f2f3e6aSKevin Tung bool forcedUpdateAllowed() final; 22*3f2f3e6aSKevin Tung 23*3f2f3e6aSKevin Tung private: 24*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> checkId(PMBusCmd pmBusCmd, uint32_t expected); 25*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> isPasswordUnlock(); 26*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> unlockWriteProtect(); 27*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> storeDataIntoMTP(); 28*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> enableMTPPageWriteRead(); 29*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> enableMultiConfigCRC(); 30*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> checkMTPCRC(); 31*3f2f3e6aSKevin Tung sdbusplus::async::task<bool> programPageRegisters( 32*3f2f3e6aSKevin Tung MPSPage page, 33*3f2f3e6aSKevin Tung const std::map<uint8_t, std::vector<MPSData>>& groupedData); 34*3f2f3e6aSKevin Tung }; 35*3f2f3e6aSKevin Tung 36*3f2f3e6aSKevin Tung } // namespace phosphor::software::VR 37