MTK平台使用代码对GPIO管脚进行设置

平台:MTK6795 Android5.0

目的:在MTK6795平台使用代码对MT6795的GPIO166 GPIO167 GPIO168 GPIO169管脚设置成普通的GPIO功能,输出

在Android的内核源码目录kernel-3.10/include/mach/mt_gpio.h中看到

/******************************************************************************
* GPIO Driver interface
******************************************************************************/
/*direction*/
int mt_set_gpio_dir(unsigned long pin, unsigned long dir);
int mt_get_gpio_dir(unsigned long pin);

/*pull enable*/
int mt_set_gpio_pull_enable(unsigned long pin, unsigned long enable);
int mt_get_gpio_pull_enable(unsigned long pin);

/*schmitt trigger*/
int mt_set_gpio_smt(unsigned long pin, unsigned long enable);
int mt_get_gpio_smt(unsigned long pin);

/*IES*/
int mt_set_gpio_ies(unsigned long pin, unsigned long enable);
int mt_get_gpio_ies(unsigned long pin);

/*pull select*/
int mt_set_gpio_pull_select(unsigned long pin, unsigned long select);
int mt_get_gpio_pull_select(unsigned long pin);

/*data inversion*/
int mt_set_gpio_inversion(unsigned long pin, unsigned long enable);
int mt_get_gpio_inversion(unsigned long pin);

/*input/output*/
int mt_set_gpio_out(unsigned long pin, unsigned long output);
int mt_get_gpio_out(unsigned long pin);
int mt_get_gpio_in(unsigned long pin);

/*mode control*/
int mt_set_gpio_mode(unsigned long pin, unsigned long mode);
int mt_get_gpio_mode(unsigned long pin);

上述的这些接口函数类似于linux的gpio_request/gpio_set_direction等的gpio操作函数

利用上述的几个函数设置GPIO166 GPIO167 GPIO168 GPIO169的输出,上拉,GPIO功能的示例gpio_test.c:

//gpio_test.c

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

static int __init gpio_test_init ( void )
{
        printk ("%s:%s[%d] \n", __FILE__, __func__, __LINE__);
        mt_set_gpio_mode (GPIO166, 1);
	    mt_set_gpio_dir (GPIO166, GPIO_DIR_OUT);
	    mt_set_gpio_pull_enable (GPIO166, GPIO_PULL_ENABLE);
	    mt_set_gpio_pull_select (GPIO166, GPIO_PULL_UP);

	    mt_set_gpio_mode (GPIO167, 1);
	    mt_set_gpio_dir (GPIO167, GPIO_DIR_OUT);
	    mt_set_gpio_pull_enable (GPIO167, GPIO_PULL_ENABLE);
	    mt_set_gpio_pull_select (GPIO167, GPIO_PULL_UP);

	    mt_set_gpio_mode (GPIO168, 1);
	    mt_set_gpio_dir (GPIO168, GPIO_DIR_OUT);
	    mt_set_gpio_pull_enable (GPIO168, GPIO_PULL_ENABLE);
	    mt_set_gpio_pull_select (GPIO168, GPIO_PULL_UP);

	    mt_set_gpio_mode (GPIO169, 1);
	    mt_set_gpio_dir (GPIO169, GPIO_DIR_OUT);
	    mt_set_gpio_pull_enable (GPIO169, GPIO_PULL_ENABLE);
	    mt_set_gpio_pull_select (GPIO169, GPIO_PULL_UP);

}

static void __exit gpio_test_exit ( void )
{
        printk ("%s:%s[%d] \n", __FILE__, __func__, __LINE__);
}

module_init ( gpio_test_init );
module_exit ( gpio_test_exit );

MODULE_LICENSE ( "GPL" );

然后将gpio_test.c编译到内核,再烧写镜像,查看启动日志就可以看到gpio_test驱动的启动支持。

你可能感兴趣的:(嵌入式)