273 lines
7.7 KiB
C
273 lines
7.7 KiB
C
/*================================================================
|
||
Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved.
|
||
Quectel Wireless Solutions Proprietary and Confidential.
|
||
=================================================================*/
|
||
/**
|
||
******************************************************************************
|
||
* @file ql_gpio.c
|
||
* @author Juson.zhang
|
||
* @version V1.0.0
|
||
* @date 2019/12/17
|
||
* @brief This file contains the gpio functions's definitions
|
||
******************************************************************************
|
||
*/
|
||
#include <stdio.h>
|
||
#include "xscale_types.h"
|
||
#include "ql_gpio.h"
|
||
#include "quec_gpio.h"
|
||
|
||
|
||
int ql_gpio_init(GPIO_PIN_NUMBER_E gpio_num, PIN_DIRECTION_E pin_dir, PIN_PULL_E pin_pull, PIN_LEVEL_E pin_level)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_init(gpio_num, pin_dir, pin_pull, pin_level);
|
||
return ret;
|
||
}
|
||
|
||
/*Fias 2022-4-29 gpio input 32Khz (32787Hz)*/
|
||
int ql_gpio_map_clock(GPIO_PIN_NUMBER_E gpio_num)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_map_clock(gpio_num);
|
||
return ret;
|
||
}
|
||
|
||
int ql_gpio_deinit(GPIO_PIN_NUMBER_E gpio_num)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_deinit(gpio_num);
|
||
return ret;
|
||
}
|
||
|
||
int ql_gpio_set_level(GPIO_PIN_NUMBER_E gpio_num, PIN_LEVEL_E pin_level)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_set_level(gpio_num, pin_level);
|
||
return ret;
|
||
}
|
||
|
||
int ql_gpio_get_level(GPIO_PIN_NUMBER_E gpio_num, PIN_LEVEL_E *p_pin_level)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_get_level(gpio_num, p_pin_level);
|
||
return ret;
|
||
}
|
||
|
||
int ql_gpio_set_drv_level(GPIO_PIN_NUMBER_E gpio_num, QL_PIN_DRIVE_LEVEL_E drive_level)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_set_drive_level(gpio_num, drive_level);
|
||
return ret;
|
||
}
|
||
|
||
int ql_gpio_get_drv_level(GPIO_PIN_NUMBER_E gpio_num, QL_PIN_DRIVE_LEVEL_E* drive_level)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_get_drive_level(gpio_num, drive_level);
|
||
return ret;
|
||
}
|
||
|
||
int ql_gpio_set_direction(GPIO_PIN_NUMBER_E gpio_num, PIN_DIRECTION_E pin_dir)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_set_direction(gpio_num, pin_dir);
|
||
return ret;
|
||
}
|
||
|
||
int ql_gpio_get_direction(GPIO_PIN_NUMBER_E gpio_num, PIN_DIRECTION_E *p_pin_dir)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_get_direction(gpio_num, p_pin_dir);
|
||
return ret;
|
||
}
|
||
|
||
int ql_gpio_set_pull(GPIO_PIN_NUMBER_E gpio_num, PIN_PULL_E pin_pull)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_set_pull(gpio_num, pin_pull);
|
||
return ret;
|
||
}
|
||
|
||
|
||
int ql_gpio_get_pull(GPIO_PIN_NUMBER_E gpio_num, PIN_PULL_E *p_pin_pull)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_gpio_get_pull(gpio_num, p_pin_pull);
|
||
return ret;
|
||
}
|
||
|
||
int ql_pin_set_func(GPIO_PIN_NUMBER_E gpio_num, unsigned char func_sel)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_pin_set_func(gpio_num, func_sel);
|
||
return ret;
|
||
}
|
||
|
||
void ql_active_gpio_hisr(unsigned int gpio_num)
|
||
{
|
||
quec_active_gpio_hisr(gpio_num);
|
||
}
|
||
|
||
int ql_eint_register(GPIO_PIN_NUMBER_E gpio_num, PIN_EDGE_E pin_edge, PIN_PULL_E pin_pull, void *eint_cb, void *wakeup_eint_cb)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_eint_register(gpio_num, pin_edge, pin_pull, eint_cb, wakeup_eint_cb);
|
||
return ret;
|
||
}
|
||
|
||
int ql_eint_unregister(GPIO_PIN_NUMBER_E gpio_num)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_eint_unregister(gpio_num);
|
||
return ret;
|
||
}
|
||
|
||
int ql_eint_enable(GPIO_PIN_NUMBER_E gpio_num, PIN_EDGE_E pin_edge)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_eint_enable(gpio_num, pin_edge);
|
||
return ret;
|
||
}
|
||
|
||
int ql_eint_disable(GPIO_PIN_NUMBER_E gpio_num)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_eint_disable(gpio_num);
|
||
return ret;
|
||
}
|
||
|
||
int ql_eint_enable_wakeup(GPIO_PIN_NUMBER_E gpio_num, PIN_EDGE_E pin_edge)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_eint_enable_wakeup(gpio_num, pin_edge);
|
||
return ret;
|
||
}
|
||
|
||
int ql_eint_disable_wakeup(GPIO_PIN_NUMBER_E gpio_num)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_eint_disable_wakeup(gpio_num);
|
||
return ret;
|
||
}
|
||
|
||
/*somer.zhang-2020/05/11-set pmic gpio out high level(1) or low level(0)*/
|
||
//此接口是设置PMIC芯片上的GPIO,ECxxxY系列采用PM813电源原理芯片才有此功能
|
||
int ql_set_pmic_gpio_level(QL_PIMC_GPIO_E PINx,unsigned char level)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_set_pmic_gpio_level(PINx, level);
|
||
return ret;
|
||
}
|
||
|
||
int ql_set_usim2_io_vol(char onoff, QL_USIM2_IO_E vol)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_set_usim2_io_vol(onoff, vol);
|
||
return ret;
|
||
}
|
||
|
||
#ifdef QL_GNSS
|
||
#include "gps_channel.h"
|
||
//20230807 和芯gnss rom1 or rom2 check 后续新增和芯gnss项目须在此接口中添加项目宏控
|
||
//20231011 增加gnss_type 3类型:ROM2 OC不接备电
|
||
int quec_gnss_type_check(void)
|
||
{
|
||
int gnss_type;
|
||
#if defined (__QUECTEL_PROJECT_EC800MCN_GC__) || defined(__QUECTEL_PROJECT_EC800MCN_GA__)\
|
||
|| defined (__QUECTEL_PROJECT_EC800MCN_GM__) || defined(__QUECTEL_PROJECT_EG810MCN_GA__)\
|
||
|| defined (__QUECTEL_PROJECT_EC600MCN_GC__)
|
||
gnss_type = 1; //ROM1
|
||
#elif defined(__QUECTEL_PROJECT_EC800MCN_GD__) || defined (__QUECTEL_PROJECT_EC800MCN_GB__) ||defined (__QUECTEL_PROJECT_EG800AKCN_11LG__)\
|
||
||defined (__QUECTEL_PROJECT_EG800AKEU_11LG__)||defined (__QUECTEL_PROJECT_EG800AKCN_11LN__)|| defined(__QUECTEL_PROJECT_EG915NLA_GK__)\
|
||
||defined (__QUECTEL_PROJECT_EG800AKLA_11LG__)||defined (__QUECTEL_PROJECT_EG600AKCN_11LG__)
|
||
gnss_type = 2; //ROM2
|
||
#else
|
||
gnss_type = 1;
|
||
#endif
|
||
return gnss_type;
|
||
}
|
||
int quec_boardcfg_gnss_pin_init(quec_gps_gpio_struct_t *gpio_pin)
|
||
{
|
||
if(NULL == gpio_pin)
|
||
return -1;
|
||
|
||
gpio_pin->tx = GPIO_PIN_NO_74;
|
||
gpio_pin->rx = GPIO_PIN_NO_73;
|
||
|
||
#if defined(__QUECTEL_PROJECT_EC600MCN_GC__)
|
||
gpio_pin->rst = GPIO_PIN_NO_3;
|
||
gpio_pin->pwr_en = GPIO_PIN_NO_120;
|
||
#elif defined(__QUECTEL_PROJECT_EG800AKCN_11LG__)||defined (__QUECTEL_PROJECT_EG800AKEU_11LG__)||defined (__QUECTEL_PROJECT_EG800AKCN_11LN__)\
|
||
|| defined (__QUECTEL_PROJECT_EG800AKLA_11LG__)||defined (__QUECTEL_PROJECT_EG600AKCN_11LG__)
|
||
gpio_pin->tx = GPIO_PIN_NO_3;
|
||
gpio_pin->rx = GPIO_PIN_NO_2;
|
||
gpio_pin->rst = GPIO_PIN_NO_57;
|
||
gpio_pin->pwr_en = GPIO_PIN_NO_87;
|
||
#elif defined(__QUECTEL_PROJECT_EG915NLA_GK__)
|
||
gpio_pin->tx = GPIO_PIN_36;
|
||
gpio_pin->rx = GPIO_PIN_35;
|
||
gpio_pin->rst = GPIO_PIN_20;
|
||
gpio_pin->pwr_en = GPIO_PIN_11;
|
||
#else
|
||
gpio_pin->rst = GPIO_PIN_NO_71;
|
||
#endif
|
||
|
||
return 0;
|
||
}
|
||
#endif
|
||
|
||
int HOST_RESET_GPS_GPIO;
|
||
int HOST_RESET_FUNC_MFPR;
|
||
int HOST_WAKE_GPS_GPIO;
|
||
int HOST_WAKE_GPS_FUNC_MFPR;
|
||
int GPS_WAKE_HOST_GPIO;
|
||
int GPS_WAKE_HOST_FUNC_MFPR;
|
||
#include "quec_asr_gps_support.h"
|
||
void quec_asr_gnss_pin_init(void)
|
||
{
|
||
#ifdef QUEC_GPS_SUPPORT
|
||
#if !defined(CRANELS_SUPPORT) && !defined(CRANELG_SUPPORT) && !defined(CRANELRH_SUPPORT) //外置
|
||
#if defined(JACANA_ASR1606L_DKB_V10_ASR)
|
||
HOST_RESET_GPS_GPIO = GPIO_PIN_NO_121; //gps复位引脚
|
||
GPS_WAKE_HOST_GPIO = GPIO_PIN_NO_119; //gps唤醒主机
|
||
HOST_WAKE_GPS_GPIO=GPIO_PIN_NO_120; //主机唤醒gps引脚
|
||
HOST_RESET_FUNC_MFPR=0;
|
||
GPS_WAKE_HOST_FUNC_MFPR =1;
|
||
HOST_WAKE_GPS_FUNC_MFPR = 1;
|
||
#elif defined(JACANA_ASR1602_DKB_V10_ASR)
|
||
HOST_RESET_GPS_GPIO = GPIO_PIN_NO_87; //gps复位引脚
|
||
GPS_WAKE_HOST_GPIO = GPIO_PIN_NO_84; //gps唤醒主机
|
||
#if defined (__QUECTEL_PROJECT_EG915KEU_LA__) || defined (__QUECTEL_PROJECT_EG915KEU_LG__) || defined (__QUECTEL_PROJECT_EG915KLA_LG__)
|
||
HOST_WAKE_GPS_GPIO = GPIO_PIN_NO_89; //主机唤醒gps引脚
|
||
#else
|
||
HOST_WAKE_GPS_GPIO = GPIO_PIN_NO_86; //主机唤醒gps引脚
|
||
#endif
|
||
HOST_RESET_FUNC_MFPR=1;
|
||
GPS_WAKE_HOST_FUNC_MFPR =1;
|
||
HOST_WAKE_GPS_FUNC_MFPR = 1;
|
||
#else
|
||
#error "gnss gpio no init"
|
||
#endif
|
||
asr_gnss_pin_init();
|
||
#endif
|
||
#endif
|
||
}
|
||
|
||
|
||
int ql_sfp_eint_register(GPIO_PIN_NUMBER_E gpio_num, void *wakeup_eint_cb)
|
||
{
|
||
return quec_sfp_eint_register(gpio_num,wakeup_eint_cb);
|
||
}
|
||
|
||
int ql_sfp_eint_unregister(GPIO_PIN_NUMBER_E gpio_num)
|
||
{
|
||
return quec_sfp_eint_unregister(gpio_num);
|
||
}
|
||
|
||
int ql_peripherals_pin_not_config(GPIO_PIN_NUMBER_E gpio_num)
|
||
{
|
||
int ret = 0;
|
||
ret = quec_peripherals_pin_not_config(gpio_num);
|
||
return ret;
|
||
}
|