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 <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/ioport.h>
#include <linux/errno.h>
#include <linux/spi/spi.h>
#include <linux/workqueue.h>
#include <linux/dma-mapping.h>
#include <linux/platform_device.h>
#include <linux/interrupt.h>
#include <linux/irqreturn.h>
#include <linux/types.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/spinlock.h>
#include <linux/sched.h>
#include <linux/wakelock.h>
#include <mach/mt_gpio.h>

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驅動的啓動支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章