英語

通用輸入/輸出 (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);
};

成員

chip

GPIO 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_handler

GPIO 晶片的父中斷的中斷處理程式,如果父中斷是巢狀的而不是級聯的,則可以為 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_parents

GPIO 晶片的父中斷的數量。

parents

GPIO 晶片的父中斷列表。 這由驅動程式擁有,因此核心只會引用此列表,而不會修改它。

map

GPIO 晶片的每條線的父中斷列表。

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 ;
};

成員

label

GPIO 裝置的功能名稱,例如零件號或實現它的 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 *desc

GPIO 描述符

描述

這應該在將來消失,但由於我們仍然使用 GPIO 編號進行錯誤訊息和 sysfs 節點,因此是必需的。

返回值

由其描述符指定的 GPIO 的全域性 GPIO 編號。

struct gpio_chip *gpiod_to_chip(const struct gpio_desc *desc)

返回 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 *gdev

GPIO 裝置

返回值

此裝置在全域性 GPIO 編號空間中的第一個 GPIO 編號。

const char *gpio_device_get_label(struct gpio_device *gdev)

獲取此 GPIO 裝置的標籤

引數

struct gpio_device *gdev

GPIO 裝置

返回值

指向包含 GPIO 裝置標籤的字串的指標。字串的生存期與基礎 GPIO 裝置的生存期相關聯。

struct gpio_chip *gpio_device_get_chip(struct gpio_device *gdev)

獲取此 GPIO 裝置的 gpio_chip 實現

引數

struct gpio_device *gdev

GPIO 裝置

返回值

支援此裝置的 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 unsigned long *gpiochip_query_valid_mask(const struct gpio_chip *gc)

返回 GPIO 有效性資訊

引數

const struct gpio_chip *gc

查詢其有效性資訊的 GPIO 晶片

返回值

表示有效 GPIO 的點陣圖。如果所有 GPIO 都有效,則為 NULL。

描述

某些 GPIO 晶片可能支援某些引腳不可用的配置。 這些晶片可以設定 valid_mask 以表示有效的 GPIO。 此函式可用於檢索此資訊。

void *gpiochip_get_data(struct gpio_chip *gc)

獲取晶片的每個子驅動程式資料

引數

struct gpio_chip *gc

GPIO 晶片

返回值

晶片的每個子驅動程式資料。

void gpiochip_remove(struct gpio_chip *gc)

登出一個 gpio_chip

引數

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 裝置

引數

const char *label

要查詢的標籤

返回值

對 GPIO 裝置或 NULL 的引用。必須使用 gpio_device_put()釋放引用。

struct gpio_device *gpio_device_find_by_fwnode(const struct fwnode_handle *fwnode)

圍繞 gpio_device_find() 的包裝器,透過其 fwnode 查詢 GPIO 裝置

引數

const struct fwnode_handle *fwnode

要查詢的韌體節點

返回值

對 GPIO 裝置或 NULL 的引用。必須使用 gpio_device_put()釋放引用。

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。

int gpiochip_generic_request(struct gpio_chip *gc, unsigned int offset)

為引腳請求 gpio 功能

引數

struct gpio_chip *gc

擁有 GPIO 的 gpiochip

unsigned int offset

要為 GPIO 功能請求的 GPIO 偏移量

返回值

成功時返回 0,失敗時返回負的 errno。

void gpiochip_generic_free(struct gpio_chip *gc, unsigned int offset)

從引腳釋放 gpio 功能

引數

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。

void gpiochip_remove_pin_ranges(struct gpio_chip *gc)

刪除所有 GPIO <-> 引腳對映

引數

struct gpio_chip *gc

要為其刪除所有對映的晶片

char *gpiochip_dup_line_label(struct gpio_chip *gc, unsigned int offset)

獲取使用者標籤的副本。

引數

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 *gc

GPIO 晶片

unsigned int hwnum

要為其請求描述符的 GPIO 的硬體編號

const char *label

GPIO 的標籤

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

引數

struct gpio_desc *desc

要釋放的 GPIO 描述符

描述

函式釋放先前使用 gpiochip_request_own_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 value

GPIO 的初始輸出值

描述

將傳遞的 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 value

GPIO 的初始輸出值

描述

將傳遞的 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,如果出錯則為錯誤程式碼。

int gpiochip_lock_as_irq(struct gpio_chip *gc, unsigned int offset)

鎖定 GPIO 以用作 IRQ

引數

struct gpio_chip *gc

要鎖定的 GPIO 所屬的晶片

unsigned int offset

要鎖定為 IRQ 的 GPIO 的偏移量

描述

這由希望鎖定某個 GPIO 線路以用於 IRQ 的 GPIO 驅動程式直接使用。

返回值

成功時返回 0,失敗時返回負的 errno。

void gpiochip_unlock_as_irq(struct gpio_chip *gc, unsigned int offset)

解鎖用作 IRQ 的 GPIO

引數

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 *hogs

GPIO 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_id

GPIO 使用者內部的函式

int index

為使用者獲取的 GPIO 的索引

enum gpiod_flags flags

GPIO 初始化標誌

const char *label

附加到請求的 GPIO 的標籤

描述

此函式可用於從不透明韌體獲取其配置的驅動程式。

該函式正確地使用任何底層韌體介面查詢相應的 GPIO,然後確保在將 GPIO 描述符返回給呼叫者之前請求它。

如果發生錯誤,則返回 ERR_PTR()

返回值

成功請求後,GPIO 引腳將根據提供的 flags 進行配置。

int gpiod_count(struct device *dev, const char *con_id)

返回與裝置/功能關聯的 GPIO 的數量

引數

struct device *dev

GPIO 使用者,對於系統全域性 GPIO 可以為 NULL

const char *con_id

GPIO 使用者內部的函式

返回值

與裝置/功能關聯的 GPIO 的數量,如果請求的功能未分配 GPIO,則返回 -ENOENT。

struct gpio_desc *gpiod_get(struct device *dev, const char *con_id, enum gpiod_flags flags)

獲取給定 GPIO 功能的 GPIO

引數

struct device *dev

GPIO 使用者,對於系統全域性 GPIO 可以為 NULL

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者,對於系統全域性 GPIO 可以為 NULL

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者,對於系統全域性 GPIO 可以為 NULL

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者,對於系統全域性 GPIO 可以為 NULL

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者,對於系統全域性 GPIO 可以為 NULL

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者,對於系統全域性 GPIO 可以為 NULL

const char *con_id

GPIO 使用者內部的函式

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 描述符

引數

struct gpio_desc *desc

要處置的 GPIO 描述符

描述

在呼叫 gpiod_put() 之後,任何描述符都不能使用。

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

void acpi_gpiochip_request_interrupts(struct gpio_chip *chip)

為 GPIO 晶片 ACPI 事件註冊 isr

引數

struct gpio_chip *chip

GPIO 晶片

描述

ACPI5 平臺可以使用 GPIO 訊號 ACPI 事件。 這些 GPIO 中斷由 ACPI 事件方法處理,這些方法需要從 GPIO 晶片的中斷處理程式中呼叫。 acpi_gpiochip_request_interrupts() 找出哪些 GPIO 引腳具有 ACPI 事件方法,並分配呼叫這些引腳的 ACPI 事件方法的中斷處理程式。

void acpi_gpiochip_free_interrupts(struct gpio_chip *chip)

釋放 GPIO ACPI 事件中斷。

引數

struct gpio_chip *chip

GPIO 晶片

描述

釋放與給定 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_id

GpioInt 資源的可選名稱

int index

GpioInt 資源的索引(從 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 index

GPIO 的索引

描述

已棄用 此函式已棄用,不得在新程式碼中使用。

返回值

要與 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 *np

GPIO 晶片的裝置節點

struct of_mm_gpio_chip *mm_gc

指向已分配的 of_mm_gpio_chip 結構的指標

void *data

要儲存在 struct gpio_chip 中的驅動程式資料

描述

要使用此函式,應分配並填充 mm_gc,其中包含

  1. 在 gpio_chip 結構中: - 所有回撥 - of_gpio_n_cells - of_xlate 回撥(可選)

  1. 在 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 *dev

GPIO 使用者

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者

struct fwnode_handle *fwnode

包含 GPIO 引用的韌體節點

const char *con_id

GPIO 使用者內部的函式

int index

在使用者中要獲取的 GPIO 的索引

enum gpiod_flags flags

GPIO 初始化標誌

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)

資源管理 gpiod_get_index_optional()

引數

struct device *dev

GPIO 使用者

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者

const char *con_id

GPIO 使用者內部的函式

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)

資源管理 gpiod_get_array_optional()

引數

struct device *dev

GPIO 使用者

const char *con_id

GPIO 使用者內部的函式

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 *dev

GPIO 使用者

struct gpio_desc *desc

要處置的 GPIO 描述符

描述

釋放使用 devm_gpiod_get()devm_gpiod_get_index() 獲取的 GPIO 描述符。通常不會呼叫此函式,因為 GPIO 將由資源管理程式碼釋放。

void devm_gpiod_unhinge(struct device *dev, struct gpio_desc *desc)

從 GPIO 描述符中移除資源管理

引數

struct device *dev

GPIO 使用者

struct gpio_desc *desc

要從中移除資源管理的 GPIO 描述符

描述

已棄用 不應使用此函式。它作為調節器框架中資源所有權問題的變通方法提供,應該用更好的解決方案代替。

從 GPIO 描述符中移除資源管理。當您想將描述符的生命週期管理交給另一種機制時,需要這樣做。

void devm_gpiod_put_array(struct device *dev, struct gpio_descs *descs)

資源管理 gpiod_put_array()

引數

struct device *dev

GPIO 使用者

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 *dev

gpio_chip 所屬裝置的指標。

struct gpio_chip *gc

要註冊的 GPIO 晶片

void *data

與此晶片關聯的驅動私有資料

struct lock_class_key *lock_key

IRQ 鎖的 lockdep 類

struct lock_class_key *request_key

IRQ 請求的 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。

建立一個指向已匯出 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() 上是隱式的。