跳转至

模块接口说明

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 的定义。