diff options
| author | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-06 03:31:02 -0400 |
|---|---|---|
| committer | Linus Torvalds <torvalds@evo.osdl.org> | 2005-09-06 03:31:02 -0400 |
| commit | 8566cfc9fe0934f52ddedc12b083176116c13978 (patch) | |
| tree | b0f92fd0982a4dabaa2c108f4f1d130d2cff6798 /include/linux | |
| parent | 7bdb2b6aca356c765bb697a4e9e7599357ee1542 (diff) | |
| parent | 77ae84554cc0178e03862391599a0cedf96fa4c4 (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/i2c-2.6
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/hwmon-sysfs.h | 15 | ||||
| -rw-r--r-- | include/linux/hwmon-vid.h | 45 | ||||
| -rw-r--r-- | include/linux/hwmon.h | 35 | ||||
| -rw-r--r-- | include/linux/i2c-id.h | 192 | ||||
| -rw-r--r-- | include/linux/i2c-isa.h | 36 | ||||
| -rw-r--r-- | include/linux/i2c-sensor.h | 263 | ||||
| -rw-r--r-- | include/linux/i2c-vid.h | 111 | ||||
| -rw-r--r-- | include/linux/i2c.h | 206 |
8 files changed, 364 insertions, 539 deletions
diff --git a/include/linux/hwmon-sysfs.h b/include/linux/hwmon-sysfs.h index 1b5018a965f5..7eb4004b3601 100644 --- a/include/linux/hwmon-sysfs.h +++ b/include/linux/hwmon-sysfs.h | |||
| @@ -33,4 +33,19 @@ struct sensor_device_attribute sensor_dev_attr_##_name = { \ | |||
| 33 | .index = _index, \ | 33 | .index = _index, \ |
| 34 | } | 34 | } |
| 35 | 35 | ||
| 36 | struct sensor_device_attribute_2 { | ||
| 37 | struct device_attribute dev_attr; | ||
| 38 | u8 index; | ||
| 39 | u8 nr; | ||
| 40 | }; | ||
| 41 | #define to_sensor_dev_attr_2(_dev_attr) \ | ||
| 42 | container_of(_dev_attr, struct sensor_device_attribute_2, dev_attr) | ||
| 43 | |||
| 44 | #define SENSOR_DEVICE_ATTR_2(_name,_mode,_show,_store,_nr,_index) \ | ||
| 45 | struct sensor_device_attribute_2 sensor_dev_attr_##_name = { \ | ||
| 46 | .dev_attr = __ATTR(_name,_mode,_show,_store), \ | ||
| 47 | .index = _index, \ | ||
| 48 | .nr = _nr, \ | ||
| 49 | } | ||
| 50 | |||
| 36 | #endif /* _LINUX_HWMON_SYSFS_H */ | 51 | #endif /* _LINUX_HWMON_SYSFS_H */ |
diff --git a/include/linux/hwmon-vid.h b/include/linux/hwmon-vid.h new file mode 100644 index 000000000000..cd4b7a042b86 --- /dev/null +++ b/include/linux/hwmon-vid.h | |||
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | hwmon-vid.h - VID/VRM/VRD voltage conversions | ||
| 3 | |||
| 4 | Originally part of lm_sensors | ||
| 5 | Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com> | ||
| 6 | With assistance from Trent Piepho <xyzzy@speakeasy.org> | ||
| 7 | |||
| 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 | ||
| 10 | the Free Software Foundation; either version 2 of the License, or | ||
| 11 | (at your option) any later version. | ||
| 12 | |||
| 13 | This program is distributed in the hope that it will be useful, | ||
| 14 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | GNU General Public License for more details. | ||
| 17 | |||
| 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 | ||
| 20 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef _LINUX_HWMON_VID_H | ||
| 24 | #define _LINUX_HWMON_VID_H | ||
| 25 | |||
| 26 | int vid_from_reg(int val, int vrm); | ||
| 27 | int vid_which_vrm(void); | ||
| 28 | |||
| 29 | /* vrm is the VRM/VRD document version multiplied by 10. | ||
| 30 | val is in mV to avoid floating point in the kernel. | ||
| 31 | Returned value is the 4-, 5- or 6-bit VID code. | ||
| 32 | Note that only VRM 9.x is supported for now. */ | ||
| 33 | static inline int vid_to_reg(int val, int vrm) | ||
| 34 | { | ||
| 35 | switch (vrm) { | ||
| 36 | case 91: /* VRM 9.1 */ | ||
| 37 | case 90: /* VRM 9.0 */ | ||
| 38 | return ((val >= 1100) && (val <= 1850) ? | ||
| 39 | ((18499 - val * 10) / 25 + 5) / 10 : -1); | ||
| 40 | default: | ||
| 41 | return -1; | ||
| 42 | } | ||
| 43 | } | ||
| 44 | |||
| 45 | #endif /* _LINUX_HWMON_VID_H */ | ||
diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h new file mode 100644 index 000000000000..0efd994c37f1 --- /dev/null +++ b/include/linux/hwmon.h | |||
| @@ -0,0 +1,35 @@ | |||
| 1 | /* | ||
| 2 | hwmon.h - part of lm_sensors, Linux kernel modules for hardware monitoring | ||
| 3 | |||
| 4 | This file declares helper functions for the sysfs class "hwmon", | ||
| 5 | for use by sensors drivers. | ||
| 6 | |||
| 7 | Copyright (C) 2005 Mark M. Hoffman <mhoffman@lightlink.com> | ||
| 8 | |||
| 9 | This program is free software; you can redistribute it and/or modify | ||
| 10 | it under the terms of the GNU General Public License as published by | ||
| 11 | the Free Software Foundation; version 2 of the License. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #ifndef _HWMON_H_ | ||
| 15 | #define _HWMON_H_ | ||
| 16 | |||
| 17 | #include <linux/device.h> | ||
| 18 | |||
| 19 | struct class_device *hwmon_device_register(struct device *dev); | ||
| 20 | |||
| 21 | void hwmon_device_unregister(struct class_device *cdev); | ||
| 22 | |||
| 23 | /* Scale user input to sensible values */ | ||
| 24 | static inline int SENSORS_LIMIT(long value, long low, long high) | ||
| 25 | { | ||
| 26 | if (value < low) | ||
| 27 | return low; | ||
| 28 | else if (value > high) | ||
| 29 | return high; | ||
| 30 | else | ||
| 31 | return value; | ||
| 32 | } | ||
| 33 | |||
| 34 | #endif | ||
| 35 | |||
diff --git a/include/linux/i2c-id.h b/include/linux/i2c-id.h index 33f08258f22b..44f30876a1c9 100644 --- a/include/linux/i2c-id.h +++ b/include/linux/i2c-id.h | |||
| @@ -1,6 +1,6 @@ | |||
| 1 | /* ------------------------------------------------------------------------- */ | 1 | /* ------------------------------------------------------------------------- */ |
| 2 | /* */ | 2 | /* */ |
| 3 | /* i2c.h - definitions for the i2c-bus interface */ | 3 | /* i2c-id.h - identifier values for i2c drivers and adapters */ |
| 4 | /* */ | 4 | /* */ |
| 5 | /* ------------------------------------------------------------------------- */ | 5 | /* ------------------------------------------------------------------------- */ |
| 6 | /* Copyright (C) 1995-1999 Simon G. Vogl | 6 | /* Copyright (C) 1995-1999 Simon G. Vogl |
| @@ -24,16 +24,6 @@ | |||
| 24 | #define LINUX_I2C_ID_H | 24 | #define LINUX_I2C_ID_H |
| 25 | 25 | ||
| 26 | /* | 26 | /* |
| 27 | * This file is part of the i2c-bus package and contains the identifier | ||
| 28 | * values for drivers, adapters and other folk populating these serial | ||
| 29 | * worlds. | ||
| 30 | * | ||
| 31 | * These will change often (i.e. additions) , therefore this has been | ||
| 32 | * separated from the functional interface definitions of the i2c api. | ||
| 33 | * | ||
| 34 | */ | ||
| 35 | |||
| 36 | /* | ||
| 37 | * ---- Driver types ----------------------------------------------------- | 27 | * ---- Driver types ----------------------------------------------------- |
| 38 | * device id name + number function description, i2c address(es) | 28 | * device id name + number function description, i2c address(es) |
| 39 | * | 29 | * |
| @@ -170,151 +160,113 @@ | |||
| 170 | 160 | ||
| 171 | /* | 161 | /* |
| 172 | * ---- Adapter types ---------------------------------------------------- | 162 | * ---- Adapter types ---------------------------------------------------- |
| 173 | * | ||
| 174 | * First, we distinguish between several algorithms to access the hardware | ||
| 175 | * interface types, as a PCF 8584 needs other care than a bit adapter. | ||
| 176 | */ | ||
| 177 | |||
| 178 | #define I2C_ALGO_NONE 0x000000 | ||
| 179 | #define I2C_ALGO_BIT 0x010000 /* bit style adapters */ | ||
| 180 | #define I2C_ALGO_PCF 0x020000 /* PCF 8584 style adapters */ | ||
| 181 | #define I2C_ALGO_ATI 0x030000 /* ATI video card */ | ||
| 182 | #define I2C_ALGO_SMBUS 0x040000 | ||
| 183 | #define I2C_ALGO_ISA 0x050000 /* lm_sensors ISA pseudo-adapter */ | ||
| 184 | #define I2C_ALGO_SAA7146 0x060000 /* SAA 7146 video decoder bus */ | ||
| 185 | #define I2C_ALGO_ACB 0x070000 /* ACCESS.bus algorithm */ | ||
| 186 | #define I2C_ALGO_IIC 0x080000 /* ITE IIC bus */ | ||
| 187 | #define I2C_ALGO_SAA7134 0x090000 | ||
| 188 | #define I2C_ALGO_MPC824X 0x0a0000 /* Motorola 8240 / 8245 */ | ||
| 189 | #define I2C_ALGO_IPMI 0x0b0000 /* IPMI dummy adapter */ | ||
| 190 | #define I2C_ALGO_IPMB 0x0c0000 /* IPMB adapter */ | ||
| 191 | #define I2C_ALGO_MPC107 0x0d0000 | ||
| 192 | #define I2C_ALGO_EC 0x100000 /* ACPI embedded controller */ | ||
| 193 | |||
| 194 | #define I2C_ALGO_MPC8XX 0x110000 /* MPC8xx PowerPC I2C algorithm */ | ||
| 195 | #define I2C_ALGO_OCP 0x120000 /* IBM or otherwise On-chip I2C algorithm */ | ||
| 196 | #define I2C_ALGO_BITHS 0x130000 /* enhanced bit style adapters */ | ||
| 197 | #define I2C_ALGO_IOP3XX 0x140000 /* XSCALE IOP3XX On-chip I2C alg */ | ||
| 198 | #define I2C_ALGO_SIBYTE 0x150000 /* Broadcom SiByte SOCs */ | ||
| 199 | #define I2C_ALGO_SGI 0x160000 /* SGI algorithm */ | ||
| 200 | |||
| 201 | #define I2C_ALGO_USB 0x170000 /* USB algorithm */ | ||
| 202 | #define I2C_ALGO_VIRT 0x180000 /* Virtual bus adapter */ | ||
| 203 | |||
| 204 | #define I2C_ALGO_MV64XXX 0x190000 /* Marvell mv64xxx i2c ctlr */ | ||
| 205 | #define I2C_ALGO_PCA 0x1a0000 /* PCA 9564 style adapters */ | ||
| 206 | #define I2C_ALGO_AU1550 0x1b0000 /* Au1550 PSC algorithm */ | ||
| 207 | |||
| 208 | #define I2C_ALGO_EXP 0x800000 /* experimental */ | ||
| 209 | |||
| 210 | #define I2C_ALGO_MASK 0xff0000 /* Mask for algorithms */ | ||
| 211 | #define I2C_ALGO_SHIFT 0x10 /* right shift to get index values */ | ||
| 212 | |||
| 213 | #define I2C_HW_ADAPS 0x10000 /* # adapter types */ | ||
| 214 | #define I2C_HW_MASK 0xffff | ||
| 215 | |||
| 216 | |||
| 217 | /* hw specific modules that are defined per algorithm layer | ||
| 218 | */ | 163 | */ |
| 219 | 164 | ||
| 220 | /* --- Bit algorithm adapters */ | 165 | /* --- Bit algorithm adapters */ |
| 221 | #define I2C_HW_B_LP 0x00 /* Parallel port Philips style adapter */ | 166 | #define I2C_HW_B_LP 0x010000 /* Parallel port Philips style */ |
| 222 | #define I2C_HW_B_LPC 0x01 /* Parallel port, over control reg. */ | 167 | #define I2C_HW_B_LPC 0x010001 /* Parallel port control reg. */ |
| 223 | #define I2C_HW_B_SER 0x02 /* Serial line interface */ | 168 | #define I2C_HW_B_SER 0x010002 /* Serial line interface */ |
| 224 | #define I2C_HW_B_ELV 0x03 /* ELV Card */ | 169 | #define I2C_HW_B_ELV 0x010003 /* ELV Card */ |
| 225 | #define I2C_HW_B_VELLE 0x04 /* Vellemann K8000 */ | 170 | #define I2C_HW_B_VELLE 0x010004 /* Vellemann K8000 */ |
| 226 | #define I2C_HW_B_BT848 0x05 /* BT848 video boards */ | 171 | #define I2C_HW_B_BT848 0x010005 /* BT848 video boards */ |
| 227 | #define I2C_HW_B_WNV 0x06 /* Winnov Videums */ | 172 | #define I2C_HW_B_WNV 0x010006 /* Winnov Videums */ |
| 228 | #define I2C_HW_B_VIA 0x07 /* Via vt82c586b */ | 173 | #define I2C_HW_B_VIA 0x010007 /* Via vt82c586b */ |
| 229 | #define I2C_HW_B_HYDRA 0x08 /* Apple Hydra Mac I/O */ | 174 | #define I2C_HW_B_HYDRA 0x010008 /* Apple Hydra Mac I/O */ |
| 230 | #define I2C_HW_B_G400 0x09 /* Matrox G400 */ | 175 | #define I2C_HW_B_G400 0x010009 /* Matrox G400 */ |
| 231 | #define I2C_HW_B_I810 0x0a /* Intel I810 */ | 176 | #define I2C_HW_B_I810 0x01000a /* Intel I810 */ |
| 232 | #define I2C_HW_B_VOO 0x0b /* 3dfx Voodoo 3 / Banshee */ | 177 | #define I2C_HW_B_VOO 0x01000b /* 3dfx Voodoo 3 / Banshee */ |
| 233 | #define I2C_HW_B_PPORT 0x0c /* Primitive parallel port adapter */ | 178 | #define I2C_HW_B_PPORT 0x01000c /* Primitive parallel port adapter */ |
| 234 | #define I2C_HW_B_SAVG 0x0d /* Savage 4 */ | 179 | #define I2C_HW_B_SAVG 0x01000d /* Savage 4 */ |
| 235 | #define I2C_HW_B_SCX200 0x0e /* Nat'l Semi SCx200 I2C */ | 180 | #define I2C_HW_B_SCX200 0x01000e /* Nat'l Semi SCx200 I2C */ |
| 236 | #define I2C_HW_B_RIVA 0x10 /* Riva based graphics cards */ | 181 | #define I2C_HW_B_RIVA 0x010010 /* Riva based graphics cards */ |
| 237 | #define I2C_HW_B_IOC 0x11 /* IOC bit-wiggling */ | 182 | #define I2C_HW_B_IOC 0x010011 /* IOC bit-wiggling */ |
| 238 | #define I2C_HW_B_TSUNA 0x12 /* DEC Tsunami chipset */ | 183 | #define I2C_HW_B_TSUNA 0x010012 /* DEC Tsunami chipset */ |
| 239 | #define I2C_HW_B_FRODO 0x13 /* 2d3D, Inc. SA-1110 Development Board */ | 184 | #define I2C_HW_B_FRODO 0x010013 /* 2d3D SA-1110 Development Board */ |
| 240 | #define I2C_HW_B_OMAHA 0x14 /* Omaha I2C interface (ARM) */ | 185 | #define I2C_HW_B_OMAHA 0x010014 /* Omaha I2C interface (ARM) */ |
| 241 | #define I2C_HW_B_GUIDE 0x15 /* Guide bit-basher */ | 186 | #define I2C_HW_B_GUIDE 0x010015 /* Guide bit-basher */ |
| 242 | #define I2C_HW_B_IXP2000 0x16 /* GPIO on IXP2000 systems */ | 187 | #define I2C_HW_B_IXP2000 0x010016 /* GPIO on IXP2000 systems */ |
| 243 | #define I2C_HW_B_IXP4XX 0x17 /* GPIO on IXP4XX systems */ | 188 | #define I2C_HW_B_IXP4XX 0x010017 /* GPIO on IXP4XX systems */ |
| 244 | #define I2C_HW_B_S3VIA 0x18 /* S3Via ProSavage adapter */ | 189 | #define I2C_HW_B_S3VIA 0x010018 /* S3Via ProSavage adapter */ |
| 245 | #define I2C_HW_B_ZR36067 0x19 /* Zoran-36057/36067 based boards */ | 190 | #define I2C_HW_B_ZR36067 0x010019 /* Zoran-36057/36067 based boards */ |
| 246 | #define I2C_HW_B_PCILYNX 0x1a /* TI PCILynx I2C adapter */ | 191 | #define I2C_HW_B_PCILYNX 0x01001a /* TI PCILynx I2C adapter */ |
| 247 | #define I2C_HW_B_CX2388x 0x1b /* connexant 2388x based tv cards */ | 192 | #define I2C_HW_B_CX2388x 0x01001b /* connexant 2388x based tv cards */ |
| 193 | #define I2C_HW_B_NVIDIA 0x01001c /* nvidia framebuffer driver */ | ||
| 194 | #define I2C_HW_B_SAVAGE 0x01001d /* savage framebuffer driver */ | ||
| 195 | #define I2C_HW_B_RADEON 0x01001e /* radeon framebuffer driver */ | ||
| 248 | 196 | ||
| 249 | /* --- PCF 8584 based algorithms */ | 197 | /* --- PCF 8584 based algorithms */ |
| 250 | #define I2C_HW_P_LP 0x00 /* Parallel port interface */ | 198 | #define I2C_HW_P_LP 0x020000 /* Parallel port interface */ |
| 251 | #define I2C_HW_P_ISA 0x01 /* generic ISA Bus inteface card */ | 199 | #define I2C_HW_P_ISA 0x020001 /* generic ISA Bus inteface card */ |
| 252 | #define I2C_HW_P_ELEK 0x02 /* Elektor ISA Bus inteface card */ | 200 | #define I2C_HW_P_ELEK 0x020002 /* Elektor ISA Bus inteface card */ |
| 253 | 201 | ||
| 254 | /* --- PCA 9564 based algorithms */ | 202 | /* --- PCA 9564 based algorithms */ |
| 255 | #define I2C_HW_A_ISA 0x00 /* generic ISA Bus interface card */ | 203 | #define I2C_HW_A_ISA 0x1a0000 /* generic ISA Bus interface card */ |
| 256 | 204 | ||
| 257 | /* --- ACPI Embedded controller algorithms */ | 205 | /* --- ACPI Embedded controller algorithms */ |
| 258 | #define I2C_HW_ACPI_EC 0x00 | 206 | #define I2C_HW_ACPI_EC 0x1f0000 |
| 259 | 207 | ||
| 260 | /* --- MPC824x PowerPC adapters */ | 208 | /* --- MPC824x PowerPC adapters */ |
| 261 | #define I2C_HW_MPC824X 0x00 /* Motorola 8240 / 8245 */ | 209 | #define I2C_HW_MPC824X 0x100001 /* Motorola 8240 / 8245 */ |
| 262 | 210 | ||
| 263 | /* --- MPC8xx PowerPC adapters */ | 211 | /* --- MPC8xx PowerPC adapters */ |
| 264 | #define I2C_HW_MPC8XX_EPON 0x00 /* Eponymous MPC8xx I2C adapter */ | 212 | #define I2C_HW_MPC8XX_EPON 0x110000 /* Eponymous MPC8xx I2C adapter */ |
| 265 | 213 | ||
| 266 | /* --- ITE based algorithms */ | 214 | /* --- ITE based algorithms */ |
| 267 | #define I2C_HW_I_IIC 0x00 /* controller on the ITE */ | 215 | #define I2C_HW_I_IIC 0x080000 /* controller on the ITE */ |
| 268 | 216 | ||
| 269 | /* --- PowerPC on-chip adapters */ | 217 | /* --- PowerPC on-chip adapters */ |
| 270 | #define I2C_HW_OCP 0x00 /* IBM on-chip I2C adapter */ | 218 | #define I2C_HW_OCP 0x120000 /* IBM on-chip I2C adapter */ |
| 271 | 219 | ||
| 272 | /* --- Broadcom SiByte adapters */ | 220 | /* --- Broadcom SiByte adapters */ |
| 273 | #define I2C_HW_SIBYTE 0x00 | 221 | #define I2C_HW_SIBYTE 0x150000 |
| 274 | 222 | ||
| 275 | /* --- SGI adapters */ | 223 | /* --- SGI adapters */ |
| 276 | #define I2C_HW_SGI_VINO 0x00 | 224 | #define I2C_HW_SGI_VINO 0x160000 |
| 277 | #define I2C_HW_SGI_MACE 0x01 | 225 | #define I2C_HW_SGI_MACE 0x160001 |
| 278 | 226 | ||
| 279 | /* --- XSCALE on-chip adapters */ | 227 | /* --- XSCALE on-chip adapters */ |
| 280 | #define I2C_HW_IOP3XX 0x00 | 228 | #define I2C_HW_IOP3XX 0x140000 |
| 281 | 229 | ||
| 282 | /* --- Au1550 PSC adapters adapters */ | 230 | /* --- Au1550 PSC adapters adapters */ |
| 283 | #define I2C_HW_AU1550_PSC 0x00 | 231 | #define I2C_HW_AU1550_PSC 0x1b0000 |
| 284 | 232 | ||
| 285 | /* --- SMBus only adapters */ | 233 | /* --- SMBus only adapters */ |
| 286 | #define I2C_HW_SMBUS_PIIX4 0x00 | 234 | #define I2C_HW_SMBUS_PIIX4 0x040000 |
| 287 | #define I2C_HW_SMBUS_ALI15X3 0x01 | 235 | #define I2C_HW_SMBUS_ALI15X3 0x040001 |
| 288 | #define I2C_HW_SMBUS_VIA2 0x02 | 236 | #define I2C_HW_SMBUS_VIA2 0x040002 |
| 289 | #define I2C_HW_SMBUS_VOODOO3 0x03 | 237 | #define I2C_HW_SMBUS_VOODOO3 0x040003 |
| 290 | #define I2C_HW_SMBUS_I801 0x04 | 238 | #define I2C_HW_SMBUS_I801 0x040004 |
| 291 | #define I2C_HW_SMBUS_AMD756 0x05 | 239 | #define I2C_HW_SMBUS_AMD756 0x040005 |
| 292 | #define I2C_HW_SMBUS_SIS5595 0x06 | 240 | #define I2C_HW_SMBUS_SIS5595 0x040006 |
| 293 | #define I2C_HW_SMBUS_ALI1535 0x07 | 241 | #define I2C_HW_SMBUS_ALI1535 0x040007 |
| 294 | #define I2C_HW_SMBUS_SIS630 0x08 | 242 | #define I2C_HW_SMBUS_SIS630 0x040008 |
| 295 | #define I2C_HW_SMBUS_SIS96X 0x09 | 243 | #define I2C_HW_SMBUS_SIS96X 0x040009 |
| 296 | #define I2C_HW_SMBUS_AMD8111 0x0a | 244 | #define I2C_HW_SMBUS_AMD8111 0x04000a |
| 297 | #define I2C_HW_SMBUS_SCX200 0x0b | 245 | #define I2C_HW_SMBUS_SCX200 0x04000b |
| 298 | #define I2C_HW_SMBUS_NFORCE2 0x0c | 246 | #define I2C_HW_SMBUS_NFORCE2 0x04000c |
| 299 | #define I2C_HW_SMBUS_W9968CF 0x0d | 247 | #define I2C_HW_SMBUS_W9968CF 0x04000d |
| 300 | #define I2C_HW_SMBUS_OV511 0x0e /* OV511(+) USB 1.1 webcam ICs */ | 248 | #define I2C_HW_SMBUS_OV511 0x04000e /* OV511(+) USB 1.1 webcam ICs */ |
| 301 | #define I2C_HW_SMBUS_OV518 0x0f /* OV518(+) USB 1.1 webcam ICs */ | 249 | #define I2C_HW_SMBUS_OV518 0x04000f /* OV518(+) USB 1.1 webcam ICs */ |
| 302 | #define I2C_HW_SMBUS_OV519 0x10 /* OV519 USB 1.1 webcam IC */ | 250 | #define I2C_HW_SMBUS_OV519 0x040010 /* OV519 USB 1.1 webcam IC */ |
| 303 | #define I2C_HW_SMBUS_OVFX2 0x11 /* Cypress/OmniVision FX2 webcam */ | 251 | #define I2C_HW_SMBUS_OVFX2 0x040011 /* Cypress/OmniVision FX2 webcam */ |
| 304 | 252 | ||
| 305 | /* --- ISA pseudo-adapter */ | 253 | /* --- ISA pseudo-adapter */ |
| 306 | #define I2C_HW_ISA 0x00 | 254 | #define I2C_HW_ISA 0x050000 |
| 307 | 255 | ||
| 308 | /* --- IPMI pseudo-adapter */ | 256 | /* --- IPMI pseudo-adapter */ |
| 309 | #define I2C_HW_IPMI 0x00 | 257 | #define I2C_HW_IPMI 0x0b0000 |
| 310 | 258 | ||
| 311 | /* --- IPMB adapter */ | 259 | /* --- IPMB adapter */ |
| 312 | #define I2C_HW_IPMB 0x00 | 260 | #define I2C_HW_IPMB 0x0c0000 |
| 313 | 261 | ||
| 314 | /* --- MCP107 adapter */ | 262 | /* --- MCP107 adapter */ |
| 315 | #define I2C_HW_MPC107 0x00 | 263 | #define I2C_HW_MPC107 0x0d0000 |
| 316 | 264 | ||
| 317 | /* --- Marvell mv64xxx i2c adapter */ | 265 | /* --- Marvell mv64xxx i2c adapter */ |
| 318 | #define I2C_HW_MV64XXX 0x00 | 266 | #define I2C_HW_MV64XXX 0x190000 |
| 267 | |||
| 268 | /* --- Miscellaneous adapters */ | ||
| 269 | #define I2C_HW_SAA7146 0x060000 /* SAA7146 video decoder bus */ | ||
| 270 | #define I2C_HW_SAA7134 0x090000 /* SAA7134 video decoder bus */ | ||
| 319 | 271 | ||
| 320 | #endif /* LINUX_I2C_ID_H */ | 272 | #endif /* LINUX_I2C_ID_H */ |
diff --git a/include/linux/i2c-isa.h b/include/linux/i2c-isa.h new file mode 100644 index 000000000000..67e3598c4cec --- /dev/null +++ b/include/linux/i2c-isa.h | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | /* | ||
| 2 | * i2c-isa.h - definitions for the i2c-isa pseudo-i2c-adapter interface | ||
| 3 | * | ||
| 4 | * Copyright (C) 2005 Jean Delvare <khali@linux-fr.org> | ||
| 5 | * | ||
| 6 | * This program is free software; you can redistribute it and/or modify | ||
| 7 | * it under the terms of the GNU General Public License as published by | ||
| 8 | * the Free Software Foundation; either version 2 of the License, or | ||
| 9 | * (at your option) any later version. | ||
| 10 | * | ||
| 11 | * This program is distributed in the hope that it will be useful, | ||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 14 | * GNU General Public License for more details. | ||
| 15 | * | ||
| 16 | * You should have received a copy of the GNU General Public License | ||
| 17 | * along with this program; if not, write to the Free Software | ||
| 18 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 19 | */ | ||
| 20 | |||
| 21 | #ifndef _LINUX_I2C_ISA_H | ||
| 22 | #define _LINUX_I2C_ISA_H | ||
| 23 | |||
| 24 | #include <linux/i2c.h> | ||
| 25 | |||
| 26 | extern int i2c_isa_add_driver(struct i2c_driver *driver); | ||
| 27 | extern int i2c_isa_del_driver(struct i2c_driver *driver); | ||
| 28 | |||
| 29 | /* Detect whether we are on the isa bus. This is only useful to hybrid | ||
| 30 | (i2c+isa) drivers. */ | ||
| 31 | #define i2c_is_isa_adapter(adapptr) \ | ||
| 32 | ((adapptr)->id == I2C_HW_ISA) | ||
| 33 | #define i2c_is_isa_client(clientptr) \ | ||
| 34 | i2c_is_isa_adapter((clientptr)->adapter) | ||
| 35 | |||
| 36 | #endif /* _LINUX_I2C_ISA_H */ | ||
diff --git a/include/linux/i2c-sensor.h b/include/linux/i2c-sensor.h deleted file mode 100644 index 21b625204956..000000000000 --- a/include/linux/i2c-sensor.h +++ /dev/null | |||
| @@ -1,263 +0,0 @@ | |||
| 1 | /* | ||
| 2 | i2c-sensor.h - Part of the i2c package | ||
| 3 | was originally sensors.h - Part of lm_sensors, Linux kernel modules | ||
| 4 | for hardware monitoring | ||
| 5 | Copyright (c) 1998, 1999 Frodo Looijaard <frodol@dds.nl> | ||
| 6 | |||
| 7 | This program is free software; you can redistribute it and/or modify | ||
| 8 | it under the terms of the GNU General Public License as published by | ||
| 9 | the Free Software Foundation; either version 2 of the License, or | ||
| 10 | (at your option) any later version. | ||
| 11 | |||
| 12 | This program is distributed in the hope that it will be useful, | ||
| 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | GNU General Public License for more details. | ||
| 16 | |||
| 17 | You should have received a copy of the GNU General Public License | ||
| 18 | along with this program; if not, write to the Free Software | ||
| 19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 20 | */ | ||
| 21 | |||
| 22 | #ifndef _LINUX_I2C_SENSOR_H | ||
| 23 | #define _LINUX_I2C_SENSOR_H | ||
| 24 | |||
| 25 | /* A structure containing detect information. | ||
| 26 | Force variables overrule all other variables; they force a detection on | ||
| 27 | that place. If a specific chip is given, the module blindly assumes this | ||
| 28 | chip type is present; if a general force (kind == 0) is given, the module | ||
| 29 | will still try to figure out what type of chip is present. This is useful | ||
| 30 | if for some reasons the detect for SMBus or ISA address space filled | ||
| 31 | fails. | ||
| 32 | probe: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values. | ||
| 33 | A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for | ||
| 34 | the ISA bus, -1 for any I2C bus), the second is the address. | ||
| 35 | kind: The kind of chip. 0 equals any chip. | ||
| 36 | */ | ||
| 37 | struct i2c_force_data { | ||
| 38 | unsigned short *force; | ||
| 39 | unsigned short kind; | ||
| 40 | }; | ||
| 41 | |||
| 42 | /* A structure containing the detect information. | ||
| 43 | normal_i2c: filled in by the module writer. Terminated by I2C_CLIENT_ISA_END. | ||
| 44 | A list of I2C addresses which should normally be examined. | ||
| 45 | normal_isa: filled in by the module writer. Terminated by SENSORS_ISA_END. | ||
| 46 | A list of ISA addresses which should normally be examined. | ||
| 47 | probe: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values. | ||
| 48 | A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for | ||
| 49 | the ISA bus, -1 for any I2C bus), the second is the address. These | ||
| 50 | addresses are also probed, as if they were in the 'normal' list. | ||
| 51 | ignore: insmod parameter. Initialize this list with I2C_CLIENT_ISA_END values. | ||
| 52 | A list of pairs. The first value is a bus number (ANY_I2C_ISA_BUS for | ||
| 53 | the ISA bus, -1 for any I2C bus), the second is the I2C address. These | ||
| 54 | addresses are never probed. This parameter overrules 'normal' and | ||
| 55 | 'probe', but not the 'force' lists. | ||
| 56 | force_data: insmod parameters. A list, ending with an element of which | ||
| 57 | the force field is NULL. | ||
| 58 | */ | ||
| 59 | struct i2c_address_data { | ||
| 60 | unsigned short *normal_i2c; | ||
| 61 | unsigned int *normal_isa; | ||
| 62 | unsigned short *probe; | ||
| 63 | unsigned short *ignore; | ||
| 64 | struct i2c_force_data *forces; | ||
| 65 | }; | ||
| 66 | |||
| 67 | #define SENSORS_MODULE_PARM_FORCE(name) \ | ||
| 68 | I2C_CLIENT_MODULE_PARM(force_ ## name, \ | ||
| 69 | "List of adapter,address pairs which are unquestionably" \ | ||
| 70 | " assumed to contain a `" # name "' chip") | ||
| 71 | |||
| 72 | |||
| 73 | /* This defines several insmod variables, and the addr_data structure */ | ||
| 74 | #define SENSORS_INSMOD \ | ||
| 75 | I2C_CLIENT_MODULE_PARM(probe, \ | ||
| 76 | "List of adapter,address pairs to scan additionally"); \ | ||
| 77 | I2C_CLIENT_MODULE_PARM(ignore, \ | ||
| 78 | "List of adapter,address pairs not to scan"); \ | ||
| 79 | static struct i2c_address_data addr_data = { \ | ||
| 80 | .normal_i2c = normal_i2c, \ | ||
| 81 | .normal_isa = normal_isa, \ | ||
| 82 | .probe = probe, \ | ||
| 83 | .ignore = ignore, \ | ||
| 84 | .forces = forces, \ | ||
| 85 | } | ||
| 86 | |||
| 87 | /* The following functions create an enum with the chip names as elements. | ||
| 88 | The first element of the enum is any_chip. These are the only macros | ||
| 89 | a module will want to use. */ | ||
| 90 | |||
| 91 | #define SENSORS_INSMOD_0 \ | ||
| 92 | enum chips { any_chip }; \ | ||
| 93 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 94 | "List of adapter,address pairs to boldly assume " \ | ||
| 95 | "to be present"); \ | ||
| 96 | static struct i2c_force_data forces[] = {{force,any_chip},{NULL}}; \ | ||
| 97 | SENSORS_INSMOD | ||
| 98 | |||
| 99 | #define SENSORS_INSMOD_1(chip1) \ | ||
| 100 | enum chips { any_chip, chip1 }; \ | ||
| 101 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 102 | "List of adapter,address pairs to boldly assume " \ | ||
| 103 | "to be present"); \ | ||
| 104 | SENSORS_MODULE_PARM_FORCE(chip1); \ | ||
| 105 | static struct i2c_force_data forces[] = {{force,any_chip},\ | ||
| 106 | {force_ ## chip1,chip1}, \ | ||
| 107 | {NULL}}; \ | ||
| 108 | SENSORS_INSMOD | ||
| 109 | |||
| 110 | #define SENSORS_INSMOD_2(chip1,chip2) \ | ||
| 111 | enum chips { any_chip, chip1, chip2 }; \ | ||
| 112 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 113 | "List of adapter,address pairs to boldly assume " \ | ||
| 114 | "to be present"); \ | ||
| 115 | SENSORS_MODULE_PARM_FORCE(chip1); \ | ||
| 116 | SENSORS_MODULE_PARM_FORCE(chip2); \ | ||
| 117 | static struct i2c_force_data forces[] = {{force,any_chip}, \ | ||
| 118 | {force_ ## chip1,chip1}, \ | ||
| 119 | {force_ ## chip2,chip2}, \ | ||
| 120 | {NULL}}; \ | ||
| 121 | SENSORS_INSMOD | ||
| 122 | |||
| 123 | #define SENSORS_INSMOD_3(chip1,chip2,chip3) \ | ||
| 124 | enum chips { any_chip, chip1, chip2, chip3 }; \ | ||
| 125 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 126 | "List of adapter,address pairs to boldly assume " \ | ||
| 127 | "to be present"); \ | ||
| 128 | SENSORS_MODULE_PARM_FORCE(chip1); \ | ||
| 129 | SENSORS_MODULE_PARM_FORCE(chip2); \ | ||
| 130 | SENSORS_MODULE_PARM_FORCE(chip3); \ | ||
| 131 | static struct i2c_force_data forces[] = {{force,any_chip}, \ | ||
| 132 | {force_ ## chip1,chip1}, \ | ||
| 133 | {force_ ## chip2,chip2}, \ | ||
| 134 | {force_ ## chip3,chip3}, \ | ||
| 135 | {NULL}}; \ | ||
| 136 | SENSORS_INSMOD | ||
| 137 | |||
| 138 | #define SENSORS_INSMOD_4(chip1,chip2,chip3,chip4) \ | ||
| 139 | enum chips { any_chip, chip1, chip2, chip3, chip4 }; \ | ||
| 140 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 141 | "List of adapter,address pairs to boldly assume " \ | ||
| 142 | "to be present"); \ | ||
| 143 | SENSORS_MODULE_PARM_FORCE(chip1); \ | ||
| 144 | SENSORS_MODULE_PARM_FORCE(chip2); \ | ||
| 145 | SENSORS_MODULE_PARM_FORCE(chip3); \ | ||
| 146 | SENSORS_MODULE_PARM_FORCE(chip4); \ | ||
| 147 | static struct i2c_force_data forces[] = {{force,any_chip}, \ | ||
| 148 | {force_ ## chip1,chip1}, \ | ||
| 149 | {force_ ## chip2,chip2}, \ | ||
| 150 | {force_ ## chip3,chip3}, \ | ||
| 151 | {force_ ## chip4,chip4}, \ | ||
| 152 | {NULL}}; \ | ||
| 153 | SENSORS_INSMOD | ||
| 154 | |||
| 155 | #define SENSORS_INSMOD_5(chip1,chip2,chip3,chip4,chip5) \ | ||
| 156 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \ | ||
| 157 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 158 | "List of adapter,address pairs to boldly assume " \ | ||
| 159 | "to be present"); \ | ||
| 160 | SENSORS_MODULE_PARM_FORCE(chip1); \ | ||
| 161 | SENSORS_MODULE_PARM_FORCE(chip2); \ | ||
| 162 | SENSORS_MODULE_PARM_FORCE(chip3); \ | ||
| 163 | SENSORS_MODULE_PARM_FORCE(chip4); \ | ||
| 164 | SENSORS_MODULE_PARM_FORCE(chip5); \ | ||
| 165 | static struct i2c_force_data forces[] = {{force,any_chip}, \ | ||
| 166 | {force_ ## chip1,chip1}, \ | ||
| 167 | {force_ ## chip2,chip2}, \ | ||
| 168 | {force_ ## chip3,chip3}, \ | ||
| 169 | {force_ ## chip4,chip4}, \ | ||
| 170 | {force_ ## chip5,chip5}, \ | ||
| 171 | {NULL}}; \ | ||
| 172 | SENSORS_INSMOD | ||
| 173 | |||
| 174 | #define SENSORS_INSMOD_6(chip1,chip2,chip3,chip4,chip5,chip6) \ | ||
| 175 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \ | ||
| 176 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 177 | "List of adapter,address pairs to boldly assume " \ | ||
| 178 | "to be present"); \ | ||
| 179 | SENSORS_MODULE_PARM_FORCE(chip1); \ | ||
| 180 | SENSORS_MODULE_PARM_FORCE(chip2); \ | ||
| 181 | SENSORS_MODULE_PARM_FORCE(chip3); \ | ||
| 182 | SENSORS_MODULE_PARM_FORCE(chip4); \ | ||
| 183 | SENSORS_MODULE_PARM_FORCE(chip5); \ | ||
| 184 | SENSORS_MODULE_PARM_FORCE(chip6); \ | ||
| 185 | static struct i2c_force_data forces[] = {{force,any_chip}, \ | ||
| 186 | {force_ ## chip1,chip1}, \ | ||
| 187 | {force_ ## chip2,chip2}, \ | ||
| 188 | {force_ ## chip3,chip3}, \ | ||
| 189 | {force_ ## chip4,chip4}, \ | ||
| 190 | {force_ ## chip5,chip5}, \ | ||
| 191 | {force_ ## chip6,chip6}, \ | ||
| 192 | {NULL}}; \ | ||
| 193 | SENSORS_INSMOD | ||
| 194 | |||
| 195 | #define SENSORS_INSMOD_7(chip1,chip2,chip3,chip4,chip5,chip6,chip7) \ | ||
| 196 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, chip7 }; \ | ||
| 197 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 198 | "List of adapter,address pairs to boldly assume " \ | ||
| 199 | "to be present"); \ | ||
| 200 | SENSORS_MODULE_PARM_FORCE(chip1); \ | ||
| 201 | SENSORS_MODULE_PARM_FORCE(chip2); \ | ||
| 202 | SENSORS_MODULE_PARM_FORCE(chip3); \ | ||
| 203 | SENSORS_MODULE_PARM_FORCE(chip4); \ | ||
| 204 | SENSORS_MODULE_PARM_FORCE(chip5); \ | ||
| 205 | SENSORS_MODULE_PARM_FORCE(chip6); \ | ||
| 206 | SENSORS_MODULE_PARM_FORCE(chip7); \ | ||
| 207 | static struct i2c_force_data forces[] = {{force,any_chip}, \ | ||
| 208 | {force_ ## chip1,chip1}, \ | ||
| 209 | {force_ ## chip2,chip2}, \ | ||
| 210 | {force_ ## chip3,chip3}, \ | ||
| 211 | {force_ ## chip4,chip4}, \ | ||
| 212 | {force_ ## chip5,chip5}, \ | ||
| 213 | {force_ ## chip6,chip6}, \ | ||
| 214 | {force_ ## chip7,chip7}, \ | ||
| 215 | {NULL}}; \ | ||
| 216 | SENSORS_INSMOD | ||
| 217 | |||
| 218 | #define SENSORS_INSMOD_8(chip1,chip2,chip3,chip4,chip5,chip6,chip7,chip8) \ | ||
| 219 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8 }; \ | ||
| 220 | I2C_CLIENT_MODULE_PARM(force, \ | ||
| 221 | "List of adapter,address pairs to boldly assume " \ | ||
| 222 | "to be present"); \ | ||
| 223 | SENSORS_MODULE_PARM_FORCE(chip1); \ | ||
| 224 | SENSORS_MODULE_PARM_FORCE(chip2); \ | ||
| 225 | SENSORS_MODULE_PARM_FORCE(chip3); \ | ||
| 226 | SENSORS_MODULE_PARM_FORCE(chip4); \ | ||
| 227 | SENSORS_MODULE_PARM_FORCE(chip5); \ | ||
| 228 | SENSORS_MODULE_PARM_FORCE(chip6); \ | ||
| 229 | SENSORS_MODULE_PARM_FORCE(chip7); \ | ||
| 230 | SENSORS_MODULE_PARM_FORCE(chip8); \ | ||
| 231 | static struct i2c_force_data forces[] = {{force,any_chip}, \ | ||
| 232 | {force_ ## chip1,chip1}, \ | ||
| 233 | {force_ ## chip2,chip2}, \ | ||
| 234 | {force_ ## chip3,chip3}, \ | ||
| 235 | {force_ ## chip4,chip4}, \ | ||
| 236 | {force_ ## chip5,chip5}, \ | ||
| 237 | {force_ ## chip6,chip6}, \ | ||
| 238 | {force_ ## chip7,chip7}, \ | ||
| 239 | {force_ ## chip8,chip8}, \ | ||
| 240 | {NULL}}; \ | ||
| 241 | SENSORS_INSMOD | ||
| 242 | |||
| 243 | /* Detect function. It iterates over all possible addresses itself. For | ||
| 244 | SMBus addresses, it will only call found_proc if some client is connected | ||
| 245 | to the SMBus (unless a 'force' matched); for ISA detections, this is not | ||
| 246 | done. */ | ||
| 247 | extern int i2c_detect(struct i2c_adapter *adapter, | ||
| 248 | struct i2c_address_data *address_data, | ||
| 249 | int (*found_proc) (struct i2c_adapter *, int, int)); | ||
| 250 | |||
| 251 | |||
| 252 | /* This macro is used to scale user-input to sensible values in almost all | ||
| 253 | chip drivers. */ | ||
| 254 | static inline int SENSORS_LIMIT(long value, long low, long high) | ||
| 255 | { | ||
| 256 | if (value < low) | ||
| 257 | return low; | ||
| 258 | else if (value > high) | ||
| 259 | return high; | ||
| 260 | else | ||
| 261 | return value; | ||
| 262 | } | ||
| 263 | #endif /* def _LINUX_I2C_SENSOR_H */ | ||
diff --git a/include/linux/i2c-vid.h b/include/linux/i2c-vid.h deleted file mode 100644 index 41d0635e0ba9..000000000000 --- a/include/linux/i2c-vid.h +++ /dev/null | |||
| @@ -1,111 +0,0 @@ | |||
| 1 | /* | ||
| 2 | i2c-vid.h - Part of lm_sensors, Linux kernel modules for hardware | ||
| 3 | monitoring | ||
| 4 | Copyright (c) 2002 Mark D. Studebaker <mdsxyz123@yahoo.com> | ||
| 5 | With assistance from Trent Piepho <xyzzy@speakeasy.org> | ||
| 6 | |||
| 7 | This program is free software; you can redistribute it and/or modify | ||
| 8 | it under the terms of the GNU General Public License as published by | ||
| 9 | the Free Software Foundation; either version 2 of the License, or | ||
| 10 | (at your option) any later version. | ||
| 11 | |||
| 12 | This program is distributed in the hope that it will be useful, | ||
| 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 15 | GNU General Public License for more details. | ||
| 16 | |||
| 17 | You should have received a copy of the GNU General Public License | ||
| 18 | along with this program; if not, write to the Free Software | ||
| 19 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
| 20 | */ | ||
| 21 | |||
| 22 | /* | ||
| 23 | This file contains common code for decoding VID pins. | ||
| 24 | This file is #included in various chip drivers in this directory. | ||
| 25 | As the user is unlikely to load more than one driver which | ||
| 26 | includes this code we don't worry about the wasted space. | ||
| 27 | Reference: VRM x.y DC-DC Converter Design Guidelines, | ||
| 28 | available at http://developer.intel.com | ||
| 29 | */ | ||
| 30 | |||
| 31 | /* | ||
| 32 | AMD Opteron processors don't follow the Intel VRM spec. | ||
| 33 | I'm going to "make up" 2.4 as the VRM spec for the Opterons. | ||
| 34 | No good reason just a mnemonic for the 24x Opteron processor | ||
| 35 | series | ||
| 36 | |||
| 37 | Opteron VID encoding is: | ||
| 38 | |||
| 39 | 00000 = 1.550 V | ||
| 40 | 00001 = 1.525 V | ||
| 41 | . . . . | ||
| 42 | 11110 = 0.800 V | ||
| 43 | 11111 = 0.000 V (off) | ||
| 44 | */ | ||
| 45 | |||
| 46 | /* | ||
| 47 | Legal val values 0x00 - 0x1f; except for VRD 10.0, 0x00 - 0x3f. | ||
| 48 | vrm is the Intel VRM document version. | ||
| 49 | Note: vrm version is scaled by 10 and the return value is scaled by 1000 | ||
| 50 | to avoid floating point in the kernel. | ||
| 51 | */ | ||
| 52 | |||
| 53 | int i2c_which_vrm(void); | ||
| 54 | |||
| 55 | #define DEFAULT_VRM 82 | ||
| 56 | |||
| 57 | static inline int vid_from_reg(int val, int vrm) | ||
| 58 | { | ||
| 59 | int vid; | ||
| 60 | |||
| 61 | switch(vrm) { | ||
| 62 | |||
| 63 | case 0: | ||
| 64 | return 0; | ||
| 65 | |||
| 66 | case 100: /* VRD 10.0 */ | ||
| 67 | if((val & 0x1f) == 0x1f) | ||
| 68 | return 0; | ||
| 69 | if((val & 0x1f) <= 0x09 || val == 0x0a) | ||
| 70 | vid = 10875 - (val & 0x1f) * 250; | ||
| 71 | else | ||
| 72 | vid = 18625 - (val & 0x1f) * 250; | ||
| 73 | if(val & 0x20) | ||
| 74 | vid -= 125; | ||
| 75 | vid /= 10; /* only return 3 dec. places for now */ | ||
| 76 | return vid; | ||
| 77 | |||
| 78 | case 24: /* Opteron processor */ | ||
| 79 | return(val == 0x1f ? 0 : 1550 - val * 25); | ||
| 80 | |||
| 81 | case 91: /* VRM 9.1 */ | ||
| 82 | case 90: /* VRM 9.0 */ | ||
| 83 | return(val == 0x1f ? 0 : | ||
| 84 | 1850 - val * 25); | ||
| 85 | |||
| 86 | case 85: /* VRM 8.5 */ | ||
| 87 | return((val & 0x10 ? 25 : 0) + | ||
| 88 | ((val & 0x0f) > 0x04 ? 2050 : 1250) - | ||
| 89 | ((val & 0x0f) * 50)); | ||
| 90 | |||
| 91 | case 84: /* VRM 8.4 */ | ||
| 92 | val &= 0x0f; | ||
| 93 | /* fall through */ | ||
| 94 | default: /* VRM 8.2 */ | ||
| 95 | return(val == 0x1f ? 0 : | ||
| 96 | val & 0x10 ? 5100 - (val) * 100 : | ||
| 97 | 2050 - (val) * 50); | ||
| 98 | } | ||
| 99 | } | ||
| 100 | |||
| 101 | static inline int vid_to_reg(int val, int vrm) | ||
| 102 | { | ||
| 103 | switch (vrm) { | ||
| 104 | case 91: /* VRM 9.1 */ | ||
| 105 | case 90: /* VRM 9.0 */ | ||
| 106 | return ((val >= 1100) && (val <= 1850) ? | ||
| 107 | ((18499 - val * 10) / 25 + 5) / 10 : -1); | ||
| 108 | default: | ||
| 109 | return -1; | ||
| 110 | } | ||
| 111 | } | ||
diff --git a/include/linux/i2c.h b/include/linux/i2c.h index be837b13f297..be35332b67e6 100644 --- a/include/linux/i2c.h +++ b/include/linux/i2c.h | |||
| @@ -34,6 +34,13 @@ | |||
| 34 | #include <linux/device.h> /* for struct device */ | 34 | #include <linux/device.h> /* for struct device */ |
| 35 | #include <asm/semaphore.h> | 35 | #include <asm/semaphore.h> |
| 36 | 36 | ||
| 37 | /* --- For i2c-isa ---------------------------------------------------- */ | ||
| 38 | |||
| 39 | extern void i2c_adapter_dev_release(struct device *dev); | ||
| 40 | extern struct device_driver i2c_adapter_driver; | ||
| 41 | extern struct class i2c_adapter_class; | ||
| 42 | extern struct bus_type i2c_bus_type; | ||
| 43 | |||
| 37 | /* --- General options ------------------------------------------------ */ | 44 | /* --- General options ------------------------------------------------ */ |
| 38 | 45 | ||
| 39 | struct i2c_msg; | 46 | struct i2c_msg; |
| @@ -41,7 +48,6 @@ struct i2c_algorithm; | |||
| 41 | struct i2c_adapter; | 48 | struct i2c_adapter; |
| 42 | struct i2c_client; | 49 | struct i2c_client; |
| 43 | struct i2c_driver; | 50 | struct i2c_driver; |
| 44 | struct i2c_client_address_data; | ||
| 45 | union i2c_smbus_data; | 51 | union i2c_smbus_data; |
| 46 | 52 | ||
| 47 | /* | 53 | /* |
| @@ -143,12 +149,9 @@ struct i2c_driver { | |||
| 143 | */ | 149 | */ |
| 144 | struct i2c_client { | 150 | struct i2c_client { |
| 145 | unsigned int flags; /* div., see below */ | 151 | unsigned int flags; /* div., see below */ |
| 146 | unsigned int addr; /* chip address - NOTE: 7bit */ | 152 | unsigned short addr; /* chip address - NOTE: 7bit */ |
| 147 | /* addresses are stored in the */ | 153 | /* addresses are stored in the */ |
| 148 | /* _LOWER_ 7 bits of this char */ | 154 | /* _LOWER_ 7 bits */ |
| 149 | /* addr: unsigned int to make lm_sensors i2c-isa adapter work | ||
| 150 | more cleanly. It does not take any more memory space, due to | ||
| 151 | alignment considerations */ | ||
| 152 | struct i2c_adapter *adapter; /* the adapter we sit on */ | 155 | struct i2c_adapter *adapter; /* the adapter we sit on */ |
| 153 | struct i2c_driver *driver; /* and our access routines */ | 156 | struct i2c_driver *driver; /* and our access routines */ |
| 154 | int usage_count; /* How many accesses currently */ | 157 | int usage_count; /* How many accesses currently */ |
| @@ -160,6 +163,11 @@ struct i2c_client { | |||
| 160 | }; | 163 | }; |
| 161 | #define to_i2c_client(d) container_of(d, struct i2c_client, dev) | 164 | #define to_i2c_client(d) container_of(d, struct i2c_client, dev) |
| 162 | 165 | ||
| 166 | static inline struct i2c_client *kobj_to_i2c_client(struct kobject *kobj) | ||
| 167 | { | ||
| 168 | return to_i2c_client(container_of(kobj, struct device, kobj)); | ||
| 169 | } | ||
| 170 | |||
| 163 | static inline void *i2c_get_clientdata (struct i2c_client *dev) | 171 | static inline void *i2c_get_clientdata (struct i2c_client *dev) |
| 164 | { | 172 | { |
| 165 | return dev_get_drvdata (&dev->dev); | 173 | return dev_get_drvdata (&dev->dev); |
| @@ -170,13 +178,6 @@ static inline void i2c_set_clientdata (struct i2c_client *dev, void *data) | |||
| 170 | dev_set_drvdata (&dev->dev, data); | 178 | dev_set_drvdata (&dev->dev, data); |
| 171 | } | 179 | } |
| 172 | 180 | ||
| 173 | #define I2C_DEVNAME(str) .name = str | ||
| 174 | |||
| 175 | static inline char *i2c_clientname(struct i2c_client *c) | ||
| 176 | { | ||
| 177 | return &c->name[0]; | ||
| 178 | } | ||
| 179 | |||
| 180 | /* | 181 | /* |
| 181 | * The following structs are for those who like to implement new bus drivers: | 182 | * The following structs are for those who like to implement new bus drivers: |
| 182 | * i2c_algorithm is the interface to a class of hardware solutions which can | 183 | * i2c_algorithm is the interface to a class of hardware solutions which can |
| @@ -184,9 +185,6 @@ static inline char *i2c_clientname(struct i2c_client *c) | |||
| 184 | * to name two of the most common. | 185 | * to name two of the most common. |
| 185 | */ | 186 | */ |
| 186 | struct i2c_algorithm { | 187 | struct i2c_algorithm { |
| 187 | char name[32]; /* textual description */ | ||
| 188 | unsigned int id; | ||
| 189 | |||
| 190 | /* If an adapter algorithm can't do I2C-level access, set master_xfer | 188 | /* If an adapter algorithm can't do I2C-level access, set master_xfer |
| 191 | to NULL. If an adapter algorithm can do SMBus access, set | 189 | to NULL. If an adapter algorithm can do SMBus access, set |
| 192 | smbus_xfer. If set to NULL, the SMBus protocol is simulated | 190 | smbus_xfer. If set to NULL, the SMBus protocol is simulated |
| @@ -214,8 +212,7 @@ struct i2c_algorithm { | |||
| 214 | */ | 212 | */ |
| 215 | struct i2c_adapter { | 213 | struct i2c_adapter { |
| 216 | struct module *owner; | 214 | struct module *owner; |
| 217 | unsigned int id;/* == is algo->id | hwdep.struct->id, */ | 215 | unsigned int id; |
| 218 | /* for registered values see below */ | ||
| 219 | unsigned int class; | 216 | unsigned int class; |
| 220 | struct i2c_algorithm *algo;/* the algorithm to access the bus */ | 217 | struct i2c_algorithm *algo;/* the algorithm to access the bus */ |
| 221 | void *algo_data; | 218 | void *algo_data; |
| @@ -292,12 +289,11 @@ struct i2c_client_address_data { | |||
| 292 | unsigned short *normal_i2c; | 289 | unsigned short *normal_i2c; |
| 293 | unsigned short *probe; | 290 | unsigned short *probe; |
| 294 | unsigned short *ignore; | 291 | unsigned short *ignore; |
| 295 | unsigned short *force; | 292 | unsigned short **forces; |
| 296 | }; | 293 | }; |
| 297 | 294 | ||
| 298 | /* Internal numbers to terminate lists */ | 295 | /* Internal numbers to terminate lists */ |
| 299 | #define I2C_CLIENT_END 0xfffeU | 296 | #define I2C_CLIENT_END 0xfffeU |
| 300 | #define I2C_CLIENT_ISA_END 0xfffefffeU | ||
| 301 | 297 | ||
| 302 | /* The numbers to use to set I2C bus address */ | 298 | /* The numbers to use to set I2C bus address */ |
| 303 | #define ANY_I2C_BUS 0xffff | 299 | #define ANY_I2C_BUS 0xffff |
| @@ -356,10 +352,6 @@ extern int i2c_probe(struct i2c_adapter *adapter, | |||
| 356 | */ | 352 | */ |
| 357 | extern int i2c_control(struct i2c_client *,unsigned int, unsigned long); | 353 | extern int i2c_control(struct i2c_client *,unsigned int, unsigned long); |
| 358 | 354 | ||
| 359 | /* This call returns a unique low identifier for each registered adapter, | ||
| 360 | * or -1 if the adapter was not registered. | ||
| 361 | */ | ||
| 362 | extern int i2c_adapter_id(struct i2c_adapter *adap); | ||
| 363 | extern struct i2c_adapter* i2c_get_adapter(int id); | 355 | extern struct i2c_adapter* i2c_get_adapter(int id); |
| 364 | extern void i2c_put_adapter(struct i2c_adapter *adap); | 356 | extern void i2c_put_adapter(struct i2c_adapter *adap); |
| 365 | 357 | ||
| @@ -376,6 +368,12 @@ static inline int i2c_check_functionality(struct i2c_adapter *adap, u32 func) | |||
| 376 | return (func & i2c_get_functionality(adap)) == func; | 368 | return (func & i2c_get_functionality(adap)) == func; |
| 377 | } | 369 | } |
| 378 | 370 | ||
| 371 | /* Return id number for a specific adapter */ | ||
| 372 | static inline int i2c_adapter_id(struct i2c_adapter *adap) | ||
| 373 | { | ||
| 374 | return adap->nr; | ||
| 375 | } | ||
| 376 | |||
| 379 | /* | 377 | /* |
| 380 | * I2C Message - used for pure i2c transaction, also from /dev interface | 378 | * I2C Message - used for pure i2c transaction, also from /dev interface |
| 381 | */ | 379 | */ |
| @@ -510,9 +508,6 @@ union i2c_smbus_data { | |||
| 510 | #define I2C_FUNCS 0x0705 /* Get the adapter functionality */ | 508 | #define I2C_FUNCS 0x0705 /* Get the adapter functionality */ |
| 511 | #define I2C_RDWR 0x0707 /* Combined R/W transfer (one stop only)*/ | 509 | #define I2C_RDWR 0x0707 /* Combined R/W transfer (one stop only)*/ |
| 512 | #define I2C_PEC 0x0708 /* != 0 for SMBus PEC */ | 510 | #define I2C_PEC 0x0708 /* != 0 for SMBus PEC */ |
| 513 | #if 0 | ||
| 514 | #define I2C_ACK_TEST 0x0710 /* See if a slave is at a specific address */ | ||
| 515 | #endif | ||
| 516 | 511 | ||
| 517 | #define I2C_SMBUS 0x0720 /* SMBus-level access */ | 512 | #define I2C_SMBUS 0x0720 /* SMBus-level access */ |
| 518 | 513 | ||
| @@ -556,27 +551,148 @@ union i2c_smbus_data { | |||
| 556 | module_param_array(var, short, &var##_num, 0); \ | 551 | module_param_array(var, short, &var##_num, 0); \ |
| 557 | MODULE_PARM_DESC(var,desc) | 552 | MODULE_PARM_DESC(var,desc) |
| 558 | 553 | ||
| 559 | /* This is the one you want to use in your own modules */ | 554 | #define I2C_CLIENT_MODULE_PARM_FORCE(name) \ |
| 555 | I2C_CLIENT_MODULE_PARM(force_##name, \ | ||
| 556 | "List of adapter,address pairs which are " \ | ||
| 557 | "unquestionably assumed to contain a `" \ | ||
| 558 | # name "' chip") | ||
| 559 | |||
| 560 | |||
| 561 | #define I2C_CLIENT_INSMOD_COMMON \ | ||
| 562 | I2C_CLIENT_MODULE_PARM(probe, "List of adapter,address pairs to scan " \ | ||
| 563 | "additionally"); \ | ||
| 564 | I2C_CLIENT_MODULE_PARM(ignore, "List of adapter,address pairs not to " \ | ||
| 565 | "scan"); \ | ||
| 566 | static struct i2c_client_address_data addr_data = { \ | ||
| 567 | .normal_i2c = normal_i2c, \ | ||
| 568 | .probe = probe, \ | ||
| 569 | .ignore = ignore, \ | ||
| 570 | .forces = forces, \ | ||
| 571 | } | ||
| 572 | |||
| 573 | /* These are the ones you want to use in your own drivers. Pick the one | ||
| 574 | which matches the number of devices the driver differenciates between. */ | ||
| 560 | #define I2C_CLIENT_INSMOD \ | 575 | #define I2C_CLIENT_INSMOD \ |
| 561 | I2C_CLIENT_MODULE_PARM(probe, \ | ||
| 562 | "List of adapter,address pairs to scan additionally"); \ | ||
| 563 | I2C_CLIENT_MODULE_PARM(ignore, \ | ||
| 564 | "List of adapter,address pairs not to scan"); \ | ||
| 565 | I2C_CLIENT_MODULE_PARM(force, \ | 576 | I2C_CLIENT_MODULE_PARM(force, \ |
| 566 | "List of adapter,address pairs to boldly assume " \ | 577 | "List of adapter,address pairs to boldly assume " \ |
| 567 | "to be present"); \ | 578 | "to be present"); \ |
| 568 | static struct i2c_client_address_data addr_data = { \ | 579 | static unsigned short *forces[] = { \ |
| 569 | .normal_i2c = normal_i2c, \ | 580 | force, \ |
| 570 | .probe = probe, \ | 581 | NULL \ |
| 571 | .ignore = ignore, \ | 582 | }; \ |
| 572 | .force = force, \ | 583 | I2C_CLIENT_INSMOD_COMMON |
| 573 | } | 584 | |
| 574 | 585 | #define I2C_CLIENT_INSMOD_1(chip1) \ | |
| 575 | /* Detect whether we are on the isa bus. If this returns true, all i2c | 586 | enum chips { any_chip, chip1 }; \ |
| 576 | access will fail! */ | 587 | I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \ |
| 577 | #define i2c_is_isa_client(clientptr) \ | 588 | "boldly assume to be present"); \ |
| 578 | ((clientptr)->adapter->algo->id == I2C_ALGO_ISA) | 589 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ |
| 579 | #define i2c_is_isa_adapter(adapptr) \ | 590 | static unsigned short *forces[] = { force, force_##chip1, NULL }; \ |
| 580 | ((adapptr)->algo->id == I2C_ALGO_ISA) | 591 | I2C_CLIENT_INSMOD_COMMON |
| 592 | |||
| 593 | #define I2C_CLIENT_INSMOD_2(chip1, chip2) \ | ||
| 594 | enum chips { any_chip, chip1, chip2 }; \ | ||
| 595 | I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \ | ||
| 596 | "boldly assume to be present"); \ | ||
| 597 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 598 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 599 | static unsigned short *forces[] = { force, force_##chip1, \ | ||
| 600 | force_##chip2, NULL }; \ | ||
| 601 | I2C_CLIENT_INSMOD_COMMON | ||
| 602 | |||
| 603 | #define I2C_CLIENT_INSMOD_3(chip1, chip2, chip3) \ | ||
| 604 | enum chips { any_chip, chip1, chip2, chip3 }; \ | ||
| 605 | I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \ | ||
| 606 | "boldly assume to be present"); \ | ||
| 607 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 608 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 609 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 610 | static unsigned short *forces[] = { force, force_##chip1, \ | ||
| 611 | force_##chip2, force_##chip3, \ | ||
| 612 | NULL }; \ | ||
| 613 | I2C_CLIENT_INSMOD_COMMON | ||
| 614 | |||
| 615 | #define I2C_CLIENT_INSMOD_4(chip1, chip2, chip3, chip4) \ | ||
| 616 | enum chips { any_chip, chip1, chip2, chip3, chip4 }; \ | ||
| 617 | I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \ | ||
| 618 | "boldly assume to be present"); \ | ||
| 619 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 620 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 621 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 622 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 623 | static unsigned short *forces[] = { force, force_##chip1, \ | ||
| 624 | force_##chip2, force_##chip3, \ | ||
| 625 | force_##chip4, NULL}; \ | ||
| 626 | I2C_CLIENT_INSMOD_COMMON | ||
| 627 | |||
| 628 | #define I2C_CLIENT_INSMOD_5(chip1, chip2, chip3, chip4, chip5) \ | ||
| 629 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \ | ||
| 630 | I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \ | ||
| 631 | "boldly assume to be present"); \ | ||
| 632 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 633 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 634 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 635 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 636 | I2C_CLIENT_MODULE_PARM_FORCE(chip5); \ | ||
| 637 | static unsigned short *forces[] = { force, force_##chip1, \ | ||
| 638 | force_##chip2, force_##chip3, \ | ||
| 639 | force_##chip4, force_##chip5, \ | ||
| 640 | NULL }; \ | ||
| 641 | I2C_CLIENT_INSMOD_COMMON | ||
| 642 | |||
| 643 | #define I2C_CLIENT_INSMOD_6(chip1, chip2, chip3, chip4, chip5, chip6) \ | ||
| 644 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \ | ||
| 645 | I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \ | ||
| 646 | "boldly assume to be present"); \ | ||
| 647 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 648 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 649 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 650 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 651 | I2C_CLIENT_MODULE_PARM_FORCE(chip5); \ | ||
| 652 | I2C_CLIENT_MODULE_PARM_FORCE(chip6); \ | ||
| 653 | static unsigned short *forces[] = { force, force_##chip1, \ | ||
| 654 | force_##chip2, force_##chip3, \ | ||
| 655 | force_##chip4, force_##chip5, \ | ||
| 656 | force_##chip6, NULL }; \ | ||
| 657 | I2C_CLIENT_INSMOD_COMMON | ||
| 658 | |||
| 659 | #define I2C_CLIENT_INSMOD_7(chip1, chip2, chip3, chip4, chip5, chip6, chip7) \ | ||
| 660 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \ | ||
| 661 | chip7 }; \ | ||
| 662 | I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \ | ||
| 663 | "boldly assume to be present"); \ | ||
| 664 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 665 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 666 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 667 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 668 | I2C_CLIENT_MODULE_PARM_FORCE(chip5); \ | ||
| 669 | I2C_CLIENT_MODULE_PARM_FORCE(chip6); \ | ||
| 670 | I2C_CLIENT_MODULE_PARM_FORCE(chip7); \ | ||
| 671 | static unsigned short *forces[] = { force, force_##chip1, \ | ||
| 672 | force_##chip2, force_##chip3, \ | ||
| 673 | force_##chip4, force_##chip5, \ | ||
| 674 | force_##chip6, force_##chip7, \ | ||
| 675 | NULL }; \ | ||
| 676 | I2C_CLIENT_INSMOD_COMMON | ||
| 677 | |||
| 678 | #define I2C_CLIENT_INSMOD_8(chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8) \ | ||
| 679 | enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, \ | ||
| 680 | chip7, chip8 }; \ | ||
| 681 | I2C_CLIENT_MODULE_PARM(force, "List of adapter,address pairs to " \ | ||
| 682 | "boldly assume to be present"); \ | ||
| 683 | I2C_CLIENT_MODULE_PARM_FORCE(chip1); \ | ||
| 684 | I2C_CLIENT_MODULE_PARM_FORCE(chip2); \ | ||
| 685 | I2C_CLIENT_MODULE_PARM_FORCE(chip3); \ | ||
| 686 | I2C_CLIENT_MODULE_PARM_FORCE(chip4); \ | ||
| 687 | I2C_CLIENT_MODULE_PARM_FORCE(chip5); \ | ||
| 688 | I2C_CLIENT_MODULE_PARM_FORCE(chip6); \ | ||
| 689 | I2C_CLIENT_MODULE_PARM_FORCE(chip7); \ | ||
| 690 | I2C_CLIENT_MODULE_PARM_FORCE(chip8); \ | ||
| 691 | static unsigned short *forces[] = { force, force_##chip1, \ | ||
| 692 | force_##chip2, force_##chip3, \ | ||
| 693 | force_##chip4, force_##chip5, \ | ||
| 694 | force_##chip6, force_##chip7, \ | ||
| 695 | force_##chip8, NULL }; \ | ||
| 696 | I2C_CLIENT_INSMOD_COMMON | ||
| 581 | 697 | ||
| 582 | #endif /* _LINUX_I2C_H */ | 698 | #endif /* _LINUX_I2C_H */ |
