Commit | Line | Data |
---|---|---|
b5527a77 JD |
1 | /* |
2 | * i2c-smbus.h - SMBus extensions to the I2C protocol | |
3 | * | |
7c81c60f | 4 | * Copyright (C) 2010 Jean Delvare <jdelvare@suse.de> |
b5527a77 JD |
5 | * |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | * GNU General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License | |
17 | * along with this program; if not, write to the Free Software | |
5694f8a8 JD |
18 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, |
19 | * MA 02110-1301 USA. | |
b5527a77 JD |
20 | */ |
21 | ||
22 | #ifndef _LINUX_I2C_SMBUS_H | |
23 | #define _LINUX_I2C_SMBUS_H | |
24 | ||
25 | #include <linux/i2c.h> | |
e456cd37 BT |
26 | #include <linux/spinlock.h> |
27 | #include <linux/workqueue.h> | |
b5527a77 JD |
28 | |
29 | ||
30 | /** | |
31 | * i2c_smbus_alert_setup - platform data for the smbus_alert i2c client | |
32 | * @alert_edge_triggered: whether the alert interrupt is edge (1) or level (0) | |
33 | * triggered | |
34 | * @irq: IRQ number, if the smbus_alert driver should take care of interrupt | |
35 | * handling | |
36 | * | |
37 | * If irq is not specified, the smbus_alert driver doesn't take care of | |
38 | * interrupt handling. In that case it is up to the I2C bus driver to either | |
39 | * handle the interrupts or to poll for alerts. | |
40 | * | |
41 | * If irq is specified then it it crucial that alert_edge_triggered is | |
42 | * properly set. | |
43 | */ | |
44 | struct i2c_smbus_alert_setup { | |
45 | unsigned int alert_edge_triggered:1; | |
46 | int irq; | |
47 | }; | |
48 | ||
49 | struct i2c_client *i2c_setup_smbus_alert(struct i2c_adapter *adapter, | |
50 | struct i2c_smbus_alert_setup *setup); | |
51 | int i2c_handle_smbus_alert(struct i2c_client *ara); | |
52 | ||
e456cd37 BT |
53 | /** |
54 | * smbus_host_notify - internal structure used by the Host Notify mechanism. | |
55 | * @adapter: the I2C adapter associated with this struct | |
56 | * @work: worker used to schedule the IRQ in the slave device | |
57 | * @lock: spinlock to check if a notification is already pending | |
58 | * @pending: flag set when a notification is pending (any new notification will | |
59 | * be rejected if pending is true) | |
60 | * @payload: the actual payload of the Host Notify event | |
61 | * @addr: the address of the slave device which raised the notification | |
62 | * | |
63 | * This struct needs to be allocated by i2c_setup_smbus_host_notify() and does | |
64 | * not need to be freed. Internally, i2c_setup_smbus_host_notify() uses a | |
65 | * managed resource to clean this up when the adapter get released. | |
66 | */ | |
67 | struct smbus_host_notify { | |
68 | struct i2c_adapter *adapter; | |
69 | struct work_struct work; | |
70 | spinlock_t lock; | |
71 | bool pending; | |
72 | u16 payload; | |
73 | u8 addr; | |
74 | }; | |
75 | ||
e456cd37 BT |
76 | struct smbus_host_notify *i2c_setup_smbus_host_notify(struct i2c_adapter *adap); |
77 | int i2c_handle_smbus_host_notify(struct smbus_host_notify *host_notify, | |
78 | unsigned short addr, unsigned int data); | |
e456cd37 | 79 | |
b5527a77 | 80 | #endif /* _LINUX_I2C_SMBUS_H */ |