通用輸入/輸出 (GPIO)¶
目錄
核心¶
-
struct gpio_irq_chip¶
GPIO 中斷控制器
定義:
struct gpio_irq_chip {
struct irq_chip *chip;
struct irq_domain *domain;
#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY;
struct fwnode_handle *fwnode;
struct irq_domain *parent_domain;
int (*child_to_parent_hwirq)(struct gpio_chip *gc,unsigned int child_hwirq,unsigned int child_type,unsigned int *parent_hwirq, unsigned int *parent_type);
int (*populate_parent_alloc_arg)(struct gpio_chip *gc,union gpio_irq_fwspec *fwspec,unsigned int parent_hwirq, unsigned int parent_type);
unsigned int (*child_offset_to_irq)(struct gpio_chip *gc, unsigned int pin);
struct irq_domain_ops child_irq_domain_ops;
#endif;
irq_flow_handler_t handler;
unsigned int default_type;
struct lock_class_key *lock_key;
struct lock_class_key *request_key;
irq_flow_handler_t parent_handler;
union {
void *parent_handler_data;
void **parent_handler_data_array;
};
unsigned int num_parents;
unsigned int *parents;
unsigned int *map;
bool threaded;
bool per_parent_data;
bool initialized;
bool domain_is_allocated_externally;
int (*init_hw)(struct gpio_chip *gc);
void (*init_valid_mask)(struct gpio_chip *gc,unsigned long *valid_mask, unsigned int ngpios);
unsigned long *valid_mask;
unsigned int first;
void (*irq_enable)(struct irq_data *data);
void (*irq_disable)(struct irq_data *data);
void (*irq_unmask)(struct irq_data *data);
void (*irq_mask)(struct irq_data *data);
};
成員
chipGPIO IRQ 晶片實現,由 GPIO 驅動程式提供。
domain中斷轉換域;負責在 GPIO hwirq 編號和 Linux IRQ 編號之間進行對映。
fwnode與此 gpiochip/irqchip 對應的韌體節點,對於分層 irqdomain 支援是必需的。
parent_domain如果非 NULL,將設定為此 GPIO 中斷控制器的 IRQ 域的父域,以建立分層中斷域。 它的存在將啟用分層中斷支援。
child_to_parent_hwirq此回撥將子硬體 IRQ 偏移量轉換為分層中斷晶片上的父硬體 IRQ 偏移量。 子硬體 IRQ 對應於 GPIO 索引 0..ngpio-1(請參閱
struct gpio_chip的 ngpio 欄位),相應的父硬體 IRQ 和型別(例如 IRQ_TYPE_*)應由驅動程式返回。 驅動程式可以從偏移量或使用查詢表或最適合此晶片的任何方法來計算此值。 在驅動程式中成功轉換後返回 0。如果某些硬體 IRQ 範圍沒有相應的父 HWIRQ,則返回 -EINVAL,但也要確保填寫 **valid_mask** 和 **need_valid_mask** 以使這些 GPIO 線無法用於轉換。
populate_parent_alloc_arg此可選回撥分配並填充父級的 IRQ 域的特定結構。 如果未指定,則將使用
gpiochip_populate_parent_fwspec_twocell。 還有一個名為gpiochip_populate_parent_fwspec_fourcell的四單元變體可用。child_offset_to_irq此可選回撥用於將 GPIO 晶片上的子 GPIO 線偏移量轉換為 GPIO to_irq() 回撥的 IRQ 編號。 如果未指定,則將提供一個預設回撥,該回調將返回行偏移量。
child_irq_domain_ops將用於此 GPIO IRQ 晶片的 IRQ 域操作。 如果未提供任何操作,則將填充預設回撥以設定 IRQ 層次結構。 一些驅動程式需要提供自己的轉換函式。
handler用於 GPIO IRQ 的 IRQ 處理程式(通常是預定義 IRQ 核心函式),由 GPIO 驅動程式提供。
default_type在 GPIO 驅動程式初始化期間應用的預設 IRQ 觸發型別,由 GPIO 驅動程式提供。
lock_key每個 GPIO IRQ 晶片的 lockdep 類用於 IRQ 鎖定。
request_key每個 GPIO IRQ 晶片的 lockdep 類用於 IRQ 請求。
parent_handlerGPIO 晶片的父中斷的中斷處理程式,如果父中斷是巢狀的而不是級聯的,則可以為 NULL。
{unnamed_union}anonymous
parent_handler_data如果 per_parent_data 為 false,則 parent_handler_data 是一個用作與每個父中斷關聯的資料的單個指標。
parent_handler_data_array如果 per_parent_data 為 true,則 parent_handler_data_array 是一個 num_parents 指標陣列,用於為每個父級關聯不同的資料。 如果 per_parent_data 為 true,則不能為 NULL。
num_parentsGPIO 晶片的父中斷的數量。
parentsGPIO 晶片的父中斷列表。 這由驅動程式擁有,因此核心只會引用此列表,而不會修改它。
mapGPIO 晶片的每條線的父中斷列表。
threaded如果設定了中斷處理使用巢狀執行緒,則為 True。
per_parent_data如果 parent_handler_data_array 描述一個要用作父資料的 num_parents 大小的陣列,則為 True。
initialized跟蹤 GPIO 晶片 irq 成員初始化的標誌。 此標誌將確保在初始化之前不使用 GPIO 晶片 irq 成員。
domain_is_allocated_externally如果 irq_domain 是在 gpiolib 之外分配的,則為 True,在這種情況下,gpiolib 不會自行釋放 irq_domain。
init_hw在新增 IRQ 晶片之前初始化硬體的可選例程。 當特定驅動程式想要清除 IRQ 相關暫存器以避免不必要的事件時,這非常有用。
init_valid_mask用於初始化 valid_mask 的可選例程,如果不是所有 GPIO 線都是有效的中斷,則使用該例程。 有時,某些線只是無法觸發中斷,並且此例程(如果已定義)會在 “valid_mask” 中傳遞一個位圖,並且它將從 0..(ngpios-1) 設定 ngpios 位為 “1”,就像有效一樣。 然後,回撥可以直接將某些位設定為 “0”,如果它們不能用於中斷。
valid_mask如果不是
NULL,則儲存位掩碼,指示哪些 GPIO 可以包含在晶片的 IRQ 域中。first靜態 IRQ 分配所必需。 如果設定,
irq_domain_create_simple()將在初始化期間分配和對映所有 IRQ。irq_enable儲存舊的 irq_chip irq_enable 回撥
irq_disable儲存舊的 irq_chip irq_disable 回撥
irq_unmask儲存舊的 irq_chip irq_unmask 回撥
irq_mask儲存舊的 irq_chip irq_mask 回撥
-
struct gpio_chip¶
抽象 GPIO 控制器
定義:
struct gpio_chip {
const char *label;
struct gpio_device *gpiodev;
struct device *parent;
struct fwnode_handle *fwnode;
struct module *owner;
int (*request)(struct gpio_chip *gc, unsigned int offset);
void (*free)(struct gpio_chip *gc, unsigned int offset);
int (*get_direction)(struct gpio_chip *gc, unsigned int offset);
int (*direction_input)(struct gpio_chip *gc, unsigned int offset);
int (*direction_output)(struct gpio_chip *gc, unsigned int offset, int value);
int (*get)(struct gpio_chip *gc, unsigned int offset);
int (*get_multiple)(struct gpio_chip *gc,unsigned long *mask, unsigned long *bits);
void (*set)(struct gpio_chip *gc, unsigned int offset, int value);
void (*set_multiple)(struct gpio_chip *gc,unsigned long *mask, unsigned long *bits);
int (*set_rv)(struct gpio_chip *gc,unsigned int offset, int value);
int (*set_multiple_rv)(struct gpio_chip *gc,unsigned long *mask, unsigned long *bits);
int (*set_config)(struct gpio_chip *gc,unsigned int offset, unsigned long config);
int (*to_irq)(struct gpio_chip *gc, unsigned int offset);
void (*dbg_show)(struct seq_file *s, struct gpio_chip *gc);
int (*init_valid_mask)(struct gpio_chip *gc,unsigned long *valid_mask, unsigned int ngpios);
int (*add_pin_ranges)(struct gpio_chip *gc);
int (*en_hw_timestamp)(struct gpio_chip *gc,u32 offset, unsigned long flags);
int (*dis_hw_timestamp)(struct gpio_chip *gc,u32 offset, unsigned long flags);
int base;
u16 ngpio;
u16 offset;
const char *const *names;
bool can_sleep;
#if IS_ENABLED(CONFIG_GPIO_GENERIC);
unsigned long (*read_reg)(void __iomem *reg);
void (*write_reg)(void __iomem *reg, unsigned long data);
bool be_bits;
void __iomem *reg_dat;
void __iomem *reg_set;
void __iomem *reg_clr;
void __iomem *reg_dir_out;
void __iomem *reg_dir_in;
bool bgpio_dir_unreadable;
bool bgpio_pinctrl;
int bgpio_bits;
raw_spinlock_t bgpio_lock;
unsigned long bgpio_data;
unsigned long bgpio_dir;
#endif ;
#ifdef CONFIG_GPIOLIB_IRQCHIP;
struct gpio_irq_chip irq;
#endif ;
#if defined(CONFIG_OF_GPIO);
unsigned int of_gpio_n_cells;
bool (*of_node_instance_match)(struct gpio_chip *gc, unsigned int i);
int (*of_xlate)(struct gpio_chip *gc, const struct of_phandle_args *gpiospec, u32 *flags);
#endif ;
};
成員
labelGPIO 裝置的功能名稱,例如零件號或實現它的 SoC IP 塊的名稱。
gpiodev內部狀態保持器,不透明結構
parent提供 GPIO 的可選父裝置
fwnode可選的 fwnode 提供此控制器的屬性
owner有助於防止刪除匯出活動 GPIO 的模組
request晶片特定啟用的可選鉤子,例如啟用模組電源和時鐘;可能會休眠;成功時必須返回 0,失敗時返回負錯誤編號
free晶片特定停用的可選鉤子,例如停用模組電源和時鐘;可能會休眠
get_direction返回訊號 “offset” 的方向,0=輸出,1=輸入(與 GPIO_LINE_DIRECTION_OUT / GPIO_LINE_DIRECTION_IN 相同),或負錯誤。 建議始終實現此函式,即使在僅輸入或僅輸出 gpio 晶片上也是如此。
direction_input將訊號 “offset” 配置為輸入,成功時返回 0 或負錯誤編號。 可以在僅輸入或僅輸出 gpio 晶片上省略此項。
direction_output將訊號 “offset” 配置為輸出,成功時返回 0 或負錯誤編號。 可以在僅輸入或僅輸出 gpio 晶片上省略此項。
get返回訊號 “offset” 的值,0=低,1=高,或負錯誤
get_multiple讀取由 “mask” 定義的多個訊號的值,並將它們儲存在 “bits” 中,成功時返回 0 或負錯誤
set已棄用 - 請改用 set_rv()
set_multiple已棄用 - 請改用 set_multiple_rv()
set_rv分配訊號 “offset” 的輸出值,成功時返回 0 或負錯誤值
set_multiple_rv分配由 “mask” 定義的多個訊號的輸出值,成功時返回 0 或負錯誤值
set_config用於各種設定的可選鉤子。 使用與通用 pinconf 相同的打包配置格式。 成功時必須返回 0,失敗時返回負錯誤編號。
to_irq支援非靜態
gpiod_to_irq()對映的可選鉤子;實現可能不會休眠dbg_show在 debugfs 中顯示內容的可選例程;省略此項時將使用預設程式碼,但自定義程式碼可以顯示額外的狀態(例如上拉/下拉配置)。
init_valid_mask用於初始化 valid_mask 的可選例程,如果不是所有 GPIO 都有效,則使用該例程。
add_pin_ranges初始化引腳範圍的可選例程,當需要提供 GPIO 功能的引腳的特殊對映時使用。 它在新增 GPIO 晶片之後和新增 IRQ 晶片之前呼叫。
en_hw_timestamp依賴於 GPIO 晶片,用於啟用硬體時間戳的可選例程。
dis_hw_timestamp依賴於 GPIO 晶片,用於停用硬體時間戳的可選例程。
base標識此晶片處理的第一個 GPIO 編號;或者,如果在註冊期間為負,則請求動態 ID 分配。 棄用:提供任何非負值並鎖定 GPIO 晶片的基本偏移量已棄用。 請傳遞 -1 作為 base,以便 gpiolib 在所有可能的情況下選擇晶片 base。 我們希望從長遠來看擺脫靜態 GPIO 編號空間。
ngpio此控制器處理的 GPIO 的數量;處理的最後一個 GPIO 是 (base + ngpio - 1)。
offset當多個 gpio 晶片屬於同一裝置時,可以使用此值作為裝置中的偏移量,以便可以正確分配友好的名稱。
names如果設定,則必須是要用作此晶片中 GPIO 的備用名稱的字串陣列。 如果 GPIO 沒有別名,則陣列中的任何條目都可以為 NULL,但是陣列的長度必須為 ngpio 條目。
can_sleep如果 get()/set() 方法休眠,則必須設定標誌,因為它們必須透過 I2C 或 SPI 訪問 GPIO 擴充套件晶片時休眠。 這意味著如果晶片支援 IRQ,則需要對這些 IRQ 進行執行緒處理,因為晶片訪問可能會在休眠時(例如,讀取 IRQ 狀態暫存器)休眠。
read_reg通用 GPIO 的讀取器函式
write_reg通用 GPIO 的寫入器函式
be_bits如果通用 GPIO 具有大端位順序(位 31 表示行 0,位 30 表示行 1 ... 位 0 表示行 31),則通用 GPIO 核心會將其設定為 true。 它僅用於內部管理。
reg_dat通用 GPIO 的資料(輸入)暫存器
reg_set通用 GPIO 的輸出設定暫存器(輸出=高)
reg_clr通用 GPIO 的輸出清除暫存器(輸出=低)
reg_dir_out通用 GPIO 的方向輸出設定暫存器
reg_dir_in通用 GPIO 的方向輸入設定暫存器
bgpio_dir_unreadable指示方向暫存器無法讀取,我們需要依賴於我們的內部狀態跟蹤。
bgpio_pinctrl通用 GPIO 使用引腳控制後端。
bgpio_bits用於通用 GPIO 的暫存器位數,即 <暫存器寬度> * 8
bgpio_lock用於鎖定 chip->bgpio_data。 此外,需要將陰影資料暫存器和實際資料暫存器寫入在一起。
bgpio_data通用 GPIO 的陰影資料暫存器,用於安全地清除/設定位。
bgpio_dir通用 GPIO 的陰影方向暫存器,用於安全地清除/設定方向。 此字中的 “1” 表示該行設定為輸出。
irq將中斷晶片功能與 GPIO 晶片整合。 可用於處理大多數實際情況的 IRQ。
of_gpio_n_cells用於形成 GPIO 說明符的單元格數。 標準為 2 個單元格
gpios = <
gpio偏移量標誌>;一些複雜的 GPIO 控制器為每個裝置樹節點例項化多個晶片,並具有 3 個單元格
gpios = <
gpio例項偏移量標誌>;舊式 GPIO 控制器甚至可能具有 1 個單元格
gpios = <
gpio偏移量>;of_node_instance_match確定晶片是否是正確的例項。 必須由每個裝置樹節點使用多個 gpio_chip 的任何驅動程式實現。 如果 gc 是 i 指示的例項(這是 GPIO 線和 gpio-ranges 的 phandles 中的第一個單元格),則返回 true。
of_xlate回撥以將裝置樹 GPIO 說明符轉換為晶片相關的 GPIO 編號和標誌。
描述
gpio_chip 可以幫助平臺抽象各種 GPIO 源,以便可以透過通用程式設計介面訪問它們。 示例源包括 SOC 控制器、FPGA、多功能晶片、專用 GPIO 擴充套件器等。
每個晶片控制多個訊號,這些訊號在方法呼叫中由 0..(ngpio - 1) 範圍內的 “offset” 值標識。 當透過諸如 gpio_get_value(gpio) 之類的呼叫引用這些訊號時,offset 是透過從 gpio 編號中減去 base 來計算的。
-
for_each_hwgpio_in_range¶
for_each_hwgpio_in_range (_chip, _i, _base, _size, _label)
迭代給定範圍內的所有 GPIO
引數
_chip要迭代的晶片。
_i迴圈計數器。
_base遊俠中的第一個 GPIO。
_size要從 base 開始檢查的 GPIO 的數量。
_label如果請求了 GPIO,則儲存標籤地址的位置。 對於未使用的 GPIO,設定為 NULL。
-
for_each_hwgpio¶
for_each_hwgpio (_chip, _i, _label)
迭代給定晶片的所有 GPIO。
引數
_chip要迭代的晶片。
_i迴圈計數器。
_label如果請求了 GPIO,則儲存標籤地址的位置。 對於未使用的 GPIO,設定為 NULL。
-
for_each_requested_gpio_in_range¶
for_each_requested_gpio_in_range (_chip, _i, _base, _size, _label)
迭代給定範圍內的已請求 GPIO
引數
_chip要查詢的晶片
_i迴圈變數
_base範圍內的第一個 GPIO
_size要從 base 開始檢查的 GPIO 的數量
_label當前 GPIO 的標籤
-
gpiochip_add_data¶
gpiochip_add_data (gc, data)
註冊一個 gpio_chip
引數
gc要註冊的晶片,需要初始化 gc->base
data與此晶片關聯的驅動私有資料
上下文
可能在中斷工作之前
描述
當 gpiochip_add_data() 在啟動過程中很早被呼叫,以便可以自由使用 GPIO,gc->parent 裝置必須在 gpio 框架的 arch_initcall() 之前註冊。否則,GPIO 的 sysfs 初始化將粗魯地失敗。
gpiochip_add_data() 必須僅在 gpiolib 初始化之後呼叫,即在 core_initcall() 之後。
如果 gc->base 為負,則表示請求動態分配一系列有效的 GPIO。
返回值
如果無法註冊晶片,則返回一個負 errno,例如因為 gc->base 無效或已與不同的晶片關聯。 否則,它返回零作為成功程式碼。
-
struct gpio_pin_range¶
由 gpio 晶片控制的引腳範圍
定義:
struct gpio_pin_range {
struct list_head node;
struct pinctrl_dev *pctldev;
struct pinctrl_gpio_range range;
};
成員
node用於維護引腳範圍集的列表,內部使用
pctldev處理相應引腳的 pinctrl 裝置
range由 GPIO 控制器控制的實際引腳範圍
-
struct gpio_desc *gpio_to_desc(unsigned gpio)¶
將 GPIO 編號轉換為其描述符
引數
unsigned gpio全域性 GPIO 編號
返回值
與給定 GPIO 關聯的 GPIO 描述符。如果系統中不存在具有給定編號的 GPIO,則為 NULL。
-
struct gpio_desc *gpio_device_get_desc(struct gpio_device *gdev, unsigned int hwnum)¶
獲取此 GPIO 裝置的給定硬體編號對應的 GPIO 描述符
引數
struct gpio_device *gdev從中獲取描述符的 GPIO 裝置
unsigned int hwnum此晶片的 GPIO 的硬體編號
返回值
指向 GPIO 描述符的指標。如果指定硬體編號的給定晶片中不存在 GPIO,則為 EINVAL。如果基礎晶片已消失,則為 ENODEV。
描述
struct gpio_device 的引用計數NOT增加,就像請求 GPIO 以供獨佔使用時一樣。呼叫者需要確保 GPIO 裝置與其返回的描述符一起保持活動狀態。
-
int desc_to_gpio(const struct gpio_desc *desc)¶
將 GPIO 描述符轉換為整數名稱空間
引數
const struct gpio_desc *descGPIO 描述符
描述
這應該在將來消失,但由於我們仍然使用 GPIO 編號進行錯誤訊息和 sysfs 節點,因此是必需的。
返回值
由其描述符指定的 GPIO 的全域性 GPIO 編號。
引數
const struct gpio_desc *desc要返回晶片的描述符
描述
已棄用 此函式不安全,不應使用。 在不採用 SRCU 讀取鎖的情況下使用晶片地址可能會導致取消引用懸空指標。
返回值
支援此裝置的 GPIO 晶片的地址。
-
struct gpio_device *gpiod_to_gpio_device(struct gpio_desc *desc)¶
返回此描述符所屬的 GPIO 裝置。
引數
struct gpio_desc *desc要返回 GPIO 裝置的描述符。
描述
這DOES NOT增加 GPIO 裝置的引用計數,因為期望請求描述符,並且使用者已經持有對裝置的引用。
返回值
擁有此描述符的 GPIO 裝置的地址。
-
bool gpiod_is_equal(struct gpio_desc *desc, struct gpio_desc *other)¶
檢查兩個 GPIO 描述符是否引用同一個引腳。
引數
struct gpio_desc *desc要比較的描述符。
struct gpio_desc *other要比較的第二個描述符。
返回值
如果描述符引用同一個物理引腳,則為 True。否則為 False。
-
int gpio_device_get_base(struct gpio_device *gdev)¶
獲取此裝置分配的基本 GPIO 編號
引數
struct gpio_device *gdevGPIO 裝置
返回值
此裝置在全域性 GPIO 編號空間中的第一個 GPIO 編號。
-
const char *gpio_device_get_label(struct gpio_device *gdev)¶
獲取此 GPIO 裝置的標籤
引數
struct gpio_device *gdevGPIO 裝置
返回值
指向包含 GPIO 裝置標籤的字串的指標。字串的生存期與基礎 GPIO 裝置的生存期相關聯。
引數
struct gpio_device *gdevGPIO 裝置
返回值
支援此裝置的 GPIO 晶片的地址。
描述
已棄用 在我們可以擺脫 struct gpio_chip 的所有非驅動程式使用者之前,我們必須提供一種從 struct gpio_device 檢索指向它的指標的方法。這NOT安全,因為 GPIO API 被認為是可熱插拔的,並且晶片可能隨時消失(與引用計數的 struct gpio_device 不同)。
使用風險自負。
-
int gpiod_get_direction(struct gpio_desc *desc)¶
返回 GPIO 的當前方向
引數
struct gpio_desc *desc要獲取方向的 GPIO
返回值
輸出為 0,輸入為 1,如果出錯,則為錯誤程式碼。
描述
如果 gpiod_cansleep() 為真,此函式可能會睡眠。
引數
const struct gpio_chip *gc查詢其有效性資訊的 GPIO 晶片
返回值
表示有效 GPIO 的點陣圖。如果所有 GPIO 都有效,則為 NULL。
描述
某些 GPIO 晶片可能支援某些引腳不可用的配置。 這些晶片可以設定 valid_mask 以表示有效的 GPIO。 此函式可用於檢索此資訊。
引數
struct gpio_chip *gcGPIO 晶片
返回值
晶片的每個子驅動程式資料。
引數
struct gpio_chip *gc要登出的晶片
描述
不能刪除具有任何仍被請求的 GPIO 的 gpio_chip。
-
struct gpio_device *gpio_device_find(const void *data, int (*match)(struct gpio_chip *gc, const void *data))¶
查詢特定的 GPIO 裝置
引數
const void *data要傳遞給匹配函式的資料
int (*match)(struct gpio_chip *gc, const void *data)用於檢查 gpio_chip 的回撥函式
返回值
struct gpio_device 的新引用。
描述
類似於 bus_find_device()。它根據使用者提供的 match 回撥返回對 gpio_device 的引用。如果裝置不匹配,回撥應返回 0,如果匹配,則返回非零值。如果回撥返回非零值,則此函式將返回給呼叫者,並且不會遍歷任何更多的 gpio_devices。
回撥函式將 GPIO 晶片結構作為引數。在回撥函式執行期間,晶片受到保護,免於被釋放。TODO:這實際上尚未實現。
如果該函式返回非 NULL,則必須使用 gpio_device_put()釋放返回的引用。
-
struct gpio_device *gpio_device_find_by_label(const char *label)¶
圍繞
gpio_device_find()的包裝器,透過其支援晶片的標籤查詢 GPIO 裝置
-
struct gpio_device *gpio_device_find_by_fwnode(const struct fwnode_handle *fwnode)¶
圍繞
gpio_device_find()的包裝器,透過其 fwnode 查詢 GPIO 裝置
-
struct gpio_device *gpio_device_get(struct gpio_device *gdev)¶
增加此 GPIO 裝置的引用計數
引數
struct gpio_device *gdev要增加引用計數的 GPIO 裝置
返回值
指向 gdev 的指標。
-
void gpio_device_put(struct gpio_device *gdev)¶
減少此 GPIO 裝置的引用計數,並可能釋放與之關聯的所有資源。
引數
struct gpio_device *gdev要減少引用計數的 GPIO 裝置
-
struct device *gpio_device_to_device(struct gpio_device *gdev)¶
檢索基礎
struct device的地址。
引數
struct gpio_device *gdev要返回地址的 GPIO 裝置。
描述
這不會增加 GPIO 裝置或基礎 struct device 的引用計數。
返回值
支援此 GPIO 裝置的 struct device 的地址。
-
int gpiochip_irqchip_add_domain(struct gpio_chip *gc, struct irq_domain *domain)¶
將一個 irqdomain 新增到一個 gpiochip
引數
struct gpio_chip *gc要向其新增 irqchip 的 gpiochip
struct irq_domain *domain要新增到 gpiochip 的 irqdomain
描述
此函式將一個 IRQ 域新增到 gpiochip。
返回值
成功時返回 0,失敗時返回負的 errno。
引數
struct gpio_chip *gc擁有 GPIO 的 gpiochip
unsigned int offset要為 GPIO 功能請求的 GPIO 偏移量
返回值
成功時返回 0,失敗時返回負的 errno。
引數
struct gpio_chip *gc要為其請求 gpio 功能的 gpiochip
unsigned int offset要從 GPIO 功能釋放的 GPIO 偏移量
-
int gpiochip_generic_config(struct gpio_chip *gc, unsigned int offset, unsigned long config)¶
應用引腳的配置
引數
struct gpio_chip *gc擁有 GPIO 的 gpiochip
unsigned int offset要應用配置的 GPIO 偏移量
unsigned long config要應用的配置
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiochip_add_pingroup_range(struct gpio_chip *gc, struct pinctrl_dev *pctldev, unsigned int gpio_offset, const char *pin_group)¶
新增 GPIO <-> 引腳對映的範圍
引數
struct gpio_chip *gc要為其新增範圍的 gpiochip
struct pinctrl_dev *pctldev要對映到的引腳控制器
unsigned int gpio_offset當前 gpio_chip 編號空間中的起始偏移量
const char *pin_group引腳控制器內的引腳組的名稱
描述
直接從 DeviceTree 支援的 pinctrl 驅動程式呼叫此函式已被棄用。請參閱 Documentation/devicetree/bindings/gpio/gpio.txt 的第 2.1 節,瞭解如何透過 “gpio-ranges” 屬性繫結 pinctrl 和 gpio 驅動程式。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiochip_add_pin_range(struct gpio_chip *gc, const char *pinctl_name, unsigned int gpio_offset, unsigned int pin_offset, unsigned int npins)¶
新增 GPIO <-> 引腳對映的範圍
引數
struct gpio_chip *gc要為其新增範圍的 gpiochip
const char *pinctl_name要對映到的引腳控制器的
dev_name()unsigned int gpio_offset當前 gpio_chip 編號空間中的起始偏移量
unsigned int pin_offset引腳控制器編號空間中的起始偏移量
unsigned int npins從每個引腳空間(GPIO 和引腳控制器)的偏移量開始,在此範圍內累積的引腳數
描述
直接從 DeviceTree 支援的 pinctrl 驅動程式呼叫此函式已被棄用。請參閱 Documentation/devicetree/bindings/gpio/gpio.txt 的第 2.1 節,瞭解如何透過 “gpio-ranges” 屬性繫結 pinctrl 和 gpio 驅動程式。
返回值
成功時返回 0,失敗時返回負的 errno。
引數
struct gpio_chip *gc要為其刪除所有對映的晶片
引數
struct gpio_chip *gc控制此行的 GPIO 晶片。
unsigned int offset該行的硬體偏移量。
返回值
指向使用者標籤副本的指標(如果已請求該行),否則為 NULL。如果返回了有效的指標,則必須使用 kfree() 釋放它。如果發生記憶體分配錯誤,該函式將返回 ENOMEM。
描述
不得從原子上下文中呼叫。
-
struct gpio_desc *gpiochip_request_own_desc(struct gpio_chip *gc, unsigned int hwnum, const char *label, enum gpio_lookup_flags lflags, enum gpiod_flags dflags)¶
允許 GPIO 晶片請求自己的描述符
引數
struct gpio_chip *gcGPIO 晶片
unsigned int hwnum要為其請求描述符的 GPIO 的硬體編號
const char *labelGPIO 的標籤
enum gpio_lookup_flags lflags此 GPIO 的查詢標誌,如果為預設值則為 0,這可用於指定諸如具有機器標誌(例如 GPIO_OUT_LOW)的線路反轉語義
enum gpiod_flags dflags此 GPIO 的描述符請求標誌,如果為預設值則為 0,這可用於指定使用者語義,例如開漏
描述
函式允許 GPIO 晶片驅動程式透過 gpiolib API 請求並使用它們自己的 GPIO 描述符。與 gpiod_request() 的區別在於,此函式不會增加 GPIO 晶片模組的引用計數。這允許根據需要解除安裝 GPIO 晶片模組(我們假設 GPIO 晶片驅動程式處理釋放它已請求的 GPIO)。
返回值
指向 GPIO 描述符的指標,或者指向 ERR_PTR() 編碼的負錯誤程式碼(如果失敗)。
-
void gpiochip_free_own_desc(struct gpio_desc *desc)¶
釋放晶片驅動程式請求的 GPIO
-
int gpiod_direction_input(struct gpio_desc *desc)¶
將 GPIO 方向設定為輸入
引數
struct gpio_desc *desc要設定為輸入的 GPIO
描述
將傳遞的 GPIO 的方向設定為輸入,例如可以在其上安全地呼叫 gpiod_get_value()。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_direction_output_raw(struct gpio_desc *desc, int value)¶
將 GPIO 方向設定為輸出
引數
struct gpio_desc *desc要設定為輸出的 GPIO
int valueGPIO 的初始輸出值
描述
將傳遞的 GPIO 的方向設定為輸出,例如可以在其上安全地呼叫 gpiod_set_value()。輸出的初始值必須指定為物理線路上的原始值,而不考慮 ACTIVE_LOW 狀態。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_direction_output(struct gpio_desc *desc, int value)¶
將 GPIO 方向設定為輸出
引數
struct gpio_desc *desc要設定為輸出的 GPIO
int valueGPIO 的初始輸出值
描述
將傳遞的 GPIO 的方向設定為輸出,例如可以在其上安全地呼叫 gpiod_set_value()。輸出的初始值必須指定為 GPIO 的邏輯值,即考慮其 ACTIVE_LOW 狀態。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_enable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags)¶
以納秒為單位啟用硬體時間戳。
引數
struct gpio_desc *desc要啟用的 GPIO。
unsigned long flags與 GPIO 邊沿相關的標誌。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_disable_hw_timestamp_ns(struct gpio_desc *desc, unsigned long flags)¶
停用硬體時間戳。
引數
struct gpio_desc *desc要停用的 GPIO。
unsigned long flags與 GPIO 邊沿相關的標誌,與啟用呼叫期間使用的值相同。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_set_config(struct gpio_desc *desc, unsigned long config)¶
為 GPIO 設定 config
引數
struct gpio_desc *desc要為其設定配置的 GPIO 的描述符
unsigned long config與通用 pinconf 相同的壓縮配置格式
返回值
成功時返回 0,如果控制器不支援設定配置,則返回 -ENOTSUPP。
-
int gpiod_set_debounce(struct gpio_desc *desc, unsigned int debounce)¶
為 GPIO 設定 debounce 時間
引數
struct gpio_desc *desc要為其設定 debounce 時間的 GPIO 的描述符
unsigned int debounce以微秒為單位的 debounce 時間
返回值
成功時返回 0,如果控制器不支援設定 debounce 時間,則返回 -ENOTSUPP。
-
int gpiod_is_active_low(const struct gpio_desc *desc)¶
測試 GPIO 是否為低電平有效
引數
const struct gpio_desc *desc要測試的 gpio 描述符
返回值
如果 GPIO 為低電平有效,則返回 1,否則返回 0。
-
void gpiod_toggle_active_low(struct gpio_desc *desc)¶
切換 GPIO 是否為低電平有效
引數
struct gpio_desc *desc要更改的 gpio 描述符
-
int gpiod_get_raw_value(const struct gpio_desc *desc)¶
返回 gpio 的原始值
引數
const struct gpio_desc *desc將返回其值的 gpio
返回值
GPIO 的原始值,即物理線路的值,不考慮其 ACTIVE_LOW 狀態,如果失敗,則返回負的 errno。
描述
此函式可以從我們無法休眠的上下文中呼叫,並且如果 GPIO 晶片函式可能休眠,則會發出警告。
-
int gpiod_get_value(const struct gpio_desc *desc)¶
返回 gpio 的值
引數
const struct gpio_desc *desc將返回其值的 gpio
返回值
GPIO 的邏輯值,即考慮 ACTIVE_LOW 狀態,如果失敗,則返回負的 errno。
描述
此函式可以從我們無法休眠的上下文中呼叫,並且如果 GPIO 晶片函式可能休眠,則會發出警告。
-
int gpiod_get_raw_array_value(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
從 GPIO 陣列讀取原始值
引數
unsigned int array_size描述符陣列/值點陣圖中的元素數量
struct gpio_desc **desc_array將要讀取值的 GPIO 描述符陣列
struct gpio_array *array_info關於快速點陣圖處理路徑的適用性的資訊
unsigned long *value_bitmap用於儲存讀取的值的點陣圖
描述
讀取 GPIO 的原始值,即物理線路的值,而不考慮其 ACTIVE_LOW 狀態。
此函式可以從我們無法睡眠的上下文呼叫,如果 GPIO 晶片函式可能睡眠,它會報錯。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_get_array_value(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
從 GPIO 陣列讀取值
引數
unsigned int array_size描述符陣列/值點陣圖中的元素數量
struct gpio_desc **desc_array將要讀取值的 GPIO 描述符陣列
struct gpio_array *array_info關於快速點陣圖處理路徑的適用性的資訊
unsigned long *value_bitmap用於儲存讀取的值的點陣圖
描述
讀取 GPIO 的邏輯值,即考慮其 ACTIVE_LOW 狀態。
此函式可以從我們無法睡眠的上下文呼叫,如果 GPIO 晶片函式可能睡眠,它會報錯。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_set_raw_value(struct gpio_desc *desc, int value)¶
分配 GPIO 的原始值
引數
struct gpio_desc *desc將要分配值的 GPIO
int value要分配的值
描述
設定 GPIO 的原始值,即物理線路的值,而不考慮其 ACTIVE_LOW 狀態。
此函式可以從我們無法休眠的上下文中呼叫,並且如果 GPIO 晶片函式可能休眠,則會發出警告。
返回值
成功時為 0,失敗時為負錯誤號。
-
int gpiod_set_value(struct gpio_desc *desc, int value)¶
分配 GPIO 的值
引數
struct gpio_desc *desc將要分配值的 GPIO
int value要分配的值
描述
設定 GPIO 的邏輯值,即考慮其 ACTIVE_LOW、OPEN_DRAIN 和 OPEN_SOURCE 標誌。
此函式可以從我們無法休眠的上下文中呼叫,並且如果 GPIO 晶片函式可能休眠,則會發出警告。
返回值
成功時為 0,失敗時為負錯誤號。
-
int gpiod_set_raw_array_value(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
為 GPIO 陣列分配值
引數
unsigned int array_size描述符陣列/值點陣圖中的元素數量
struct gpio_desc **desc_array將要分配值的 GPIO 描述符陣列
struct gpio_array *array_info關於快速點陣圖處理路徑的適用性的資訊
unsigned long *value_bitmap要分配的值的點陣圖
描述
設定 GPIO 的原始值,即物理線路的值,而不考慮其 ACTIVE_LOW 狀態。
此函式可以從我們無法休眠的上下文中呼叫,並且如果 GPIO 晶片函式可能休眠,則會發出警告。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_set_array_value(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
為 GPIO 陣列分配值
引數
unsigned int array_size描述符陣列/值點陣圖中的元素數量
struct gpio_desc **desc_array將要分配值的 GPIO 描述符陣列
struct gpio_array *array_info關於快速點陣圖處理路徑的適用性的資訊
unsigned long *value_bitmap要分配的值的點陣圖
描述
設定 GPIO 的邏輯值,即考慮其 ACTIVE_LOW 狀態。
此函式可以從我們無法休眠的上下文中呼叫,並且如果 GPIO 晶片函式可能休眠,則會發出警告。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_cansleep(const struct gpio_desc *desc)¶
報告 GPIO 值訪問是否可能睡眠
引數
const struct gpio_desc *desc要檢查的 GPIO
返回值
不可睡眠時為 0,可睡眠時為 1,如果出錯則為錯誤程式碼。
-
int gpiod_set_consumer_name(struct gpio_desc *desc, const char *name)¶
設定描述符的使用者名稱
引數
struct gpio_desc *desc要在其上設定使用者名稱的 GPIO
const char *name新的使用者名稱
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_to_irq(const struct gpio_desc *desc)¶
返回與 GPIO 對應的 IRQ
引數
const struct gpio_desc *desc將返回其 IRQ 的 GPIO(已請求)
返回值
與傳遞的 GPIO 對應的 IRQ,如果出錯則為錯誤程式碼。
引數
struct gpio_chip *gc要鎖定的 GPIO 所屬的晶片
unsigned int offset要鎖定為 IRQ 的 GPIO 的偏移量
描述
這由希望鎖定某個 GPIO 線路以用於 IRQ 的 GPIO 驅動程式直接使用。
返回值
成功時返回 0,失敗時返回負的 errno。
引數
struct gpio_chip *gc要鎖定的 GPIO 所屬的晶片
unsigned int offset要鎖定為 IRQ 的 GPIO 的偏移量
描述
這由希望指示某個 GPIO 不再專門用於 IRQ 的 GPIO 驅動程式直接使用。
-
int gpiod_get_raw_value_cansleep(const struct gpio_desc *desc)¶
返回 gpio 的原始值
引數
const struct gpio_desc *desc將返回其值的 gpio
返回值
GPIO 的原始值,即物理線路的值,不考慮其 ACTIVE_LOW 狀態,如果失敗,則返回負的 errno。
描述
此函式應從可以睡眠的上下文呼叫。
-
int gpiod_get_value_cansleep(const struct gpio_desc *desc)¶
返回 gpio 的值
引數
const struct gpio_desc *desc將返回其值的 gpio
返回值
GPIO 的邏輯值,即考慮 ACTIVE_LOW 狀態,如果失敗,則返回負的 errno。
描述
此函式應從可以睡眠的上下文呼叫。
-
int gpiod_get_raw_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
從 GPIO 陣列讀取原始值
引數
unsigned int array_size描述符陣列/值點陣圖中的元素數量
struct gpio_desc **desc_array將要讀取值的 GPIO 描述符陣列
struct gpio_array *array_info關於快速點陣圖處理路徑的適用性的資訊
unsigned long *value_bitmap用於儲存讀取的值的點陣圖
描述
讀取 GPIO 的原始值,即物理線路的值,而不考慮其 ACTIVE_LOW 狀態。
此函式應從可以睡眠的上下文呼叫。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_get_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
從 GPIO 陣列讀取值
引數
unsigned int array_size描述符陣列/值點陣圖中的元素數量
struct gpio_desc **desc_array將要讀取值的 GPIO 描述符陣列
struct gpio_array *array_info關於快速點陣圖處理路徑的適用性的資訊
unsigned long *value_bitmap用於儲存讀取的值的點陣圖
描述
讀取 GPIO 的邏輯值,即考慮其 ACTIVE_LOW 狀態。
此函式應從可以睡眠的上下文呼叫。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_set_raw_value_cansleep(struct gpio_desc *desc, int value)¶
分配 GPIO 的原始值
引數
struct gpio_desc *desc將要分配值的 GPIO
int value要分配的值
描述
設定 GPIO 的原始值,即物理線路的值,而不考慮其 ACTIVE_LOW 狀態。
此函式應從可以睡眠的上下文呼叫。
返回值
成功時為 0,失敗時為負錯誤號。
-
int gpiod_set_value_cansleep(struct gpio_desc *desc, int value)¶
分配 GPIO 的值
引數
struct gpio_desc *desc將要分配值的 GPIO
int value要分配的值
描述
設定 GPIO 的邏輯值,即考慮其 ACTIVE_LOW 狀態
此函式應從可以睡眠的上下文呼叫。
返回值
成功時為 0,失敗時為負錯誤號。
-
int gpiod_set_raw_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
為 GPIO 陣列分配值
引數
unsigned int array_size描述符陣列/值點陣圖中的元素數量
struct gpio_desc **desc_array將要分配值的 GPIO 描述符陣列
struct gpio_array *array_info關於快速點陣圖處理路徑的適用性的資訊
unsigned long *value_bitmap要分配的值的點陣圖
描述
設定 GPIO 的原始值,即物理線路的值,而不考慮其 ACTIVE_LOW 狀態。
此函式應從可以睡眠的上下文呼叫。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_set_array_value_cansleep(unsigned int array_size, struct gpio_desc **desc_array, struct gpio_array *array_info, unsigned long *value_bitmap)¶
為 GPIO 陣列分配值
引數
unsigned int array_size描述符陣列/值點陣圖中的元素數量
struct gpio_desc **desc_array將要分配值的 GPIO 描述符陣列
struct gpio_array *array_info關於快速點陣圖處理路徑的適用性的資訊
unsigned long *value_bitmap要分配的值的點陣圖
描述
設定 GPIO 的邏輯值,即考慮其 ACTIVE_LOW 狀態。
此函式應從可以睡眠的上下文呼叫。
返回值
成功時返回 0,失敗時返回負的 errno。
-
void gpiod_add_lookup_table(struct gpiod_lookup_table *table)¶
註冊 GPIO 裝置使用者
引數
struct gpiod_lookup_table *table要註冊的使用者表
-
void gpiod_remove_lookup_table(struct gpiod_lookup_table *table)¶
登出 GPIO 裝置使用者
引數
struct gpiod_lookup_table *table要登出的使用者表
-
void gpiod_add_hogs(struct gpiod_hog *hogs)¶
從機器程式碼註冊一組 GPIO hogs
引數
struct gpiod_hog *hogsGPIO hog 條目的表,末尾有一個置零的哨兵
-
struct gpio_desc *fwnode_gpiod_get_index(struct fwnode_handle *fwnode, const char *con_id, int index, enum gpiod_flags flags, const char *label)¶
從韌體節點獲取 GPIO
引數
struct fwnode_handle *fwnode韌體節點的控制代碼
const char *con_idGPIO 使用者內部的函式
int index為使用者獲取的 GPIO 的索引
enum gpiod_flags flagsGPIO 初始化標誌
const char *label附加到請求的 GPIO 的標籤
描述
此函式可用於從不透明韌體獲取其配置的驅動程式。
該函式正確地使用任何底層韌體介面查詢相應的 GPIO,然後確保在將 GPIO 描述符返回給呼叫者之前請求它。
如果發生錯誤,則返回 ERR_PTR()。
返回值
成功請求後,GPIO 引腳將根據提供的 flags 進行配置。
引數
struct device *devGPIO 使用者,對於系統全域性 GPIO 可以為 NULL
const char *con_idGPIO 使用者內部的函式
返回值
與裝置/功能關聯的 GPIO 的數量,如果請求的功能未分配 GPIO,則返回 -ENOENT。
-
struct gpio_desc *gpiod_get(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
獲取給定 GPIO 功能的 GPIO
引數
struct device *devGPIO 使用者,對於系統全域性 GPIO 可以為 NULL
const char *con_idGPIO 使用者內部的函式
enum gpiod_flags flags可選的 GPIO 初始化標誌
返回值
對應於裝置 dev 的函式 con_id 的 GPIO 描述符;如果請求的功能未分配 GPIO,則返回 -ENOENT;如果嘗試獲取 GPIO 時發生錯誤,則返回另一個 IS_ERR() 程式碼。
-
struct gpio_desc *gpiod_get_optional(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
獲取給定 GPIO 功能的可選 GPIO
引數
struct device *devGPIO 使用者,對於系統全域性 GPIO 可以為 NULL
const char *con_idGPIO 使用者內部的函式
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
這等效於 gpiod_get(),不同之處在於當沒有 GPIO 分配給請求的功能時,它將返回 NULL。 這對於需要處理可選 GPIO 的驅動程式來說很方便。
返回值
對應於裝置 dev 的函式 con_id 的 GPIO 描述符;如果請求的功能未分配 GPIO,則返回 NULL;如果嘗試獲取 GPIO 時發生錯誤,則返回另一個 IS_ERR() 程式碼。
-
struct gpio_desc *gpiod_get_index(struct device *dev, const char *con_id, unsigned int idx, enum gpiod_flags flags)¶
從多索引 GPIO 功能獲取 GPIO
引數
struct device *devGPIO 使用者,對於系統全域性 GPIO 可以為 NULL
const char *con_idGPIO 使用者內部的函式
unsigned int idx在使用者中要獲取的 GPIO 的索引
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
此 gpiod_get() 的變體允許訪問為定義了多個 GPIO 的函式定義的第一個以外的 GPIO。
返回值
有效的 GPIO 描述符;如果請求的功能和/或索引未分配 GPIO,則返回 -ENOENT;如果嘗試獲取 GPIO 時發生錯誤,則返回另一個 IS_ERR() 程式碼。
-
struct gpio_desc *gpiod_get_index_optional(struct device *dev, const char *con_id, unsigned int index, enum gpiod_flags flags)¶
從多索引 GPIO 功能獲取可選 GPIO
引數
struct device *devGPIO 使用者,對於系統全域性 GPIO 可以為 NULL
const char *con_idGPIO 使用者內部的函式
unsigned int index在使用者中要獲取的 GPIO 的索引
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
這等效於 gpiod_get_index(),不同之處在於當沒有具有指定索引的 GPIO 分配給請求的功能時,它將返回 NULL。 這對於需要處理可選 GPIO 的驅動程式來說很方便。
返回值
有效的 GPIO 描述符;如果請求的功能和/或索引未分配 GPIO,則返回 NULL;如果嘗試獲取 GPIO 時發生錯誤,則返回另一個 IS_ERR() 程式碼。
-
struct gpio_descs *gpiod_get_array(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
從多索引 GPIO 功能獲取多個 GPIO
引數
struct device *devGPIO 使用者,對於系統全域性 GPIO 可以為 NULL
const char *con_idGPIO 使用者內部的函式
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
此函式獲取在給定功能下定義的所有 GPIO。
返回值
對應於裝置 dev 的函式 con_id 的 GPIO 描述符;如果請求的功能未分配 GPIO,則返回 -ENOENT;如果嘗試獲取 GPIO 時發生錯誤,則返回另一個 IS_ERR() 程式碼。
-
struct gpio_descs *gpiod_get_array_optional(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
從多索引 GPIO 功能獲取多個 GPIO
引數
struct device *devGPIO 使用者,對於系統全域性 GPIO 可以為 NULL
const char *con_idGPIO 使用者內部的函式
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
這等效於 gpiod_get_array(),不同之處在於當沒有 GPIO 分配給請求的功能時,它將返回 NULL。
返回值
對應於裝置 dev 的函式 con_id 的 GPIO 描述符;如果請求的功能未分配 GPIO,則返回 NULL;如果嘗試獲取 GPIO 時發生錯誤,則返回另一個 IS_ERR() 程式碼。
-
void gpiod_put(struct gpio_desc *desc)¶
處置 GPIO 描述符
-
void gpiod_put_array(struct gpio_descs *descs)¶
處置多個 GPIO 描述符
引數
struct gpio_descs *descs包含描述符陣列的 struct gpio_descs
ACPI 支援¶
-
bool acpi_gpio_get_io_resource(struct acpi_resource *ares, struct acpi_resource_gpio **agpio)¶
如果 ACPI 資源是 GPIO I/O 資源,則獲取其詳細資訊,否則返回 False。
引數
struct acpi_resource *ares指向要獲取的 ACPI 資源的指標
struct acpi_resource_gpio **agpio指向
struct acpi_resource_gpio的指標,用於儲存輸出指標
返回值
如果找到 GpioIo 資源,則返回 true,否則返回 false。
引數
struct gpio_chip *chipGPIO 晶片
描述
ACPI5 平臺可以使用 GPIO 訊號 ACPI 事件。 這些 GPIO 中斷由 ACPI 事件方法處理,這些方法需要從 GPIO 晶片的中斷處理程式中呼叫。 acpi_gpiochip_request_interrupts() 找出哪些 GPIO 引腳具有 ACPI 事件方法,並分配呼叫這些引腳的 ACPI 事件方法的中斷處理程式。
引數
struct gpio_chip *chipGPIO 晶片
描述
釋放與給定 GPIO 晶片的 GPIO ACPI 事件方法關聯的中斷。
-
int acpi_dev_gpio_irq_wake_get_by(struct acpi_device *adev, const char *con_id, int index, bool *wake_capable)¶
查詢 GpioInt 並將其轉換為 Linux IRQ 編號
引數
struct acpi_device *adev指向要從中獲取 IRQ 的 ACPI 裝置的指標
const char *con_idGpioInt 資源的可選名稱
int indexGpioInt 資源的索引(從
0開始)bool *wake_capable如果 IRQ 具有喚醒功能,則設定為 true
描述
如果裝置具有一個或多個 GpioInt 資源,則可以使用此函式將資源中的 GPIO 偏移量轉換為 Linux IRQ 編號。
該函式是冪等的,但每次執行它都會根據 GpioInt 資源中的標誌配置 GPIO 引腳方向。
該函式採用可選的 con_id 引數。 如果資源在屬性中具有 con_id,則只會考慮這些資源。
如果 GpioInt 資源指定 SharedAndWake 或 ExclusiveAndWake,則認為 GPIO 具有喚醒功能。
返回值
成功時返回 Linux IRQ 編號(> 0),失敗時返回負 errno。
裝置樹支援¶
-
int of_get_named_gpio(const struct device_node *np, const char *propname, int index)¶
獲取用於 GPIO API 的 GPIO 編號
引數
const struct device_node *np要從中獲取 GPIO 的裝置節點
const char *propname包含 gpio 說明符的屬性的名稱
int indexGPIO 的索引
描述
已棄用 此函式已棄用,不得在新程式碼中使用。
返回值
要與 Linux 通用 GPIO API 結合使用的 GPIO 編號,或者錯誤情況下返回的 errno 值之一。
-
int of_mm_gpiochip_add_data(struct device_node *np, struct of_mm_gpio_chip *mm_gc, void *data)¶
新增記憶體對映 GPIO 晶片(庫)
引數
struct device_node *npGPIO 晶片的裝置節點
struct of_mm_gpio_chip *mm_gc指向已分配的 of_mm_gpio_chip 結構的指標
void *data要儲存在
struct gpio_chip中的驅動程式資料
描述
要使用此函式,應分配並填充 mm_gc,其中包含
在 gpio_chip 結構中: - 所有回撥 - of_gpio_n_cells - of_xlate 回撥(可選)
在 of_mm_gpio_chip 結構中: - save_regs 回撥(可選)
如果成功,此函式將對映庫的記憶體,併為您完成所有必要的工作。 然後,您將能夠使用 .regs 從回撥管理 GPIO。
返回值
成功時返回 0,失敗時返回負的 errno。
-
void of_mm_gpiochip_remove(struct of_mm_gpio_chip *mm_gc)¶
移除記憶體對映 GPIO 晶片(組)
引數
struct of_mm_gpio_chip *mm_gc指向已分配的 of_mm_gpio_chip 結構的指標
裝置管理 API¶
-
struct gpio_desc *devm_gpiod_get(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
資源管理
gpiod_get()
引數
struct device *devGPIO 使用者
const char *con_idGPIO 使用者內部的函式
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
託管的 gpiod_get()。從此函式返回的 GPIO 描述符會在驅動程式分離時自動釋放。有關行為和返回值的詳細資訊,請參閱 gpiod_get()。
返回值
與裝置 dev 的函式 con_id 對應的 GPIO 描述符,如果未將任何 GPIO 分配給所請求的函式,則為 -ENOENT,如果在嘗試獲取 GPIO 時發生錯誤,則為另一個 IS_ERR() 程式碼。
-
struct gpio_desc *devm_gpiod_get_optional(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
資源管理
gpiod_get_optional()
引數
struct device *devGPIO 使用者
const char *con_idGPIO 使用者內部的函式
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
託管的 gpiod_get_optional()。從此函式返回的 GPIO 描述符會在驅動程式分離時自動釋放。有關行為和返回值的詳細資訊,請參閱 gpiod_get_optional()。
返回值
對應於裝置 dev 的函式 con_id 的 GPIO 描述符;如果請求的功能未分配 GPIO,則返回 NULL;如果嘗試獲取 GPIO 時發生錯誤,則返回另一個 IS_ERR() 程式碼。
-
struct gpio_desc *devm_gpiod_get_index(struct device *dev, const char *con_id, unsigned int idx, enum gpiod_flags flags)¶
資源管理
gpiod_get_index()
引數
struct device *devGPIO 使用者
const char *con_idGPIO 使用者內部的函式
unsigned int idx在使用者中要獲取的 GPIO 的索引
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
託管的 gpiod_get_index()。從此函式返回的 GPIO 描述符會在驅動程式分離時自動釋放。有關行為和返回值的詳細資訊,請參閱 gpiod_get_index()。
返回值
與裝置 dev 的函式 con_id 對應的 GPIO 描述符,如果未將任何 GPIO 分配給所請求的函式,則為 -ENOENT,如果在嘗試獲取 GPIO 時發生錯誤,則為另一個 IS_ERR() 程式碼。
-
struct gpio_desc *devm_fwnode_gpiod_get_index(struct device *dev, struct fwnode_handle *fwnode, const char *con_id, int index, enum gpiod_flags flags, const char *label)¶
從給定節點獲取 GPIO 描述符
引數
struct device *devGPIO 使用者
struct fwnode_handle *fwnode包含 GPIO 引用的韌體節點
const char *con_idGPIO 使用者內部的函式
int index在使用者中要獲取的 GPIO 的索引
enum gpiod_flags flagsGPIO 初始化標誌
const char *label附加到請求的 GPIO 的標籤
描述
從此函式返回的 GPIO 描述符會在驅動程式分離時自動釋放。
返回值
與裝置 dev 的函式 con_id 對應的 GPIO 描述符,如果未將任何 GPIO 分配給所請求的函式,則為 -ENOENT,如果在嘗試獲取 GPIO 時發生錯誤,則為另一個 IS_ERR() 程式碼。
-
struct gpio_desc *devm_gpiod_get_index_optional(struct device *dev, const char *con_id, unsigned int index, enum gpiod_flags flags)¶
引數
struct device *devGPIO 使用者
const char *con_idGPIO 使用者內部的函式
unsigned int index在使用者中要獲取的 GPIO 的索引
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
託管的 gpiod_get_index_optional()。從此函式返回的 GPIO 描述符會在驅動程式分離時自動釋放。有關行為和返回值的詳細資訊,請參閱 gpiod_get_index_optional()。
返回值
與裝置 dev 的函式 con_id 對應的 GPIO 描述符,如果未將任何 GPIO 分配給所請求的函式,則為 NULL,如果在嘗試獲取 GPIO 時發生錯誤,則為另一個 IS_ERR() 程式碼。
-
struct gpio_descs *devm_gpiod_get_array(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
資源管理
gpiod_get_array()
引數
struct device *devGPIO 使用者
const char *con_idGPIO 使用者內部的函式
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
託管的 gpiod_get_array()。從此函式返回的 GPIO 描述符會在驅動程式分離時自動釋放。有關行為和返回值的詳細資訊,請參閱 gpiod_get_array()。
返回值
與裝置 dev 的函式 con_id 對應的 GPIO 描述符,如果未將任何 GPIO 分配給所請求的函式,則為 -ENOENT,如果在嘗試獲取 GPIO 時發生錯誤,則為另一個 IS_ERR() 程式碼。
-
struct gpio_descs *devm_gpiod_get_array_optional(struct device *dev, const char *con_id, enum gpiod_flags flags)¶
引數
struct device *devGPIO 使用者
const char *con_idGPIO 使用者內部的函式
enum gpiod_flags flags可選的 GPIO 初始化標誌
描述
託管的 gpiod_get_array_optional()。從此函式返回的 GPIO 描述符會在驅動程式分離時自動釋放。有關行為和返回值的詳細資訊,請參閱 gpiod_get_array_optional()。
返回值
與裝置 dev 的函式 con_id 對應的 GPIO 描述符,如果未將任何 GPIO 分配給所請求的函式,則為 NULL,如果在嘗試獲取 GPIO 時發生錯誤,則為另一個 IS_ERR() 程式碼。
-
void devm_gpiod_put(struct device *dev, struct gpio_desc *desc)¶
資源管理
gpiod_put()
引數
struct device *devGPIO 使用者
struct gpio_desc *desc要處置的 GPIO 描述符
描述
釋放使用 devm_gpiod_get() 或 devm_gpiod_get_index() 獲取的 GPIO 描述符。通常不會呼叫此函式,因為 GPIO 將由資源管理程式碼釋放。
引數
struct device *devGPIO 使用者
struct gpio_desc *desc要從中移除資源管理的 GPIO 描述符
描述
已棄用 不應使用此函式。它作為調節器框架中資源所有權問題的變通方法提供,應該用更好的解決方案代替。
從 GPIO 描述符中移除資源管理。當您想將描述符的生命週期管理交給另一種機制時,需要這樣做。
-
void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs)¶
資源管理
gpiod_put_array()
引數
struct device *devGPIO 使用者
struct gpio_descs *descs要釋放的 GPIO 描述符陣列
描述
釋放使用 devm_gpiod_get_array() 獲取的 GPIO 描述符陣列。通常不會呼叫此函式,因為 GPIO 將由資源管理程式碼釋放。
-
int devm_gpiochip_add_data_with_key(struct device *dev, struct gpio_chip *gc, void *data, struct lock_class_key *lock_key, struct lock_class_key *request_key)¶
資源管理 gpiochip_add_data_with_key()
引數
struct device *devgpio_chip 所屬裝置的指標。
struct gpio_chip *gc要註冊的 GPIO 晶片
void *data與此晶片關聯的驅動私有資料
struct lock_class_key *lock_keyIRQ 鎖的 lockdep 類
struct lock_class_key *request_keyIRQ 請求的 lockdep 類
上下文
可能在中斷工作之前
描述
當裝置解除繫結時,gpio 晶片會自動釋放。
返回值
如果無法註冊晶片,則返回一個負 errno,例如因為 gc->base 無效或已與不同的晶片關聯。 否則,它返回零作為成功程式碼。
sysfs 助手¶
-
int gpiod_export(struct gpio_desc *desc, bool direction_may_change)¶
透過 sysfs 匯出 GPIO
引數
struct gpio_desc *desc要提供的 GPIO,已請求
bool direction_may_change如果使用者空間可以更改 GPIO 方向,則為 true
上下文
arch_initcall 或更高版本
描述
當驅動程式想要在請求 GPIO 後使其可供使用者空間訪問時(可能是在除錯時,或者作為其公共介面的一部分),它們可以使用此例程。如果 GPIO 可以更改方向(有些不能)並且呼叫者允許,使用者空間將看到可用於更改 GPIO 方向的“direction” sysfs 屬性。始終會提供“value”屬性。
返回值
成功時返回 0,失敗時返回負的 errno。
-
int gpiod_export_link(struct device *dev, const char *name, struct gpio_desc *desc)¶
建立一個指向已匯出 GPIO 節點的 sysfs 連結
引數
struct device *dev建立符號連結的裝置
const char *name符號連結的名稱
struct gpio_desc *desc要建立符號連結的目標 GPIO,必須已匯出
描述
建立一個從 /sys/.../dev/name 到 /sys/class/gpio/gpioN 節點的符號連結。呼叫者負責取消連結。
返回值
成功時返回 0,失敗時返回負的 errno。
-
void gpiod_unexport(struct gpio_desc *desc)¶
撤銷
gpiod_export()的效果
引數
struct gpio_desc *desc要設為不可用的 GPIO
描述
這在 gpiod_free() 上是隱式的。