Blame view

include/linux/i2c.h 28.4 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
  /* ------------------------------------------------------------------------- */
438d6c2c0   David Brownell   i2c: Whitespace c...
2
  /*									     */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
  /* i2c.h - definitions for the i2c-bus interface			     */
438d6c2c0   David Brownell   i2c: Whitespace c...
4
  /*									     */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  /* ------------------------------------------------------------------------- */
  /*   Copyright (C) 1995-2000 Simon G. Vogl
  
      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation; either version 2 of the License, or
      (at your option) any later version.
  
      This program is distributed in the hope that it will be useful,
      but WITHOUT ANY WARRANTY; without even the implied warranty of
      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      GNU General Public License for more details.
  
      You should have received a copy of the GNU General Public License
      along with this program; if not, write to the Free Software
      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.		     */
  /* ------------------------------------------------------------------------- */
a1b9298e5   David Woodhouse   Sanitise linux/i2...
22
  /* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
23
     Frodo Looijaard <frodol@dds.nl> */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
24
25
  #ifndef _LINUX_I2C_H
  #define _LINUX_I2C_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
  #include <linux/types.h>
438d6c2c0   David Brownell   i2c: Whitespace c...
27
  #ifdef __KERNEL__
a1b9298e5   David Woodhouse   Sanitise linux/i2...
28
  #include <linux/module.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
29
  #include <linux/i2c-id.h>
a9d1b24d9   Greg Kroah-Hartman   [PATCH] I2C: add ...
30
  #include <linux/mod_devicetable.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
31
  #include <linux/device.h>	/* for struct device */
4e57b6817   Tim Schmielau   [PATCH] fix missi...
32
  #include <linux/sched.h>	/* for completion */
5c085d369   Ingo Molnar   [PATCH] i2c: Sema...
33
  #include <linux/mutex.h>
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
34

efde723fd   Jean Delvare   [PATCH] I2C: Sepa...
35
  extern struct bus_type i2c_bus_type;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
36
37
38
39
40
41
42
  /* --- General options ------------------------------------------------	*/
  
  struct i2c_msg;
  struct i2c_algorithm;
  struct i2c_adapter;
  struct i2c_client;
  struct i2c_driver;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
43
44
45
46
  union i2c_smbus_data;
  
  /*
   * The master routines are the ones normally used to transmit data to devices
438d6c2c0   David Brownell   i2c: Whitespace c...
47
48
   * on a bus (or read from them). Apart from two basic transfer functions to
   * transmit one message at a time, a more complex version can be used to
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
49
50
51
52
53
54
55
56
   * transmit an arbitrary number of messages without interruption.
   */
  extern int i2c_master_send(struct i2c_client *,const char* ,int);
  extern int i2c_master_recv(struct i2c_client *,char* ,int);
  
  /* Transfer num messages.
   */
  extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
57
58
59
  
  /* This is the very generalized SMBus access routine. You probably do not
     want to use this, though; one of the functions below may be much easier,
438d6c2c0   David Brownell   i2c: Whitespace c...
60
     and probably just as fast.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
61
62
     Note that we use i2c_adapter here, because you do not need a specific
     smbus adapter to call this function. */
438d6c2c0   David Brownell   i2c: Whitespace c...
63
  extern s32 i2c_smbus_xfer (struct i2c_adapter * adapter, u16 addr,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
                             unsigned short flags,
                             char read_write, u8 command, int size,
                             union i2c_smbus_data * data);
  
  /* Now follow the 'nice' access routines. These also document the calling
     conventions of smbus_access. */
  
  extern s32 i2c_smbus_write_quick(struct i2c_client * client, u8 value);
  extern s32 i2c_smbus_read_byte(struct i2c_client * client);
  extern s32 i2c_smbus_write_byte(struct i2c_client * client, u8 value);
  extern s32 i2c_smbus_read_byte_data(struct i2c_client * client, u8 command);
  extern s32 i2c_smbus_write_byte_data(struct i2c_client * client,
                                       u8 command, u8 value);
  extern s32 i2c_smbus_read_word_data(struct i2c_client * client, u8 command);
  extern s32 i2c_smbus_write_word_data(struct i2c_client * client,
                                       u8 command, u16 value);
b86a1bc8e   Jean Delvare   i2c: Restore i2c_...
80
81
82
  /* Returns the number of read bytes */
  extern s32 i2c_smbus_read_block_data(struct i2c_client *client,
  				     u8 command, u8 *values);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
83
84
  extern s32 i2c_smbus_write_block_data(struct i2c_client * client,
  				      u8 command, u8 length,
46f5ed753   Krzysztof Halasa   [PATCH] i2c: Mark...
85
  				      const u8 *values);
31ec5bc57   Jean Delvare   [PATCH] i2c: Fix ...
86
  /* Returns the number of read bytes */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
87
  extern s32 i2c_smbus_read_i2c_block_data(struct i2c_client * client,
4b2643d7d   Jean Delvare   i2c: Fix the i2c_...
88
  					 u8 command, u8 length, u8 *values);
21bbd6918   Jean Delvare   [PATCH] I2C: Resu...
89
90
  extern s32 i2c_smbus_write_i2c_block_data(struct i2c_client * client,
  					  u8 command, u8 length,
46f5ed753   Krzysztof Halasa   [PATCH] i2c: Mark...
91
  					  const u8 *values);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
92
93
94
95
96
  
  /*
   * A driver is capable of handling one or more physical devices present on
   * I2C adapters. This information is used to inform the driver of adapter
   * events.
35d8b2e6b   Laurent Riffard   [PATCH] i2c: Drop...
97
98
99
   *
   * The driver.owner field should be set to the module owner of this driver.
   * The driver.name field should be set to the name of this driver.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
100
101
102
   */
  
  struct i2c_driver {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
103
104
  	int id;
  	unsigned int class;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
105
106
107
  
  	/* Notifies the driver that a new bus has appeared. This routine
  	 * can be used by the driver to test if the bus meets its conditions
438d6c2c0   David Brownell   i2c: Whitespace c...
108
  	 * & seek for the presence of the chip(s) it supports. If found, it
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
109
  	 * registers the client(s) that are on the bus to the i2c admin. via
7b4fbc50f   David Brownell   i2c: i2c stack ca...
110
  	 * i2c_attach_client.  (LEGACY I2C DRIVERS ONLY)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111
112
113
  	 */
  	int (*attach_adapter)(struct i2c_adapter *);
  	int (*detach_adapter)(struct i2c_adapter *);
438d6c2c0   David Brownell   i2c: Whitespace c...
114
  	/* tells the driver that a client is about to be deleted & gives it
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
115
116
  	 * the chance to remove its private data. Also, if the client struct
  	 * has been dynamically allocated by the driver in the function above,
7b4fbc50f   David Brownell   i2c: i2c stack ca...
117
  	 * it must be freed here.  (LEGACY I2C DRIVERS ONLY)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
118
119
  	 */
  	int (*detach_client)(struct i2c_client *);
f37dd80ac   David Brownell   i2c: Add driver s...
120

7b4fbc50f   David Brownell   i2c: i2c stack ca...
121
122
123
124
125
  	/* Standard driver model interfaces, for "new style" i2c drivers.
  	 * With the driver model, device enumeration is NEVER done by drivers;
  	 * it's done by infrastructure.  (NEW STYLE DRIVERS ONLY)
  	 */
  	int (*probe)(struct i2c_client *);
a1d9e6e49   David Brownell   i2c: i2c stack ca...
126
  	int (*remove)(struct i2c_client *);
7b4fbc50f   David Brownell   i2c: i2c stack ca...
127

f37dd80ac   David Brownell   i2c: Add driver s...
128
129
130
131
  	/* driver model interfaces that don't relate to enumeration  */
  	void (*shutdown)(struct i2c_client *);
  	int (*suspend)(struct i2c_client *, pm_message_t mesg);
  	int (*resume)(struct i2c_client *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
132
133
134
135
136
137
138
139
140
  	/* a ioctl like command that can be used to perform specific functions
  	 * with the device.
  	 */
  	int (*command)(struct i2c_client *client,unsigned int cmd, void *arg);
  
  	struct device_driver driver;
  	struct list_head list;
  };
  #define to_i2c_driver(d) container_of(d, struct i2c_driver, driver)
2096b956d   David Brownell   i2c: Shrink struc...
141
142
143
144
  #define I2C_NAME_SIZE	20
  
  /**
   * struct i2c_client - represent an I2C slave device
d64f73be1   David Brownell   i2c: Add kernel d...
145
146
   * @flags: I2C_CLIENT_TEN indicates the device uses a ten bit chip address;
   *	I2C_CLIENT_PEC indicates it uses SMBus Packet Error Checking
2096b956d   David Brownell   i2c: Shrink struc...
147
148
149
   * @addr: Address used on the I2C bus connected to the parent adapter.
   * @name: Indicates the type of the device, usually a chip name that's
   *	generic enough to hide second-sourcing and compatible revisions.
d64f73be1   David Brownell   i2c: Add kernel d...
150
   * @adapter: manages the bus segment hosting this I2C device
2096b956d   David Brownell   i2c: Shrink struc...
151
   * @dev: Driver model device node for the slave.
d64f73be1   David Brownell   i2c: Add kernel d...
152
   * @irq: indicates the IRQ generated by this device (if any)
7b4fbc50f   David Brownell   i2c: i2c stack ca...
153
154
   * @driver_name: Identifies new-style driver used with this device; also
   *	used as the module name for hotplug/coldplug modprobe support.
2096b956d   David Brownell   i2c: Shrink struc...
155
156
   *
   * An i2c_client identifies a single device (i.e. chip) connected to an
d64f73be1   David Brownell   i2c: Add kernel d...
157
158
   * i2c bus. The behaviour exposed to Linux is defined by the driver
   * managing the device.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
159
160
   */
  struct i2c_client {
2096b956d   David Brownell   i2c: Shrink struc...
161
  	unsigned short flags;		/* div., see below		*/
438d6c2c0   David Brownell   i2c: Whitespace c...
162
  	unsigned short addr;		/* chip address - NOTE: 7bit	*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
163
  					/* addresses are stored in the	*/
5071860ab   Jean Delvare   [PATCH] I2C: Sepa...
164
  					/* _LOWER_ 7 bits		*/
2096b956d   David Brownell   i2c: Shrink struc...
165
  	char name[I2C_NAME_SIZE];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
166
167
168
169
170
  	struct i2c_adapter *adapter;	/* the adapter we sit on	*/
  	struct i2c_driver *driver;	/* and our access routines	*/
  	int usage_count;		/* How many accesses currently  */
  					/* to the client		*/
  	struct device dev;		/* the device structure		*/
9c1600eda   David Brownell   i2c: Add i2c_boar...
171
  	int irq;			/* irq issued by device (or -1) */
7b4fbc50f   David Brownell   i2c: i2c stack ca...
172
  	char driver_name[KOBJ_NAME_LEN];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
173
  	struct list_head list;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
174
175
176
  	struct completion released;
  };
  #define to_i2c_client(d) container_of(d, struct i2c_client, dev)
a61fc683a   Ben Gardner   [PATCH] I2C: add ...
177
178
  static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj)
  {
d75d53cd5   Mark M. Hoffman   i2c: Fix sparse w...
179
180
  	struct device * const dev = container_of(kobj, struct device, kobj);
  	return to_i2c_client(dev);
a61fc683a   Ben Gardner   [PATCH] I2C: add ...
181
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
182
183
184
185
186
187
188
189
190
  static inline void *i2c_get_clientdata (struct i2c_client *dev)
  {
  	return dev_get_drvdata (&dev->dev);
  }
  
  static inline void i2c_set_clientdata (struct i2c_client *dev, void *data)
  {
  	dev_set_drvdata (&dev->dev, data);
  }
9c1600eda   David Brownell   i2c: Add i2c_boar...
191
192
193
194
195
196
197
198
  /**
   * struct i2c_board_info - template for device creation
   * @driver_name: identifies the driver to be bound to the device
   * @type: optional chip type information, to initialize i2c_client.name
   * @flags: to initialize i2c_client.flags
   * @addr: stored in i2c_client.addr
   * @platform_data: stored in i2c_client.dev.platform_data
   * @irq: stored in i2c_client.irq
d64f73be1   David Brownell   i2c: Add kernel d...
199
   *
9c1600eda   David Brownell   i2c: Add i2c_boar...
200
201
202
203
204
205
206
207
   * I2C doesn't actually support hardware probing, although controllers and
   * devices may be able to use I2C_SMBUS_QUICK to tell whether or not there's
   * a device at a given address.  Drivers commonly need more information than
   * that, such as chip type, configuration, associated IRQ, and so on.
   *
   * i2c_board_info is used to build tables of information listing I2C devices
   * that are present.  This information is used to grow the driver model tree
   * for "new style" I2C drivers.  For mainboards this is done statically using
d64f73be1   David Brownell   i2c: Add kernel d...
208
   * i2c_register_board_info(); bus numbers identify adapters that aren't
9c1600eda   David Brownell   i2c: Add i2c_boar...
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
   * yet available.  For add-on boards, i2c_new_device() does this dynamically
   * with the adapter already known.
   */
  struct i2c_board_info {
  	char		driver_name[KOBJ_NAME_LEN];
  	char		type[I2C_NAME_SIZE];
  	unsigned short	flags;
  	unsigned short	addr;
  	void		*platform_data;
  	int		irq;
  };
  
  /**
   * I2C_BOARD_INFO - macro used to list an i2c device and its driver
   * @driver: identifies the driver to use with the device
   * @dev_addr: the device's address on the bus.
   *
   * This macro initializes essential fields of a struct i2c_board_info,
   * declaring what has been provided on a particular board.  Optional
   * fields (such as the chip type, its associated irq, or device-specific
   * platform_data) are provided using conventional syntax.
   */
  #define I2C_BOARD_INFO(driver,dev_addr) \
  	.driver_name = (driver), .addr = (dev_addr)
  
  
  /* Add-on boards should register/unregister their devices; e.g. a board
   * with integrated I2C, a config eeprom, sensors, and a codec that's
   * used in conjunction with the primary hardware.
   */
  extern struct i2c_client *
  i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info);
12b5053ac   Jean Delvare   i2c: Add i2c_new_...
241
242
243
244
245
246
247
248
  /* If you don't know the exact address of an I2C device, use this variant
   * instead, which can probe for device presence in a list of possible
   * addresses.
   */
  extern struct i2c_client *
  i2c_new_probed_device(struct i2c_adapter *adap,
  		      struct i2c_board_info *info,
  		      unsigned short const *addr_list);
9c1600eda   David Brownell   i2c: Add i2c_boar...
249
250
251
252
253
254
255
256
  extern void i2c_unregister_device(struct i2c_client *);
  
  /* Mainboard arch_initcall() code should register all its I2C devices.
   * This is done at arch_initcall time, before declaring any i2c adapters.
   * Modules for add-on boards must use other calls.
   */
  extern int
  i2c_register_board_info(int busnum, struct i2c_board_info const *info, unsigned n);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
257
258
259
260
261
262
263
  /*
   * The following structs are for those who like to implement new bus drivers:
   * i2c_algorithm is the interface to a class of hardware solutions which can
   * be addressed using the same bus algorithms - i.e. bit-banging or the PCF8584
   * to name two of the most common.
   */
  struct i2c_algorithm {
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
264
  	/* If an adapter algorithm can't do I2C-level access, set master_xfer
438d6c2c0   David Brownell   i2c: Whitespace c...
265
  	   to NULL. If an adapter algorithm can do SMBus access, set
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
266
267
  	   smbus_xfer. If set to NULL, the SMBus protocol is simulated
  	   using common I2C messages */
8ced8eee8   Jean Delvare   [PATCH] i2c-power...
268
269
  	/* master_xfer should return the number of messages successfully
  	   processed, or a negative value on error */
438d6c2c0   David Brownell   i2c: Whitespace c...
270
  	int (*master_xfer)(struct i2c_adapter *adap,struct i2c_msg *msgs,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
271
  	                   int num);
438d6c2c0   David Brownell   i2c: Whitespace c...
272
  	int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
273
274
  	                   unsigned short flags, char read_write,
  	                   u8 command, int size, union i2c_smbus_data * data);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
275
276
277
278
279
280
281
282
283
284
285
286
287
  	/* --- ioctl like call to set div. parameters. */
  	int (*algo_control)(struct i2c_adapter *, unsigned int, unsigned long);
  
  	/* To determine what the adapter supports */
  	u32 (*functionality) (struct i2c_adapter *);
  };
  
  /*
   * i2c_adapter is the structure used to identify a physical i2c bus along
   * with the access algorithms necessary to access it.
   */
  struct i2c_adapter {
  	struct module *owner;
020789e9c   Jean Delvare   [PATCH] I2C: Outd...
288
  	unsigned int id;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
289
  	unsigned int class;
af71ff690   David Brownell   i2c: Let drivers ...
290
  	const struct i2c_algorithm *algo; /* the algorithm to access the bus */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
291
292
293
294
295
296
297
  	void *algo_data;
  
  	/* --- administration stuff. */
  	int (*client_register)(struct i2c_client *);
  	int (*client_unregister)(struct i2c_client *);
  
  	/* data fields that are valid for all devices	*/
6ea23039c   Jiri Kosina   i2c: Add support ...
298
  	u8 level; 			/* nesting level for lockdep */
5c085d369   Ingo Molnar   [PATCH] i2c: Sema...
299
300
  	struct mutex bus_lock;
  	struct mutex clist_lock;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
301
302
303
304
  
  	int timeout;
  	int retries;
  	struct device dev;		/* the adapter device */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
305

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
306
307
308
  	int nr;
  	struct list_head clients;
  	struct list_head list;
2096b956d   David Brownell   i2c: Shrink struc...
309
  	char name[48];
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
310
  	struct completion dev_released;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
311
  };
ef2c8321f   David Brownell   i2c: Rename dev_t...
312
  #define to_i2c_adapter(d) container_of(d, struct i2c_adapter, dev)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
313
314
315
316
317
318
319
320
321
322
  
  static inline void *i2c_get_adapdata (struct i2c_adapter *dev)
  {
  	return dev_get_drvdata (&dev->dev);
  }
  
  static inline void i2c_set_adapdata (struct i2c_adapter *dev, void *data)
  {
  	dev_set_drvdata (&dev->dev, data);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
323
  /*flags for the client struct: */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
  #define I2C_CLIENT_PEC  0x04			/* Use Packet Error Checking */
  #define I2C_CLIENT_TEN	0x10			/* we have a ten bit chip address	*/
  						/* Must equal I2C_M_TEN below */
  
  /* i2c adapter classes (bitmask) */
  #define I2C_CLASS_HWMON		(1<<0)	/* lm_sensors, ... */
  #define I2C_CLASS_TV_ANALOG	(1<<1)	/* bttv + friends */
  #define I2C_CLASS_TV_DIGITAL	(1<<2)	/* dvb cards */
  #define I2C_CLASS_DDC		(1<<3)	/* i2c-matroxfb ? */
  #define I2C_CLASS_CAM_ANALOG	(1<<4)	/* camera with analog CCD */
  #define I2C_CLASS_CAM_DIGITAL	(1<<5)	/* most webcams */
  #define I2C_CLASS_SOUND		(1<<6)	/* sound devices */
  #define I2C_CLASS_ALL		(UINT_MAX) /* all of the above */
  
  /* i2c_client_address_data is the struct for holding default client
   * addresses for a driver and for the parameters supplied on the
   * command line
   */
  struct i2c_client_address_data {
  	unsigned short *normal_i2c;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
344
  	unsigned short *probe;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
345
  	unsigned short *ignore;
9fc6adfa9   Jean Delvare   [PATCH] hwmon: hw...
346
  	unsigned short **forces;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
347
348
349
350
  };
  
  /* Internal numbers to terminate lists */
  #define I2C_CLIENT_END		0xfffeU
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
351
352
353
  
  /* The numbers to use to set I2C bus address */
  #define ANY_I2C_BUS		0xffff
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
354
355
356
357
358
359
360
361
  
  
  /* ----- functions exported by i2c.o */
  
  /* administration...
   */
  extern int i2c_add_adapter(struct i2c_adapter *);
  extern int i2c_del_adapter(struct i2c_adapter *);
6e13e6418   David Brownell   i2c: Add i2c_add_...
362
  extern int i2c_add_numbered_adapter(struct i2c_adapter *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
363

de59cf9ed   Greg Kroah-Hartman   [PATCH] I2C: Make...
364
  extern int i2c_register_driver(struct module *, struct i2c_driver *);
b3e820968   Jean Delvare   i2c: Make i2c_del...
365
  extern void i2c_del_driver(struct i2c_driver *);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
366

de59cf9ed   Greg Kroah-Hartman   [PATCH] I2C: Make...
367
368
369
370
  static inline int i2c_add_driver(struct i2c_driver *driver)
  {
  	return i2c_register_driver(THIS_MODULE, driver);
  }
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
371
372
  extern int i2c_attach_client(struct i2c_client *);
  extern int i2c_detach_client(struct i2c_client *);
482c788de   Jean Delvare   [PATCH] i2c: i2c_...
373
374
  /* Should be used to make sure that client-struct is valid and that it
     is okay to access the i2c-client.
cf02df770   Jean Delvare   [PATCH] i2c: Rewo...
375
     returns -ENODEV if client has gone in the meantime */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
  extern int i2c_use_client(struct i2c_client *);
  extern int i2c_release_client(struct i2c_client *);
  
  /* call the i2c_client->command() of all attached clients with
   * the given arguments */
  extern void i2c_clients_command(struct i2c_adapter *adap,
  				unsigned int cmd, void *arg);
  
  /* returns -EBUSY if address has been taken, 0 if not. Note that the only
     other place at which this is called is within i2c_attach_client; so
     you can cheat by simply not registering. Not recommended, of course! */
  extern int i2c_check_addr (struct i2c_adapter *adapter, int addr);
  
  /* Detect function. It iterates over all possible addresses itself.
   * It will only call found_proc if some client is connected at the
   * specific address (unless a 'force' matched);
   */
438d6c2c0   David Brownell   i2c: Whitespace c...
393
  extern int i2c_probe(struct i2c_adapter *adapter,
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
394
395
396
397
398
399
  		struct i2c_client_address_data *address_data,
  		int (*found_proc) (struct i2c_adapter *, int, int));
  
  /* An ioctl like call to set div. parameters of the adapter.
   */
  extern int i2c_control(struct i2c_client *,unsigned int, unsigned long);
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
  extern struct i2c_adapter* i2c_get_adapter(int id);
  extern void i2c_put_adapter(struct i2c_adapter *adap);
  
  
  /* Return the functionality mask */
  static inline u32 i2c_get_functionality(struct i2c_adapter *adap)
  {
  	return adap->algo->functionality(adap);
  }
  
  /* Return 1 if adapter supports everything we need, 0 if not. */
  static inline int i2c_check_functionality(struct i2c_adapter *adap, u32 func)
  {
  	return (func & i2c_get_functionality(adap)) == func;
  }
cdcb19219   Jean Delvare   [PATCH] I2C: inli...
415
416
417
418
419
  /* Return id number for a specific adapter */
  static inline int i2c_adapter_id(struct i2c_adapter *adap)
  {
  	return adap->nr;
  }
a1b9298e5   David Woodhouse   Sanitise linux/i2...
420
  #endif /* __KERNEL__ */
cdcb19219   Jean Delvare   [PATCH] I2C: inli...
421

1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
422
423
424
425
426
  /*
   * I2C Message - used for pure i2c transaction, also from /dev interface
   */
  struct i2c_msg {
  	__u16 addr;	/* slave address			*/
438d6c2c0   David Brownell   i2c: Whitespace c...
427
  	__u16 flags;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
428
429
430
431
432
433
  #define I2C_M_TEN	0x10	/* we have a ten bit chip address	*/
  #define I2C_M_RD	0x01
  #define I2C_M_NOSTART	0x4000
  #define I2C_M_REV_DIR_ADDR	0x2000
  #define I2C_M_IGNORE_NAK	0x1000
  #define I2C_M_NO_RD_ACK		0x0800
209d27c3b   Jean Delvare   i2c: Emulate SMBu...
434
  #define I2C_M_RECV_LEN		0x0400 /* length will be first received byte */
438d6c2c0   David Brownell   i2c: Whitespace c...
435
436
  	__u16 len;		/* msg length				*/
  	__u8 *buf;		/* pointer to msg data			*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
437
438
439
440
441
442
443
444
  };
  
  /* To determine what functionality is present */
  
  #define I2C_FUNC_I2C			0x00000001
  #define I2C_FUNC_10BIT_ADDR		0x00000002
  #define I2C_FUNC_PROTOCOL_MANGLING	0x00000004 /* I2C_M_{REV_DIR_ADDR,NOSTART,..} */
  #define I2C_FUNC_SMBUS_HWPEC_CALC	0x00000008 /* SMBus 2.0 */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
445
  #define I2C_FUNC_SMBUS_BLOCK_PROC_CALL	0x00008000 /* SMBus 2.0 */
438d6c2c0   David Brownell   i2c: Whitespace c...
446
447
448
449
450
451
452
453
454
455
  #define I2C_FUNC_SMBUS_QUICK		0x00010000
  #define I2C_FUNC_SMBUS_READ_BYTE	0x00020000
  #define I2C_FUNC_SMBUS_WRITE_BYTE	0x00040000
  #define I2C_FUNC_SMBUS_READ_BYTE_DATA	0x00080000
  #define I2C_FUNC_SMBUS_WRITE_BYTE_DATA	0x00100000
  #define I2C_FUNC_SMBUS_READ_WORD_DATA	0x00200000
  #define I2C_FUNC_SMBUS_WRITE_WORD_DATA	0x00400000
  #define I2C_FUNC_SMBUS_PROC_CALL	0x00800000
  #define I2C_FUNC_SMBUS_READ_BLOCK_DATA	0x01000000
  #define I2C_FUNC_SMBUS_WRITE_BLOCK_DATA 0x02000000
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
456
457
458
459
  #define I2C_FUNC_SMBUS_READ_I2C_BLOCK	0x04000000 /* I2C-like block xfer  */
  #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK	0x08000000 /* w/ 1-byte reg. addr. */
  #define I2C_FUNC_SMBUS_READ_I2C_BLOCK_2	 0x10000000 /* I2C-like block xfer  */
  #define I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2 0x20000000 /* w/ 2-byte reg. addr. */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
460
461
462
463
464
465
466
467
468
469
470
471
472
  
  #define I2C_FUNC_SMBUS_BYTE (I2C_FUNC_SMBUS_READ_BYTE | \
                               I2C_FUNC_SMBUS_WRITE_BYTE)
  #define I2C_FUNC_SMBUS_BYTE_DATA (I2C_FUNC_SMBUS_READ_BYTE_DATA | \
                                    I2C_FUNC_SMBUS_WRITE_BYTE_DATA)
  #define I2C_FUNC_SMBUS_WORD_DATA (I2C_FUNC_SMBUS_READ_WORD_DATA | \
                                    I2C_FUNC_SMBUS_WRITE_WORD_DATA)
  #define I2C_FUNC_SMBUS_BLOCK_DATA (I2C_FUNC_SMBUS_READ_BLOCK_DATA | \
                                     I2C_FUNC_SMBUS_WRITE_BLOCK_DATA)
  #define I2C_FUNC_SMBUS_I2C_BLOCK (I2C_FUNC_SMBUS_READ_I2C_BLOCK | \
                                    I2C_FUNC_SMBUS_WRITE_I2C_BLOCK)
  #define I2C_FUNC_SMBUS_I2C_BLOCK_2 (I2C_FUNC_SMBUS_READ_I2C_BLOCK_2 | \
                                      I2C_FUNC_SMBUS_WRITE_I2C_BLOCK_2)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
473
474
475
476
477
478
479
  
  #define I2C_FUNC_SMBUS_EMUL (I2C_FUNC_SMBUS_QUICK | \
                               I2C_FUNC_SMBUS_BYTE | \
                               I2C_FUNC_SMBUS_BYTE_DATA | \
                               I2C_FUNC_SMBUS_WORD_DATA | \
                               I2C_FUNC_SMBUS_PROC_CALL | \
                               I2C_FUNC_SMBUS_WRITE_BLOCK_DATA | \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
480
                               I2C_FUNC_SMBUS_I2C_BLOCK)
438d6c2c0   David Brownell   i2c: Whitespace c...
481
482
  /*
   * Data for SMBus Messages
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
483
   */
438d6c2c0   David Brownell   i2c: Whitespace c...
484
  #define I2C_SMBUS_BLOCK_MAX	32	/* As specified in SMBus standard */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
485
486
487
  union i2c_smbus_data {
  	__u8 byte;
  	__u16 word;
332bf92b3   Hideki Iwamoto   [PATCH] i2c: Fix ...
488
  	__u8 block[I2C_SMBUS_BLOCK_MAX + 2]; /* block[0] is used for length */
421ef47be   Jean Delvare   [PATCH] i2c: SMBu...
489
  	                       /* and one more for user-space compatibility */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
490
491
492
493
494
  };
  
  /* smbus_access read or write markers */
  #define I2C_SMBUS_READ	1
  #define I2C_SMBUS_WRITE	0
438d6c2c0   David Brownell   i2c: Whitespace c...
495
  /* SMBus transaction types (size parameter in the above functions)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
496
497
498
     Note: these no longer correspond to the (arbitrary) PIIX4 internal codes! */
  #define I2C_SMBUS_QUICK		    0
  #define I2C_SMBUS_BYTE		    1
438d6c2c0   David Brownell   i2c: Whitespace c...
499
  #define I2C_SMBUS_BYTE_DATA	    2
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
500
501
502
  #define I2C_SMBUS_WORD_DATA	    3
  #define I2C_SMBUS_PROC_CALL	    4
  #define I2C_SMBUS_BLOCK_DATA	    5
4b2643d7d   Jean Delvare   i2c: Fix the i2c_...
503
  #define I2C_SMBUS_I2C_BLOCK_BROKEN  6
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
504
  #define I2C_SMBUS_BLOCK_PROC_CALL   7		/* SMBus 2.0 */
4b2643d7d   Jean Delvare   i2c: Fix the i2c_...
505
  #define I2C_SMBUS_I2C_BLOCK_DATA    8
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
506
507
508
  
  
  /* ----- commands for the ioctl like i2c_command call:
438d6c2c0   David Brownell   i2c: Whitespace c...
509
510
   * note that additional calls are defined in the algorithm and hw
   *	dependent layers - these can be listed here, or see the
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
511
512
513
514
515
   *	corresponding header files.
   */
  				/* -> bit-adapter specific ioctls	*/
  #define I2C_RETRIES	0x0701	/* number of times a device address      */
  				/* should be polled when not            */
438d6c2c0   David Brownell   i2c: Whitespace c...
516
517
                                  /* acknowledging			*/
  #define I2C_TIMEOUT	0x0702	/* set timeout - call with int		*/
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
518
519
520
521
522
523
524
525
526
527
528
529
530
531
  
  
  /* this is for i2c-dev.c	*/
  #define I2C_SLAVE	0x0703	/* Change slave address			*/
  				/* Attn.: Slave address is 7 or 10 bits */
  #define I2C_SLAVE_FORCE	0x0706	/* Change slave address			*/
  				/* Attn.: Slave address is 7 or 10 bits */
  				/* This changes the address, even if it */
  				/* is already taken!			*/
  #define I2C_TENBIT	0x0704	/* 0 for 7 bit addrs, != 0 for 10 bit	*/
  
  #define I2C_FUNCS	0x0705	/* Get the adapter functionality */
  #define I2C_RDWR	0x0707	/* Combined R/W transfer (one stop only)*/
  #define I2C_PEC		0x0708	/* != 0 for SMBus PEC                   */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
532
533
  
  #define I2C_SMBUS	0x0720	/* SMBus-level access */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
534
  /* ----- I2C-DEV: char device interface stuff ------------------------- */
a1b9298e5   David Woodhouse   Sanitise linux/i2...
535
  #ifdef __KERNEL__
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
  
  #define I2C_MAJOR	89		/* Device major number		*/
  
  /* These defines are used for probing i2c client addresses */
  /* The length of the option lists */
  #define I2C_CLIENT_MAX_OPTS 48
  
  /* Default fill of many variables */
  #define I2C_CLIENT_DEFAULTS {I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END, \
                            I2C_CLIENT_END, I2C_CLIENT_END, I2C_CLIENT_END}
  
  /* I2C_CLIENT_MODULE_PARM creates a module parameter, and puts it in the
     module header */
  
  #define I2C_CLIENT_MODULE_PARM(var,desc) \
    static unsigned short var[I2C_CLIENT_MAX_OPTS] = I2C_CLIENT_DEFAULTS; \
    static unsigned int var##_num; \
    module_param_array(var, short, &var##_num, 0); \
    MODULE_PARM_DESC(var,desc)
f4b502612   Jean Delvare   [PATCH] hwmon: hw...
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
  #define I2C_CLIENT_MODULE_PARM_FORCE(name)				\
  I2C_CLIENT_MODULE_PARM(force_##name,					\
  		       "List of adapter,address pairs which are "	\
  		       "unquestionably assumed to contain a `"		\
  		       # name "' chip")
  
  
  #define I2C_CLIENT_INSMOD_COMMON					\
  I2C_CLIENT_MODULE_PARM(probe, "List of adapter,address pairs to scan "	\
  		       "additionally");					\
  I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to "	\
  		       "scan");						\
  static struct i2c_client_address_data addr_data = {			\
  	.normal_i2c	= normal_i2c,					\
  	.probe		= probe,					\
  	.ignore		= ignore,					\
  	.forces		= forces,					\
  }
  
  /* These are the ones you want to use in your own drivers. Pick the one
     which matches the number of devices the driver differenciates between. */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
590
  #define I2C_CLIENT_INSMOD \
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
591
592
593
    I2C_CLIENT_MODULE_PARM(force, \
                        "List of adapter,address pairs to boldly assume " \
                        "to be present"); \
f4b502612   Jean Delvare   [PATCH] hwmon: hw...
594
  	static unsigned short *forces[] = {				\
9fc6adfa9   Jean Delvare   [PATCH] hwmon: hw...
595
596
597
  			force,						\
  			NULL						\
  		};							\
f4b502612   Jean Delvare   [PATCH] hwmon: hw...
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
  I2C_CLIENT_INSMOD_COMMON
  
  #define I2C_CLIENT_INSMOD_1(chip1)					\
  enum chips { any_chip, chip1 };						\
  I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to "	\
  		       "boldly assume to be present");			\
  I2C_CLIENT_MODULE_PARM_FORCE(chip1);					\
  static unsigned short *forces[] = { force, force_##chip1, NULL };	\
  I2C_CLIENT_INSMOD_COMMON
  
  #define I2C_CLIENT_INSMOD_2(chip1, chip2)				\
  enum chips { any_chip, chip1, chip2 };					\
  I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to "	\
  		       "boldly assume to be present");			\
  I2C_CLIENT_MODULE_PARM_FORCE(chip1);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip2);					\
  static unsigned short *forces[] = { force, force_##chip1,		\
  				    force_##chip2, NULL };		\
  I2C_CLIENT_INSMOD_COMMON
  
  #define I2C_CLIENT_INSMOD_3(chip1, chip2, chip3)			\
  enum chips { any_chip, chip1, chip2, chip3 };				\
  I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to "	\
  		       "boldly assume to be present");			\
  I2C_CLIENT_MODULE_PARM_FORCE(chip1);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip2);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip3);					\
  static unsigned short *forces[] = { force, force_##chip1,		\
  				    force_##chip2, force_##chip3,	\
  				    NULL };				\
  I2C_CLIENT_INSMOD_COMMON
  
  #define I2C_CLIENT_INSMOD_4(chip1, chip2, chip3, chip4)			\
  enum chips { any_chip, chip1, chip2, chip3, chip4 };			\
  I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to "	\
  		       "boldly assume to be present");			\
  I2C_CLIENT_MODULE_PARM_FORCE(chip1);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip2);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip3);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip4);					\
  static unsigned short *forces[] = { force, force_##chip1,		\
  				    force_##chip2, force_##chip3,	\
  				    force_##chip4, NULL};		\
  I2C_CLIENT_INSMOD_COMMON
  
  #define I2C_CLIENT_INSMOD_5(chip1, chip2, chip3, chip4, chip5)		\
  enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 };		\
  I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to "	\
  		       "boldly assume to be present");			\
  I2C_CLIENT_MODULE_PARM_FORCE(chip1);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip2);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip3);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip4);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip5);					\
  static unsigned short *forces[] = { force, force_##chip1,		\
  				    force_##chip2, force_##chip3,	\
  				    force_##chip4, force_##chip5,	\
  				    NULL };				\
  I2C_CLIENT_INSMOD_COMMON
  
  #define I2C_CLIENT_INSMOD_6(chip1, chip2, chip3, chip4, chip5, chip6)	\
  enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 };	\
  I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to "	\
  		       "boldly assume to be present");			\
  I2C_CLIENT_MODULE_PARM_FORCE(chip1);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip2);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip3);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip4);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip5);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip6);					\
  static unsigned short *forces[] = { force, force_##chip1,		\
  				    force_##chip2, force_##chip3,	\
  				    force_##chip4, force_##chip5,	\
  				    force_##chip6, NULL };		\
  I2C_CLIENT_INSMOD_COMMON
  
  #define I2C_CLIENT_INSMOD_7(chip1, chip2, chip3, chip4, chip5, chip6, chip7) \
  enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6,	\
  	     chip7 };							\
  I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to "	\
  		       "boldly assume to be present");			\
  I2C_CLIENT_MODULE_PARM_FORCE(chip1);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip2);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip3);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip4);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip5);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip6);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip7);					\
  static unsigned short *forces[] = { force, force_##chip1,		\
  				    force_##chip2, force_##chip3,	\
  				    force_##chip4, force_##chip5,	\
  				    force_##chip6, force_##chip7,	\
  				    NULL };				\
  I2C_CLIENT_INSMOD_COMMON
  
  #define I2C_CLIENT_INSMOD_8(chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8) \
  enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6,	\
  	     chip7, chip8 };						\
  I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to "	\
  		       "boldly assume to be present");			\
  I2C_CLIENT_MODULE_PARM_FORCE(chip1);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip2);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip3);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip4);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip5);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip6);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip7);					\
  I2C_CLIENT_MODULE_PARM_FORCE(chip8);					\
  static unsigned short *forces[] = { force, force_##chip1,		\
  				    force_##chip2, force_##chip3,	\
  				    force_##chip4, force_##chip5,	\
  				    force_##chip6, force_##chip7,	\
  				    force_##chip8, NULL };		\
  I2C_CLIENT_INSMOD_COMMON
a1b9298e5   David Woodhouse   Sanitise linux/i2...
712
  #endif /* __KERNEL__ */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
713
  #endif /* _LINUX_I2C_H */