Message ID | 20220325113148.588163-9-clement.leger@bootlin.com (mailing list archive) |
---|---|
State | Handled Elsewhere, archived |
Headers | show |
Series | introduce fwnode in the I2C subsystem | expand |
On Fri, Mar 25, 2022 at 12:31:47PM +0100, Clément Léger wrote: > In order to use i2c muxes with all types of nodes, switch to fwnode > API. The fwnode layer will allow to use this with both device_node and > software_node. > > This commits is simply replacing the use of "of_" prefixed functions > with there fwnode equivalent. What I meant by splitting to the patches is to be able to have first patch of a such split to be independent of this series. And I believe one or two (if you split to more logical pieces) may be done this way, means we have already available APIs.
Hi! On 2022-03-25 12:31, Clément Léger wrote: > In order to use i2c muxes with all types of nodes, switch to fwnode > API. The fwnode layer will allow to use this with both device_node and > software_node. > > This commits is simply replacing the use of "of_" prefixed functions > with there fwnode equivalent. > > Signed-off-by: Clément Léger <clement.leger@bootlin.com> > --- > drivers/i2c/muxes/Kconfig | 1 - > drivers/i2c/muxes/i2c-mux-pinctrl.c | 23 ++++++++++++----------- > 2 files changed, 12 insertions(+), 12 deletions(-) > > diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig > index 1708b1a82da2..d9cb15cfba3e 100644 > --- a/drivers/i2c/muxes/Kconfig > +++ b/drivers/i2c/muxes/Kconfig > @@ -77,7 +77,6 @@ config I2C_MUX_PCA954x > config I2C_MUX_PINCTRL > tristate "pinctrl-based I2C multiplexer" > depends on PINCTRL > - depends on OF || COMPILE_TEST > help > If you say yes to this option, support will be included for an I2C > multiplexer that uses the pinctrl subsystem, i.e. pin multiplexing. > diff --git a/drivers/i2c/muxes/i2c-mux-pinctrl.c b/drivers/i2c/muxes/i2c-mux-pinctrl.c > index f1bb00a11ad6..d9c0241e8790 100644 > --- a/drivers/i2c/muxes/i2c-mux-pinctrl.c > +++ b/drivers/i2c/muxes/i2c-mux-pinctrl.c > @@ -53,19 +53,20 @@ static struct i2c_adapter *i2c_mux_pinctrl_root_adapter( > > static struct i2c_adapter *i2c_mux_pinctrl_parent_adapter(struct device *dev) > { > - struct device_node *np = dev->of_node; > - struct device_node *parent_np; > + struct fwnode_handle *fwnode = dev_fwnode(dev); > + struct fwnode_handle *parent_fwnode; > struct i2c_adapter *parent; > > - parent_np = of_parse_phandle(np, "i2c-parent", 0); > - if (!parent_np) { > + parent_fwnode = fwnode_find_reference(fwnode, "i2c-parent", 0); > + if (!parent_fwnode) { > dev_err(dev, "Cannot parse i2c-parent\n"); > return ERR_PTR(-ENODEV); > } > - parent = of_find_i2c_adapter_by_node(parent_np); > - of_node_put(parent_np); > - if (!parent) > + parent = fwnode_find_i2c_adapter_by_node(parent_fwnode); > + if (!parent) { > + dev_err(dev, "Cannot find i2c-parent\n"); Why do we need to log this as an error? Cheers, Peter > return ERR_PTR(-EPROBE_DEFER); > + } > > return parent; > } > @@ -73,7 +74,7 @@ static struct i2c_adapter *i2c_mux_pinctrl_parent_adapter(struct device *dev) > static int i2c_mux_pinctrl_probe(struct platform_device *pdev) > { > struct device *dev = &pdev->dev; > - struct device_node *np = dev->of_node; > + struct fwnode_handle *fwnode = dev_fwnode(dev); > struct i2c_mux_core *muxc; > struct i2c_mux_pinctrl *mux; > struct i2c_adapter *parent; > @@ -81,7 +82,7 @@ static int i2c_mux_pinctrl_probe(struct platform_device *pdev) > int num_names, i, ret; > const char *name; > > - num_names = of_property_count_strings(np, "pinctrl-names"); > + num_names = fwnode_property_string_array_count(fwnode, "pinctrl-names"); > if (num_names < 0) { > dev_err(dev, "Cannot parse pinctrl-names: %d\n", > num_names); > @@ -111,8 +112,8 @@ static int i2c_mux_pinctrl_probe(struct platform_device *pdev) > } > > for (i = 0; i < num_names; i++) { > - ret = of_property_read_string_index(np, "pinctrl-names", i, > - &name); > + ret = fwnode_property_read_string_index(fwnode, "pinctrl-names", i, > + &name); > if (ret < 0) { > dev_err(dev, "Cannot parse pinctrl-names: %d\n", ret); > goto err_put_parent;
Le Fri, 25 Mar 2022 17:48:19 +0100, Peter Rosin <peda@axentia.se> a écrit : > > > > - parent_np = of_parse_phandle(np, "i2c-parent", 0); > > - if (!parent_np) { > > + parent_fwnode = fwnode_find_reference(fwnode, "i2c-parent", 0); > > + if (!parent_fwnode) { > > dev_err(dev, "Cannot parse i2c-parent\n"); > > return ERR_PTR(-ENODEV); > > } > > - parent = of_find_i2c_adapter_by_node(parent_np); > > - of_node_put(parent_np); > > - if (!parent) > > + parent = fwnode_find_i2c_adapter_by_node(parent_fwnode); > > + if (!parent) { > > + dev_err(dev, "Cannot find i2c-parent\n"); > > Why do we need to log this as an error? Hi Peter, sorry for the late answer, your mail ended up in my SPAM folder. Regarding the error logging, you are right, this is not needed. I'll remove it. Thanks, Clément
diff --git a/drivers/i2c/muxes/Kconfig b/drivers/i2c/muxes/Kconfig index 1708b1a82da2..d9cb15cfba3e 100644 --- a/drivers/i2c/muxes/Kconfig +++ b/drivers/i2c/muxes/Kconfig @@ -77,7 +77,6 @@ config I2C_MUX_PCA954x config I2C_MUX_PINCTRL tristate "pinctrl-based I2C multiplexer" depends on PINCTRL - depends on OF || COMPILE_TEST help If you say yes to this option, support will be included for an I2C multiplexer that uses the pinctrl subsystem, i.e. pin multiplexing. diff --git a/drivers/i2c/muxes/i2c-mux-pinctrl.c b/drivers/i2c/muxes/i2c-mux-pinctrl.c index f1bb00a11ad6..d9c0241e8790 100644 --- a/drivers/i2c/muxes/i2c-mux-pinctrl.c +++ b/drivers/i2c/muxes/i2c-mux-pinctrl.c @@ -53,19 +53,20 @@ static struct i2c_adapter *i2c_mux_pinctrl_root_adapter( static struct i2c_adapter *i2c_mux_pinctrl_parent_adapter(struct device *dev) { - struct device_node *np = dev->of_node; - struct device_node *parent_np; + struct fwnode_handle *fwnode = dev_fwnode(dev); + struct fwnode_handle *parent_fwnode; struct i2c_adapter *parent; - parent_np = of_parse_phandle(np, "i2c-parent", 0); - if (!parent_np) { + parent_fwnode = fwnode_find_reference(fwnode, "i2c-parent", 0); + if (!parent_fwnode) { dev_err(dev, "Cannot parse i2c-parent\n"); return ERR_PTR(-ENODEV); } - parent = of_find_i2c_adapter_by_node(parent_np); - of_node_put(parent_np); - if (!parent) + parent = fwnode_find_i2c_adapter_by_node(parent_fwnode); + if (!parent) { + dev_err(dev, "Cannot find i2c-parent\n"); return ERR_PTR(-EPROBE_DEFER); + } return parent; } @@ -73,7 +74,7 @@ static struct i2c_adapter *i2c_mux_pinctrl_parent_adapter(struct device *dev) static int i2c_mux_pinctrl_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; - struct device_node *np = dev->of_node; + struct fwnode_handle *fwnode = dev_fwnode(dev); struct i2c_mux_core *muxc; struct i2c_mux_pinctrl *mux; struct i2c_adapter *parent; @@ -81,7 +82,7 @@ static int i2c_mux_pinctrl_probe(struct platform_device *pdev) int num_names, i, ret; const char *name; - num_names = of_property_count_strings(np, "pinctrl-names"); + num_names = fwnode_property_string_array_count(fwnode, "pinctrl-names"); if (num_names < 0) { dev_err(dev, "Cannot parse pinctrl-names: %d\n", num_names); @@ -111,8 +112,8 @@ static int i2c_mux_pinctrl_probe(struct platform_device *pdev) } for (i = 0; i < num_names; i++) { - ret = of_property_read_string_index(np, "pinctrl-names", i, - &name); + ret = fwnode_property_read_string_index(fwnode, "pinctrl-names", i, + &name); if (ret < 0) { dev_err(dev, "Cannot parse pinctrl-names: %d\n", ret); goto err_put_parent;
In order to use i2c muxes with all types of nodes, switch to fwnode API. The fwnode layer will allow to use this with both device_node and software_node. This commits is simply replacing the use of "of_" prefixed functions with there fwnode equivalent. Signed-off-by: Clément Léger <clement.leger@bootlin.com> --- drivers/i2c/muxes/Kconfig | 1 - drivers/i2c/muxes/i2c-mux-pinctrl.c | 23 ++++++++++++----------- 2 files changed, 12 insertions(+), 12 deletions(-)