xref: /openbmc/phosphor-bmc-code-mgmt/eeprom-device/eeprom_device_version.cpp (revision 30fd7e4cedcf0d6dfabe753ad698f6b4d135e38b)
1 #include "eeprom_device_version.hpp"
2 
3 #include "pt5161l/pt5161l.hpp"
4 
5 #include <functional>
6 #include <unordered_map>
7 
8 using ProviderFactory = std::function<std::unique_ptr<DeviceVersion>(
9     const std::string&, const uint16_t, const uint8_t)>;
10 
11 template <typename ProviderType>
createProvider(const std::string & chipModel,const uint16_t bus,const uint8_t address)12 std::unique_ptr<DeviceVersion> createProvider(
13     const std::string& chipModel, const uint16_t bus, const uint8_t address)
14 {
15     return std::make_unique<ProviderType>(chipModel, bus, address);
16 }
17 
18 static const std::unordered_map<std::string, ProviderFactory> providerMap = {
19     {"PT5161LFirmware", createProvider<PT5161LDeviceVersion>}};
20 
getVersionProvider(const std::string & chipModel,const uint16_t bus,const uint8_t address)21 std::unique_ptr<DeviceVersion> getVersionProvider(
22     const std::string& chipModel, const uint16_t bus, const uint8_t address)
23 {
24     auto it = providerMap.find(chipModel);
25     if (it != providerMap.end())
26     {
27         return it->second(chipModel, bus, address);
28     }
29 
30     return nullptr;
31 }
32