diff --git a/drivers/i2c/i2c_nrfx_twi.c b/drivers/i2c/i2c_nrfx_twi.c index 21c1bc72f07..64ac076c47e 100644 --- a/drivers/i2c/i2c_nrfx_twi.c +++ b/drivers/i2c/i2c_nrfx_twi.c @@ -195,9 +195,18 @@ static int i2c_nrfx_twi_configure(const struct device *dev, return 0; } +static int i2c_nrfx_twi_recover_bus(const struct device *dev) +{ + nrfx_err_t err = nrfx_twi_bus_recover(get_dev_config(dev)->config.scl, + get_dev_config(dev)->config.sda); + + return (err == NRFX_SUCCESS ? 0 : -EBUSY); +} + static const struct i2c_driver_api i2c_nrfx_twi_driver_api = { - .configure = i2c_nrfx_twi_configure, - .transfer = i2c_nrfx_twi_transfer, + .configure = i2c_nrfx_twi_configure, + .transfer = i2c_nrfx_twi_transfer, + .recover_bus = i2c_nrfx_twi_recover_bus, }; static int init_twi(const struct device *dev) diff --git a/drivers/i2c/i2c_nrfx_twim.c b/drivers/i2c/i2c_nrfx_twim.c index a00d9fad005..1d181d489f0 100644 --- a/drivers/i2c/i2c_nrfx_twim.c +++ b/drivers/i2c/i2c_nrfx_twim.c @@ -259,9 +259,18 @@ static int i2c_nrfx_twim_configure(const struct device *dev, return 0; } +static int i2c_nrfx_twim_recover_bus(const struct device *dev) +{ + nrfx_err_t err = nrfx_twim_bus_recover(get_dev_config(dev)->config.scl, + get_dev_config(dev)->config.sda); + + return (err == NRFX_SUCCESS ? 0 : -EBUSY); +} + static const struct i2c_driver_api i2c_nrfx_twim_driver_api = { - .configure = i2c_nrfx_twim_configure, - .transfer = i2c_nrfx_twim_transfer, + .configure = i2c_nrfx_twim_configure, + .transfer = i2c_nrfx_twim_transfer, + .recover_bus = i2c_nrfx_twim_recover_bus, }; static int init_twim(const struct device *dev)