adm1031.c 34 KB

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