pio: pinctrl@1c20800 { compatible = "allwinner,sun8i-r40-pinctrl"; (...) i2c0_pins: i2c0-pins { pins = "PB0", "PB1"; function = "i2c0"; }; abstract, strings, nice. The driver handles the particulars. That is like so because we are designing for users which are let's say customization engineers. If these engineers jump from project to project matching function strings to group strings will be a common way to set up pins, and easy to understand and grasp, and it makes the DTS very readable. Then there are the engineers creating the pin control drivers, and they want everything to be convinient for *them*, and they think an opaque hex digit in the DTS is perfect at times, thus pinmux = <0xdeadbeef>; Mediatek and STM32 made a compromise by using pinmux and adding some macros to define them so it looks more pleasant: i2c0_pins_a: i2c0-default { pins-i2c0 { pinmux = <MT7623_PIN_75_SDA0_FUNC_SDA0>, <MT7623_PIN_76_SCL0_FUNC_SCL0>; bias-disable; }; }; At least the bias control is using strings, this is nice. So I'm mostly fine with that as well, but it can be pretty heavy on people coming from the outside, asking us questions like "on MT7689 how do you mux pin nnnn to function yyy"??? Well I don't know? Some MT7689_PIN* macro I guess? If it was just strings I would know what the expected behaviour and looks would be at least, then the driver could be buggy or missing things but that's clearly cut. That's why I prefer the strings. Yours, Linus Walleij