RK芯片平台GPIO控制

exam

rockchip,pins = <3 RK_PC5 RK_FUNC_GPIO &pcfg_pull_down>;
# and pcfg_pull_none

dts解析

# drivers/pinctrl/pinconf-generic.c
pinconf_generic_parse_dt_config(device_node *, pinctrl_dev *, unsigned long **, unsigned int *)

static const struct pinconf_generic_params dt_params[] 

image

中间层

# drivers/pinctrl/core.c
pinctrl_commit_state(pinctrl *, pinctrl_state *)
		case PIN_MAP_TYPE_CONFIGS_PIN:
		case PIN_MAP_TYPE_CONFIGS_GROUP:
			ret = pinconf_apply_setting(setting);
			break;

适配层跳转

# drivers/pinctrl/pinconf.c
const struct pinconf_ops *ops = pctldev->desc->confops;
ops->pin_config_set
# drivers/pinctrl/pinctrl-rockchip.c
rockchip_pinconf_set(pinctrl_dev *, unsigned int, unsigned long *, unsigned)
   => rockchip_set_pull
       =>  ctrl->pull_calc_reg

寄存器操作

# drivers/pinctrl/pinctrl-rockchip.c
# by dts compatible match
static struct rockchip_pin_ctrl rv1126b_pin_ctrl 

rv1126b_calc_pull_reg_and_bit(rockchip_pin_bank *, int, regmap **, int *, u8 *)

image

流程

dts配置上下拉/强度别名
别名会被解嵌套解析,最后被pinconf读取,最终调用到rk的pinctrl驱动,写入寄存器。寄存器值详见TRM文档。

posted @ 2026-04-03 12:01  蓝天上的云℡  阅读(1)  评论(0)    收藏  举报