Fix ql_gpio for PIN to GPIO.

Change-Id: I2cda7327396bb3bacc0acdd2cb3b7186507fcdd5
diff --git a/mbtk/ql_lib/src/ql_gpio.c b/mbtk/ql_lib/src/ql_gpio.c
index 3b84532..85e254b 100755
--- a/mbtk/ql_lib/src/ql_gpio.c
+++ b/mbtk/ql_lib/src/ql_gpio.c
@@ -8,8 +8,71 @@
 #include <fcntl.h>
 
 #include "mbtk_log.h"
+#include "mbtk_utils.h"
 #include "ql/ql_gpio.h"
 
+typedef struct {
+    int pin;
+    int gpio;
+} pin_gpio_mmap_s;
+
+static pin_gpio_mmap_s pin_gpio_mmap[] = {
+    {PINNAME_GPIO1, -1},            /*PIN-1*/
+    {PINNAME_GPIO2, -1},             /*PIN-2*/
+    {PINNAME_GPIO3, -1},             /*PIN-3*/
+    {PINNAME_GPIO4, -1},             /*PIN-4*/
+    {PINNAME_GPIO5, -1},             /*PIN-5*/
+    {PINNAME_NET_STATUS, -1},        /*PIN-6*/
+    {PINNAME_DBG_RXD, -1},          /*PIN-11*/
+    {PINNAME_DBG_TXD, -1},          /*PIN-12*/
+    {PINNAME_USIM_PRESENCE, 19},    /*PIN-13*/
+    {PINNAME_SD_INT_DET, -1},       /*PIN-23*/
+    {PINNAME_PCM_IN, 28},           /*PIN-24*/
+    {PINNAME_PCM_OUT, 27},          /*PIN-25*/
+    {PINNAME_PCM_SYNC, -1},         /*PIN-26*/
+    {PINNAME_PCM_CLK, -1},          /*PIN-27*/
+    {PINNAME_SDC2_DATA3, -1},       /*PIN-28*/
+    {PINNAME_SDC2_DATA2, -1},       /*PIN-29*/
+    {PINNAME_SDC2_DATA1, -1},       /*PIN-30*/
+    {PINNAME_SDC2_DATA0, -1},       /*PIN-31*/
+    {PINNAME_SDC2_CLK, -1},         /*PIN-32*/
+    {PINNAME_SDC2_CMD, -1},         /*PIN-33*/
+    {PINNAME_SPI_CS_N, -1},         /*PIN-37*/
+    {PINNAME_SPI_MOSI, -1},         /*PIN-38*/
+    {PINNAME_SPI_MISO, -1},         /*PIN-39*/
+    {PINNAME_SPI_CLK, -1},          /*PIN-40*/
+    {PINNAME_I2C_SCL, -1},          /*PIN-41*/
+    {PINNAME_I2C_SDA, -1},          /*PIN-42*/
+    {PINNAME_GPIO6, -1},            /*PIN-62*/
+    {PINNAME_DCD, -1},              /*PIN-63*/
+    {PINNAME_DTR, -1},              /*PIN-66*/
+    {PINNAME_MAIN_CTS, -1},         /*PIN-64*/
+    {PINNAME_MAIN_RTS, -1},         /*PIN-65*/
+    {PINNAME_MAIN_TXD, -1},         /*PIN-67*/
+    {PINNAME_MAIN_RXD, -1},         /*PIN-68*/
+    {PINNAME_RMII_RXD1, -1},        /*PIN-73*/
+    {PINNAME_RMII_RXCL, -1},        /*PIN-74*/
+    {PINNAME_RMII_CLK, 3},         /*PIN-75*/
+    {PINNAME_RMII_RXD0, 1},        /*PIN-76*/
+    {PINNAME_RMII_TXD0, -1},        /*PIN-77*/
+    {PINNAME_RMII_TXD1, -1},        /*PIN-78*/
+    {PINNAME_RMII_RXD2, -1},        /*PIN-79*/
+    {PINNAME_RMII_TXD2, -1},        /*PIN-80*/
+    {PINNAME_RMII_TX_CTRL, -1},     /*PIN-81*/
+    {PINNAME_RMII_RXD3, -1},        /*PIN-82*/
+    {PINNAME_RMII_TXCL, -1},        /*PIN-83*/
+    {PINNAME_RMII_TXD3, -1},        /*PIN-84*/
+    {PINNAME_WLAN_SLP_CLK, -1},    /*PIN-118*/
+    {PINNAME_RMII_RST, 20},        /*PIN-119*/
+    {PINNAME_RMII_INT, -1},        /*PIN-120*/
+    {PINNAME_RMII_MDIO, 17},       /*PIN-121*/
+    {PINNAME_RMII_MDC, 16},        /*PIN-122*/
+    {PINNAME_WLAN_PER_EN, 24},     /*PIN-127*/
+    {PINNAME_WLAN_WAKE, 21},       /*PIN-135*/
+    {PINNAME_WLAN_EN, 22},         /*PIN-136*/
+    {PINNAME_GPIO8, -1},            /*PIN-139*/
+};
+
 static int gpio_export(int gpio)
 {
     int index=0;
@@ -198,6 +261,95 @@
     return 0;
 }
 
+static int pin_2_gpio(Enum_PinName       pin_name)
+{
+#if 0
+    switch(pin_name){
+        case PINNAME_USIM_PRESENCE:    /*PIN-13*/
+            return 19;
+        case PINNAME_PCM_IN:           /*PIN-24*/
+            return 28;
+        case PINNAME_PCM_OUT:          /*PIN-25*/
+            return 27;
+        case PINNAME_RMII_CLK:         /*PIN-75*/
+            return 3;
+        case PINNAME_RMII_RXD0:        /*PIN-76*/
+            return 1;
+        case PINNAME_RMII_RST:          /*PIN-119*/
+            return 20;
+        case PINNAME_RMII_MDIO:         /*PIN-121*/
+            return 17;
+        case PINNAME_RMII_MDC:          /*PIN-122*/
+            return 16;
+        case PINNAME_WLAN_PER_EN:       /*PIN-127*/
+            return 24;
+        case PINNAME_WLAN_WAKE:         /*PIN-135*/
+            return 21;
+        case PINNAME_WLAN_EN:           /*PIN-136*/
+            return 22;
+
+        // Unknown PIN.
+        case PINNAME_GPIO1:             /*PIN-1*/
+        case PINNAME_GPIO2:             /*PIN-2*/
+        case PINNAME_GPIO3:             /*PIN-3*/
+        case PINNAME_GPIO4:             /*PIN-4*/
+        case PINNAME_GPIO5:             /*PIN-5*/
+        case PINNAME_NET_STATUS:        /*PIN-6*/
+        case PINNAME_DBG_RXD:           /*PIN-11*/
+        case PINNAME_DBG_TXD:          /*PIN-12*/
+        case PINNAME_SD_INT_DET:       /*PIN-23*/
+        case PINNAME_PCM_SYNC:         /*PIN-26*/
+        case PINNAME_PCM_CLK:          /*PIN-27*/
+        case PINNAME_SDC2_DATA3:       /*PIN-28*/
+        case PINNAME_SDC2_DATA2:       /*PIN-29*/
+        case PINNAME_SDC2_DATA1:       /*PIN-30*/
+        case PINNAME_SDC2_DATA0:       /*PIN-31*/
+        case PINNAME_SDC2_CLK:         /*PIN-32*/
+        case PINNAME_SDC2_CMD:         /*PIN-33*/
+        case PINNAME_SPI_CS_N:         /*PIN-37*/
+        case PINNAME_SPI_MOSI:         /*PIN-38*/
+        case PINNAME_SPI_MISO:         /*PIN-39*/
+        case PINNAME_SPI_CLK:          /*PIN-40*/
+        case PINNAME_I2C_SCL:          /*PIN-41*/
+        case PINNAME_I2C_SDA:          /*PIN-42*/
+        case PINNAME_GPIO6:            /*PIN-62*/
+        case PINNAME_DCD:              /*PIN-63*/
+        case PINNAME_DTR:              /*PIN-66*/
+        case PINNAME_MAIN_CTS:         /*PIN-64*/
+        case PINNAME_MAIN_RTS:         /*PIN-65*/
+        case PINNAME_MAIN_TXD:         /*PIN-67*/
+        case PINNAME_MAIN_RXD:         /*PIN-68*/
+        case PINNAME_RMII_RXD1:        /*PIN-73*/
+        case PINNAME_RMII_RXCL:        /*PIN-74*/
+        case PINNAME_RMII_TXD0:        /*PIN-77*/
+        case PINNAME_RMII_TXD1:        /*PIN-78*/
+        case PINNAME_RMII_RXD2:        /*PIN-79*/
+        case PINNAME_RMII_TXD2:        /*PIN-80*/
+        case PINNAME_RMII_TX_CTRL:     /*PIN-81*/
+        case PINNAME_RMII_RXD3:        /*PIN-82*/
+        case PINNAME_RMII_TXCL:        /*PIN-83*/
+        case PINNAME_RMII_TXD3:        /*PIN-84*/
+        case PINNAME_WLAN_SLP_CLK:      /*PIN-118*/
+        case PINNAME_RMII_INT:          /*PIN-120*/
+        case PINNAME_GPIO8:             /*PIN-139*/
+        default:
+            LOGE("Unknown PIN : %d", pin_name);
+            return -1;
+    }
+#else
+    int i = 0;
+    while(i < ARRAY_SIZE(pin_gpio_mmap)) {
+        if(pin_name == pin_gpio_mmap[i].pin) {
+            return pin_gpio_mmap[i].gpio;
+        }
+        i++;
+    }
+
+    LOGE("No found PIN : %d", pin_name);
+    return -1;
+#endif
+}
+
 
 /*****************************************************************
 * Function:     Ql_GPIO_Init
@@ -228,19 +380,25 @@
                  Enum_PinPullSel    pull_sel
                  )
 {
-    if(gpio_export(pin_name))
+    int gpio = pin_2_gpio(pin_name);
+    if(gpio == -1) {
+        return RES_IO_ERROR;
+    }
+    LOGD("PIN-%d => GPIO-%d", pin_name, gpio);
+
+    if(gpio_export(gpio))
     {
         LOGE("gpio_export() fail.");
         return RES_IO_ERROR;
     }
 
-    if(gpio_direct_set(pin_name, dir == PINDIRECTION_IN ? "in" : "out"))
+    if(gpio_direct_set(gpio, dir == PINDIRECTION_IN ? "in" : "out"))
     {
         LOGE("gpio_direct_set() fail.");
         return RES_IO_ERROR;
     }
 
-    if(gpio_value_set(pin_name, level))
+    if(gpio_value_set(gpio, level))
     {
         LOGE("gpio_value_set() fail.");
         return RES_IO_ERROR;
@@ -287,7 +445,13 @@
 *****************************************************************/
 int Ql_GPIO_SetLevel(Enum_PinName pin_name, Enum_PinLevel level)
 {
-    if(gpio_value_set(pin_name, level)) {
+    int gpio = pin_2_gpio(pin_name);
+    if(gpio == -1) {
+        return RES_IO_ERROR;
+    }
+    LOGD("PIN-%d => GPIO-%d", pin_name, gpio);
+
+    if(gpio_value_set(gpio, level)) {
         LOGE("gpio_value_set() fail.");
         return RES_IO_ERROR;
     } else {
@@ -311,7 +475,13 @@
 *****************************************************************/
 int Ql_GPIO_GetLevel(Enum_PinName pin_name)
 {
-    return gpio_value_get(pin_name);
+    int gpio = pin_2_gpio(pin_name);
+    if(gpio == -1) {
+        return RES_IO_ERROR;
+    }
+    LOGD("PIN-%d => GPIO-%d", pin_name, gpio);
+
+    return gpio_value_get(gpio);
 }
 
 /*****************************************************************
@@ -333,7 +503,13 @@
 *****************************************************************/
 int Ql_GPIO_SetDirection(Enum_PinName pin_name, Enum_PinDirection dir)
 {
-    if(gpio_direct_set(pin_name, dir == PINDIRECTION_IN ? "in" : "out")) {
+    int gpio = pin_2_gpio(pin_name);
+    if(gpio == -1) {
+        return RES_IO_ERROR;
+    }
+    LOGD("PIN-%d => GPIO-%d", pin_name, gpio);
+
+    if(gpio_direct_set(gpio, dir == PINDIRECTION_IN ? "in" : "out")) {
         LOGE("gpio_direct_set() fail.");
         return RES_IO_ERROR;
     } else {
@@ -359,7 +535,13 @@
 int Ql_GPIO_GetDirection(Enum_PinName pin_name)
 {
     char buff[10];
-    if(gpio_direct_get(pin_name, buff, 10)) {
+    int gpio = pin_2_gpio(pin_name);
+    if(gpio == -1) {
+        return RES_IO_ERROR;
+    }
+    LOGD("PIN-%d => GPIO-%d", pin_name, gpio);
+
+    if(gpio_direct_get(gpio, buff, 10)) {
         LOGE("gpio_direct_get() fail.");
         return RES_IO_NOT_SUPPORT;
     } else {
@@ -427,7 +609,13 @@
 *****************************************************************/
 int Ql_GPIO_Uninit(Enum_PinName pin_name)
 {
-    if(gpio_unexport(pin_name))
+    int gpio = pin_2_gpio(pin_name);
+    if(gpio == -1) {
+        return RES_IO_ERROR;
+    }
+    LOGD("PIN-%d => GPIO-%d", pin_name, gpio);
+
+    if(gpio_unexport(gpio))
     {
         LOGE("gpio_unexport() fail.");
         return RES_IO_ERROR;