lis3lv02d i2c access on shutdown

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

I have an TI am335x that is using a i2c PMIC with pm_power_off hook which locks up on shutdown. The pm_power_off hook gets stuck obtaining i2c_lock_adapter(). The holder of the lock is the lis3lv02d accelerometer which never releases it.

I do not think there is an issue in lis3lv02d. I think this is a general issue with i2c since other drivers have the same design. What I don't have is clear understanding of if/when/how i2c_transfer() can be called post kernel_power_off(). Is it possible to call i2c_transfer() at this point. I have tried calling schedule() and msleep() inside of kernel_power_off() after syscore_shutdown(). It looks like interrupts are enabled and I can still schedule at this point. So how is it possible that lis3lv02d is never able to exit the i2c_transfer()? Is there some other lock inside i2c_transfer that it is blocking on?

Is it possible that the process which had the accelerometer open has exited while holding the i2c lock. Is it even possible for a device to shutdown or file to close while holding a lock in the kernel?

I looked at adding a lis3lv02d_i2c_shutdown, but that was too late in the process already and the lis3lv02d was already stuck. Is there a very early place during shutdown that I can kick everyone off the i2c bus? Obviously this might not be the best general solution, but my concern right now is fixing the problem on this particular system first.

-James
--
To unsubscribe from this list: send the line "unsubscribe linux-i2c" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux