Hi, I noticed few more things I started to wonder about after looking at this again. * Dario Binacchi <dariobin@xxxxxxxxx> [210517 20:00]: > +static int pcs_pin_dbg_set(struct pinctrl_dev *pctldev, unsigned int pin, > + char *buf) > +{ > + struct pcs_device *pcs; > + unsigned int val, mux_bytes; > + > + buf = skip_spaces(buf); > + if (kstrtouint(buf, 0, &val)) > + return -EINVAL; > + > + pcs = pinctrl_dev_get_drvdata(pctldev); > + > + mux_bytes = pcs->width / BITS_PER_BYTE; > + pcs->write(val, pcs->base + pin * mux_bytes); > + return 0; > +} Since you're adding a new interface, how about pass unsigned int val instead of char *buf? > static void pcs_dt_free_map(struct pinctrl_dev *pctldev, > struct pinctrl_map *map, unsigned num_maps) > { > @@ -331,6 +348,9 @@ static const struct pinctrl_ops pcs_pinctrl_ops = { > .get_group_name = pinctrl_generic_get_group_name, > .get_group_pins = pinctrl_generic_get_group_pins, > .pin_dbg_show = pcs_pin_dbg_show, > +#if IS_ENABLED(CONFIG_DEVMEM) > + .pin_dbg_set = pcs_pin_dbg_set, > +#endif > .dt_node_to_map = pcs_dt_node_to_map, > .dt_free_map = pcs_dt_free_map, > }; It might be better to always have the .pin_dbg_set around to avoid the IS_ENABLED(CONFIG_DEVMEM). Does the new interface need something under Documentation too? Regards, Tony