原文地址:http://wenku.baidu.com/link?url=5ry8VUdQA7-vhasbcfWwfOOTOteFvZCHxWVqAnix3z7kd7TVK4VRPHv22M2C17MAoSdd25mGYCI2qAhs9gwC-TZ1sCVpF24MTBzr8ET3AkG
1. 引言
1.1. 編寫(xiě)目的
本文檔主要介紹pinctrl接口使用方法。
1.2. 適應范圍
硬件平臺:A33
軟件版本:Linux-3.4及后續內核版本
1.3. 相關(guān)人員
本文檔可供系統維護人員、驅動(dòng)開(kāi)發(fā)人員和測試人員參考。
2. pinctrl子系統
2.1. 概述
許多Soc內部都包含pin控制器,通過(guò)pin控制器的寄存器,我們可以配置一個(gè)或者一組引腳的功能和特性。
在軟件方面,linux內核中提供了pinctrl子系統,目的是為了統一各SoC廠(chǎng)商的pin腳管理,避免各SoC廠(chǎng)商各自實(shí)現相同的pin腳管理子系統,減少SoC廠(chǎng)商系統移植工作量。
通過(guò)pinctrl驅動(dòng)可以操作pin控制器,完成如下工作: 1. 枚舉并且命名pin控制器可控制的所有引腳; 2. 提供引腳的復用能力;
3. 提供配置引腳的能力,如驅動(dòng)能力、上拉下拉和數據屬性等;
基于sunxi平臺實(shí)現的pinctrl驅動(dòng),是在linux pinctrl驅動(dòng)通用框架上進(jìn)行實(shí)現與擴張的,平臺實(shí)現的pinctrl驅動(dòng)除了擁有以上功能之外,還具有如下功能: 1. 與gpio子系統的交互; 2. 實(shí)現pin中斷;
2.2. 內核配置
A33平臺默認選上pinctrl相關(guān)配置。Pinctrl子系統調試信息配置如下: Device Drivers --->
Pin controllers --->
[*] Debug PINCTRL calls
2.3. sys_config.fex
在sys_config中,gpio描述形式為:
port:端口+組內序號<功能分配><內部電阻狀態(tài)><驅動(dòng)能力><輸出電平> 1. 端口,例如:PA, PB, PC, …… 2. 組內序號,例如:0, 1, 2, ……
3. 功能分配,指定pin腳功能,參考IC datasheet
4. 內部電阻狀態(tài),包括三種狀態(tài),0:上拉下拉禁用(默認),1:上拉,2:下拉 5. 驅動(dòng)能力,可配驅動(dòng)能力四級,分別是0(默認),1,2,3 6. 輸出電平,0或者1,只有當pin腳配成輸出時(shí)才生效
示例:
[uart0]
uart_used = 1 uart_port = 0 uart_type = 2
uart_tx = port:PF2<4><1><default><default> uart_rx = port:PF4<4><1><default><default>
C
on
fi
den
ti
al
第 6 頁(yè) 共 11 頁(yè)
2.4. 模塊加載
編進(jìn)內核,無(wú)需加載。
2.5. 依賴(lài)資源
sys_config模塊。
3. pinctrl接口
常用接口:
? devm_pinctrl_get_select_default
3.1. devm_pinctrl_get
函數原型 struct pinctrl * evm_pinctrl_get(struct device *dev);
函數功能
根據設備獲取pin操作句柄,所以的pin操作必須基于此pinctrl句柄。與pinctrl_get接口功能完全一樣,只是devm_pinctrl_get會(huì )將申請的pinctrl句柄做記賬,綁定到設備句柄信息中。
設備驅動(dòng)申請pin資源,推薦優(yōu)先使用devm_pinctrl_get接口。 返回值 pinctrl句柄
參數 dev:使用pin的設備,pinctrl子系統會(huì )通過(guò)設備名與pin配置信息匹配。
3.2. devm_pinctrl_put
函數原型 void devm_pinctrl_put(struct pinctrl *p);
函數功能 釋放pinctrl句柄,必須與devm_pinctrl_get配對使用。 返回值 無(wú)
參數 p:pinctrl句柄
3.3. pinctrl_lookup_state
函數原型 struct pinctrl_state * pinctrl_lookup_state(struct pinctrl *p, const char *name); 函數功能 查找pin句柄指定狀態(tài)下的狀態(tài)句柄。 返回值 狀態(tài)句柄 參數 p:pinctrl句柄
name:狀態(tài)名稱(chēng),A33平臺上只有default一種狀態(tài)