[TOC]
pinctrl-uclass.c
pinctrl_post_bind 以递归方式将其子项绑定为 pinconfig属性的 设备
pinctrl_select_state pin选择状态并配置
pinctrl_select_state_simple pin选择状态并配置
1 | static int pinctrl_select_state_simple(struct udevice *dev) |
pinctrl_stm32.c
驱动信息
1 | static const struct udevice_id stm32_pinctrl_ids[] = { |
STM32_PINMUX 引脚宏定义
1 | /* define PIN modes */ |
stm32_pinctrl_bind 遍历具有gpio-controller的子节点绑定gpio_stm32驱动
- 绑定并probe GPIOA~GPIOK
1 | static int stm32_pinctrl_bind(struct udevice *dev) |
stm32_pinctrl_probe 初始化链表,绑定hwspinlock
1 | static int stm32_pinctrl_probe(struct udevice *dev) |
stm32_pinctrl_set_state_simple 设置pin状态并配置
1 | static int stm32_pinctrl_set_state_simple(struct udevice *dev, |
stm32_pinctrl_config pin 配置
- 读取pinmux属性
- 读取slew-rate属性
- 读取drive-open-drain属性
- 读取bias-pull-up属性
- 获取GPIO设备
- 配置GPIO
1 | static int stm32_pinctrl_config(ofnode node) |
prep_gpio_dsc 解析GPIO描述引脚
1 | static int prep_gpio_dsc(struct stm32_gpio_dsc *gpio_dsc, u32 port_pin) |
prep_gpio_ctl 解析GPIO控制模式
1 | static int prep_gpio_ctl(struct stm32_gpio_ctl *gpio_ctl, u32 gpio_fn, |
gpio
gpio-uclass.c
gpio_post_bind 配置了GPIO_HOG属性的节点绑定gpio_hog驱动
- GPIO hogging是一种机制,允许在GPIO控制器的驱动程序探测(probe)函数中自动请求和配置GPIO。这种机制的主要目的是简化GPIO的初始化过程,确保在驱动程序加载时,GPIO能够自动配置为所需的状态。
gpio_post_probe 为每个GPIO控制器分配name和claimed数组
1 | static int gpio_post_probe(struct udevice *dev) |
gpio_renumber 为每个GPIO控制器分配gpio_base
1 | static int gpio_renumber(struct udevice *removed_dev) |
gpio_request_list_by_name
gpio_request_list_by_name_nodev
_gpio_request_by_name_nodev
gpio_request_tail 通过node获取gpio_dev,并设置GPIO已经被占用,设置GPIO名字,设置GPIO方向
1 | static int gpio_request_tail(int ret, const char *nodename, |
gpio_find_and_xlate 将phandle_args转换为gpio_desc
1 | static int gpio_find_and_xlate(struct gpio_desc *desc, |
gpio_xlate_offs_flags 将phandle的arg[0]作为offset, arg[1]作为flags
1 | int gpio_xlate_offs_flags(struct udevice *dev, struct gpio_desc *desc, |
gpio_flags_xlate 转换FDT说明符为GPIO flags
1 | unsigned long gpio_flags_xlate(uint32_t arg) |
dts/upstream/include/dt-bindings/gpio/gpio.h GPIO flag 说明
1 | * Bit 0 express polarity */ |
include/asm-generic/gpio.h GPIO说明
- GPIOD_MASK_DIR: 设置GPIO方向,注意其中不包括
GPIOD_ACTIVE_LOW
- 所以设置
GPIOD_ACTIVE_LOW
和没有GPIOD_ACTIVE_LOW
,其实是设置激活电平,并不设置方向与模式
1 |
|
dm_gpio_requestf 通过字符串请求GPIO,并设置GPIO已经被占用,设置GPIO名字
1 | // ret = dm_gpio_requestf(desc, add_index ? "%s.%s%d" : "%s.%s", nodename, list_name, index); 传入spi2.cs0 |
dm_gpio_request 通过字符串请求GPIO,并设置GPIO已经被占用,设置GPIO名字
1 | int dm_gpio_request(struct gpio_desc *desc, const char *label) |
dm_gpio_set_dir_flags 设置GPIO方向
1 | int dm_gpio_set_dir_flags(struct gpio_desc *desc, ulong flags) |
dm_gpio_clrset_flags 清除并设置GPIO flags
1 | int dm_gpio_clrset_flags(struct gpio_desc *desc, ulong clr, ulong set) |
_dm_gpio_set_flags 设置GPIO flags
1 | static int _dm_gpio_set_flags(struct gpio_desc *desc, ulong flags) |
stm32_gpio.c
1 | gpioa: gpio@58020000 { |
驱动信息 由pinctrl_stm32.c绑定并probe
1 | U_BOOT_DRIVER(gpio_stm32) = { |
gpio_stm32_probe 识别节点具有st,bank-name
属性,设置gpio_count和gpio_range,并使能时钟
1 | static int gpio_stm32_probe(struct udevice *dev) |
stm32_gpio_set_flags 设置GPIO flags
1 | static int stm32_gpio_set_flags(struct udevice *dev, unsigned int offset, |
stm log
1 | //-----pinctrl_select_state_simple-> uclass_get_device_by_seq-------- |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wdfk-prog的个人博客!
评论