adm1031.c 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027
  1. /*
  2. adm1031.c - Part of lm_sensors, Linux kernel modules for hardware
  3. monitoring
  4. Based on lm75.c and lm85.c
  5. Supports adm1030 / adm1031
  6. Copyright (C) 2004 Alexandre d'Alton <alex@alexdalton.org>
  7. Reworked by Jean Delvare <khali@linux-fr.org>
  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. 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. 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. #include <linux/module.h>
  21. #include <linux/init.h>
  22. #include <linux/slab.h>
  23. #include <linux/jiffies.h>
  24. #include <linux/i2c.h>
  25. #include <linux/hwmon.h>
  26. #include <linux/hwmon-sysfs.h>
  27. #include <linux/err.h>
  28. #include <linux/mutex.h>
  29. /* Following macros takes channel parameter starting from 0 to 2 */
  30. #define ADM1031_REG_FAN_SPEED(nr) (0x08 + (nr))
  31. #define ADM1031_REG_FAN_DIV(nr) (0x20 + (nr))
  32. #define ADM1031_REG_PWM (0x22)
  33. #define ADM1031_REG_FAN_MIN(nr) (0x10 + (nr))
  34. #define ADM1031_REG_TEMP_OFFSET(nr) (0x0d + (nr))
  35. #define ADM1031_REG_TEMP_MAX(nr) (0x14 + 4 * (nr))
  36. #define ADM1031_REG_TEMP_MIN(nr) (0x15 + 4 * (nr))
  37. #define ADM1031_REG_TEMP_CRIT(nr) (0x16 + 4 * (nr))
  38. #define ADM1031_REG_TEMP(nr) (0x0a + (nr))
  39. #define ADM1031_REG_AUTO_TEMP(nr) (0x24 + (nr))
  40. #define ADM1031_REG_STATUS(nr) (0x2 + (nr))
  41. #define ADM1031_REG_CONF1 0x00
  42. #define ADM1031_REG_CONF2 0x01
  43. #define ADM1031_REG_EXT_TEMP 0x06
  44. #define ADM1031_CONF1_MONITOR_ENABLE 0x01 /* Monitoring enable */
  45. #define ADM1031_CONF1_PWM_INVERT 0x08 /* PWM Invert */
  46. #define ADM1031_CONF1_AUTO_MODE 0x80 /* Auto FAN */
  47. #define ADM1031_CONF2_PWM1_ENABLE 0x01
  48. #define ADM1031_CONF2_PWM2_ENABLE 0x02
  49. #define ADM1031_CONF2_TACH1_ENABLE 0x04
  50. #define ADM1031_CONF2_TACH2_ENABLE 0x08
  51. #define ADM1031_CONF2_TEMP_ENABLE(chan) (0x10 << (chan))
  52. /* Addresses to scan */
  53. static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
  54. enum chips { adm1030, adm1031 };
  55. typedef u8 auto_chan_table_t[8][2];
  56. /* Each client has this additional data */
  57. struct adm1031_data {
  58. struct device *hwmon_dev;
  59. struct mutex update_lock;
  60. int chip_type;
  61. char valid; /* !=0 if following fields are valid */
  62. unsigned long last_updated; /* In jiffies */
  63. /* The chan_select_table contains the possible configurations for
  64. * auto fan control.
  65. */
  66. const auto_chan_table_t *chan_select_table;
  67. u16 alarm;
  68. u8 conf1;
  69. u8 conf2;
  70. u8 fan[2];
  71. u8 fan_div[2];
  72. u8 fan_min[2];
  73. u8 pwm[2];
  74. u8 old_pwm[2];
  75. s8 temp[3];
  76. u8 ext_temp[3];
  77. u8 auto_temp[3];
  78. u8 auto_temp_min[3];
  79. u8 auto_temp_off[3];
  80. u8 auto_temp_max[3];
  81. s8 temp_offset[3];
  82. s8 temp_min[3];
  83. s8 temp_max[3];
  84. s8 temp_crit[3];
  85. };
  86. static int adm1031_probe(struct i2c_client *client,
  87. const struct i2c_device_id *id);
  88. static int adm1031_detect(struct i2c_client *client,
  89. struct i2c_board_info *info);
  90. static void adm1031_init_client(struct i2c_client *client);
  91. static int adm1031_remove(struct i2c_client *client);
  92. static struct adm1031_data *adm1031_update_device(struct device *dev);
  93. static const struct i2c_device_id adm1031_id[] = {
  94. { "adm1030", adm1030 },
  95. { "adm1031", adm1031 },
  96. { }
  97. };
  98. MODULE_DEVICE_TABLE(i2c, adm1031_id);
  99. /* This is the driver that will be inserted */
  100. static struct i2c_driver adm1031_driver = {
  101. .class = I2C_CLASS_HWMON,
  102. .driver = {
  103. .name = "adm1031",
  104. },
  105. .probe = adm1031_probe,
  106. .remove = adm1031_remove,
  107. .id_table = adm1031_id,
  108. .detect = adm1031_detect,
  109. .address_list = normal_i2c,
  110. };
  111. static inline u8 adm1031_read_value(struct i2c_client *client, u8 reg)
  112. {
  113. return i2c_smbus_read_byte_data(client, reg);
  114. }
  115. static inline int
  116. adm1031_write_value(struct i2c_client *client, u8 reg, unsigned int value)
  117. {
  118. return i2c_smbus_write_byte_data(client, reg, value);
  119. }
  120. #define TEMP_TO_REG(val) (((val) < 0 ? ((val - 500) / 1000) : \
  121. ((val + 500) / 1000)))
  122. #define TEMP_FROM_REG(val) ((val) * 1000)
  123. #define TEMP_FROM_REG_EXT(val, ext) (TEMP_FROM_REG(val) + (ext) * 125)
  124. #define TEMP_OFFSET_TO_REG(val) (TEMP_TO_REG(val) & 0x8f)
  125. #define TEMP_OFFSET_FROM_REG(val) TEMP_FROM_REG((val) < 0 ? \
  126. (val) | 0x70 : (val))
  127. #define FAN_FROM_REG(reg, div) ((reg) ? (11250 * 60) / ((reg) * (div)) : 0)
  128. static int FAN_TO_REG(int reg, int div)
  129. {
  130. int tmp;
  131. tmp = FAN_FROM_REG(SENSORS_LIMIT(reg, 0, 65535), div);
  132. return tmp > 255 ? 255 : tmp;
  133. }
  134. #define FAN_DIV_FROM_REG(reg) (1<<(((reg)&0xc0)>>6))
  135. #define PWM_TO_REG(val) (SENSORS_LIMIT((val), 0, 255) >> 4)
  136. #define PWM_FROM_REG(val) ((val) << 4)
  137. #define FAN_CHAN_FROM_REG(reg) (((reg) >> 5) & 7)
  138. #define FAN_CHAN_TO_REG(val, reg) \
  139. (((reg) & 0x1F) | (((val) << 5) & 0xe0))
  140. #define AUTO_TEMP_MIN_TO_REG(val, reg) \
  141. ((((val)/500) & 0xf8)|((reg) & 0x7))
  142. #define AUTO_TEMP_RANGE_FROM_REG(reg) (5000 * (1<< ((reg)&0x7)))
  143. #define AUTO_TEMP_MIN_FROM_REG(reg) (1000 * ((((reg) >> 3) & 0x1f) << 2))
  144. #define AUTO_TEMP_MIN_FROM_REG_DEG(reg) ((((reg) >> 3) & 0x1f) << 2)
  145. #define AUTO_TEMP_OFF_FROM_REG(reg) \
  146. (AUTO_TEMP_MIN_FROM_REG(reg) - 5000)
  147. #define AUTO_TEMP_MAX_FROM_REG(reg) \
  148. (AUTO_TEMP_RANGE_FROM_REG(reg) + \
  149. AUTO_TEMP_MIN_FROM_REG(reg))
  150. static int AUTO_TEMP_MAX_TO_REG(int val, int reg, int pwm)
  151. {
  152. int ret;
  153. int range = val - AUTO_TEMP_MIN_FROM_REG(reg);
  154. range = ((val - AUTO_TEMP_MIN_FROM_REG(reg))*10)/(16 - pwm);
  155. ret = ((reg & 0xf8) |
  156. (range < 10000 ? 0 :
  157. range < 20000 ? 1 :
  158. range < 40000 ? 2 : range < 80000 ? 3 : 4));
  159. return ret;
  160. }
  161. /* FAN auto control */
  162. #define GET_FAN_AUTO_BITFIELD(data, idx) \
  163. (*(data)->chan_select_table)[FAN_CHAN_FROM_REG((data)->conf1)][idx%2]
  164. /* The tables below contains the possible values for the auto fan
  165. * control bitfields. the index in the table is the register value.
  166. * MSb is the auto fan control enable bit, so the four first entries
  167. * in the table disables auto fan control when both bitfields are zero.
  168. */
  169. static const auto_chan_table_t auto_channel_select_table_adm1031 = {
  170. { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
  171. { 2 /* 0b010 */ , 4 /* 0b100 */ },
  172. { 2 /* 0b010 */ , 2 /* 0b010 */ },
  173. { 4 /* 0b100 */ , 4 /* 0b100 */ },
  174. { 7 /* 0b111 */ , 7 /* 0b111 */ },
  175. };
  176. static const auto_chan_table_t auto_channel_select_table_adm1030 = {
  177. { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
  178. { 2 /* 0b10 */ , 0 },
  179. { 0xff /* invalid */ , 0 },
  180. { 0xff /* invalid */ , 0 },
  181. { 3 /* 0b11 */ , 0 },
  182. };
  183. /* That function checks if a bitfield is valid and returns the other bitfield
  184. * nearest match if no exact match where found.
  185. */
  186. static int
  187. get_fan_auto_nearest(struct adm1031_data *data,
  188. int chan, u8 val, u8 reg, u8 * new_reg)
  189. {
  190. int i;
  191. int first_match = -1, exact_match = -1;
  192. u8 other_reg_val =
  193. (*data->chan_select_table)[FAN_CHAN_FROM_REG(reg)][chan ? 0 : 1];
  194. if (val == 0) {
  195. *new_reg = 0;
  196. return 0;
  197. }
  198. for (i = 0; i < 8; i++) {
  199. if ((val == (*data->chan_select_table)[i][chan]) &&
  200. ((*data->chan_select_table)[i][chan ? 0 : 1] ==
  201. other_reg_val)) {
  202. /* We found an exact match */
  203. exact_match = i;
  204. break;
  205. } else if (val == (*data->chan_select_table)[i][chan] &&
  206. first_match == -1) {
  207. /* Save the first match in case of an exact match has
  208. * not been found
  209. */
  210. first_match = i;
  211. }
  212. }
  213. if (exact_match >= 0) {
  214. *new_reg = exact_match;
  215. } else if (first_match >= 0) {
  216. *new_reg = first_match;
  217. } else {
  218. return -EINVAL;
  219. }
  220. return 0;
  221. }
  222. static ssize_t show_fan_auto_channel(struct device *dev,
  223. struct device_attribute *attr, char *buf)
  224. {
  225. int nr = to_sensor_dev_attr(attr)->index;
  226. struct adm1031_data *data = adm1031_update_device(dev);
  227. return sprintf(buf, "%d\n", GET_FAN_AUTO_BITFIELD(data, nr));
  228. }
  229. static ssize_t
  230. set_fan_auto_channel(struct device *dev, struct device_attribute *attr,
  231. const char *buf, size_t count)
  232. {
  233. struct i2c_client *client = to_i2c_client(dev);
  234. struct adm1031_data *data = i2c_get_clientdata(client);
  235. int nr = to_sensor_dev_attr(attr)->index;
  236. int val = simple_strtol(buf, NULL, 10);
  237. u8 reg;
  238. int ret;
  239. u8 old_fan_mode;
  240. old_fan_mode = data->conf1;
  241. mutex_lock(&data->update_lock);
  242. if ((ret = get_fan_auto_nearest(data, nr, val, data->conf1, &reg))) {
  243. mutex_unlock(&data->update_lock);
  244. return ret;
  245. }
  246. data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
  247. if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^
  248. (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) {
  249. if (data->conf1 & ADM1031_CONF1_AUTO_MODE){
  250. /* Switch to Auto Fan Mode
  251. * Save PWM registers
  252. * Set PWM registers to 33% Both */
  253. data->old_pwm[0] = data->pwm[0];
  254. data->old_pwm[1] = data->pwm[1];
  255. adm1031_write_value(client, ADM1031_REG_PWM, 0x55);
  256. } else {
  257. /* Switch to Manual Mode */
  258. data->pwm[0] = data->old_pwm[0];
  259. data->pwm[1] = data->old_pwm[1];
  260. /* Restore PWM registers */
  261. adm1031_write_value(client, ADM1031_REG_PWM,
  262. data->pwm[0] | (data->pwm[1] << 4));
  263. }
  264. }
  265. data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
  266. adm1031_write_value(client, ADM1031_REG_CONF1, data->conf1);
  267. mutex_unlock(&data->update_lock);
  268. return count;
  269. }
  270. static SENSOR_DEVICE_ATTR(auto_fan1_channel, S_IRUGO | S_IWUSR,
  271. show_fan_auto_channel, set_fan_auto_channel, 0);
  272. static SENSOR_DEVICE_ATTR(auto_fan2_channel, S_IRUGO | S_IWUSR,
  273. show_fan_auto_channel, set_fan_auto_channel, 1);
  274. /* Auto Temps */
  275. static ssize_t show_auto_temp_off(struct device *dev,
  276. struct device_attribute *attr, char *buf)
  277. {
  278. int nr = to_sensor_dev_attr(attr)->index;
  279. struct adm1031_data *data = adm1031_update_device(dev);
  280. return sprintf(buf, "%d\n",
  281. AUTO_TEMP_OFF_FROM_REG(data->auto_temp[nr]));
  282. }
  283. static ssize_t show_auto_temp_min(struct device *dev,
  284. struct device_attribute *attr, char *buf)
  285. {
  286. int nr = to_sensor_dev_attr(attr)->index;
  287. struct adm1031_data *data = adm1031_update_device(dev);
  288. return sprintf(buf, "%d\n",
  289. AUTO_TEMP_MIN_FROM_REG(data->auto_temp[nr]));
  290. }
  291. static ssize_t
  292. set_auto_temp_min(struct device *dev, struct device_attribute *attr,
  293. const char *buf, size_t count)
  294. {
  295. struct i2c_client *client = to_i2c_client(dev);
  296. struct adm1031_data *data = i2c_get_clientdata(client);
  297. int nr = to_sensor_dev_attr(attr)->index;
  298. int val = simple_strtol(buf, NULL, 10);
  299. mutex_lock(&data->update_lock);
  300. data->auto_temp[nr] = AUTO_TEMP_MIN_TO_REG(val, data->auto_temp[nr]);
  301. adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
  302. data->auto_temp[nr]);
  303. mutex_unlock(&data->update_lock);
  304. return count;
  305. }
  306. static ssize_t show_auto_temp_max(struct device *dev,
  307. struct device_attribute *attr, char *buf)
  308. {
  309. int nr = to_sensor_dev_attr(attr)->index;
  310. struct adm1031_data *data = adm1031_update_device(dev);
  311. return sprintf(buf, "%d\n",
  312. AUTO_TEMP_MAX_FROM_REG(data->auto_temp[nr]));
  313. }
  314. static ssize_t
  315. set_auto_temp_max(struct device *dev, struct device_attribute *attr,
  316. const char *buf, size_t count)
  317. {
  318. struct i2c_client *client = to_i2c_client(dev);
  319. struct adm1031_data *data = i2c_get_clientdata(client);
  320. int nr = to_sensor_dev_attr(attr)->index;
  321. int val = simple_strtol(buf, NULL, 10);
  322. mutex_lock(&data->update_lock);
  323. data->temp_max[nr] = AUTO_TEMP_MAX_TO_REG(val, data->auto_temp[nr], data->pwm[nr]);
  324. adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
  325. data->temp_max[nr]);
  326. mutex_unlock(&data->update_lock);
  327. return count;
  328. }
  329. #define auto_temp_reg(offset) \
  330. static SENSOR_DEVICE_ATTR(auto_temp##offset##_off, S_IRUGO, \
  331. show_auto_temp_off, NULL, offset - 1); \
  332. static SENSOR_DEVICE_ATTR(auto_temp##offset##_min, S_IRUGO | S_IWUSR, \
  333. show_auto_temp_min, set_auto_temp_min, offset - 1); \
  334. static SENSOR_DEVICE_ATTR(auto_temp##offset##_max, S_IRUGO | S_IWUSR, \
  335. show_auto_temp_max, set_auto_temp_max, offset - 1)
  336. auto_temp_reg(1);
  337. auto_temp_reg(2);
  338. auto_temp_reg(3);
  339. /* pwm */
  340. static ssize_t show_pwm(struct device *dev,
  341. struct device_attribute *attr, char *buf)
  342. {
  343. int nr = to_sensor_dev_attr(attr)->index;
  344. struct adm1031_data *data = adm1031_update_device(dev);
  345. return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr]));
  346. }
  347. static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
  348. const char *buf, size_t count)
  349. {
  350. struct i2c_client *client = to_i2c_client(dev);
  351. struct adm1031_data *data = i2c_get_clientdata(client);
  352. int nr = to_sensor_dev_attr(attr)->index;
  353. int val = simple_strtol(buf, NULL, 10);
  354. int reg;
  355. mutex_lock(&data->update_lock);
  356. if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) &&
  357. (((val>>4) & 0xf) != 5)) {
  358. /* In automatic mode, the only PWM accepted is 33% */
  359. mutex_unlock(&data->update_lock);
  360. return -EINVAL;
  361. }
  362. data->pwm[nr] = PWM_TO_REG(val);
  363. reg = adm1031_read_value(client, ADM1031_REG_PWM);
  364. adm1031_write_value(client, ADM1031_REG_PWM,
  365. nr ? ((data->pwm[nr] << 4) & 0xf0) | (reg & 0xf)
  366. : (data->pwm[nr] & 0xf) | (reg & 0xf0));
  367. mutex_unlock(&data->update_lock);
  368. return count;
  369. }
  370. static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 0);
  371. static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 1);
  372. static SENSOR_DEVICE_ATTR(auto_fan1_min_pwm, S_IRUGO | S_IWUSR,
  373. show_pwm, set_pwm, 0);
  374. static SENSOR_DEVICE_ATTR(auto_fan2_min_pwm, S_IRUGO | S_IWUSR,
  375. show_pwm, set_pwm, 1);
  376. /* Fans */
  377. /*
  378. * That function checks the cases where the fan reading is not
  379. * relevant. It is used to provide 0 as fan reading when the fan is
  380. * not supposed to run
  381. */
  382. static int trust_fan_readings(struct adm1031_data *data, int chan)
  383. {
  384. int res = 0;
  385. if (data->conf1 & ADM1031_CONF1_AUTO_MODE) {
  386. switch (data->conf1 & 0x60) {
  387. case 0x00: /* remote temp1 controls fan1 remote temp2 controls fan2 */
  388. res = data->temp[chan+1] >=
  389. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[chan+1]);
  390. break;
  391. case 0x20: /* remote temp1 controls both fans */
  392. res =
  393. data->temp[1] >=
  394. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1]);
  395. break;
  396. case 0x40: /* remote temp2 controls both fans */
  397. res =
  398. data->temp[2] >=
  399. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2]);
  400. break;
  401. case 0x60: /* max controls both fans */
  402. res =
  403. data->temp[0] >=
  404. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[0])
  405. || data->temp[1] >=
  406. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1])
  407. || (data->chip_type == adm1031
  408. && data->temp[2] >=
  409. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2]));
  410. break;
  411. }
  412. } else {
  413. res = data->pwm[chan] > 0;
  414. }
  415. return res;
  416. }
  417. static ssize_t show_fan(struct device *dev,
  418. struct device_attribute *attr, char *buf)
  419. {
  420. int nr = to_sensor_dev_attr(attr)->index;
  421. struct adm1031_data *data = adm1031_update_device(dev);
  422. int value;
  423. value = trust_fan_readings(data, nr) ? FAN_FROM_REG(data->fan[nr],
  424. FAN_DIV_FROM_REG(data->fan_div[nr])) : 0;
  425. return sprintf(buf, "%d\n", value);
  426. }
  427. static ssize_t show_fan_div(struct device *dev,
  428. struct device_attribute *attr, char *buf)
  429. {
  430. int nr = to_sensor_dev_attr(attr)->index;
  431. struct adm1031_data *data = adm1031_update_device(dev);
  432. return sprintf(buf, "%d\n", FAN_DIV_FROM_REG(data->fan_div[nr]));
  433. }
  434. static ssize_t show_fan_min(struct device *dev,
  435. struct device_attribute *attr, char *buf)
  436. {
  437. int nr = to_sensor_dev_attr(attr)->index;
  438. struct adm1031_data *data = adm1031_update_device(dev);
  439. return sprintf(buf, "%d\n",
  440. FAN_FROM_REG(data->fan_min[nr],
  441. FAN_DIV_FROM_REG(data->fan_div[nr])));
  442. }
  443. static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
  444. const char *buf, size_t count)
  445. {
  446. struct i2c_client *client = to_i2c_client(dev);
  447. struct adm1031_data *data = i2c_get_clientdata(client);
  448. int nr = to_sensor_dev_attr(attr)->index;
  449. int val = simple_strtol(buf, NULL, 10);
  450. mutex_lock(&data->update_lock);
  451. if (val) {
  452. data->fan_min[nr] =
  453. FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr]));
  454. } else {
  455. data->fan_min[nr] = 0xff;
  456. }
  457. adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), data->fan_min[nr]);
  458. mutex_unlock(&data->update_lock);
  459. return count;
  460. }
  461. static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
  462. const char *buf, size_t count)
  463. {
  464. struct i2c_client *client = to_i2c_client(dev);
  465. struct adm1031_data *data = i2c_get_clientdata(client);
  466. int nr = to_sensor_dev_attr(attr)->index;
  467. int val = simple_strtol(buf, NULL, 10);
  468. u8 tmp;
  469. int old_div;
  470. int new_min;
  471. tmp = val == 8 ? 0xc0 :
  472. val == 4 ? 0x80 :
  473. val == 2 ? 0x40 :
  474. val == 1 ? 0x00 :
  475. 0xff;
  476. if (tmp == 0xff)
  477. return -EINVAL;
  478. mutex_lock(&data->update_lock);
  479. /* Get fresh readings */
  480. data->fan_div[nr] = adm1031_read_value(client,
  481. ADM1031_REG_FAN_DIV(nr));
  482. data->fan_min[nr] = adm1031_read_value(client,
  483. ADM1031_REG_FAN_MIN(nr));
  484. /* Write the new clock divider and fan min */
  485. old_div = FAN_DIV_FROM_REG(data->fan_div[nr]);
  486. data->fan_div[nr] = tmp | (0x3f & data->fan_div[nr]);
  487. new_min = data->fan_min[nr] * old_div / val;
  488. data->fan_min[nr] = new_min > 0xff ? 0xff : new_min;
  489. adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr),
  490. data->fan_div[nr]);
  491. adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr),
  492. data->fan_min[nr]);
  493. /* Invalidate the cache: fan speed is no longer valid */
  494. data->valid = 0;
  495. mutex_unlock(&data->update_lock);
  496. return count;
  497. }
  498. #define fan_offset(offset) \
  499. static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
  500. show_fan, NULL, offset - 1); \
  501. static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
  502. show_fan_min, set_fan_min, offset - 1); \
  503. static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
  504. show_fan_div, set_fan_div, offset - 1)
  505. fan_offset(1);
  506. fan_offset(2);
  507. /* Temps */
  508. static ssize_t show_temp(struct device *dev,
  509. struct device_attribute *attr, char *buf)
  510. {
  511. int nr = to_sensor_dev_attr(attr)->index;
  512. struct adm1031_data *data = adm1031_update_device(dev);
  513. int ext;
  514. ext = nr == 0 ?
  515. ((data->ext_temp[nr] >> 6) & 0x3) * 2 :
  516. (((data->ext_temp[nr] >> ((nr - 1) * 3)) & 7));
  517. return sprintf(buf, "%d\n", TEMP_FROM_REG_EXT(data->temp[nr], ext));
  518. }
  519. static ssize_t show_temp_offset(struct device *dev,
  520. struct device_attribute *attr, char *buf)
  521. {
  522. int nr = to_sensor_dev_attr(attr)->index;
  523. struct adm1031_data *data = adm1031_update_device(dev);
  524. return sprintf(buf, "%d\n",
  525. TEMP_OFFSET_FROM_REG(data->temp_offset[nr]));
  526. }
  527. static ssize_t show_temp_min(struct device *dev,
  528. struct device_attribute *attr, char *buf)
  529. {
  530. int nr = to_sensor_dev_attr(attr)->index;
  531. struct adm1031_data *data = adm1031_update_device(dev);
  532. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
  533. }
  534. static ssize_t show_temp_max(struct device *dev,
  535. struct device_attribute *attr, char *buf)
  536. {
  537. int nr = to_sensor_dev_attr(attr)->index;
  538. struct adm1031_data *data = adm1031_update_device(dev);
  539. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
  540. }
  541. static ssize_t show_temp_crit(struct device *dev,
  542. struct device_attribute *attr, char *buf)
  543. {
  544. int nr = to_sensor_dev_attr(attr)->index;
  545. struct adm1031_data *data = adm1031_update_device(dev);
  546. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr]));
  547. }
  548. static ssize_t set_temp_offset(struct device *dev,
  549. struct device_attribute *attr, const char *buf,
  550. size_t count)
  551. {
  552. struct i2c_client *client = to_i2c_client(dev);
  553. struct adm1031_data *data = i2c_get_clientdata(client);
  554. int nr = to_sensor_dev_attr(attr)->index;
  555. int val;
  556. val = simple_strtol(buf, NULL, 10);
  557. val = SENSORS_LIMIT(val, -15000, 15000);
  558. mutex_lock(&data->update_lock);
  559. data->temp_offset[nr] = TEMP_OFFSET_TO_REG(val);
  560. adm1031_write_value(client, ADM1031_REG_TEMP_OFFSET(nr),
  561. data->temp_offset[nr]);
  562. mutex_unlock(&data->update_lock);
  563. return count;
  564. }
  565. static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
  566. const char *buf, size_t count)
  567. {
  568. struct i2c_client *client = to_i2c_client(dev);
  569. struct adm1031_data *data = i2c_get_clientdata(client);
  570. int nr = to_sensor_dev_attr(attr)->index;
  571. int val;
  572. val = simple_strtol(buf, NULL, 10);
  573. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  574. mutex_lock(&data->update_lock);
  575. data->temp_min[nr] = TEMP_TO_REG(val);
  576. adm1031_write_value(client, ADM1031_REG_TEMP_MIN(nr),
  577. data->temp_min[nr]);
  578. mutex_unlock(&data->update_lock);
  579. return count;
  580. }
  581. static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
  582. const char *buf, size_t count)
  583. {
  584. struct i2c_client *client = to_i2c_client(dev);
  585. struct adm1031_data *data = i2c_get_clientdata(client);
  586. int nr = to_sensor_dev_attr(attr)->index;
  587. int val;
  588. val = simple_strtol(buf, NULL, 10);
  589. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  590. mutex_lock(&data->update_lock);
  591. data->temp_max[nr] = TEMP_TO_REG(val);
  592. adm1031_write_value(client, ADM1031_REG_TEMP_MAX(nr),
  593. data->temp_max[nr]);
  594. mutex_unlock(&data->update_lock);
  595. return count;
  596. }
  597. static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr,
  598. const char *buf, size_t count)
  599. {
  600. struct i2c_client *client = to_i2c_client(dev);
  601. struct adm1031_data *data = i2c_get_clientdata(client);
  602. int nr = to_sensor_dev_attr(attr)->index;
  603. int val;
  604. val = simple_strtol(buf, NULL, 10);
  605. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  606. mutex_lock(&data->update_lock);
  607. data->temp_crit[nr] = TEMP_TO_REG(val);
  608. adm1031_write_value(client, ADM1031_REG_TEMP_CRIT(nr),
  609. data->temp_crit[nr]);
  610. mutex_unlock(&data->update_lock);
  611. return count;
  612. }
  613. #define temp_reg(offset) \
  614. static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
  615. show_temp, NULL, offset - 1); \
  616. static SENSOR_DEVICE_ATTR(temp##offset##_offset, S_IRUGO | S_IWUSR, \
  617. show_temp_offset, set_temp_offset, offset - 1); \
  618. static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
  619. show_temp_min, set_temp_min, offset - 1); \
  620. static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
  621. show_temp_max, set_temp_max, offset - 1); \
  622. static SENSOR_DEVICE_ATTR(temp##offset##_crit, S_IRUGO | S_IWUSR, \
  623. show_temp_crit, set_temp_crit, offset - 1)
  624. temp_reg(1);
  625. temp_reg(2);
  626. temp_reg(3);
  627. /* Alarms */
  628. static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf)
  629. {
  630. struct adm1031_data *data = adm1031_update_device(dev);
  631. return sprintf(buf, "%d\n", data->alarm);
  632. }
  633. static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
  634. static ssize_t show_alarm(struct device *dev,
  635. struct device_attribute *attr, char *buf)
  636. {
  637. int bitnr = to_sensor_dev_attr(attr)->index;
  638. struct adm1031_data *data = adm1031_update_device(dev);
  639. return sprintf(buf, "%d\n", (data->alarm >> bitnr) & 1);
  640. }
  641. static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 0);
  642. static SENSOR_DEVICE_ATTR(fan1_fault, S_IRUGO, show_alarm, NULL, 1);
  643. static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 2);
  644. static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
  645. static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 4);
  646. static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 5);
  647. static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6);
  648. static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 7);
  649. static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 8);
  650. static SENSOR_DEVICE_ATTR(fan2_fault, S_IRUGO, show_alarm, NULL, 9);
  651. static SENSOR_DEVICE_ATTR(temp3_max_alarm, S_IRUGO, show_alarm, NULL, 10);
  652. static SENSOR_DEVICE_ATTR(temp3_min_alarm, S_IRUGO, show_alarm, NULL, 11);
  653. static SENSOR_DEVICE_ATTR(temp3_crit_alarm, S_IRUGO, show_alarm, NULL, 12);
  654. static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_alarm, NULL, 13);
  655. static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 14);
  656. static struct attribute *adm1031_attributes[] = {
  657. &sensor_dev_attr_fan1_input.dev_attr.attr,
  658. &sensor_dev_attr_fan1_div.dev_attr.attr,
  659. &sensor_dev_attr_fan1_min.dev_attr.attr,
  660. &sensor_dev_attr_fan1_alarm.dev_attr.attr,
  661. &sensor_dev_attr_fan1_fault.dev_attr.attr,
  662. &sensor_dev_attr_pwm1.dev_attr.attr,
  663. &sensor_dev_attr_auto_fan1_channel.dev_attr.attr,
  664. &sensor_dev_attr_temp1_input.dev_attr.attr,
  665. &sensor_dev_attr_temp1_offset.dev_attr.attr,
  666. &sensor_dev_attr_temp1_min.dev_attr.attr,
  667. &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
  668. &sensor_dev_attr_temp1_max.dev_attr.attr,
  669. &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
  670. &sensor_dev_attr_temp1_crit.dev_attr.attr,
  671. &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
  672. &sensor_dev_attr_temp2_input.dev_attr.attr,
  673. &sensor_dev_attr_temp2_offset.dev_attr.attr,
  674. &sensor_dev_attr_temp2_min.dev_attr.attr,
  675. &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
  676. &sensor_dev_attr_temp2_max.dev_attr.attr,
  677. &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
  678. &sensor_dev_attr_temp2_crit.dev_attr.attr,
  679. &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
  680. &sensor_dev_attr_temp2_fault.dev_attr.attr,
  681. &sensor_dev_attr_auto_temp1_off.dev_attr.attr,
  682. &sensor_dev_attr_auto_temp1_min.dev_attr.attr,
  683. &sensor_dev_attr_auto_temp1_max.dev_attr.attr,
  684. &sensor_dev_attr_auto_temp2_off.dev_attr.attr,
  685. &sensor_dev_attr_auto_temp2_min.dev_attr.attr,
  686. &sensor_dev_attr_auto_temp2_max.dev_attr.attr,
  687. &sensor_dev_attr_auto_fan1_min_pwm.dev_attr.attr,
  688. &dev_attr_alarms.attr,
  689. NULL
  690. };
  691. static const struct attribute_group adm1031_group = {
  692. .attrs = adm1031_attributes,
  693. };
  694. static struct attribute *adm1031_attributes_opt[] = {
  695. &sensor_dev_attr_fan2_input.dev_attr.attr,
  696. &sensor_dev_attr_fan2_div.dev_attr.attr,
  697. &sensor_dev_attr_fan2_min.dev_attr.attr,
  698. &sensor_dev_attr_fan2_alarm.dev_attr.attr,
  699. &sensor_dev_attr_fan2_fault.dev_attr.attr,
  700. &sensor_dev_attr_pwm2.dev_attr.attr,
  701. &sensor_dev_attr_auto_fan2_channel.dev_attr.attr,
  702. &sensor_dev_attr_temp3_input.dev_attr.attr,
  703. &sensor_dev_attr_temp3_offset.dev_attr.attr,
  704. &sensor_dev_attr_temp3_min.dev_attr.attr,
  705. &sensor_dev_attr_temp3_min_alarm.dev_attr.attr,
  706. &sensor_dev_attr_temp3_max.dev_attr.attr,
  707. &sensor_dev_attr_temp3_max_alarm.dev_attr.attr,
  708. &sensor_dev_attr_temp3_crit.dev_attr.attr,
  709. &sensor_dev_attr_temp3_crit_alarm.dev_attr.attr,
  710. &sensor_dev_attr_temp3_fault.dev_attr.attr,
  711. &sensor_dev_attr_auto_temp3_off.dev_attr.attr,
  712. &sensor_dev_attr_auto_temp3_min.dev_attr.attr,
  713. &sensor_dev_attr_auto_temp3_max.dev_attr.attr,
  714. &sensor_dev_attr_auto_fan2_min_pwm.dev_attr.attr,
  715. NULL
  716. };
  717. static const struct attribute_group adm1031_group_opt = {
  718. .attrs = adm1031_attributes_opt,
  719. };
  720. /* Return 0 if detection is successful, -ENODEV otherwise */
  721. static int adm1031_detect(struct i2c_client *client,
  722. struct i2c_board_info *info)
  723. {
  724. struct i2c_adapter *adapter = client->adapter;
  725. const char *name;
  726. int id, co;
  727. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  728. return -ENODEV;
  729. id = i2c_smbus_read_byte_data(client, 0x3d);
  730. co = i2c_smbus_read_byte_data(client, 0x3e);
  731. if (!((id == 0x31 || id == 0x30) && co == 0x41))
  732. return -ENODEV;
  733. name = (id == 0x30) ? "adm1030" : "adm1031";
  734. strlcpy(info->type, name, I2C_NAME_SIZE);
  735. return 0;
  736. }
  737. static int adm1031_probe(struct i2c_client *client,
  738. const struct i2c_device_id *id)
  739. {
  740. struct adm1031_data *data;
  741. int err;
  742. data = kzalloc(sizeof(struct adm1031_data), GFP_KERNEL);
  743. if (!data) {
  744. err = -ENOMEM;
  745. goto exit;
  746. }
  747. i2c_set_clientdata(client, data);
  748. data->chip_type = id->driver_data;
  749. mutex_init(&data->update_lock);
  750. if (data->chip_type == adm1030)
  751. data->chan_select_table = &auto_channel_select_table_adm1030;
  752. else
  753. data->chan_select_table = &auto_channel_select_table_adm1031;
  754. /* Initialize the ADM1031 chip */
  755. adm1031_init_client(client);
  756. /* Register sysfs hooks */
  757. if ((err = sysfs_create_group(&client->dev.kobj, &adm1031_group)))
  758. goto exit_free;
  759. if (data->chip_type == adm1031) {
  760. if ((err = sysfs_create_group(&client->dev.kobj,
  761. &adm1031_group_opt)))
  762. goto exit_remove;
  763. }
  764. data->hwmon_dev = hwmon_device_register(&client->dev);
  765. if (IS_ERR(data->hwmon_dev)) {
  766. err = PTR_ERR(data->hwmon_dev);
  767. goto exit_remove;
  768. }
  769. return 0;
  770. exit_remove:
  771. sysfs_remove_group(&client->dev.kobj, &adm1031_group);
  772. sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt);
  773. exit_free:
  774. kfree(data);
  775. exit:
  776. return err;
  777. }
  778. static int adm1031_remove(struct i2c_client *client)
  779. {
  780. struct adm1031_data *data = i2c_get_clientdata(client);
  781. hwmon_device_unregister(data->hwmon_dev);
  782. sysfs_remove_group(&client->dev.kobj, &adm1031_group);
  783. sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt);
  784. kfree(data);
  785. return 0;
  786. }
  787. static void adm1031_init_client(struct i2c_client *client)
  788. {
  789. unsigned int read_val;
  790. unsigned int mask;
  791. struct adm1031_data *data = i2c_get_clientdata(client);
  792. mask = (ADM1031_CONF2_PWM1_ENABLE | ADM1031_CONF2_TACH1_ENABLE);
  793. if (data->chip_type == adm1031) {
  794. mask |= (ADM1031_CONF2_PWM2_ENABLE |
  795. ADM1031_CONF2_TACH2_ENABLE);
  796. }
  797. /* Initialize the ADM1031 chip (enables fan speed reading ) */
  798. read_val = adm1031_read_value(client, ADM1031_REG_CONF2);
  799. if ((read_val | mask) != read_val) {
  800. adm1031_write_value(client, ADM1031_REG_CONF2, read_val | mask);
  801. }
  802. read_val = adm1031_read_value(client, ADM1031_REG_CONF1);
  803. if ((read_val | ADM1031_CONF1_MONITOR_ENABLE) != read_val) {
  804. adm1031_write_value(client, ADM1031_REG_CONF1, read_val |
  805. ADM1031_CONF1_MONITOR_ENABLE);
  806. }
  807. }
  808. static struct adm1031_data *adm1031_update_device(struct device *dev)
  809. {
  810. struct i2c_client *client = to_i2c_client(dev);
  811. struct adm1031_data *data = i2c_get_clientdata(client);
  812. int chan;
  813. mutex_lock(&data->update_lock);
  814. if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
  815. || !data->valid) {
  816. dev_dbg(&client->dev, "Starting adm1031 update\n");
  817. for (chan = 0;
  818. chan < ((data->chip_type == adm1031) ? 3 : 2); chan++) {
  819. u8 oldh, newh;
  820. oldh =
  821. adm1031_read_value(client, ADM1031_REG_TEMP(chan));
  822. data->ext_temp[chan] =
  823. adm1031_read_value(client, ADM1031_REG_EXT_TEMP);
  824. newh =
  825. adm1031_read_value(client, ADM1031_REG_TEMP(chan));
  826. if (newh != oldh) {
  827. data->ext_temp[chan] =
  828. adm1031_read_value(client,
  829. ADM1031_REG_EXT_TEMP);
  830. #ifdef DEBUG
  831. oldh =
  832. adm1031_read_value(client,
  833. ADM1031_REG_TEMP(chan));
  834. /* oldh is actually newer */
  835. if (newh != oldh)
  836. dev_warn(&client->dev,
  837. "Remote temperature may be "
  838. "wrong.\n");
  839. #endif
  840. }
  841. data->temp[chan] = newh;
  842. data->temp_offset[chan] =
  843. adm1031_read_value(client,
  844. ADM1031_REG_TEMP_OFFSET(chan));
  845. data->temp_min[chan] =
  846. adm1031_read_value(client,
  847. ADM1031_REG_TEMP_MIN(chan));
  848. data->temp_max[chan] =
  849. adm1031_read_value(client,
  850. ADM1031_REG_TEMP_MAX(chan));
  851. data->temp_crit[chan] =
  852. adm1031_read_value(client,
  853. ADM1031_REG_TEMP_CRIT(chan));
  854. data->auto_temp[chan] =
  855. adm1031_read_value(client,
  856. ADM1031_REG_AUTO_TEMP(chan));
  857. }
  858. data->conf1 = adm1031_read_value(client, ADM1031_REG_CONF1);
  859. data->conf2 = adm1031_read_value(client, ADM1031_REG_CONF2);
  860. data->alarm = adm1031_read_value(client, ADM1031_REG_STATUS(0))
  861. | (adm1031_read_value(client, ADM1031_REG_STATUS(1))
  862. << 8);
  863. if (data->chip_type == adm1030) {
  864. data->alarm &= 0xc0ff;
  865. }
  866. for (chan=0; chan<(data->chip_type == adm1030 ? 1 : 2); chan++) {
  867. data->fan_div[chan] =
  868. adm1031_read_value(client, ADM1031_REG_FAN_DIV(chan));
  869. data->fan_min[chan] =
  870. adm1031_read_value(client, ADM1031_REG_FAN_MIN(chan));
  871. data->fan[chan] =
  872. adm1031_read_value(client, ADM1031_REG_FAN_SPEED(chan));
  873. data->pwm[chan] =
  874. 0xf & (adm1031_read_value(client, ADM1031_REG_PWM) >>
  875. (4*chan));
  876. }
  877. data->last_updated = jiffies;
  878. data->valid = 1;
  879. }
  880. mutex_unlock(&data->update_lock);
  881. return data;
  882. }
  883. static int __init sensors_adm1031_init(void)
  884. {
  885. return i2c_add_driver(&adm1031_driver);
  886. }
  887. static void __exit sensors_adm1031_exit(void)
  888. {
  889. i2c_del_driver(&adm1031_driver);
  890. }
  891. MODULE_AUTHOR("Alexandre d'Alton <alex@alexdalton.org>");
  892. MODULE_DESCRIPTION("ADM1031/ADM1030 driver");
  893. MODULE_LICENSE("GPL");
  894. module_init(sensors_adm1031_init);
  895. module_exit(sensors_adm1031_exit);