跳转至

模块接口说明

4 模块接口说明

4.1 pinctrl 接口说明

4.1.1 pin4ctrl_get

函数原型:struct pinctrl *pinctrl_get(struct device *dev);

作用:获取设备的 pin 操作句柄,所有 pin 操作必须基于此 pinctrl 句柄。

参数:

  • dev: 指向申请 pin 操作句柄的设备句柄。

返回:

  • 成功,返回 pinctrl 句柄。

  • 失败,返回 NULL。

4.1.2 pinctrl_put

函数原型:void pinctrl_put(struct pinctrl *p)

作用:释放 pinctrl 句柄,必须与 pinctrl_get 配对使用。

参数:

p: 指向释放的 pinctrl 句柄。

返回:

没有返回值。

! 警告

必须与 pinctrl_get 配对使用。

4.1.3 devm_pinctrl_get

函数原型:struct pinctrl *devm_pinctrl_get(struct device *dev)

作用:根据设备获取 pin 操作句柄,所有 pin 操作必须基于此 pinctrl 句柄,与 pinctrl_get功能完全一样,只是 devm_pinctrl_get 会将申请到的 pinctrl 句柄做记录,绑定到设备句柄信息中。设备驱动申请 pin 资源,推荐优先使用 devm_pinctrl_get 接口。

参数:

dev: 指向申请 pin 操作句柄的设备句柄。

返回:

成功,返回 pinctrl 句柄。

失败,返回 NULL。

4.1.4 devm_pinctrl_put

函数原型:void devm_pinctrl_put(struct pinctrl *p)

作用:释放 pinctrl 句柄,必须与 devm_pinctrl_get 配对使用。

参数:

p: 指向释放的 pinctrl 句柄。

返回:

没有返回值。

! 警告

必须与 devm_pinctrl_get 配对使用,可以不显式的调用该接口。

4.1.5 pinctrl_lookup_state

函数原型:struct pinctrl_state *pinctrl_lookup_state(struct pinctrl *p, const char *name)

作用:根据 pin 操作句柄,查找 state 状态句柄。

参数:

p: 指向要操作的 pinctrl 句柄。

name: 指向状态名称,如 “default”、“sleep” 等。

返回:

成功,返回执行 pin 状态的句柄 struct pinctrl_state *。

失败,返回 NULL。

4.1.6 pinctrl_select_state

函数原型:int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *s)

作用:将 pin 句柄对应的 pinctrl 设置为 state 句柄对应的状态。

参数:

p: 指向要操作的 pinctrl 句柄。

s: 指向 state 句柄。

返回:

成功,返回 0。

失败,返回错误码。

4.1.7 devm_pinctrl_get_select

函数原型:struct pinctrl *devm_pinctrl_get_select(struct device *dev, const char *name)

作用:获取设备的 pin 操作句柄,并将句柄设定为指定状态。

参数:

dev: 指向管理 pin 操作句柄的设备句柄。

name: 要设置的 state 名称,如 “default”、“sleep” 等。

返回:

成功,返回 pinctrl 句柄。

失败,返回 NULL。

4.1.8 devm_pinctrl_get_select_default

函数原型:struct pinctrl *devm_pinctrl_get_select_default(struct device *dev)

作用:获取设备的 pin 操作句柄,并将句柄设定为默认状态。

参数:

dev: 指向管理 pin 操作句柄的设备句柄。

返回:

成功,返回 pinctrl 句柄。

失败,返回 NULL。

4.1.9 pin_config_get

作用:获取指定 pin 的属性。

参数:

dev_name: 指向 pinctrl 设备。

name: 指向 pin 名称。

config: 保存 pin 的配置信息。

返回:

成功,返回 pin 编号。

失败,返回错误码。

! 警告

该接口在 linux-5.4 已经移除。

4.1.10 pin_config_set

作用:设置指定 pin 的属性。

参数:

dev_name: 指向 pinctrl 设备。

name: 指向 pin 名称。

config:pin 的配置信息。

返回:

成功,返回 0。

失败,返回错误码。

! 警告

该接口在 linux-5.4 已经移除。

4.2 gpio 接口说明

4.2.1 gpio_request

函数原型:int gpio_request(unsigned gpio, const char *label)

作用:申请 gpio,获取 gpio 的访问权。

参数:

gpio:gpio 编号。

label:gpio 名称,可以为 NULL。

返回:

成功,返回 0。

失败,返回错误码。

4.2.2 gpio_free

函数原型:void gpio_free(unsigned gpio)

作用:释放 gpio。

参数:

gpio:gpio 编号。

返回:

无返回值。

4.2.3 gpio_direction_input

函数原型:int gpio_direction_input(unsigned gpio)

作用:设置 gpio 为 input。

参数:

gpio:gpio 编号。

返回:

成功,返回 0。

失败,返回错误码。

4.2.5 __gpio_get_value

函数原型:int __gpio_get_value(unsigned gpio)

作用:获取 gpio 电平值 (gpio 已为 input/output 状态)。

参数:

gpio:gpio 编号。

返回:

返回 gpio 对应的电平逻辑,1 表示高, 0 表示低。

4.2.6 __gpio_set_value

函数原型:void __gpio_set_value(unsigned gpio, int value)

作用:设置 gpio 电平值 (gpio 已为 input/output 状态)。

参数:

gpio:gpio 编号。

value: 期望设置的 gpio 电平值,非 0 表示高, 0 表示低。

返回:

无返回值

4.2.7 of_get_named_gpio

函数原型:int of_get_named_gpio(struct device_node *np, const char *propname, int index)

作用:通过名称从 dts 解析 gpio 属性并返回 gpio 编号。

参数:

np: 指向使用 gpio 的设备结点。

propname:dts 中属性的名称。

index:dts 中属性的索引值。

返回:

成功,返回 gpio 编号。

失败,返回错误码。

4.2.8 of_get_named_gpio_flags

函数原型:int of_get_named_gpio_flags(struct device_node *np, const char *list_name, int index,

enum of_gpio_flags *flags)

作用:通过名称从 dts 解析 gpio 属性并返回 gpio 编号。

参数:

np: 指向使用 gpio 的设备结点。

propname:dts 中属性的名称。

index:dts 中属性的索引值

flags: 在 sunxi 平台上,必须定义为 struct gpio_config * 类型变量,因为 sunxi pinctrl的 pin 支持上下拉, 驱动能力等信息,而内核 enum of_gpio_flags * 类型变量只能包含输入、输出信息,后续 sunxi 平台 需要标准化该接口。

返回:

成功,返回 gpio 编号。

失败,返回错误码。

警告

该接口的 flags 参数,在 sunxi linux-4.9 及以前的平台上,必须定义为 struct gpio_config 类型变量。linux-5.4 已经标准化该接口,直接采用 enum of_gpio_flags 的定义。