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;