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() 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); > }