On Wed, Aug 13, 2025 at 12:24:22PM +0200, Gabor Juhos wrote:
- 22:17 keltezéssel, Andy Shevchenko írta:
On Mon, Aug 11, 2025 at 09:49:55PM +0200, Gabor Juhos wrote:
...
This is needed for the 'i2c-pxa' driver in order to be able to fix a long standing bug for which the fix will be implemented in a
The above left for some context for the below discussion.
...
The first traditional question is why the generic recovery is not working.
The details are in the driver specific patches. Should I write it all down here too?
Instead of the above paragraph, give a summary of your use case to answer 'why' it can not be done differently.
...
- if (i2c_gpio_init_recovery(adap) == -EPROBE_DEFER)
- if (bri->init_recovery) {
ret = bri->init_recovery(adap);
if (ret)
return ret;
- } else if (i2c_gpio_init_recovery(adap) == -EPROBE_DEFER) { return -EPROBE_DEFER;
- }
If the above stays, I think we would drop the last and always have init_recovery to be assigned.
In that case we would have something like this:
if (!bri->init_recovery) bri->init_recovery = i2c_gpio_init_recovery; ret = bri->init_recovery(adap); if (ret) return ret;
Since the callback is used only once, and within the same fuction where it is assigned, I don't really see the advantage of the assignment. Although it definitely looks cleaner as far as error handling is concerned.
Originally, I have used the following solution:
if (bri->init_recovery) ret = bri->init_recovery(adap); else ret = i2c_gpio_init_recovery(adap);
Without this blank line...
if (ret) return ret;
...this looks like the best compromise among proposed implementations.
However the existing code ignores errors from i2c_gpio_init_recovery() except EPROBE_DEFER, so I changed this to the code proposed in the patch in order to keep the existing behaviour.