Support host selector using cpld definitions

Description:
- Support host selector using cpld definitions

Design:
- Because the current structure only supports config defined by GPIO
  (Yosemite V2), but there are also have the system (Yosemite V3.5)
  gets the host-selector's selection from CPLD.

- So this commit is to extend the current configuration to use CPLD
  definitions. Also, support adding event io from the register file
  which was exported from the CLD driver.

- For example with config json below:
{
   "cpld_definitions": [
        {
            "name": "HOST_SELECTOR",
            "i2c_address": 15,
            "i2c_bus": 12,
            "register_name": "uart-selection-debug-card",
            "max_position": 4
        }
   ]
}

Dependency:
- CLD driver is required (link: https://lore.kernel.org/lkml/20230117094425.19004-1-Delphine_CC_Chiu@Wiwynn.com/)

Test Case:
- When ocp debug card uart button is pressed the position property on
  dbus is correct.

Signed-off-by: Delphine CC Chiu <Delphine_CC_Chiu@wiwynn.com>
Change-Id: I6746afa6d905bd3c681e2921c643b3cd4cb9944c
diff --git a/src/gpio.cpp b/src/gpio.cpp
index 0a16ce5..a946aa3 100644
--- a/src/gpio.cpp
+++ b/src/gpio.cpp
@@ -16,7 +16,7 @@
 
 #include "config.h"
 
-#include "gpio.hpp"
+#include "button_config.hpp"
 
 #include <error.h>
 #include <fcntl.h>
@@ -83,13 +83,6 @@
                               : (GpioState::deassert);
     return gpioState;
 }
-void closeGpio(int fd)
-{
-    if (fd > 0)
-    {
-        ::close(fd);
-    }
-}
 
 uint32_t getGpioBase()
 {
@@ -134,14 +127,14 @@
     return getGpioBase() + offset;
 }
 
-int configGroupGpio(buttonConfig& buttonIFConfig)
+int configGroupGpio(ButtonConfig& buttonIFConfig)
 {
     int result = 0;
     // iterate the list of gpios from the button interface config
     // and initialize them
     for (auto& gpioCfg : buttonIFConfig.gpios)
     {
-        result = configGpio(gpioCfg);
+        result = configGpio(gpioCfg, buttonIFConfig);
         if (result < 0)
         {
             lg2::error("{NAME}: Error configuring gpio-{NUM}: {RESULT}", "NAME",
@@ -155,7 +148,7 @@
     return result;
 }
 
-int configGpio(gpioInfo& gpioConfig)
+int configGpio(GpioInfo& gpioConfig, ButtonConfig& buttonIFConfig)
 {
     auto gpioNum = gpioConfig.number;
     auto gpioDirection = gpioConfig.direction;
@@ -300,6 +293,7 @@
     }
 
     gpioConfig.fd = fd;
+    buttonIFConfig.fds.push_back(fd);
 
     return 0;
 }