diff options
Diffstat (limited to 'include/linux/i2c-smbus.h')
| -rw-r--r-- | include/linux/i2c-smbus.h | 29 | 
1 files changed, 29 insertions, 0 deletions
| diff --git a/include/linux/i2c-smbus.h b/include/linux/i2c-smbus.h index 8f1b086ca5bc..c2e3324f9468 100644 --- a/include/linux/i2c-smbus.h +++ b/include/linux/i2c-smbus.h @@ -23,6 +23,8 @@  #define _LINUX_I2C_SMBUS_H  #include <linux/i2c.h> +#include <linux/spinlock.h> +#include <linux/workqueue.h>  /** @@ -48,4 +50,31 @@ struct i2c_client *i2c_setup_smbus_alert(struct i2c_adapter *adapter,  					 struct i2c_smbus_alert_setup *setup);  int i2c_handle_smbus_alert(struct i2c_client *ara); +/** + * smbus_host_notify - internal structure used by the Host Notify mechanism. + * @adapter: the I2C adapter associated with this struct + * @work: worker used to schedule the IRQ in the slave device + * @lock: spinlock to check if a notification is already pending + * @pending: flag set when a notification is pending (any new notification will + *		be rejected if pending is true) + * @payload: the actual payload of the Host Notify event + * @addr: the address of the slave device which raised the notification + * + * This struct needs to be allocated by i2c_setup_smbus_host_notify() and does + * not need to be freed. Internally, i2c_setup_smbus_host_notify() uses a + * managed resource to clean this up when the adapter get released. + */ +struct smbus_host_notify { +	struct i2c_adapter	*adapter; +	struct work_struct	work; +	spinlock_t		lock; +	bool			pending; +	u16			payload; +	u8			addr; +}; + +struct smbus_host_notify *i2c_setup_smbus_host_notify(struct i2c_adapter *adap); +int i2c_handle_smbus_host_notify(struct smbus_host_notify *host_notify, +				 unsigned short addr, unsigned int data); +  #endif /* _LINUX_I2C_SMBUS_H */ |