Subversion Repositories Kolibri OS

Rev

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

Rev 1964 Rev 1970
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
#ifdef __KERNEL__
30
#ifdef __KERNEL__
31
#include 
31
#include 
32
#include 
32
#include 
33
#include 
33
#include 
34
 
34
 
35
 
35
 
36
/* --- General options ------------------------------------------------	*/
36
/* --- General options ------------------------------------------------	*/
37
 
37
 
38
struct i2c_msg;
38
struct i2c_msg;
39
struct i2c_algorithm;
39
struct i2c_algorithm;
40
struct i2c_adapter;
40
struct i2c_adapter;
41
struct i2c_client;
41
struct i2c_client;
42
struct i2c_driver;
42
struct i2c_driver;
43
union i2c_smbus_data;
43
union i2c_smbus_data;
44
struct i2c_board_info;
44
struct i2c_board_info;
45
 
45
 
46
 
46
 
47
/* Transfer num messages.
47
/* Transfer num messages.
48
 */
48
 */
49
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
49
extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs,
50
			int num);
50
			int num);
51
 
51
 
52
/**
52
/**
53
 * struct i2c_driver - represent an I2C device driver
53
 * struct i2c_driver - represent an I2C device driver
54
 * @class: What kind of i2c device we instantiate (for detect)
54
 * @class: What kind of i2c device we instantiate (for detect)
55
 * @attach_adapter: Callback for bus addition (for legacy drivers)
55
 * @attach_adapter: Callback for bus addition (deprecated)
56
 * @detach_adapter: Callback for bus removal (for legacy drivers)
56
 * @detach_adapter: Callback for bus removal (deprecated)
57
 * @probe: Callback for device binding
57
 * @probe: Callback for device binding
58
 * @remove: Callback for device unbinding
58
 * @remove: Callback for device unbinding
59
 * @shutdown: Callback for device shutdown
59
 * @shutdown: Callback for device shutdown
60
 * @suspend: Callback for device suspend
60
 * @suspend: Callback for device suspend
61
 * @resume: Callback for device resume
61
 * @resume: Callback for device resume
62
 * @alert: Alert callback, for example for the SMBus alert protocol
62
 * @alert: Alert callback, for example for the SMBus alert protocol
63
 * @command: Callback for bus-wide signaling (optional)
63
 * @command: Callback for bus-wide signaling (optional)
64
 * @driver: Device driver model driver
64
 * @driver: Device driver model driver
65
 * @id_table: List of I2C devices supported by this driver
65
 * @id_table: List of I2C devices supported by this driver
66
 * @detect: Callback for device detection
66
 * @detect: Callback for device detection
67
 * @address_list: The I2C addresses to probe (for detect)
67
 * @address_list: The I2C addresses to probe (for detect)
68
 * @clients: List of detected clients we created (for i2c-core use only)
68
 * @clients: List of detected clients we created (for i2c-core use only)
69
 *
69
 *
70
 * The driver.owner field should be set to the module owner of this driver.
70
 * The driver.owner field should be set to the module owner of this driver.
71
 * The driver.name field should be set to the name of this driver.
71
 * The driver.name field should be set to the name of this driver.
72
 *
72
 *
73
 * For automatic device detection, both @detect and @address_data must
73
 * For automatic device detection, both @detect and @address_data must
74
 * be defined. @class should also be set, otherwise only devices forced
74
 * be defined. @class should also be set, otherwise only devices forced
75
 * with module parameters will be created. The detect function must
75
 * with module parameters will be created. The detect function must
76
 * fill at least the name field of the i2c_board_info structure it is
76
 * fill at least the name field of the i2c_board_info structure it is
77
 * handed upon successful detection, and possibly also the flags field.
77
 * handed upon successful detection, and possibly also the flags field.
78
 *
78
 *
79
 * If @detect is missing, the driver will still work fine for enumerated
79
 * If @detect is missing, the driver will still work fine for enumerated
80
 * devices. Detected devices simply won't be supported. This is expected
80
 * devices. Detected devices simply won't be supported. This is expected
81
 * for the many I2C/SMBus devices which can't be detected reliably, and
81
 * for the many I2C/SMBus devices which can't be detected reliably, and
82
 * the ones which can always be enumerated in practice.
82
 * the ones which can always be enumerated in practice.
83
 *
83
 *
84
 * The i2c_client structure which is handed to the @detect callback is
84
 * The i2c_client structure which is handed to the @detect callback is
85
 * not a real i2c_client. It is initialized just enough so that you can
85
 * not a real i2c_client. It is initialized just enough so that you can
86
 * call i2c_smbus_read_byte_data and friends on it. Don't do anything
86
 * call i2c_smbus_read_byte_data and friends on it. Don't do anything
87
 * else with it. In particular, calling dev_dbg and friends on it is
87
 * else with it. In particular, calling dev_dbg and friends on it is
88
 * not allowed.
88
 * not allowed.
89
 */
89
 */
90
struct i2c_driver {
90
struct i2c_driver {
91
	unsigned int class;
91
	unsigned int class;
92
 
92
 
93
	/* Notifies the driver that a new bus has appeared or is about to be
93
	/* Notifies the driver that a new bus has appeared or is about to be
94
	 * removed. You should avoid using this, it will be removed in a
94
	 * removed. You should avoid using this, it will be removed in a
95
	 * near future.
95
	 * near future.
96
	 */
96
	 */
97
	int (*attach_adapter)(struct i2c_adapter *);
97
	int (*attach_adapter)(struct i2c_adapter *) __deprecated;
98
	int (*detach_adapter)(struct i2c_adapter *);
98
	int (*detach_adapter)(struct i2c_adapter *) __deprecated;
99
 
99
 
100
	/* Standard driver model interfaces */
100
	/* Standard driver model interfaces */
101
	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
101
	int (*probe)(struct i2c_client *, const struct i2c_device_id *);
102
	int (*remove)(struct i2c_client *);
102
	int (*remove)(struct i2c_client *);
103
 
103
 
104
	/* driver model interfaces that don't relate to enumeration  */
104
	/* driver model interfaces that don't relate to enumeration  */
105
	void (*shutdown)(struct i2c_client *);
105
	void (*shutdown)(struct i2c_client *);
106
//	int (*suspend)(struct i2c_client *, pm_message_t mesg);
106
//	int (*suspend)(struct i2c_client *, pm_message_t mesg);
107
	int (*resume)(struct i2c_client *);
107
	int (*resume)(struct i2c_client *);
108
 
108
 
109
	/* Alert callback, for example for the SMBus alert protocol.
109
	/* Alert callback, for example for the SMBus alert protocol.
110
	 * The format and meaning of the data value depends on the protocol.
110
	 * The format and meaning of the data value depends on the protocol.
111
	 * For the SMBus alert protocol, there is a single bit of data passed
111
	 * For the SMBus alert protocol, there is a single bit of data passed
112
	 * as the alert response's low bit ("event flag").
112
	 * as the alert response's low bit ("event flag").
113
	 */
113
	 */
114
	void (*alert)(struct i2c_client *, unsigned int data);
114
	void (*alert)(struct i2c_client *, unsigned int data);
115
 
115
 
116
	/* a ioctl like command that can be used to perform specific functions
116
	/* a ioctl like command that can be used to perform specific functions
117
	 * with the device.
117
	 * with the device.
118
	 */
118
	 */
119
	int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
119
	int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
120
 
120
 
121
//	struct device_driver driver;
121
//	struct device_driver driver;
122
	const struct i2c_device_id *id_table;
122
	const struct i2c_device_id *id_table;
123
 
123
 
124
	/* Device detection callback for automatic device creation */
124
	/* Device detection callback for automatic device creation */
125
//	int (*detect)(struct i2c_client *, struct i2c_board_info *);
125
//	int (*detect)(struct i2c_client *, struct i2c_board_info *);
126
	const unsigned short *address_list;
126
	const unsigned short *address_list;
127
	struct list_head clients;
127
	struct list_head clients;
128
};
128
};
129
#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
129
#define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
130
 
130
 
131
/**
131
/**
132
 * struct i2c_client - represent an I2C slave device
132
 * struct i2c_client - represent an I2C slave device
133
 * @flags: I2C_CLIENT_TEN indicates the device uses a ten bit chip address;
133
 * @flags: I2C_CLIENT_TEN indicates the device uses a ten bit chip address;
134
 *	I2C_CLIENT_PEC indicates it uses SMBus Packet Error Checking
134
 *	I2C_CLIENT_PEC indicates it uses SMBus Packet Error Checking
135
 * @addr: Address used on the I2C bus connected to the parent adapter.
135
 * @addr: Address used on the I2C bus connected to the parent adapter.
136
 * @name: Indicates the type of the device, usually a chip name that's
136
 * @name: Indicates the type of the device, usually a chip name that's
137
 *	generic enough to hide second-sourcing and compatible revisions.
137
 *	generic enough to hide second-sourcing and compatible revisions.
138
 * @adapter: manages the bus segment hosting this I2C device
138
 * @adapter: manages the bus segment hosting this I2C device
139
 * @driver: device's driver, hence pointer to access routines
139
 * @driver: device's driver, hence pointer to access routines
140
 * @dev: Driver model device node for the slave.
140
 * @dev: Driver model device node for the slave.
141
 * @irq: indicates the IRQ generated by this device (if any)
141
 * @irq: indicates the IRQ generated by this device (if any)
142
 * @detected: member of an i2c_driver.clients list or i2c-core's
142
 * @detected: member of an i2c_driver.clients list or i2c-core's
143
 *	userspace_devices list
143
 *	userspace_devices list
144
 *
144
 *
145
 * An i2c_client identifies a single device (i.e. chip) connected to an
145
 * An i2c_client identifies a single device (i.e. chip) connected to an
146
 * i2c bus. The behaviour exposed to Linux is defined by the driver
146
 * i2c bus. The behaviour exposed to Linux is defined by the driver
147
 * managing the device.
147
 * managing the device.
148
 */
148
 */
149
struct i2c_client {
149
struct i2c_client {
150
	unsigned short flags;		/* div., see below		*/
150
	unsigned short flags;		/* div., see below		*/
151
	unsigned short addr;		/* chip address - NOTE: 7bit	*/
151
	unsigned short addr;		/* chip address - NOTE: 7bit	*/
152
					/* addresses are stored in the	*/
152
					/* addresses are stored in the	*/
153
					/* _LOWER_ 7 bits		*/
153
					/* _LOWER_ 7 bits		*/
154
	char name[I2C_NAME_SIZE];
154
	char name[I2C_NAME_SIZE];
155
	struct i2c_adapter *adapter;	/* the adapter we sit on	*/
155
	struct i2c_adapter *adapter;	/* the adapter we sit on	*/
156
    struct i2c_driver *driver;      /* and our access routines      */
156
    struct i2c_driver *driver;      /* and our access routines      */
157
	struct device dev;		/* the device structure		*/
157
	struct device dev;		/* the device structure		*/
158
	int irq;			/* irq issued by device		*/
158
	int irq;			/* irq issued by device		*/
159
	struct list_head detected;
159
	struct list_head detected;
160
};
160
};
161
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
161
#define to_i2c_client(d) container_of(d, struct i2c_client, dev)
162
 
162
 
163
extern struct i2c_client *i2c_verify_client(struct device *dev);
163
extern struct i2c_client *i2c_verify_client(struct device *dev);
164
 
164
 
165
/**
165
/**
166
 * struct i2c_board_info - template for device creation
166
 * struct i2c_board_info - template for device creation
167
 * @type: chip type, to initialize i2c_client.name
167
 * @type: chip type, to initialize i2c_client.name
168
 * @flags: to initialize i2c_client.flags
168
 * @flags: to initialize i2c_client.flags
169
 * @addr: stored in i2c_client.addr
169
 * @addr: stored in i2c_client.addr
170
 * @platform_data: stored in i2c_client.dev.platform_data
170
 * @platform_data: stored in i2c_client.dev.platform_data
171
 * @archdata: copied into i2c_client.dev.archdata
171
 * @archdata: copied into i2c_client.dev.archdata
172
 * @of_node: pointer to OpenFirmware device node
172
 * @of_node: pointer to OpenFirmware device node
173
 * @irq: stored in i2c_client.irq
173
 * @irq: stored in i2c_client.irq
174
 *
174
 *
175
 * I2C doesn't actually support hardware probing, although controllers and
175
 * I2C doesn't actually support hardware probing, although controllers and
176
 * devices may be able to use I2C_SMBUS_QUICK to tell whether or not there's
176
 * devices may be able to use I2C_SMBUS_QUICK to tell whether or not there's
177
 * a device at a given address.  Drivers commonly need more information than
177
 * a device at a given address.  Drivers commonly need more information than
178
 * that, such as chip type, configuration, associated IRQ, and so on.
178
 * that, such as chip type, configuration, associated IRQ, and so on.
179
 *
179
 *
180
 * i2c_board_info is used to build tables of information listing I2C devices
180
 * i2c_board_info is used to build tables of information listing I2C devices
181
 * that are present.  This information is used to grow the driver model tree.
181
 * that are present.  This information is used to grow the driver model tree.
182
 * For mainboards this is done statically using i2c_register_board_info();
182
 * For mainboards this is done statically using i2c_register_board_info();
183
 * bus numbers identify adapters that aren't yet available.  For add-on boards,
183
 * bus numbers identify adapters that aren't yet available.  For add-on boards,
184
 * i2c_new_device() does this dynamically with the adapter already known.
184
 * i2c_new_device() does this dynamically with the adapter already known.
185
 */
185
 */
186
struct i2c_board_info {
186
struct i2c_board_info {
187
	char		type[I2C_NAME_SIZE];
187
	char		type[I2C_NAME_SIZE];
188
	unsigned short	flags;
188
	unsigned short	flags;
189
	unsigned short	addr;
189
	unsigned short	addr;
190
	void		*platform_data;
190
	void		*platform_data;
191
	struct dev_archdata	*archdata;
191
	struct dev_archdata	*archdata;
192
#ifdef CONFIG_OF
192
#ifdef CONFIG_OF
193
	struct device_node *of_node;
193
	struct device_node *of_node;
194
#endif
194
#endif
195
	int		irq;
195
	int		irq;
196
};
196
};
197
 
197
 
198
/**
198
/**
199
 * I2C_BOARD_INFO - macro used to list an i2c device and its address
199
 * I2C_BOARD_INFO - macro used to list an i2c device and its address
200
 * @dev_type: identifies the device type
200
 * @dev_type: identifies the device type
201
 * @dev_addr: the device's address on the bus.
201
 * @dev_addr: the device's address on the bus.
202
 *
202
 *
203
 * This macro initializes essential fields of a struct i2c_board_info,
203
 * This macro initializes essential fields of a struct i2c_board_info,
204
 * declaring what has been provided on a particular board.  Optional
204
 * declaring what has been provided on a particular board.  Optional
205
 * fields (such as associated irq, or device-specific platform_data)
205
 * fields (such as associated irq, or device-specific platform_data)
206
 * are provided using conventional syntax.
206
 * are provided using conventional syntax.
207
 */
207
 */
208
#define I2C_BOARD_INFO(dev_type, dev_addr) \
208
#define I2C_BOARD_INFO(dev_type, dev_addr) \
209
	.type = dev_type, .addr = (dev_addr)
209
	.type = dev_type, .addr = (dev_addr)
210
/*
210
/*
211
 * The following structs are for those who like to implement new bus drivers:
211
 * The following structs are for those who like to implement new bus drivers:
212
 * i2c_algorithm is the interface to a class of hardware solutions which can
212
 * i2c_algorithm is the interface to a class of hardware solutions which can
213
 * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
213
 * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
214
 * to name two of the most common.
214
 * to name two of the most common.
215
 */
215
 */
216
struct i2c_algorithm {
216
struct i2c_algorithm {
217
	/* If an adapter algorithm can't do I2C-level access, set master_xfer
217
	/* If an adapter algorithm can't do I2C-level access, set master_xfer
218
	   to NULL. If an adapter algorithm can do SMBus access, set
218
	   to NULL. If an adapter algorithm can do SMBus access, set
219
	   smbus_xfer. If set to NULL, the SMBus protocol is simulated
219
	   smbus_xfer. If set to NULL, the SMBus protocol is simulated
220
	   using common I2C messages */
220
	   using common I2C messages */
221
	/* master_xfer should return the number of messages successfully
221
	/* master_xfer should return the number of messages successfully
222
	   processed, or a negative value on error */
222
	   processed, or a negative value on error */
223
	int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
223
	int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
224
			   int num);
224
			   int num);
225
	int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
225
	int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
226
			   unsigned short flags, char read_write,
226
			   unsigned short flags, char read_write,
227
			   u8 command, int size, union i2c_smbus_data *data);
227
			   u8 command, int size, union i2c_smbus_data *data);
228
 
228
 
229
	/* To determine what the adapter supports */
229
	/* To determine what the adapter supports */
230
	u32 (*functionality) (struct i2c_adapter *);
230
	u32 (*functionality) (struct i2c_adapter *);
231
};
231
};
232
 
232
 
233
/*
233
/*
234
 * i2c_adapter is the structure used to identify a physical i2c bus along
234
 * i2c_adapter is the structure used to identify a physical i2c bus along
235
 * with the access algorithms necessary to access it.
235
 * with the access algorithms necessary to access it.
236
 */
236
 */
237
struct i2c_adapter {
237
struct i2c_adapter {
238
	struct module *owner;
238
	struct module *owner;
239
	unsigned int class;		  /* classes to allow probing for */
239
	unsigned int class;		  /* classes to allow probing for */
240
	const struct i2c_algorithm *algo; /* the algorithm to access the bus */
240
	const struct i2c_algorithm *algo; /* the algorithm to access the bus */
241
	void *algo_data;
241
	void *algo_data;
242
 
242
 
243
        /* data fields that are valid for all devices   */
243
        /* data fields that are valid for all devices   */
244
//	struct rt_mutex bus_lock;
244
//	struct rt_mutex bus_lock;
245
 
245
 
246
	int timeout;			/* in jiffies */
246
	int timeout;			/* in jiffies */
247
    int retries;
247
    int retries;
248
    struct device dev;      /* the adapter device */
248
    struct device dev;      /* the adapter device */
249
 
249
 
250
    int nr;
250
    int nr;
251
    char name[48];
251
    char name[48];
252
};
252
};
253
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
253
#define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
254
 
254
 
255
static inline void *i2c_get_adapdata(const struct i2c_adapter *dev)
255
static inline void *i2c_get_adapdata(struct i2c_adapter *dev)
256
{
256
{
257
	return dev_get_drvdata(&dev->dev);
257
	return dev_get_drvdata(&dev->dev);
258
}
258
}
259
 
259
 
260
static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
260
static inline void i2c_set_adapdata(struct i2c_adapter *dev, void *data)
261
{
261
{
262
	dev_set_drvdata(&dev->dev, data);
262
	dev_set_drvdata(&dev->dev, data);
263
}
263
}
264
 
264
 
265
/* Adapter locking functions, exported for shared pin cases */
265
/* Adapter locking functions, exported for shared pin cases */
266
void i2c_lock_adapter(struct i2c_adapter *);
266
void i2c_lock_adapter(struct i2c_adapter *);
267
void i2c_unlock_adapter(struct i2c_adapter *);
267
void i2c_unlock_adapter(struct i2c_adapter *);
268
 
268
 
269
/*flags for the client struct: */
269
/*flags for the client struct: */
270
#define I2C_CLIENT_PEC	0x04		/* Use Packet Error Checking */
270
#define I2C_CLIENT_PEC	0x04		/* Use Packet Error Checking */
271
#define I2C_CLIENT_TEN	0x10		/* we have a ten bit chip address */
271
#define I2C_CLIENT_TEN	0x10		/* we have a ten bit chip address */
272
					/* Must equal I2C_M_TEN below */
272
					/* Must equal I2C_M_TEN below */
273
#define I2C_CLIENT_WAKE	0x80		/* for board_info; true iff can wake */
273
#define I2C_CLIENT_WAKE	0x80		/* for board_info; true iff can wake */
274
 
274
 
275
/* i2c adapter classes (bitmask) */
275
/* i2c adapter classes (bitmask) */
276
#define I2C_CLASS_HWMON		(1<<0)	/* lm_sensors, ... */
276
#define I2C_CLASS_HWMON		(1<<0)	/* lm_sensors, ... */
277
#define I2C_CLASS_DDC		(1<<3)	/* DDC bus on graphics adapters */
277
#define I2C_CLASS_DDC		(1<<3)	/* DDC bus on graphics adapters */
278
#define I2C_CLASS_SPD		(1<<7)	/* Memory modules */
278
#define I2C_CLASS_SPD		(1<<7)	/* Memory modules */
279
 
279
 
280
/* Internal numbers to terminate lists */
280
/* Internal numbers to terminate lists */
281
#define I2C_CLIENT_END		0xfffeU
281
#define I2C_CLIENT_END		0xfffeU
282
 
282
 
283
/* The numbers to use to set I2C bus address */
283
/* The numbers to use to set I2C bus address */
284
#define ANY_I2C_BUS		0xffff
284
#define ANY_I2C_BUS		0xffff
285
 
285
 
286
/* Construct an I2C_CLIENT_END-terminated array of i2c addresses */
286
/* Construct an I2C_CLIENT_END-terminated array of i2c addresses */
287
#define I2C_ADDRS(addr, addrs...) \
287
#define I2C_ADDRS(addr, addrs...) \
288
	((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END })
288
	((const unsigned short []){ addr, ## addrs, I2C_CLIENT_END })
289
 
289
 
290
 
290
 
291
#endif /* __KERNEL__ */
291
#endif /* __KERNEL__ */
292
/**
292
/**
293
 * struct i2c_msg - an I2C transaction segment beginning with START
293
 * struct i2c_msg - an I2C transaction segment beginning with START
294
 * @addr: Slave address, either seven or ten bits.  When this is a ten
294
 * @addr: Slave address, either seven or ten bits.  When this is a ten
295
 *	bit address, I2C_M_TEN must be set in @flags and the adapter
295
 *	bit address, I2C_M_TEN must be set in @flags and the adapter
296
 *	must support I2C_FUNC_10BIT_ADDR.
296
 *	must support I2C_FUNC_10BIT_ADDR.
297
 * @flags: I2C_M_RD is handled by all adapters.  No other flags may be
297
 * @flags: I2C_M_RD is handled by all adapters.  No other flags may be
298
 *	provided unless the adapter exported the relevant I2C_FUNC_*
298
 *	provided unless the adapter exported the relevant I2C_FUNC_*
299
 *	flags through i2c_check_functionality().
299
 *	flags through i2c_check_functionality().
300
 * @len: Number of data bytes in @buf being read from or written to the
300
 * @len: Number of data bytes in @buf being read from or written to the
301
 *	I2C slave address.  For read transactions where I2C_M_RECV_LEN
301
 *	I2C slave address.  For read transactions where I2C_M_RECV_LEN
302
 *	is set, the caller guarantees that this buffer can hold up to
302
 *	is set, the caller guarantees that this buffer can hold up to
303
 *	32 bytes in addition to the initial length byte sent by the
303
 *	32 bytes in addition to the initial length byte sent by the
304
 *	slave (plus, if used, the SMBus PEC); and this value will be
304
 *	slave (plus, if used, the SMBus PEC); and this value will be
305
 *	incremented by the number of block data bytes received.
305
 *	incremented by the number of block data bytes received.
306
 * @buf: The buffer into which data is read, or from which it's written.
306
 * @buf: The buffer into which data is read, or from which it's written.
307
 *
307
 *
308
 * An i2c_msg is the low level representation of one segment of an I2C
308
 * An i2c_msg is the low level representation of one segment of an I2C
309
 * transaction.  It is visible to drivers in the @i2c_transfer() procedure,
309
 * transaction.  It is visible to drivers in the @i2c_transfer() procedure,
310
 * to userspace from i2c-dev, and to I2C adapter drivers through the
310
 * to userspace from i2c-dev, and to I2C adapter drivers through the
311
 * @i2c_adapter.@master_xfer() method.
311
 * @i2c_adapter.@master_xfer() method.
312
 *
312
 *
313
 * Except when I2C "protocol mangling" is used, all I2C adapters implement
313
 * Except when I2C "protocol mangling" is used, all I2C adapters implement
314
 * the standard rules for I2C transactions.  Each transaction begins with a
314
 * the standard rules for I2C transactions.  Each transaction begins with a
315
 * START.  That is followed by the slave address, and a bit encoding read
315
 * START.  That is followed by the slave address, and a bit encoding read
316
 * versus write.  Then follow all the data bytes, possibly including a byte
316
 * versus write.  Then follow all the data bytes, possibly including a byte
317
 * with SMBus PEC.  The transfer terminates with a NAK, or when all those
317
 * with SMBus PEC.  The transfer terminates with a NAK, or when all those
318
 * bytes have been transferred and ACKed.  If this is the last message in a
318
 * bytes have been transferred and ACKed.  If this is the last message in a
319
 * group, it is followed by a STOP.  Otherwise it is followed by the next
319
 * group, it is followed by a STOP.  Otherwise it is followed by the next
320
 * @i2c_msg transaction segment, beginning with a (repeated) START.
320
 * @i2c_msg transaction segment, beginning with a (repeated) START.
321
 *
321
 *
322
 * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then
322
 * Alternatively, when the adapter supports I2C_FUNC_PROTOCOL_MANGLING then
323
 * passing certain @flags may have changed those standard protocol behaviors.
323
 * passing certain @flags may have changed those standard protocol behaviors.
324
 * Those flags are only for use with broken/nonconforming slaves, and with
324
 * Those flags are only for use with broken/nonconforming slaves, and with
325
 * adapters which are known to support the specific mangling options they
325
 * adapters which are known to support the specific mangling options they
326
 * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR).
326
 * need (one or more of IGNORE_NAK, NO_RD_ACK, NOSTART, and REV_DIR_ADDR).
327
 */
327
 */
328
struct i2c_msg {
328
struct i2c_msg {
329
	__u16 addr;	/* slave address			*/
329
	__u16 addr;	/* slave address			*/
330
	__u16 flags;
330
	__u16 flags;
331
#define I2C_M_TEN               0x0010  /* this is a ten bit chip address */
331
#define I2C_M_TEN               0x0010  /* this is a ten bit chip address */
332
#define I2C_M_RD                0x0001  /* read data, from slave to master */
332
#define I2C_M_RD                0x0001  /* read data, from slave to master */
333
#define I2C_M_NOSTART           0x4000  /* if I2C_FUNC_PROTOCOL_MANGLING */
333
#define I2C_M_NOSTART           0x4000  /* if I2C_FUNC_PROTOCOL_MANGLING */
334
#define I2C_M_REV_DIR_ADDR      0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
334
#define I2C_M_REV_DIR_ADDR      0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
335
#define I2C_M_IGNORE_NAK        0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
335
#define I2C_M_IGNORE_NAK        0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
336
#define I2C_M_NO_RD_ACK         0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
336
#define I2C_M_NO_RD_ACK         0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
337
#define I2C_M_RECV_LEN          0x0400  /* length will be first received byte */
337
#define I2C_M_RECV_LEN          0x0400  /* length will be first received byte */
338
	__u16 len;		/* msg length				*/
338
	__u16 len;		/* msg length				*/
339
	__u8 *buf;		/* pointer to msg data			*/
339
	__u8 *buf;		/* pointer to msg data			*/
340
};
340
};
341
 
341
 
342
/* To determine what functionality is present */
342
/* To determine what functionality is present */
343
 
343
 
344
#define I2C_FUNC_I2C			0x00000001
344
#define I2C_FUNC_I2C			0x00000001
345
#define I2C_FUNC_10BIT_ADDR		0x00000002
345
#define I2C_FUNC_10BIT_ADDR		0x00000002
346
#define I2C_FUNC_PROTOCOL_MANGLING	0x00000004 /* I2C_M_NOSTART etc. */
346
#define I2C_FUNC_PROTOCOL_MANGLING	0x00000004 /* I2C_M_NOSTART etc. */
347
#define I2C_FUNC_SMBUS_PEC		0x00000008
347
#define I2C_FUNC_SMBUS_PEC		0x00000008
348
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL	0x00008000 /* SMBus 2.0 */
348
#define I2C_FUNC_SMBUS_BLOCK_PROC_CALL	0x00008000 /* SMBus 2.0 */
349
#define I2C_FUNC_SMBUS_QUICK		0x00010000
349
#define I2C_FUNC_SMBUS_QUICK		0x00010000
350
#define I2C_FUNC_SMBUS_READ_BYTE	0x00020000
350
#define I2C_FUNC_SMBUS_READ_BYTE	0x00020000
351
#define I2C_FUNC_SMBUS_WRITE_BYTE	0x00040000
351
#define I2C_FUNC_SMBUS_WRITE_BYTE	0x00040000
352
#define I2C_FUNC_SMBUS_READ_BYTE_DATA	0x00080000
352
#define I2C_FUNC_SMBUS_READ_BYTE_DATA	0x00080000
353
#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA	0x00100000
353
#define I2C_FUNC_SMBUS_WRITE_BYTE_DATA	0x00100000
354
#define I2C_FUNC_SMBUS_READ_WORD_DATA	0x00200000
354
#define I2C_FUNC_SMBUS_READ_WORD_DATA	0x00200000
355
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA	0x00400000
355
#define I2C_FUNC_SMBUS_WRITE_WORD_DATA	0x00400000
356
#define I2C_FUNC_SMBUS_PROC_CALL	0x00800000
356
#define I2C_FUNC_SMBUS_PROC_CALL	0x00800000
357
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA	0x01000000
357
#define I2C_FUNC_SMBUS_READ_BLOCK_DATA	0x01000000
358
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
358
#define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
359
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK	0x04000000 /* I2C-like block xfer  */
359
#define I2C_FUNC_SMBUS_READ_I2C_BLOCK	0x04000000 /* I2C-like block xfer  */
360
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK	0x08000000 /* w/ 1-byte reg. addr. */
360
#define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK	0x08000000 /* w/ 1-byte reg. addr. */
361
 
361
 
362
#define I2C_FUNC_SMBUS_BYTE		(I2C_FUNC_SMBUS_READ_BYTE | \
362
#define I2C_FUNC_SMBUS_BYTE		(I2C_FUNC_SMBUS_READ_BYTE | \
363
					 I2C_FUNC_SMBUS_WRITE_BYTE)
363
					 I2C_FUNC_SMBUS_WRITE_BYTE)
364
#define I2C_FUNC_SMBUS_BYTE_DATA	(I2C_FUNC_SMBUS_READ_BYTE_DATA | \
364
#define I2C_FUNC_SMBUS_BYTE_DATA	(I2C_FUNC_SMBUS_READ_BYTE_DATA | \
365
					 I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
365
					 I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
366
#define I2C_FUNC_SMBUS_WORD_DATA	(I2C_FUNC_SMBUS_READ_WORD_DATA | \
366
#define I2C_FUNC_SMBUS_WORD_DATA	(I2C_FUNC_SMBUS_READ_WORD_DATA | \
367
					 I2C_FUNC_SMBUS_WRITE_WORD_DATA)
367
					 I2C_FUNC_SMBUS_WRITE_WORD_DATA)
368
#define I2C_FUNC_SMBUS_BLOCK_DATA	(I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
368
#define I2C_FUNC_SMBUS_BLOCK_DATA	(I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
369
					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
369
					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
370
#define I2C_FUNC_SMBUS_I2C_BLOCK	(I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
370
#define I2C_FUNC_SMBUS_I2C_BLOCK	(I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
371
					 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
371
					 I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
372
 
372
 
373
#define I2C_FUNC_SMBUS_EMUL		(I2C_FUNC_SMBUS_QUICK | \
373
#define I2C_FUNC_SMBUS_EMUL		(I2C_FUNC_SMBUS_QUICK | \
374
					 I2C_FUNC_SMBUS_BYTE | \
374
					 I2C_FUNC_SMBUS_BYTE | \
375
					 I2C_FUNC_SMBUS_BYTE_DATA | \
375
					 I2C_FUNC_SMBUS_BYTE_DATA | \
376
					 I2C_FUNC_SMBUS_WORD_DATA | \
376
					 I2C_FUNC_SMBUS_WORD_DATA | \
377
					 I2C_FUNC_SMBUS_PROC_CALL | \
377
					 I2C_FUNC_SMBUS_PROC_CALL | \
378
					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
378
					 I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
379
					 I2C_FUNC_SMBUS_I2C_BLOCK | \
379
					 I2C_FUNC_SMBUS_I2C_BLOCK | \
380
					 I2C_FUNC_SMBUS_PEC)
380
					 I2C_FUNC_SMBUS_PEC)
381
 
381
 
382
/*
382
/*
383
 * Data for SMBus Messages
383
 * Data for SMBus Messages
384
 */
384
 */
385
#define I2C_SMBUS_BLOCK_MAX	32	/* As specified in SMBus standard */
385
#define I2C_SMBUS_BLOCK_MAX	32	/* As specified in SMBus standard */
386
union i2c_smbus_data {
386
union i2c_smbus_data {
387
	__u8 byte;
387
	__u8 byte;
388
	__u16 word;
388
	__u16 word;
389
	__u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
389
	__u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
390
			       /* and one more for user-space compatibility */
390
			       /* and one more for user-space compatibility */
391
};
391
};
392
 
392
 
393
/* i2c_smbus_xfer read or write markers */
393
/* i2c_smbus_xfer read or write markers */
394
#define I2C_SMBUS_READ	1
394
#define I2C_SMBUS_READ	1
395
#define I2C_SMBUS_WRITE	0
395
#define I2C_SMBUS_WRITE	0
396
 
396
 
397
/* SMBus transaction types (size parameter in the above functions)
397
/* SMBus transaction types (size parameter in the above functions)
398
   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
398
   Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
399
#define I2C_SMBUS_QUICK		    0
399
#define I2C_SMBUS_QUICK		    0
400
#define I2C_SMBUS_BYTE		    1
400
#define I2C_SMBUS_BYTE		    1
401
#define I2C_SMBUS_BYTE_DATA	    2
401
#define I2C_SMBUS_BYTE_DATA	    2
402
#define I2C_SMBUS_WORD_DATA	    3
402
#define I2C_SMBUS_WORD_DATA	    3
403
#define I2C_SMBUS_PROC_CALL	    4
403
#define I2C_SMBUS_PROC_CALL	    4
404
#define I2C_SMBUS_BLOCK_DATA	    5
404
#define I2C_SMBUS_BLOCK_DATA	    5
405
#define I2C_SMBUS_I2C_BLOCK_BROKEN  6
405
#define I2C_SMBUS_I2C_BLOCK_BROKEN  6
406
#define I2C_SMBUS_BLOCK_PROC_CALL   7		/* SMBus 2.0 */
406
#define I2C_SMBUS_BLOCK_PROC_CALL   7		/* SMBus 2.0 */
407
#define I2C_SMBUS_I2C_BLOCK_DATA    8
407
#define I2C_SMBUS_I2C_BLOCK_DATA    8
408
 
408
 
409
#endif /* _LINUX_I2C_H */
409
#endif /* _LINUX_I2C_H */