[Feature] Add one bit (DIN) to get the status of the GPIO input pins

Only Configure: Yes
Affected branch: ZK-first-oem-release
Affected module: GPIO
Is it affected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No

Change-Id: I3d1de888f7e3f631bcb3a8e2a2d49f22cb72db88
diff --git a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-driver/include/liblynq-driver/libdriver.h b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-driver/include/liblynq-driver/libdriver.h
index 348385d..57288d5 100755
--- a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-driver/include/liblynq-driver/libdriver.h
+++ b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-driver/include/liblynq-driver/libdriver.h
@@ -14,4 +14,5 @@
 int lynq_i2c_read(char *dev_node, int addr, char reg, char *read_value);
 int lynq_setGpio_values(const char *state, int gpio_numb, int param);
 int lynq_getGpio_values(int gpio_numb, char* mode, char* dir, char* dout, char* drive);
+int lynq_getGpio_values_e(int gpio_numb, char* mode, char* dir, char* dout, char* din, char* drive);
 #endif  //__LOG_H__
diff --git a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-driver/liblynq-driver/driver_control.c b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-driver/liblynq-driver/driver_control.c
index 837e841..e1fd04c 100755
--- a/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-driver/liblynq-driver/driver_control.c
+++ b/LYNQ_PUBLIC/IC_src/mtk/lib/liblynq-driver/liblynq-driver/driver_control.c
@@ -464,3 +464,64 @@
     return 0;
 }
 /*dongyu@2023.7.11 Configurable General Purpose Interface for GPIO Packages end*/
+
+/*dongyu@2024.7.17 Add one bit (DIN) to get the status of the start */
+int lynq_getGpio_values_e(int gpio_numb, char* mode, char* dir, char* dout, char* din, char* drive)
+{
+    char command[100];
+    char response[100] = {0};
+
+    if (mode == NULL || dir == NULL || dout == NULL || din == NULL || drive == NULL)
+    {
+        RLOGD("lynq_getGpio_values pointers are NULL, returning -1\n");
+        return -1;
+    }
+
+    if (gpio_numb >= 0 && gpio_numb <= 180)
+    {
+        sprintf(command, "echo start 0 > /sys/devices/platform/10005000.pinctrl/mt_gpio");
+        if(system(command) != 0)
+        {
+            RLOGD("0~180 Range command execution failure!\n");
+            return -1;
+        }
+    }
+    else if (gpio_numb > 180 && gpio_numb <= 234)
+    {
+        sprintf(command, "echo start 180 > /sys/devices/platform/10005000.pinctrl/mt_gpio");
+        if(system(command) != 0)
+        {
+            RLOGD("180~234 Range command execution failure!\n");
+            return -1;
+        }
+    }
+    else
+    {
+        RLOGD("The gpio_numb parameter takes values in the range 0 ~ 234!\n");
+        return -1;
+    }
+
+    sprintf(command, "cat /sys/devices/platform/10005000.pinctrl/mt_gpio | grep -E \"^%03d\"", gpio_numb);
+    FILE* fp = popen(command, "r");
+    if (fp == NULL)
+    {
+        RLOGD("Failed to open pipe!\n");
+        return -1;
+    }
+    fgets(response, 100, fp);
+    pclose(fp);
+
+    if (strlen(response) < 10)
+    {
+        RLOGD("Response is either empty or shorter than expected!\n");
+        return -1;
+    }
+    *mode = response[4];
+    *dir = response[5];
+    *dout = response[6];
+    *din = response[7];
+    *drive = response[9];
+
+    return 0;
+}
+/*dongyu@2024.7.17 Add one bit (DIN) to get the status of the end */