xref: /openbmc/phosphor-bmc-code-mgmt/i2c-vr/vr.cpp (revision f730973b554c83b7a8e85232e9c730a89d5f3692)
1 #include "vr.hpp"
2 
3 #include "isl69269/isl69269.hpp"
4 #include "mps/mp297x.hpp"
5 #include "mps/mp2x6xx.hpp"
6 #include "mps/mp5998.hpp"
7 #include "mps/mpx9xx.hpp"
8 #include "tda38640a/tda38640a.hpp"
9 #include "xdpe1x2xx/xdpe1x2xx.hpp"
10 
11 #include <map>
12 
13 namespace phosphor::software::VR
14 {
15 
create(sdbusplus::async::context & ctx,enum VRType vrType,uint16_t bus,uint16_t address)16 std::unique_ptr<VoltageRegulator> create(sdbusplus::async::context& ctx,
17                                          enum VRType vrType, uint16_t bus,
18                                          uint16_t address)
19 {
20     switch (vrType)
21     {
22         case VRType::XDPE1X2XX:
23             return std::make_unique<XDPE1X2XX>(ctx, bus, address);
24         case VRType::ISL69269:
25             return std::make_unique<ISL69269>(ctx, bus, address);
26         case VRType::MP2X6XX:
27             return std::make_unique<MP2X6XX>(ctx, bus, address);
28         case VRType::MP292X:
29             return std::make_unique<MP292X>(ctx, bus, address);
30         case VRType::MP297X:
31             return std::make_unique<MP297X>(ctx, bus, address);
32         case VRType::MP5998:
33             return std::make_unique<MP5998>(ctx, bus, address);
34         case VRType::MP994X:
35             return std::make_unique<MP994X>(ctx, bus, address);
36         case VRType::RAA22XGen2:
37             return std::make_unique<ISL69269>(ctx, bus, address,
38                                               ISL69269::Gen::Gen2);
39         case VRType::RAA22XGen3p5:
40             return std::make_unique<ISL69269>(ctx, bus, address,
41                                               ISL69269::Gen::Gen3p5);
42         case VRType::TDA38640A:
43             return std::make_unique<TDA38640A>(ctx, bus, address);
44         default:
45             return nullptr;
46     }
47 }
48 
stringToEnum(std::string & vrStr,VRType & vrType)49 bool stringToEnum(std::string& vrStr, VRType& vrType)
50 {
51     std::map<std::string, enum VRType> VRTypeToString{
52         {"XDPE1X2XXFirmware", VRType::XDPE1X2XX},
53         {"ISL69269Firmware", VRType::ISL69269},
54         {"MP2X6XXFirmware", VRType::MP2X6XX},
55         {"MP292XFirmware", VRType::MP292X},
56         {"MP297XFirmware", VRType::MP297X},
57         {"MP5998Firmware", VRType::MP5998},
58         {"MP994XFirmware", VRType::MP994X},
59         {"RAA22XGen2Firmware", VRType::RAA22XGen2},
60         {"RAA22XGen3p5Firmware", VRType::RAA22XGen3p5},
61         {"TDA38640AFirmware", VRType::TDA38640A}};
62 
63     if (VRTypeToString.contains(vrStr))
64     {
65         vrType = VRTypeToString[vrStr];
66         return true;
67     }
68     return false;
69 }
70 
71 } // namespace phosphor::software::VR
72