i2c-sensor.h 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  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. 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. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14. You should have received a copy of the GNU General Public License
  15. along with this program; if not, write to the Free Software
  16. Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  17. */
  18. #ifndef _LINUX_I2C_SENSOR_H
  19. #define _LINUX_I2C_SENSOR_H
  20. #include <linux/i2c.h>
  21. #define SENSORS_MODULE_PARM_FORCE(name) \
  22. I2C_CLIENT_MODULE_PARM(force_ ## name, \
  23. "List of adapter,address pairs which are unquestionably" \
  24. " assumed to contain a `" # name "' chip")
  25. /* This defines several insmod variables, and the addr_data structure */
  26. #define SENSORS_INSMOD \
  27. I2C_CLIENT_MODULE_PARM(probe, \
  28. "List of adapter,address pairs to scan additionally"); \
  29. I2C_CLIENT_MODULE_PARM(ignore, \
  30. "List of adapter,address pairs not to scan"); \
  31. static struct i2c_client_address_data addr_data = { \
  32. .normal_i2c = normal_i2c, \
  33. .probe = probe, \
  34. .ignore = ignore, \
  35. .forces = forces, \
  36. }
  37. /* The following functions create an enum with the chip names as elements.
  38. The first element of the enum is any_chip. These are the only macros
  39. a module will want to use. */
  40. #define SENSORS_INSMOD_0 \
  41. enum chips { any_chip }; \
  42. I2C_CLIENT_MODULE_PARM(force, \
  43. "List of adapter,address pairs to boldly assume " \
  44. "to be present"); \
  45. static unsigned short *forces[] = { force, \
  46. NULL }; \
  47. SENSORS_INSMOD
  48. #define SENSORS_INSMOD_1(chip1) \
  49. enum chips { any_chip, chip1 }; \
  50. I2C_CLIENT_MODULE_PARM(force, \
  51. "List of adapter,address pairs to boldly assume " \
  52. "to be present"); \
  53. SENSORS_MODULE_PARM_FORCE(chip1); \
  54. static unsigned short *forces[] = { force, \
  55. force_##chip1, \
  56. NULL }; \
  57. SENSORS_INSMOD
  58. #define SENSORS_INSMOD_2(chip1,chip2) \
  59. enum chips { any_chip, chip1, chip2 }; \
  60. I2C_CLIENT_MODULE_PARM(force, \
  61. "List of adapter,address pairs to boldly assume " \
  62. "to be present"); \
  63. SENSORS_MODULE_PARM_FORCE(chip1); \
  64. SENSORS_MODULE_PARM_FORCE(chip2); \
  65. static unsigned short *forces[] = { force, \
  66. force_##chip1, \
  67. force_##chip2, \
  68. NULL }; \
  69. SENSORS_INSMOD
  70. #define SENSORS_INSMOD_3(chip1,chip2,chip3) \
  71. enum chips { any_chip, chip1, chip2, chip3 }; \
  72. I2C_CLIENT_MODULE_PARM(force, \
  73. "List of adapter,address pairs to boldly assume " \
  74. "to be present"); \
  75. SENSORS_MODULE_PARM_FORCE(chip1); \
  76. SENSORS_MODULE_PARM_FORCE(chip2); \
  77. SENSORS_MODULE_PARM_FORCE(chip3); \
  78. static unsigned short *forces[] = { force, \
  79. force_##chip1, \
  80. force_##chip2, \
  81. force_##chip3, \
  82. NULL }; \
  83. SENSORS_INSMOD
  84. #define SENSORS_INSMOD_4(chip1,chip2,chip3,chip4) \
  85. enum chips { any_chip, chip1, chip2, chip3, chip4 }; \
  86. I2C_CLIENT_MODULE_PARM(force, \
  87. "List of adapter,address pairs to boldly assume " \
  88. "to be present"); \
  89. SENSORS_MODULE_PARM_FORCE(chip1); \
  90. SENSORS_MODULE_PARM_FORCE(chip2); \
  91. SENSORS_MODULE_PARM_FORCE(chip3); \
  92. SENSORS_MODULE_PARM_FORCE(chip4); \
  93. static unsigned short *forces[] = { force, \
  94. force_##chip1, \
  95. force_##chip2, \
  96. force_##chip3, \
  97. force_##chip4, \
  98. NULL}; \
  99. SENSORS_INSMOD
  100. #define SENSORS_INSMOD_5(chip1,chip2,chip3,chip4,chip5) \
  101. enum chips { any_chip, chip1, chip2, chip3, chip4, chip5 }; \
  102. I2C_CLIENT_MODULE_PARM(force, \
  103. "List of adapter,address pairs to boldly assume " \
  104. "to be present"); \
  105. SENSORS_MODULE_PARM_FORCE(chip1); \
  106. SENSORS_MODULE_PARM_FORCE(chip2); \
  107. SENSORS_MODULE_PARM_FORCE(chip3); \
  108. SENSORS_MODULE_PARM_FORCE(chip4); \
  109. SENSORS_MODULE_PARM_FORCE(chip5); \
  110. static unsigned short *forces[] = { force, \
  111. force_##chip1, \
  112. force_##chip2, \
  113. force_##chip3, \
  114. force_##chip4, \
  115. force_##chip5, \
  116. NULL }; \
  117. SENSORS_INSMOD
  118. #define SENSORS_INSMOD_6(chip1,chip2,chip3,chip4,chip5,chip6) \
  119. enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6 }; \
  120. I2C_CLIENT_MODULE_PARM(force, \
  121. "List of adapter,address pairs to boldly assume " \
  122. "to be present"); \
  123. SENSORS_MODULE_PARM_FORCE(chip1); \
  124. SENSORS_MODULE_PARM_FORCE(chip2); \
  125. SENSORS_MODULE_PARM_FORCE(chip3); \
  126. SENSORS_MODULE_PARM_FORCE(chip4); \
  127. SENSORS_MODULE_PARM_FORCE(chip5); \
  128. SENSORS_MODULE_PARM_FORCE(chip6); \
  129. static unsigned short *forces[] = { force, \
  130. force_##chip1, \
  131. force_##chip2, \
  132. force_##chip3, \
  133. force_##chip4, \
  134. force_##chip5, \
  135. force_##chip6, \
  136. NULL }; \
  137. SENSORS_INSMOD
  138. #define SENSORS_INSMOD_7(chip1,chip2,chip3,chip4,chip5,chip6,chip7) \
  139. enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, chip7 }; \
  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. SENSORS_MODULE_PARM_FORCE(chip5); \
  148. SENSORS_MODULE_PARM_FORCE(chip6); \
  149. SENSORS_MODULE_PARM_FORCE(chip7); \
  150. static unsigned short *forces[] = { force, \
  151. force_##chip1, \
  152. force_##chip2, \
  153. force_##chip3, \
  154. force_##chip4, \
  155. force_##chip5, \
  156. force_##chip6, \
  157. force_##chip7, \
  158. NULL }; \
  159. SENSORS_INSMOD
  160. #define SENSORS_INSMOD_8(chip1,chip2,chip3,chip4,chip5,chip6,chip7,chip8) \
  161. enum chips { any_chip, chip1, chip2, chip3, chip4, chip5, chip6, chip7, chip8 }; \
  162. I2C_CLIENT_MODULE_PARM(force, \
  163. "List of adapter,address pairs to boldly assume " \
  164. "to be present"); \
  165. SENSORS_MODULE_PARM_FORCE(chip1); \
  166. SENSORS_MODULE_PARM_FORCE(chip2); \
  167. SENSORS_MODULE_PARM_FORCE(chip3); \
  168. SENSORS_MODULE_PARM_FORCE(chip4); \
  169. SENSORS_MODULE_PARM_FORCE(chip5); \
  170. SENSORS_MODULE_PARM_FORCE(chip6); \
  171. SENSORS_MODULE_PARM_FORCE(chip7); \
  172. SENSORS_MODULE_PARM_FORCE(chip8); \
  173. static unsigned short *forces[] = { force, \
  174. force_##chip1, \
  175. force_##chip2, \
  176. force_##chip3, \
  177. force_##chip4, \
  178. force_##chip5, \
  179. force_##chip6, \
  180. force_##chip7, \
  181. force_##chip8, \
  182. NULL }; \
  183. SENSORS_INSMOD
  184. /* Detect function. It iterates over all possible addresses itself. For
  185. SMBus addresses, it will only call found_proc if some client is connected
  186. to the SMBus (unless a 'force' matched). */
  187. extern int i2c_detect(struct i2c_adapter *adapter,
  188. struct i2c_client_address_data *address_data,
  189. int (*found_proc) (struct i2c_adapter *, int, int));
  190. #endif /* def _LINUX_I2C_SENSOR_H */