i2c: use an IRQ to report Host Notify events, not alert
authorBenjamin Tissoires <benjamin.tissoires@redhat.com>
Thu, 13 Oct 2016 12:10:40 +0000 (14:10 +0200)
committerWolfram Sang <wsa@the-dreams.de>
Thu, 24 Nov 2016 15:22:06 +0000 (16:22 +0100)
commit4d5538f5882a6b67eefbab0f0a3a67ce811621aa
tree1a5e7055d2db7d178fd178c44740170eeec60228
parentc912a25a5a12a497bb47068e3d42d7c9b67bde12
i2c: use an IRQ to report Host Notify events, not alert

The current SMBus Host Notify implementation relies on .alert() to
relay its notifications. However, the use cases where SMBus Host
Notify is needed currently is to signal data ready on touchpads.

This is closer to an IRQ than a custom API through .alert().
Given that the 2 touchpad manufacturers (Synaptics and Elan) that
use SMBus Host Notify don't put any data in the SMBus payload, the
concept actually matches one to one.

Benefits are multiple:
- simpler code and API: the client will just have an IRQ, and
  nothing needs to be added in the adapter beside internally
  enabling it.
- no more specific workqueue, the threading is handled by IRQ core
  directly (when required)
- no more races when removing the device (the drivers are already
  required to disable irq on remove)
- simpler handling for drivers: use plain regular IRQs
- no more dependency on i2c-smbus for i2c-i801 (and any other adapter)
- the IRQ domain is created automatically when the adapter exports
  the Host Notify capability
- the IRQ are assign only if ACPI, OF and the caller did not assign
  one already
- the domain is automatically destroyed on remove
- fewer lines of code (minus 20, yeah!)

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
Documentation/i2c/smbus-protocol
drivers/i2c/Kconfig
drivers/i2c/busses/i2c-i801.c
drivers/i2c/i2c-core.c
drivers/i2c/i2c-smbus.c
include/linux/i2c-smbus.h
include/linux/i2c.h