[Feature][ZXW-147][GPIO]add GPIO API
Only Configure:No
Affected branch:master
Affected module:gpio
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update:Yes
Change-Id: Ic5a78af9c99c49009942d4d7039cee23c9722bae
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-gpio/lynq-gpio.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-gpio/lynq-gpio.cpp
new file mode 100755
index 0000000..cf6958f
--- /dev/null
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-gpio/lynq-gpio.cpp
@@ -0,0 +1,230 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sc_bsp.h>
+#include <errno.h>
+#include "lynq-gpio.h"
+#include "liblog/lynq_deflog.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define USER_LOG_TAG "LYNQ_GPIO"
+
+/*****************************************
+* @brief:lynq_gpio_init
+* @param count [IN]:4
+* @param sum [OUT]:NA
+* @return :success 0, failed -1
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+
+int lynq_gpio_init(int gpio, int direction, int value, int pullsel)
+{
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+
+ test_gpio_handle[gpio] = sc_gpio_init(gpio, direction, value, pullsel);
+ if (!test_gpio_handle[gpio])
+ {
+ LYINFLOG("do_gpio_init failed, err:%d", errno);
+ return -1;
+ }
+ return 0;
+}
+
+/*****************************************
+* @brief:lynq_gpio_deinit
+* @param count [IN]:1
+* @param sum [OUT]:NA
+* @return :success 0, failed -1
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+
+
+int lynq_gpio_deinit(int gpio)
+{
+ int ret;
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+
+ ret = sc_gpio_uninit(test_gpio_handle[gpio]);
+ if (ret)
+ {
+ LYINFLOG("do_gpio_uninit failed, err:%d", ret);
+ return -1;
+ }
+ return 0;
+}
+
+/*****************************************
+* @brief:lynq_gpio_direction_set
+* @param count [IN]:2
+* @param sum [OUT]:NA
+* @return :success 0, failed -1
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+
+int lynq_gpio_direction_set(int gpio, int direction)
+{
+ int ret;
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+ if(direction != 0 && direction != 1)
+ {
+ LYINFLOG("input direction is error\n");
+ return -1;
+ }
+ ret = sc_gpio_direction_set(test_gpio_handle[gpio], direction, 0);
+ if (ret)
+ {
+ LYINFLOG("do_gpio_input set direction failed, err:%d\n", ret);
+ return -1;;
+ }
+ return 0;
+}
+
+/*****************************************
+* @brief:lynq_gpio_value_set
+* @param count [IN]:2
+* @param sum [OUT]:NA
+* @return :success 0, failed -1
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+
+int lynq_gpio_value_set(int gpio, int value)
+{
+ int ret;
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+ if(value != 0 && value != 1)
+ {
+ LYINFLOG("input value is error\n");
+ return -1;
+ }
+ ret = sc_gpio_direction_set(test_gpio_handle[gpio], 1, 0);
+ if (ret)
+ {
+ LYINFLOG("do_gpio_input set direction failed, err:%d\n", ret);
+ return -1;;
+ }
+ ret = sc_gpio_value_set(test_gpio_handle[gpio], value);
+ if (ret)
+ {
+ LYINFLOG("do_gpio_output set value failed, err:%d\n", ret);
+ return -1;
+ }
+ else
+ {
+ LYINFLOG("gpio%d set value:%d\n", gpio, value);
+ }
+ return 0;
+}
+
+/*****************************************
+* @brief:lynq_gpio_value_set
+* @param count [IN]:1
+* @param sum [OUT]:NA
+* @return :success 0, failed -1
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+
+
+int lynq_gpio_value_get(int gpio)
+{
+ int ret;
+ int value;
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+ ret = sc_gpio_value_get(test_gpio_handle[gpio], &value);
+ if (ret)
+ {
+ LYINFLOG("do_gpio_input get value failed, err:%d\n", ret);
+ return -1;
+ }
+ else
+ {
+ LYINFLOG("gpio%d value:%d\n", gpio, value);
+ }
+ return value;
+}
+
+/*****************************************
+* @brief:lynq_gpio_pullsel_set
+* @param count [IN]:2
+* @param sum [OUT]:NA
+* @return :success 0, failed -1
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+
+
+int lynq_gpio_pullsel_set(int gpio, int pullsel)
+{
+ int ret;
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+ ret = sc_gpio_pullsel_set(test_gpio_handle[gpio], pullsel);
+ if (ret)
+ {
+ LYINFLOG("do_gpio_input get pull failed, err:%d\n", ret);
+ return -1;
+ }
+ else
+ {
+ LYINFLOG("gpio%d pull:%d\n", gpio, pullsel);
+ }
+ return 0;
+}
+
+/*****************************************
+* @brief:lynq_gpio_pullsel_get
+* @param count [IN]:1
+* @param sum [OUT]:NA
+* @return :success >=0, failed -1
+* @todo:NA
+* @see:NA
+* @warning:NA
+******************************************/
+
+
+int lynq_gpio_pullsel_get(int gpio)
+{
+ int ret;
+ int pullsel;
+ LYLOGSET(LOG_INFO);
+ LYLOGEINIT(USER_LOG_TAG);
+ ret = sc_gpio_pullsel_get(test_gpio_handle[gpio], &pullsel);
+ if (ret)
+ {
+ LYINFLOG("do_gpio_input get pull failed, err:%d\n", ret);
+ return -1;
+ }
+ else
+ {
+ LYINFLOG("gpio%d pull:%d\n", gpio, pullsel);
+ }
+ return pullsel;
+}
+
+
+DEFINE_LYNQ_LIB_LOG(LYNQ_GPIO)
+
+#ifdef __cplusplus
+}
+#endif
+
+
+