1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101
| rk3588s.dtsi rk3588s.-pinctrl.dtsi该文件枚举了3588所有的iomux实例
查看引脚的复用情况 cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinmux-pins
RK3588频脚计算方式与一般的计算方式没有区别: GPIO pin脚计算公式:pin = bank * 32 + number GPIO 小组编号计算公式:number = group * 8 + X
摘自官网:
下面演示GPIO1_D0 pin脚计算方法:
bank = 1; //GPIO1_D0 => 1, bank ∈ [0,4]
group = 3; //GPIO1_D0 => 3, group ∈ {(A=0), (B=1), (C=2), (D=3)}
X = 0; //GPIO1_D0 => 0, X ∈ [0,7]
number = group * 8 + X = 3 * 8 + 0 = 24
pin = bank*32 + number= 1 * 32 + 24 = 56;
GPIO1_D0 对应的设备树属性描述为:<&gpio1 24 GPIO_ACTIVE_HIGH>,由kernel-5.10/include/dt-bindings/pinctrl/rockchip.h的 的宏定义可知,也可以将GPIO1_D0描述为<&gpio1 RK_PD0 GPIO_ACTIVE_HIGH>。
rockchip_pinctrl_parse_dt info->groups = devm_kcalloc(dev, info->ngroups, sizeof(*info->groups), GFP_KERNEL); rockchip_pinctrl_parse_functions rockchip_pinctrl_parse_groups pinconf_generic_parse_dt_config parse_dt_cfg pinconf_to_config_packed PIN_CONF_PACKED
#define PIN_CONF_PACKED(p, a) ((a << 8) | ((unsigned long) p & 0xffUL)) 5,1 105
of_property_read_u32(np, par->property, &val); of_property_read_u32_array(np, property, val, 1); of_property_read_variable_u32_array(np, property, val, 1, 0); of_find_property_value_of_size(np, property, 4, 0, &sz);
pinctrl_show pinconf_show_setting pinconf_show_config setting->data.configs.configs
add_setting pinconf_map_to_setting
setting->data.configs.configs = map->data.configs.configs;
rockchip_dt_node_to_map pinctrl_name_to_group rockchip_pin_group * grp = info->groups[i]
new_map[i].data.configs.configs = grp->data[i].configs;
rockchip_pmx_set const struct rockchip_pin_config *data = info->groups[group].data;
rockchip_pin_group
uart1 { /omit-if-no-ref/ uart1m1_xfer: uart1m1-xfer { rockchip,pins = /* uart1_rx_m1 */ <1 RK_PB7 10 &pcfg_pull_up>, /* uart1_tx_m1 */ <1 RK_PB6 10 &pcfg_pull_up>; };
pcfg_pull_up bias-pull-up; static const struct pinconf_generic_params dt_params[] = { { "bias-bus-hold", PIN_CONFIG_BIAS_BUS_HOLD, 0 }, { "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 }, { "bias-high-impedance", PIN_CONFIG_BIAS_HIGH_IMPEDANCE, 0 }, { "bias-pull-up", PIN_CONFIG_BIAS_PULL_UP, 1 },
static const struct pin_config_item conf_items[] = { PCONFDUMP(PIN_CONFIG_BIAS_PULL_UP, "input bias pull up", "ohms", true),
enum pin_config_param { PIN_CONFIG_BIAS_BUS_HOLD, PIN_CONFIG_BIAS_DISABLE, PIN_CONFIG_BIAS_HIGH_IMPEDANCE, PIN_CONFIG_BIAS_PULL_DOWN, PIN_CONFIG_BIAS_PULL_PIN_DEFAULT, PIN_CONFIG_BIAS_PULL_UP, //5
|