[PATCH v5 0/2] i2c: improve bus recovery for single-ended GPIOs

Jie Li posted 2 patches 1 month ago
drivers/gpio/gpiolib.c        | 22 ++++++++++++++++++++++
drivers/i2c/i2c-core-base.c   |  4 ++--
include/linux/gpio/consumer.h |  5 +++++
3 files changed, 29 insertions(+), 2 deletions(-)
[PATCH v5 0/2] i2c: improve bus recovery for single-ended GPIOs
Posted by Jie Li 1 month ago
Hi Bartosz, Wolfram,

This is a respin of the series rebased on v7.1-rc1, as requested by
Linus Walleij. No code changes versus v4; only the base has moved.

The series addresses a limitation in the I2C bus recovery mechanism
where certain open-drain GPIOs are incorrectly identified as
input-only, preventing the recovery logic from functioning.

Following the earlier suggestion from Linus Walleij, the previously
proposed "force-set-sda" DT property has been dropped in favor of a
generic helper in the GPIO subsystem to identify single-ended
configurations. This allows the I2C core to reliably enable recovery
for open-drain lines regardless of the instantaneous hardware
direction reporting.

Merging strategy (suggested by Linus Walleij)
=============================================

Patch 2/2 depends on the new gpiolib helper gpiod_is_single_ended()
introduced in patch 1/2. To keep this bisectable and avoid build
breakage, the recommended flow is:

  1. Bartosz applies patch 1/2 to the GPIO tree and exposes it as an
     immutable branch.
  2. Wolfram pulls that immutable branch into the I2C tree and queues
     patch 2/2 on top.

Bartosz: per Linus's note, please could you pick up patch 1/2 and
offer an immutable branch to Wolfram? Patch 2/2 does not touch any
GPIO file, but it is the sole user of the new helper, so it cannot
land via the I2C tree until 1/2 is available there.

Changes in v5:
- Rebased onto v7.1-rc1 (no code changes vs v4).

Changes in v4:
- Patch 2:
  - Use GPIO_LINE_DIRECTION_OUT instead of the literal '0' when
    checking the return value of gpiod_get_direction(), and drop
    the now-obsolete FIXME comment (suggested by Wolfram Sang).
  - Added Acked-by: Wolfram Sang.

Changes in v3:
- Patch 1:
  - Changed return type of gpiod_is_single_ended() from int to bool.
  - Updated return values from 0/1 to false/true.
  - Added Reviewed-by: Linus Walleij.
- Patch 2:
  - Added Reviewed-by: Linus Walleij.

Changes in v2:
- Replaced DT-based "force-set-sda" with a gpiolib helper.
- Added gpiod_is_single_ended() to drivers/gpio/gpiolib.c.
- Updated i2c-core-base.c to use the new helper.

Jie Li (2):
  gpiolib: add gpiod_is_single_ended() helper
  i2c: core: support recovery for single-ended GPIOs

 drivers/gpio/gpiolib.c        | 22 ++++++++++++++++++++++
 drivers/i2c/i2c-core-base.c   |  4 ++--
 include/linux/gpio/consumer.h |  5 +++++
 3 files changed, 29 insertions(+), 2 deletions(-)


base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
-- 
2.43.0
Re: (subset) [PATCH v5 0/2] i2c: improve bus recovery for single-ended GPIOs
Posted by Bartosz Golaszewski 1 month ago
On Mon, 11 May 2026 13:37:24 +0200, Jie Li wrote:
> This is a respin of the series rebased on v7.1-rc1, as requested by
> Linus Walleij. No code changes versus v4; only the base has moved.
> 
> The series addresses a limitation in the I2C bus recovery mechanism
> where certain open-drain GPIOs are incorrectly identified as
> input-only, preventing the recovery logic from functioning.
> 
> [...]

Applied, thanks!

[1/2] gpiolib: add gpiod_is_single_ended() helper
      https://git.kernel.org/brgl/c/b5fafa01bdaade5253bd39317f5455d13e6efc7d

Best regards,
-- 
Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>