Hi Tony, > Il 18/05/2021 08:05 Tony Lindgren <tony@xxxxxxxxxxx> ha scritto: > > > 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? I thought about passing char *buf because it seemed more generic to me. As the output of pin_dbg_show() depends on the platform driver, perhaps pin_dbg_set() may need driver-dependent data. Is it possible that only the value to be set in the register (unsigned int) is required? > > > 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). Ok, I'll remove the CONFIG_DEVMEM dependency > > Does the new interface need something under Documentation too? Yes, the description of `pins` in Documentation/driver-api/pin-control.rst needs to be updated. I'll add another patch to the series. Thanks and regards, Dario > > Regards, > > Tony