Files
banban/ql-kernel/threadx/hal/gpio/ql_gpio.c
T

273 lines
7.7 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*================================================================
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;
}