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[]

中间层
# 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 *)

流程
dts配置上下拉/强度别名
别名会被解嵌套解析,最后被pinconf读取,最终调用到rk的pinctrl驱动,写入寄存器。寄存器值详见TRM文档。
--------蓝天上的云_转载请注明出处.

浙公网安备 33010602011771号