1ba2241c6SThang Tran #include "host_condition.hpp" 2ba2241c6SThang Tran 3ba2241c6SThang Tran #include <gpiod.hpp> 4ba2241c6SThang Tran #include <phosphor-logging/elog-errors.hpp> 5ba2241c6SThang Tran #include <phosphor-logging/lg2.hpp> 6ba2241c6SThang Tran 7ba2241c6SThang Tran namespace phosphor 8ba2241c6SThang Tran { 9ba2241c6SThang Tran namespace condition 10ba2241c6SThang Tran { 11ba2241c6SThang Tran 12ba2241c6SThang Tran PHOSPHOR_LOG2_USING; 13ba2241c6SThang Tran 14ba2241c6SThang Tran using namespace phosphor::logging; 15ba2241c6SThang Tran scanGpioPin()16ba2241c6SThang Tranvoid Host::scanGpioPin() 17ba2241c6SThang Tran { 18ba2241c6SThang Tran /* 19ba2241c6SThang Tran * Check the hostX-ready/-n pin is defined or not 20ba2241c6SThang Tran */ 21ba2241c6SThang Tran if (gpiod::find_line(lineName + "-ready")) 22ba2241c6SThang Tran { 23ba2241c6SThang Tran lineName += "-ready"; 24ba2241c6SThang Tran isActHigh = true; 25ba2241c6SThang Tran } 26ba2241c6SThang Tran else if (gpiod::find_line(lineName + "-ready-n")) 27ba2241c6SThang Tran { 28ba2241c6SThang Tran lineName += "-ready-n"; 29ba2241c6SThang Tran isActHigh = false; 30ba2241c6SThang Tran } 31ba2241c6SThang Tran else 32ba2241c6SThang Tran { 33ba2241c6SThang Tran lineName = ""; 34ba2241c6SThang Tran } 35ba2241c6SThang Tran } 36ba2241c6SThang Tran currentFirmwareCondition() const37ba2241c6SThang TranHost::FirmwareCondition Host::currentFirmwareCondition() const 38ba2241c6SThang Tran { 39ba2241c6SThang Tran auto retVal = Host::FirmwareCondition::Unknown; 40ba2241c6SThang Tran 41ba2241c6SThang Tran /* 42ba2241c6SThang Tran * Check host is ready or not 43ba2241c6SThang Tran */ 44ba2241c6SThang Tran if (!lineName.empty()) 45ba2241c6SThang Tran { 46ba2241c6SThang Tran auto line = gpiod::find_line(lineName); 47ba2241c6SThang Tran 48ba2241c6SThang Tran try 49ba2241c6SThang Tran { 50ba2241c6SThang Tran int32_t gpioVal = 0; 51ba2241c6SThang Tran 52*44bbf11dSPavithra Barithaya line.request( 53*44bbf11dSPavithra Barithaya {lineName, gpiod::line_request::DIRECTION_INPUT, 54*44bbf11dSPavithra Barithaya (isActHigh) ? 0 : gpiod::line_request::FLAG_ACTIVE_LOW}); 55ba2241c6SThang Tran 56ba2241c6SThang Tran gpioVal = line.get_value(); 57ba2241c6SThang Tran line.release(); 58ba2241c6SThang Tran 59ba2241c6SThang Tran retVal = (0 == gpioVal) ? Host::FirmwareCondition::Off 60ba2241c6SThang Tran : Host::FirmwareCondition::Running; 61ba2241c6SThang Tran } 62ba2241c6SThang Tran catch (std::system_error&) 63ba2241c6SThang Tran { 64ba2241c6SThang Tran error("Error when read gpio value"); 65ba2241c6SThang Tran } 66ba2241c6SThang Tran } 67ba2241c6SThang Tran 68ba2241c6SThang Tran return retVal; 69ba2241c6SThang Tran } 70ba2241c6SThang Tran } // namespace condition 71ba2241c6SThang Tran } // namespace phosphor 72