Subversion Repositories Kolibri OS

Rev

Rev 1408 | Rev 1631 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1408 Rev 1430
1
/* ------------------------------------------------------------------------- */
1
/* ------------------------------------------------------------------------- */
2
/*									     */
2
/*									     */
3
/* i2c.h - definitions for the i2c-bus interface			     */
3
/* i2c.h - definitions for the i2c-bus interface			     */
4
/*									     */
4
/*									     */
5
/* ------------------------------------------------------------------------- */
5
/* ------------------------------------------------------------------------- */
6
/*   Copyright (C) 1995-2000 Simon G. Vogl
6
/*   Copyright (C) 1995-2000 Simon G. Vogl
7
 
7
 
8
    This program is free software; you can redistribute it and/or modify
8
    This program is free software; you can redistribute it and/or modify
9
    it under the terms of the GNU General Public License as published by
9
    it under the terms of the GNU General Public License as published by
10
    the Free Software Foundation; either version 2 of the License, or
10
    the Free Software Foundation; either version 2 of the License, or
11
    (at your option) any later version.
11
    (at your option) any later version.
12
 
12
 
13
    This program is distributed in the hope that it will be useful,
13
    This program is distributed in the hope that it will be useful,
14
    but WITHOUT ANY WARRANTY; without even the implied warranty of
14
    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
    GNU General Public License for more details.
16
    GNU General Public License for more details.
17
 
17
 
18
    You should have received a copy of the GNU General Public License
18
    You should have received a copy of the GNU General Public License
19
    along with this program; if not, write to the Free Software
19
    along with this program; if not, write to the Free Software
20
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.		     */
20
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.		     */
21
/* ------------------------------------------------------------------------- */
21
/* ------------------------------------------------------------------------- */
22
 
22
 
23
/* With some changes from Kyösti Mälkki  and
23
/* With some changes from Kyösti Mälkki  and
24
   Frodo Looijaard  */
24
   Frodo Looijaard  */
25
 
25
 
26
#ifndef _LINUX_I2C_H
26
#ifndef _LINUX_I2C_H
27
#define _LINUX_I2C_H
27
#define _LINUX_I2C_H
28
 
28
 
29
#include 
29
#include 
30
#include 
30
#include 
-
 
31
#include 
-
 
32
#include 
31
 
33
 
32
 
34
 
33
#define I2C_NAME_SIZE   20
35
#define I2C_NAME_SIZE   20
34
 
36
 
35
struct i2c_msg;
37
struct i2c_msg;
36
struct i2c_algorithm;
38
struct i2c_algorithm;
37
struct i2c_adapter;
39
struct i2c_adapter;
38
struct i2c_client;
40
struct i2c_client;
39
union i2c_smbus_data;
41
union i2c_smbus_data;
40
 
42
 
41
 
43
 
42
/* Transfer num messages.
44
/* Transfer num messages.
43
 */
45
 */
44
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
46
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
45
			int num);
47
			int num);
46
 
48
 
47
/**
49
/**
-
 
50
 * struct i2c_driver - represent an I2C device driver
-
 
51
 * @class: What kind of i2c device we instantiate (for detect)
-
 
52
 * @attach_adapter: Callback for bus addition (for legacy drivers)
-
 
53
 * @detach_adapter: Callback for bus removal (for legacy drivers)
-
 
54
 * @probe: Callback for device binding
-
 
55
 * @remove: Callback for device unbinding
-
 
56
 * @shutdown: Callback for device shutdown
-
 
57
 * @suspend: Callback for device suspend
-
 
58
 * @resume: Callback for device resume
-
 
59
 * @command: Callback for bus-wide signaling (optional)
-
 
60
 * @driver: Device driver model driver
-
 
61
 * @id_table: List of I2C devices supported by this driver
-
 
62
 * @detect: Callback for device detection
-
 
63
 * @address_list: The I2C addresses to probe (for detect)
-
 
64
 * @clients: List of detected clients we created (for i2c-core use only)
-
 
65
 *
-
 
66
 * The driver.owner field should be set to the module owner of this driver.
-
 
67
 * The driver.name field should be set to the name of this driver.
-
 
68
 *
-
 
69
 * For automatic device detection, both @detect and @address_data must
-
 
70
 * be defined. @class should also be set, otherwise only devices forced
-
 
71
 * with module parameters will be created. The detect function must
-
 
72
 * fill at least the name field of the i2c_board_info structure it is
-
 
73
 * handed upon successful detection, and possibly also the flags field.
-
 
74
 *
-
 
75
 * If @detect is missing, the driver will still work fine for enumerated
-
 
76
 * devices. Detected devices simply won't be supported. This is expected
-
 
77
 * for the many I2C/SMBus devices which can't be detected reliably, and
-
 
78
 * the ones which can always be enumerated in practice.
-
 
79
 *
-
 
80
 * The i2c_client structure which is handed to the @detect callback is
-
 
81
 * not a real i2c_client. It is initialized just enough so that you can
-
 
82
 * call i2c_smbus_read_byte_data and friends on it. Don't do anything
-
 
83
 * else with it. In particular, calling dev_dbg and friends on it is
-
 
84
 * not allowed.
-
 
85
 */
-
 
86
struct i2c_driver {
-
 
87
	unsigned int class;
-
 
88
 
-
 
89
	/* Notifies the driver that a new bus has appeared or is about to be
-
 
90
	 * removed. You should avoid using this if you can, it will probably
-
 
91
	 * be removed in a near future.
-
 
92
	 */
-
 
93
	int (*attach_adapter)(struct i2c_adapter *);
-
 
94
	int (*detach_adapter)(struct i2c_adapter *);
-
 
95
 
-
 
96
	/* Standard driver model interfaces */
-
 
97
	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
-
 
98
	int (*remove)(struct i2c_client *);
-
 
99
 
-
 
100
	/* driver model interfaces that don't relate to enumeration  */
-
 
101
	void (*shutdown)(struct i2c_client *);
-
 
102
//	int (*suspend)(struct i2c_client *, pm_message_t mesg);
-
 
103
	int (*resume)(struct i2c_client *);
-
 
104
 
-
 
105
	/* Alert callback, for example for the SMBus alert protocol.
-
 
106
	 * The format and meaning of the data value depends on the protocol.
-
 
107
	 * For the SMBus alert protocol, there is a single bit of data passed
-
 
108
	 * as the alert response's low bit ("event flag").
-
 
109
	 */
-
 
110
	void (*alert)(struct i2c_client *, unsigned int data);
-
 
111
 
-
 
112
	/* a ioctl like command that can be used to perform specific functions
-
 
113
	 * with the device.
-
 
114
	 */
-
 
115
	int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
-
 
116
 
-
 
117
//	struct device_driver driver;
-
 
118
	const struct i2c_device_id *id_table;
-
 
119
 
-
 
120
	/* Device detection callback for automatic device creation */
-
 
121
//	int (*detect)(struct i2c_client *, struct i2c_board_info *);
-
 
122
	const unsigned short *address_list;
-
 
123
	struct list_head clients;
-
 
124
};
-
 
125
#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
-
 
126
 
-
 
127
/**
48
 * struct i2c_client - represent an I2C slave device
128
 * struct i2c_client - represent an I2C slave device
49
 * @flags: I2C_CLIENT_TEN indicates the device uses a ten bit chip address;
129
 * @flags: I2C_CLIENT_TEN indicates the device uses a ten bit chip address;
50
 *	I2C_CLIENT_PEC indicates it uses SMBus Packet Error Checking
130
 *	I2C_CLIENT_PEC indicates it uses SMBus Packet Error Checking
51
 * @addr: Address used on the I2C bus connected to the parent adapter.
131
 * @addr: Address used on the I2C bus connected to the parent adapter.
52
 * @name: Indicates the type of the device, usually a chip name that's
132
 * @name: Indicates the type of the device, usually a chip name that's
53
 *	generic enough to hide second-sourcing and compatible revisions.
133
 *	generic enough to hide second-sourcing and compatible revisions.
54
 * @adapter: manages the bus segment hosting this I2C device
134
 * @adapter: manages the bus segment hosting this I2C device
55
 * @driver: device's driver, hence pointer to access routines
135
 * @driver: device's driver, hence pointer to access routines
56
 * @dev: Driver model device node for the slave.
136
 * @dev: Driver model device node for the slave.
57
 * @irq: indicates the IRQ generated by this device (if any)
137
 * @irq: indicates the IRQ generated by this device (if any)
58
 * @detected: member of an i2c_driver.clients list or i2c-core's
138
 * @detected: member of an i2c_driver.clients list or i2c-core's
59
 *	userspace_devices list
139
 *	userspace_devices list
60
 *
140
 *
61
 * An i2c_client identifies a single device (i.e. chip) connected to an
141
 * An i2c_client identifies a single device (i.e. chip) connected to an
62
 * i2c bus. The behaviour exposed to Linux is defined by the driver
142
 * i2c bus. The behaviour exposed to Linux is defined by the driver
63
 * managing the device.
143
 * managing the device.
64
 */
144
 */
65
struct i2c_client {
145
struct i2c_client {
66
	unsigned short flags;		/* div., see below		*/
146
	unsigned short flags;		/* div., see below		*/
67
	unsigned short addr;		/* chip address - NOTE: 7bit	*/
147
	unsigned short addr;		/* chip address - NOTE: 7bit	*/
68
					/* addresses are stored in the	*/
148
					/* addresses are stored in the	*/
69
					/* _LOWER_ 7 bits		*/
149
					/* _LOWER_ 7 bits		*/
70
	char name[I2C_NAME_SIZE];
150
	char name[I2C_NAME_SIZE];
71
	struct i2c_adapter *adapter;	/* the adapter we sit on	*/
151
	struct i2c_adapter *adapter;	/* the adapter we sit on	*/
72
//        struct i2c_driver *driver;      /* and our access routines      */
152
    struct i2c_driver *driver;      /* and our access routines      */
73
//        struct device dev;              /* the device structure         */
153
//        struct device dev;              /* the device structure         */
74
        int irq;                        /* irq issued by device (or -1) */
154
    int irq;                        /* irq issued by device (or -1) */
75
	struct list_head detected;
155
	struct list_head detected;
76
};
156
};
77
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
157
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
-
 
158
 
78
 
159
extern struct i2c_client *i2c_verify_client(struct device *dev);
79
 
160
 
80
/*
161
/*
81
 * The following structs are for those who like to implement new bus drivers:
162
 * The following structs are for those who like to implement new bus drivers:
82
 * i2c_algorithm is the interface to a class of hardware solutions which can
163
 * i2c_algorithm is the interface to a class of hardware solutions which can
83
 * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
164
 * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
84
 * to name two of the most common.
165
 * to name two of the most common.
85
 */
166
 */
86
struct i2c_algorithm {
167
struct i2c_algorithm {
87
	/* If an adapter algorithm can't do I2C-level access, set master_xfer
168
	/* If an adapter algorithm can't do I2C-level access, set master_xfer
88
	   to NULL. If an adapter algorithm can do SMBus access, set
169
	   to NULL. If an adapter algorithm can do SMBus access, set
89
	   smbus_xfer. If set to NULL, the SMBus protocol is simulated
170
	   smbus_xfer. If set to NULL, the SMBus protocol is simulated
90
	   using common I2C messages */
171
	   using common I2C messages */
91
	/* master_xfer should return the number of messages successfully
172
	/* master_xfer should return the number of messages successfully
92
	   processed, or a negative value on error */
173
	   processed, or a negative value on error */
93
	int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
174
	int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
94
			   int num);
175
			   int num);
95
	int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
176
	int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
96
			   unsigned short flags, char read_write,
177
			   unsigned short flags, char read_write,
97
			   u8 command, int size, union i2c_smbus_data *data);
178
			   u8 command, int size, union i2c_smbus_data *data);
98
 
179
 
99
	/* To determine what the adapter supports */
180
	/* To determine what the adapter supports */
100
	u32 (*functionality) (struct i2c_adapter *);
181
	u32 (*functionality) (struct i2c_adapter *);
101
};
182
};
102
 
183
 
103
/*
184
/*
104
 * i2c_adapter is the structure used to identify a physical i2c bus along
185
 * i2c_adapter is the structure used to identify a physical i2c bus along
105
 * with the access algorithms necessary to access it.
186
 * with the access algorithms necessary to access it.
106
 */
187
 */
107
struct i2c_adapter {
188
struct i2c_adapter {
108
	unsigned int id;
189
	unsigned int id;
109
	unsigned int class;		  /* classes to allow probing for */
190
	unsigned int class;		  /* classes to allow probing for */
110
	const struct i2c_algorithm *algo; /* the algorithm to access the bus */
191
	const struct i2c_algorithm *algo; /* the algorithm to access the bus */
111
	void *algo_data;
192
	void *algo_data;
112
 
193
 
113
        /* data fields that are valid for all devices   */
194
        /* data fields that are valid for all devices   */
114
	u8 level; 			/* nesting level for lockdep */
195
//	struct rt_mutex bus_lock;
115
 
196
 
116
	int timeout;			/* in jiffies */
197
	int timeout;			/* in jiffies */
117
    int retries;
198
    int retries;
118
 //  struct device dev;      /* the adapter device */
199
    struct device dev;      /* the adapter device */
119
 
200
 
120
    int nr;
201
    int nr;
121
    char name[48];
202
    char name[48];
122
};
203
};
123
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
204
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
-
 
205
 
-
 
206
static inline void *i2c_get_adapdata(const struct i2c_adapter *dev)
-
 
207
{
-
 
208
	return dev_get_drvdata(&dev->dev);
-
 
209
}
-
 
210
 
-
 
211
static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
-
 
212
{
-
 
213
	dev_set_drvdata(&dev->dev, data);
124
 
214
}
125
 
215
 
126
/*flags for the client struct: */
216
/*flags for the client struct: */
127
#define I2C_CLIENT_PEC	0x04		/* Use Packet Error Checking */
217
#define I2C_CLIENT_PEC	0x04		/* Use Packet Error Checking */
128
#define I2C_CLIENT_TEN	0x10		/* we have a ten bit chip address */
218
#define I2C_CLIENT_TEN	0x10		/* we have a ten bit chip address */
129
					/* Must equal I2C_M_TEN below */
219
					/* Must equal I2C_M_TEN below */
130
#define I2C_CLIENT_WAKE	0x80		/* for board_info; true iff can wake */
220
#define I2C_CLIENT_WAKE	0x80		/* for board_info; true iff can wake */
131
 
221
 
132
/* i2c adapter classes (bitmask) */
222
/* i2c adapter classes (bitmask) */
133
#define I2C_CLASS_HWMON		(1<<0)	/* lm_sensors, ... */
223
#define I2C_CLASS_HWMON		(1<<0)	/* lm_sensors, ... */
134
#define I2C_CLASS_TV_ANALOG	(1<<1)	/* bttv + friends */
224
#define I2C_CLASS_TV_ANALOG	(1<<1)	/* bttv + friends */
135
#define I2C_CLASS_TV_DIGITAL	(1<<2)	/* dvb cards */
225
#define I2C_CLASS_TV_DIGITAL	(1<<2)	/* dvb cards */
136
#define I2C_CLASS_DDC		(1<<3)	/* DDC bus on graphics adapters */
226
#define I2C_CLASS_DDC		(1<<3)	/* DDC bus on graphics adapters */
137
#define I2C_CLASS_SPD		(1<<7)	/* SPD EEPROMs and similar */
227
#define I2C_CLASS_SPD		(1<<7)	/* SPD EEPROMs and similar */
138
 
-
 
139
/* i2c_client_address_data is the struct for holding default client
-
 
140
 * addresses for a driver and for the parameters supplied on the
-
 
141
 * command line
-
 
142
 */
-
 
143
struct i2c_client_address_data {
-
 
144
	const unsigned short *normal_i2c;
-
 
145
	const unsigned short *probe;
-
 
146
	const unsigned short *ignore;
-
 
147
	const unsigned short * const *forces;
-
 
148
};
-
 
149
 
228
 
150
/* Internal numbers to terminate lists */
229
/* Internal numbers to terminate lists */
151
#define I2C_CLIENT_END		0xfffeU
230
#define I2C_CLIENT_END		0xfffeU
152
 
231
 
153
/* The numbers to use to set I2C bus address */
232
/* The numbers to use to set I2C bus address */
154
#define ANY_I2C_BUS		0xffff
233
#define ANY_I2C_BUS		0xffff
155
 
234
 
156
/* Construct an I2C_CLIENT_END-terminated array of i2c addresses */
235
/* Construct an I2C_CLIENT_END-terminated array of i2c addresses */
157
#define I2C_ADDRS(addr, addrs...) \
236
#define I2C_ADDRS(addr, addrs...) \
158
	((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END })
237
	((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END })
159
 
238
 
160
 
239
 
161
/**
240
/**
162
 * struct i2c_msg - an I2C transaction segment beginning with START
241
 * struct i2c_msg - an I2C transaction segment beginning with START
163
 * @addr: Slave address, either seven or ten bits.  When this is a ten
242
 * @addr: Slave address, either seven or ten bits.  When this is a ten
164
 *	bit address, I2C_M_TEN must be set in @flags and the adapter
243
 *	bit address, I2C_M_TEN must be set in @flags and the adapter
165
 *	must support I2C_FUNC_10BIT_ADDR.
244
 *	must support I2C_FUNC_10BIT_ADDR.
166
 * @flags: I2C_M_RD is handled by all adapters.  No other flags may be
245
 * @flags: I2C_M_RD is handled by all adapters.  No other flags may be
167
 *	provided unless the adapter exported the relevant I2C_FUNC_*
246
 *	provided unless the adapter exported the relevant I2C_FUNC_*
168
 *	flags through i2c_check_functionality().
247
 *	flags through i2c_check_functionality().
169
 * @len: Number of data bytes in @buf being read from or written to the
248
 * @len: Number of data bytes in @buf being read from or written to the
170
 *	I2C slave address.  For read transactions where I2C_M_RECV_LEN
249
 *	I2C slave address.  For read transactions where I2C_M_RECV_LEN
171
 *	is set, the caller guarantees that this buffer can hold up to
250
 *	is set, the caller guarantees that this buffer can hold up to
172
 *	32 bytes in addition to the initial length byte sent by the
251
 *	32 bytes in addition to the initial length byte sent by the
173
 *	slave (plus, if used, the SMBus PEC); and this value will be
252
 *	slave (plus, if used, the SMBus PEC); and this value will be
174
 *	incremented by the number of block data bytes received.
253
 *	incremented by the number of block data bytes received.
175
 * @buf: The buffer into which data is read, or from which it's written.
254
 * @buf: The buffer into which data is read, or from which it's written.
176
 *
255
 *
177
 * An i2c_msg is the low level representation of one segment of an I2C
256
 * An i2c_msg is the low level representation of one segment of an I2C
178
 * transaction.  It is visible to drivers in the @i2c_transfer() procedure,
257
 * transaction.  It is visible to drivers in the @i2c_transfer() procedure,
179
 * to userspace from i2c-dev, and to I2C adapter drivers through the
258
 * to userspace from i2c-dev, and to I2C adapter drivers through the
180
 * @i2c_adapter.@master_xfer() method.
259
 * @i2c_adapter.@master_xfer() method.
181
 *
260
 *
182
 * Except when I2C "protocol mangling" is used, all I2C adapters implement
261
 * Except when I2C "protocol mangling" is used, all I2C adapters implement
183
 * the standard rules for I2C transactions.  Each transaction begins with a
262
 * the standard rules for I2C transactions.  Each transaction begins with a
184
 * START.  That is followed by the slave address, and a bit encoding read
263
 * START.  That is followed by the slave address, and a bit encoding read
185
 * versus write.  Then follow all the data bytes, possibly including a byte
264
 * versus write.  Then follow all the data bytes, possibly including a byte
186
 * with SMBus PEC.  The transfer terminates with a NAK, or when all those
265
 * with SMBus PEC.  The transfer terminates with a NAK, or when all those
187
 * bytes have been transferred and ACKed.  If this is the last message in a
266
 * bytes have been transferred and ACKed.  If this is the last message in a
188
 * group, it is followed by a STOP.  Otherwise it is followed by the next
267
 * group, it is followed by a STOP.  Otherwise it is followed by the next
189
 * @i2c_msg transaction segment, beginning with a (repeated) START.
268
 * @i2c_msg transaction segment, beginning with a (repeated) START.
190
 *
269
 *
191
 * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then
270
 * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then
192
 * passing certain @flags may have changed those standard protocol behaviors.
271
 * passing certain @flags may have changed those standard protocol behaviors.
193
 * Those flags are only for use with broken/nonconforming slaves, and with
272
 * Those flags are only for use with broken/nonconforming slaves, and with
194
 * adapters which are known to support the specific mangling options they
273
 * adapters which are known to support the specific mangling options they
195
 * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR).
274
 * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR).
196
 */
275
 */
197
struct i2c_msg {
276
struct i2c_msg {
198
        u16 addr;     /* slave address                        */
277
        u16 addr;     /* slave address                        */
199
        u16 flags;
278
        u16 flags;
200
#define I2C_M_TEN               0x0010  /* this is a ten bit chip address */
279
#define I2C_M_TEN               0x0010  /* this is a ten bit chip address */
201
#define I2C_M_RD                0x0001  /* read data, from slave to master */
280
#define I2C_M_RD                0x0001  /* read data, from slave to master */
202
#define I2C_M_NOSTART           0x4000  /* if I2C_FUNC_PROTOCOL_MANGLING */
281
#define I2C_M_NOSTART           0x4000  /* if I2C_FUNC_PROTOCOL_MANGLING */
203
#define I2C_M_REV_DIR_ADDR      0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
282
#define I2C_M_REV_DIR_ADDR      0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
204
#define I2C_M_IGNORE_NAK        0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
283
#define I2C_M_IGNORE_NAK        0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
205
#define I2C_M_NO_RD_ACK         0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
284
#define I2C_M_NO_RD_ACK         0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
206
#define I2C_M_RECV_LEN          0x0400  /* length will be first received byte */
285
#define I2C_M_RECV_LEN          0x0400  /* length will be first received byte */
207
        u16 len;              /* msg length                           */
286
        u16 len;              /* msg length                           */
208
        u8 *buf;              /* pointer to msg data                  */
287
        u8 *buf;              /* pointer to msg data                  */
209
};
288
};
210
 
289
 
211
/* To determine what functionality is present */
290
/* To determine what functionality is present */
212
 
291
 
213
#define I2C_FUNC_I2C			0x00000001
292
#define I2C_FUNC_I2C			0x00000001
214
#define I2C_FUNC_10BIT_ADDR		0x00000002
293
#define I2C_FUNC_10BIT_ADDR		0x00000002
215
#define I2C_FUNC_PROTOCOL_MANGLING	0x00000004 /* I2C_M_NOSTART etc. */
294
#define I2C_FUNC_PROTOCOL_MANGLING	0x00000004 /* I2C_M_NOSTART etc. */
216
#define I2C_FUNC_SMBUS_PEC		0x00000008
295
#define I2C_FUNC_SMBUS_PEC		0x00000008
217
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL	0x00008000 /* SMBus 2.0 */
296
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL	0x00008000 /* SMBus 2.0 */
218
#define I2C_FUNC_SMBUS_QUICK		0x00010000
297
#define I2C_FUNC_SMBUS_QUICK		0x00010000
219
#define I2C_FUNC_SMBUS_READ_BYTE	0x00020000
298
#define I2C_FUNC_SMBUS_READ_BYTE	0x00020000
220
#define I2C_FUNC_SMBUS_WRITE_BYTE	0x00040000
299
#define I2C_FUNC_SMBUS_WRITE_BYTE	0x00040000
221
#define I2C_FUNC_SMBUS_READ_BYTE_DATA	0x00080000
300
#define I2C_FUNC_SMBUS_READ_BYTE_DATA	0x00080000
222
#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA	0x00100000
301
#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA	0x00100000
223
#define I2C_FUNC_SMBUS_READ_WORD_DATA	0x00200000
302
#define I2C_FUNC_SMBUS_READ_WORD_DATA	0x00200000
224
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA	0x00400000
303
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA	0x00400000
225
#define I2C_FUNC_SMBUS_PROC_CALL	0x00800000
304
#define I2C_FUNC_SMBUS_PROC_CALL	0x00800000
226
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA	0x01000000
305
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA	0x01000000
227
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
306
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
228
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK	0x04000000 /* I2C-like block xfer  */
307
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK	0x04000000 /* I2C-like block xfer  */
229
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK	0x08000000 /* w/ 1-byte reg. addr. */
308
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK	0x08000000 /* w/ 1-byte reg. addr. */
230
 
309
 
231
#define I2C_FUNC_SMBUS_BYTE		(I2C_FUNC_SMBUS_READ_BYTE | \
310
#define I2C_FUNC_SMBUS_BYTE		(I2C_FUNC_SMBUS_READ_BYTE | \
232
					 I2C_FUNC_SMBUS_WRITE_BYTE)
311
					 I2C_FUNC_SMBUS_WRITE_BYTE)
233
#define I2C_FUNC_SMBUS_BYTE_DATA	(I2C_FUNC_SMBUS_READ_BYTE_DATA | \
312
#define I2C_FUNC_SMBUS_BYTE_DATA	(I2C_FUNC_SMBUS_READ_BYTE_DATA | \
234
					 I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
313
					 I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
235
#define I2C_FUNC_SMBUS_WORD_DATA	(I2C_FUNC_SMBUS_READ_WORD_DATA | \
314
#define I2C_FUNC_SMBUS_WORD_DATA	(I2C_FUNC_SMBUS_READ_WORD_DATA | \
236
					 I2C_FUNC_SMBUS_WRITE_WORD_DATA)
315
					 I2C_FUNC_SMBUS_WRITE_WORD_DATA)
237
#define I2C_FUNC_SMBUS_BLOCK_DATA	(I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
316
#define I2C_FUNC_SMBUS_BLOCK_DATA	(I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
238
					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
317
					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
239
#define I2C_FUNC_SMBUS_I2C_BLOCK	(I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
318
#define I2C_FUNC_SMBUS_I2C_BLOCK	(I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
240
					 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
319
					 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
241
 
320
 
242
#define I2C_FUNC_SMBUS_EMUL		(I2C_FUNC_SMBUS_QUICK | \
321
#define I2C_FUNC_SMBUS_EMUL		(I2C_FUNC_SMBUS_QUICK | \
243
					 I2C_FUNC_SMBUS_BYTE | \
322
					 I2C_FUNC_SMBUS_BYTE | \
244
					 I2C_FUNC_SMBUS_BYTE_DATA | \
323
					 I2C_FUNC_SMBUS_BYTE_DATA | \
245
					 I2C_FUNC_SMBUS_WORD_DATA | \
324
					 I2C_FUNC_SMBUS_WORD_DATA | \
246
					 I2C_FUNC_SMBUS_PROC_CALL | \
325
					 I2C_FUNC_SMBUS_PROC_CALL | \
247
					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
326
					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
248
					 I2C_FUNC_SMBUS_I2C_BLOCK | \
327
					 I2C_FUNC_SMBUS_I2C_BLOCK | \
249
					 I2C_FUNC_SMBUS_PEC)
328
					 I2C_FUNC_SMBUS_PEC)
250
 
329
 
251
/*
330
/*
252
 * Data for SMBus Messages
331
 * Data for SMBus Messages
253
 */
332
 */
254
#define I2C_SMBUS_BLOCK_MAX	32	/* As specified in SMBus standard */
333
#define I2C_SMBUS_BLOCK_MAX	32	/* As specified in SMBus standard */
255
union i2c_smbus_data {
334
union i2c_smbus_data {
256
	__u8 byte;
335
	__u8 byte;
257
	__u16 word;
336
	__u16 word;
258
	__u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
337
	__u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
259
			       /* and one more for user-space compatibility */
338
			       /* and one more for user-space compatibility */
260
};
339
};
261
 
340
 
262
/* i2c_smbus_xfer read or write markers */
341
/* i2c_smbus_xfer read or write markers */
263
#define I2C_SMBUS_READ	1
342
#define I2C_SMBUS_READ	1
264
#define I2C_SMBUS_WRITE	0
343
#define I2C_SMBUS_WRITE	0
265
 
344
 
266
/* SMBus transaction types (size parameter in the above functions)
345
/* SMBus transaction types (size parameter in the above functions)
267
   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
346
   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
268
#define I2C_SMBUS_QUICK		    0
347
#define I2C_SMBUS_QUICK		    0
269
#define I2C_SMBUS_BYTE		    1
348
#define I2C_SMBUS_BYTE		    1
270
#define I2C_SMBUS_BYTE_DATA	    2
349
#define I2C_SMBUS_BYTE_DATA	    2
271
#define I2C_SMBUS_WORD_DATA	    3
350
#define I2C_SMBUS_WORD_DATA	    3
272
#define I2C_SMBUS_PROC_CALL	    4
351
#define I2C_SMBUS_PROC_CALL	    4
273
#define I2C_SMBUS_BLOCK_DATA	    5
352
#define I2C_SMBUS_BLOCK_DATA	    5
274
#define I2C_SMBUS_I2C_BLOCK_BROKEN  6
353
#define I2C_SMBUS_I2C_BLOCK_BROKEN  6
275
#define I2C_SMBUS_BLOCK_PROC_CALL   7		/* SMBus 2.0 */
354
#define I2C_SMBUS_BLOCK_PROC_CALL   7		/* SMBus 2.0 */
276
#define I2C_SMBUS_I2C_BLOCK_DATA    8
355
#define I2C_SMBUS_I2C_BLOCK_DATA    8
277
 
-
 
278
 
-
 
279
 
-
 
280
 
-
 
281
 
-
 
282
 
-
 
283
 
-
 
284
 
356
 
285
#endif /* _LINUX_I2C_H */
-
 
286
-
 
287
-
 
288
-
 
289
-
 
290
-
 
291
-
 
292
-
 
293
-
 
294
-
 
295
-
 
296
-
 
297
-
 
298
-
 
-
 
357
#endif /* _LINUX_I2C_H */