Hi Andy, On 03 July 2022 16:17 Andy Shevchenko wrote: > On Sun, Jul 03, 2022 at 10:41:45AM +0200, Geert Uytterhoeven wrote: > > On Sat, Jul 2, 2022 at 1:51 PM Andy Shevchenko > > <andriy.shevchenko@xxxxxxxxxxxxxxx> wrote: > > > On Fri, Jul 01, 2022 at 05:39:16PM +0100, Phil Edworthy wrote: > > > > Yet another i2c controller from Renesas that is found on the RZ/V2M > > > > (r9a09g011) SoC. It can support only 100kHz and 400KHz operation. > > ... All other suggested changes are ok. > > > > + pm_runtime_get_sync(dev); > > > > pm_runtime_resume_and_get() ;-) > > This makes sense only if we test for error. Otherwise the put might > imbalance > counter. I added code to check the return value and to my surprise it returned -EACCES. Some digging later, this only happens when I have an i2c controller enabled that doesn't have any children. rpm_resume() returns -EACCES [1] because runtime_status and last_status are set to RPM_SUSPENDED. The i2c controller that does have a child has runtime_status = RPM_ACTIVE as there is a call to pm_runtime_resume_and_get() on it due to the i2c controller performing an i2c transfer for the slave device. I am currently struggling to work out why this is happening... Thanks Phil [1] https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/base/power/runtime.c?h=v5.19-rc5#n773