Hi,
On 8/22/23 14:02, Andy Shevchenko wrote:
On Tue, Aug 22, 2023 at 11:15:55AM +0200, Yann Sionneau wrote:
scl-gpio = <>;
sda-gpio = <>;
Are not enough for some SoCs to have a working recovery.
Some need:
scl-gpio = <>;
sda-gpio = <>;
pinctrl-names = "default", "recovery";
pinctrl-0 = <&i2c_pins_hw>;
pinctrl-1 = <&i2c_pins_gpio>;
The driver was not filling rinfo->pinctrl with the device node
pinctrl data which is needed by generic recovery code.
...
+ rinfo->pinctrl = devm_pinctrl_get(dev->dev);
+ if (IS_ERR(rinfo->pinctrl)) {
+ if (PTR_ERR(rinfo->pinctrl) == -EPROBE_DEFER)
+ return PTR_ERR(rinfo->pinctrl);
+
+ rinfo->pinctrl = NULL;
+ dev_err(dev->dev, "getting pinctrl info failed: bus recovery might not work\n");
+ } else if (!rinfo->pinctrl) {
+ dev_dbg(dev->dev, "pinctrl is disabled, bus recovery might not work\n");
+ }
A bit of bikeshedding, would the below be slightly better?
rinfo->pinctrl = devm_pinctrl_get(dev->dev);
if (IS_ERR(rinfo->pinctrl)) {
if (PTR_ERR(rinfo->pinctrl) == -EPROBE_DEFER)
return PTR_ERR(rinfo->pinctrl);
rinfo->pinctrl = NULL;
dev_err(dev->dev, "getting pinctrl info failed, disabling...\n");
I think the dev_err() message change is not very clear because one might
think that "disabling" means that the i2c adapter is getting disabled.
Maybe we can put "getting pinctrl info failed, disabling recovery..."?
}
if (!rinfo->pinctrl)
dev_dbg(dev->dev, "pinctrl is disabled, bus recovery might not work\n");
Ah yes, I like the getting rid of the `else` part. LGTM I'll re-send
with that.
Regards,
--
Yann