[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 */