Hi Peter, > -----Original Message----- > From: Peter Rosin <peda@xxxxxxxxxx> > Sent: Thursday, August 25, 2022 5:15 PM > To: Xu Yang <xu.yang_2@xxxxxxx>; heikki.krogerus@xxxxxxxxxxxxxxx; robh+dt@xxxxxxxxxx; shawnguo@xxxxxxxxxx > Cc: gregkh@xxxxxxxxxxxxxxxxxxx; linux@xxxxxxxxxxxx; Jun Li <jun.li@xxxxxxx>; linux-usb@xxxxxxxxxxxxxxx; dl-linux-imx > <linux-imx@xxxxxxx>; devicetree@xxxxxxxxxxxxxxx; linux-arm-kernel@xxxxxxxxxxxxxxxxxxx > Subject: [EXT] Re: [PATCH v2 2/4] mux: convert to use fwnode interface > > Caution: EXT Email > > Hi! > > Much better, one small thing though... > > 2022-08-23 at 21:54, Xu Yang wrote: > > As firmware node is a more common abstract, this will convert the whole > > thing to fwnode interface. > > > > Signed-off-by: Xu Yang <xu.yang_2@xxxxxxx> > > > > --- > > Changes since v1: > > - convert to use fwnode interface > > > > drivers/mux/core.c | 65 +++++++++++++++++++++++----------------------- > > 1 file changed, 33 insertions(+), 32 deletions(-) > > > > diff --git a/drivers/mux/core.c b/drivers/mux/core.c > > index 49bedbe6316c..e30e859efd33 100644 > > --- a/drivers/mux/core.c > > +++ b/drivers/mux/core.c > > @@ -18,8 +18,7 @@ > > #include <linux/module.h> > > #include <linux/mux/consumer.h> > > #include <linux/mux/driver.h> > > -#include <linux/of.h> > > -#include <linux/of_platform.h> > > +#include <linux/property.h> > > #include <linux/slab.h> > > > > /* > > @@ -510,11 +509,11 @@ int mux_state_deselect(struct mux_state *mstate) > > EXPORT_SYMBOL_GPL(mux_state_deselect); > > > > /* Note this function returns a reference to the mux_chip dev. */ > > -static struct mux_chip *of_find_mux_chip_by_node(struct device_node *np) > > +static struct mux_chip *of_find_mux_chip_by_node(struct fwnode_handle *fwnode) > > Please rename this function to mux_chip_find_by_fwnode() > Thanks for your review. Will change it in next version. Best Regards, Xu Yang > Cheers, > Peter > > > { > > struct device *dev; > > > > - dev = class_find_device_by_of_node(&mux_class, np); > > + dev = class_find_device_by_fwnode(&mux_class, fwnode); > > > > return dev ? to_mux_chip(dev) : NULL; > > } > > @@ -531,8 +530,8 @@ static struct mux_chip *of_find_mux_chip_by_node(struct device_node *np) > > static struct mux_control *mux_get(struct device *dev, const char *mux_name, > > unsigned int *state) > > { > > - struct device_node *np = dev->of_node; > > - struct of_phandle_args args; > > + struct fwnode_handle *fwnode = dev_fwnode(dev); > > + struct fwnode_reference_args args; > > struct mux_chip *mux_chip; > > unsigned int controller; > > int index = 0; > > @@ -540,11 +539,11 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name, > > > > if (mux_name) { > > if (state) > > - index = of_property_match_string(np, "mux-state-names", > > - mux_name); > > + index = fwnode_property_match_string(fwnode, > > + "mux-state-names", mux_name); > > else > > - index = of_property_match_string(np, "mux-control-names", > > - mux_name); > > + index = fwnode_property_match_string(fwnode, > > + "mux-control-names", mux_name); > > if (index < 0) { > > dev_err(dev, "mux controller '%s' not found\n", > > mux_name); > > @@ -553,35 +552,37 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name, > > } > > > > if (state) > > - ret = of_parse_phandle_with_args(np, > > - "mux-states", "#mux-state-cells", > > - index, &args); > > + ret = fwnode_property_get_reference_args(fwnode, > > + "mux-states", "#mux-state-cells", > > + 0, index, &args); > > else > > - ret = of_parse_phandle_with_args(np, > > - "mux-controls", "#mux-control-cells", > > - index, &args); > > + ret = fwnode_property_get_reference_args(fwnode, > > + "mux-controls", "#mux-control-cells", > > + 0, index, &args); > > + > > if (ret) { > > - dev_err(dev, "%pOF: failed to get mux-%s %s(%i)\n", > > - np, state ? "state" : "control", mux_name ?: "", index); > > + dev_err(dev, "%pfw: failed to get mux-%s %s(%i)\n", > > + fwnode, state ? "state" : "control", mux_name ?: "", > > + index); > > return ERR_PTR(ret); > > } > > > > - mux_chip = of_find_mux_chip_by_node(args.np); > > - of_node_put(args.np); > > + mux_chip = of_find_mux_chip_by_node(args.fwnode); > > + fwnode_handle_put(args.fwnode); > > if (!mux_chip) > > return ERR_PTR(-EPROBE_DEFER); > > > > controller = 0; > > if (state) { > > - if (args.args_count > 2 || args.args_count == 0 || > > - (args.args_count < 2 && mux_chip->controllers > 1)) { > > - dev_err(dev, "%pOF: wrong #mux-state-cells for %pOF\n", > > - np, args.np); > > + if (args.nargs > 2 || args.nargs == 0 || > > + (args.nargs < 2 && mux_chip->controllers > 1)) { > > + dev_err(dev, "%pfw: wrong #mux-state-cells for %pfw\n", > > + fwnode, args.fwnode); > > put_device(&mux_chip->dev); > > return ERR_PTR(-EINVAL); > > } > > > > - if (args.args_count == 2) { > > + if (args.nargs == 2) { > > controller = args.args[0]; > > *state = args.args[1]; > > } else { > > @@ -589,21 +590,21 @@ static struct mux_control *mux_get(struct device *dev, const char *mux_name, > > } > > > > } else { > > - if (args.args_count > 1 || > > - (!args.args_count && mux_chip->controllers > 1)) { > > - dev_err(dev, "%pOF: wrong #mux-control-cells for %pOF\n", > > - np, args.np); > > + if (args.nargs > 1 || > > + (!args.nargs && mux_chip->controllers > 1)) { > > + dev_err(dev, "%pfw: wrong #mux-control-cells for %pfw\n", > > + fwnode, args.fwnode); > > put_device(&mux_chip->dev); > > return ERR_PTR(-EINVAL); > > } > > > > - if (args.args_count) > > + if (args.nargs) > > controller = args.args[0]; > > } > > > > if (controller >= mux_chip->controllers) { > > - dev_err(dev, "%pOF: bad mux controller %u specified in %pOF\n", > > - np, controller, args.np); > > + dev_err(dev, "%pfw: bad mux controller %u specified in %pfw\n", > > + fwnode, controller, args.fwnode); > > put_device(&mux_chip->dev); > > return ERR_PTR(-EINVAL); > > }