adm1031.c 34 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144
  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,
  199. int chan, u8 val, u8 reg, u8 *new_reg)
  200. {
  201. int i;
  202. int first_match = -1, exact_match = -1;
  203. u8 other_reg_val =
  204. (*data->chan_select_table)[FAN_CHAN_FROM_REG(reg)][chan ? 0 : 1];
  205. if (val == 0) {
  206. *new_reg = 0;
  207. return 0;
  208. }
  209. for (i = 0; i < 8; i++) {
  210. if ((val == (*data->chan_select_table)[i][chan]) &&
  211. ((*data->chan_select_table)[i][chan ? 0 : 1] ==
  212. other_reg_val)) {
  213. /* We found an exact match */
  214. exact_match = i;
  215. break;
  216. } else if (val == (*data->chan_select_table)[i][chan] &&
  217. first_match == -1) {
  218. /*
  219. * Save the first match in case of an exact match has
  220. * not been found
  221. */
  222. first_match = i;
  223. }
  224. }
  225. if (exact_match >= 0)
  226. *new_reg = exact_match;
  227. else if (first_match >= 0)
  228. *new_reg = first_match;
  229. else
  230. return -EINVAL;
  231. return 0;
  232. }
  233. static ssize_t show_fan_auto_channel(struct device *dev,
  234. struct device_attribute *attr, char *buf)
  235. {
  236. int nr = to_sensor_dev_attr(attr)->index;
  237. struct adm1031_data *data = adm1031_update_device(dev);
  238. return sprintf(buf, "%d\n", GET_FAN_AUTO_BITFIELD(data, nr));
  239. }
  240. static ssize_t
  241. set_fan_auto_channel(struct device *dev, struct device_attribute *attr,
  242. const char *buf, size_t count)
  243. {
  244. struct i2c_client *client = to_i2c_client(dev);
  245. struct adm1031_data *data = i2c_get_clientdata(client);
  246. int nr = to_sensor_dev_attr(attr)->index;
  247. long val;
  248. u8 reg;
  249. int ret;
  250. u8 old_fan_mode;
  251. ret = kstrtol(buf, 10, &val);
  252. if (ret)
  253. return ret;
  254. old_fan_mode = data->conf1;
  255. mutex_lock(&data->update_lock);
  256. ret = get_fan_auto_nearest(data, nr, val, data->conf1, &reg);
  257. if (ret) {
  258. mutex_unlock(&data->update_lock);
  259. return ret;
  260. }
  261. data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
  262. if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^
  263. (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) {
  264. if (data->conf1 & ADM1031_CONF1_AUTO_MODE) {
  265. /*
  266. * Switch to Auto Fan Mode
  267. * Save PWM registers
  268. * Set PWM registers to 33% Both
  269. */
  270. data->old_pwm[0] = data->pwm[0];
  271. data->old_pwm[1] = data->pwm[1];
  272. adm1031_write_value(client, ADM1031_REG_PWM, 0x55);
  273. } else {
  274. /* Switch to Manual Mode */
  275. data->pwm[0] = data->old_pwm[0];
  276. data->pwm[1] = data->old_pwm[1];
  277. /* Restore PWM registers */
  278. adm1031_write_value(client, ADM1031_REG_PWM,
  279. data->pwm[0] | (data->pwm[1] << 4));
  280. }
  281. }
  282. data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
  283. adm1031_write_value(client, ADM1031_REG_CONF1, data->conf1);
  284. mutex_unlock(&data->update_lock);
  285. return count;
  286. }
  287. static SENSOR_DEVICE_ATTR(auto_fan1_channel, S_IRUGO | S_IWUSR,
  288. show_fan_auto_channel, set_fan_auto_channel, 0);
  289. static SENSOR_DEVICE_ATTR(auto_fan2_channel, S_IRUGO | S_IWUSR,
  290. show_fan_auto_channel, set_fan_auto_channel, 1);
  291. /* Auto Temps */
  292. static ssize_t show_auto_temp_off(struct device *dev,
  293. struct device_attribute *attr, char *buf)
  294. {
  295. int nr = to_sensor_dev_attr(attr)->index;
  296. struct adm1031_data *data = adm1031_update_device(dev);
  297. return sprintf(buf, "%d\n",
  298. AUTO_TEMP_OFF_FROM_REG(data->auto_temp[nr]));
  299. }
  300. static ssize_t show_auto_temp_min(struct device *dev,
  301. struct device_attribute *attr, char *buf)
  302. {
  303. int nr = to_sensor_dev_attr(attr)->index;
  304. struct adm1031_data *data = adm1031_update_device(dev);
  305. return sprintf(buf, "%d\n",
  306. AUTO_TEMP_MIN_FROM_REG(data->auto_temp[nr]));
  307. }
  308. static ssize_t
  309. set_auto_temp_min(struct device *dev, struct device_attribute *attr,
  310. const char *buf, size_t count)
  311. {
  312. struct i2c_client *client = to_i2c_client(dev);
  313. struct adm1031_data *data = i2c_get_clientdata(client);
  314. int nr = to_sensor_dev_attr(attr)->index;
  315. long val;
  316. int ret;
  317. ret = kstrtol(buf, 10, &val);
  318. if (ret)
  319. return ret;
  320. mutex_lock(&data->update_lock);
  321. data->auto_temp[nr] = AUTO_TEMP_MIN_TO_REG(val, data->auto_temp[nr]);
  322. adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
  323. data->auto_temp[nr]);
  324. mutex_unlock(&data->update_lock);
  325. return count;
  326. }
  327. static ssize_t show_auto_temp_max(struct device *dev,
  328. struct device_attribute *attr, char *buf)
  329. {
  330. int nr = to_sensor_dev_attr(attr)->index;
  331. struct adm1031_data *data = adm1031_update_device(dev);
  332. return sprintf(buf, "%d\n",
  333. AUTO_TEMP_MAX_FROM_REG(data->auto_temp[nr]));
  334. }
  335. static ssize_t
  336. set_auto_temp_max(struct device *dev, struct device_attribute *attr,
  337. const char *buf, size_t count)
  338. {
  339. struct i2c_client *client = to_i2c_client(dev);
  340. struct adm1031_data *data = i2c_get_clientdata(client);
  341. int nr = to_sensor_dev_attr(attr)->index;
  342. long val;
  343. int ret;
  344. ret = kstrtol(buf, 10, &val);
  345. if (ret)
  346. return ret;
  347. mutex_lock(&data->update_lock);
  348. data->temp_max[nr] = AUTO_TEMP_MAX_TO_REG(val, data->auto_temp[nr],
  349. data->pwm[nr]);
  350. adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
  351. data->temp_max[nr]);
  352. mutex_unlock(&data->update_lock);
  353. return count;
  354. }
  355. #define auto_temp_reg(offset) \
  356. static SENSOR_DEVICE_ATTR(auto_temp##offset##_off, S_IRUGO, \
  357. show_auto_temp_off, NULL, offset - 1); \
  358. static SENSOR_DEVICE_ATTR(auto_temp##offset##_min, S_IRUGO | S_IWUSR, \
  359. show_auto_temp_min, set_auto_temp_min, offset - 1); \
  360. static SENSOR_DEVICE_ATTR(auto_temp##offset##_max, S_IRUGO | S_IWUSR, \
  361. show_auto_temp_max, set_auto_temp_max, offset - 1)
  362. auto_temp_reg(1);
  363. auto_temp_reg(2);
  364. auto_temp_reg(3);
  365. /* pwm */
  366. static ssize_t show_pwm(struct device *dev,
  367. struct device_attribute *attr, char *buf)
  368. {
  369. int nr = to_sensor_dev_attr(attr)->index;
  370. struct adm1031_data *data = adm1031_update_device(dev);
  371. return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr]));
  372. }
  373. static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
  374. const char *buf, size_t count)
  375. {
  376. struct i2c_client *client = to_i2c_client(dev);
  377. struct adm1031_data *data = i2c_get_clientdata(client);
  378. int nr = to_sensor_dev_attr(attr)->index;
  379. long val;
  380. int ret, reg;
  381. ret = kstrtol(buf, 10, &val);
  382. if (ret)
  383. return ret;
  384. mutex_lock(&data->update_lock);
  385. if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) &&
  386. (((val>>4) & 0xf) != 5)) {
  387. /* In automatic mode, the only PWM accepted is 33% */
  388. mutex_unlock(&data->update_lock);
  389. return -EINVAL;
  390. }
  391. data->pwm[nr] = PWM_TO_REG(val);
  392. reg = adm1031_read_value(client, ADM1031_REG_PWM);
  393. adm1031_write_value(client, ADM1031_REG_PWM,
  394. nr ? ((data->pwm[nr] << 4) & 0xf0) | (reg & 0xf)
  395. : (data->pwm[nr] & 0xf) | (reg & 0xf0));
  396. mutex_unlock(&data->update_lock);
  397. return count;
  398. }
  399. static SENSOR_DEVICE_ATTR(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 0);
  400. static SENSOR_DEVICE_ATTR(pwm2, S_IRUGO | S_IWUSR, show_pwm, set_pwm, 1);
  401. static SENSOR_DEVICE_ATTR(auto_fan1_min_pwm, S_IRUGO | S_IWUSR,
  402. show_pwm, set_pwm, 0);
  403. static SENSOR_DEVICE_ATTR(auto_fan2_min_pwm, S_IRUGO | S_IWUSR,
  404. show_pwm, set_pwm, 1);
  405. /* Fans */
  406. /*
  407. * That function checks the cases where the fan reading is not
  408. * relevant. It is used to provide 0 as fan reading when the fan is
  409. * not supposed to run
  410. */
  411. static int trust_fan_readings(struct adm1031_data *data, int chan)
  412. {
  413. int res = 0;
  414. if (data->conf1 & ADM1031_CONF1_AUTO_MODE) {
  415. switch (data->conf1 & 0x60) {
  416. case 0x00:
  417. /*
  418. * remote temp1 controls fan1,
  419. * remote temp2 controls fan2
  420. */
  421. res = data->temp[chan+1] >=
  422. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[chan+1]);
  423. break;
  424. case 0x20: /* remote temp1 controls both fans */
  425. res =
  426. data->temp[1] >=
  427. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1]);
  428. break;
  429. case 0x40: /* remote temp2 controls both fans */
  430. res =
  431. data->temp[2] >=
  432. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2]);
  433. break;
  434. case 0x60: /* max controls both fans */
  435. res =
  436. data->temp[0] >=
  437. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[0])
  438. || data->temp[1] >=
  439. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1])
  440. || (data->chip_type == adm1031
  441. && data->temp[2] >=
  442. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2]));
  443. break;
  444. }
  445. } else {
  446. res = data->pwm[chan] > 0;
  447. }
  448. return res;
  449. }
  450. static ssize_t show_fan(struct device *dev,
  451. struct device_attribute *attr, char *buf)
  452. {
  453. int nr = to_sensor_dev_attr(attr)->index;
  454. struct adm1031_data *data = adm1031_update_device(dev);
  455. int value;
  456. value = trust_fan_readings(data, nr) ? FAN_FROM_REG(data->fan[nr],
  457. FAN_DIV_FROM_REG(data->fan_div[nr])) : 0;
  458. return sprintf(buf, "%d\n", value);
  459. }
  460. static ssize_t show_fan_div(struct device *dev,
  461. struct device_attribute *attr, char *buf)
  462. {
  463. int nr = to_sensor_dev_attr(attr)->index;
  464. struct adm1031_data *data = adm1031_update_device(dev);
  465. return sprintf(buf, "%d\n", FAN_DIV_FROM_REG(data->fan_div[nr]));
  466. }
  467. static ssize_t show_fan_min(struct device *dev,
  468. struct device_attribute *attr, char *buf)
  469. {
  470. int nr = to_sensor_dev_attr(attr)->index;
  471. struct adm1031_data *data = adm1031_update_device(dev);
  472. return sprintf(buf, "%d\n",
  473. FAN_FROM_REG(data->fan_min[nr],
  474. FAN_DIV_FROM_REG(data->fan_div[nr])));
  475. }
  476. static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
  477. const char *buf, size_t count)
  478. {
  479. struct i2c_client *client = to_i2c_client(dev);
  480. struct adm1031_data *data = i2c_get_clientdata(client);
  481. int nr = to_sensor_dev_attr(attr)->index;
  482. long val;
  483. int ret;
  484. ret = kstrtol(buf, 10, &val);
  485. if (ret)
  486. return ret;
  487. mutex_lock(&data->update_lock);
  488. if (val) {
  489. data->fan_min[nr] =
  490. FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr]));
  491. } else {
  492. data->fan_min[nr] = 0xff;
  493. }
  494. adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), data->fan_min[nr]);
  495. mutex_unlock(&data->update_lock);
  496. return count;
  497. }
  498. static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,
  499. const char *buf, size_t count)
  500. {
  501. struct i2c_client *client = to_i2c_client(dev);
  502. struct adm1031_data *data = i2c_get_clientdata(client);
  503. int nr = to_sensor_dev_attr(attr)->index;
  504. long val;
  505. u8 tmp;
  506. int old_div;
  507. int new_min;
  508. int ret;
  509. ret = kstrtol(buf, 10, &val);
  510. if (ret)
  511. return ret;
  512. tmp = val == 8 ? 0xc0 :
  513. val == 4 ? 0x80 :
  514. val == 2 ? 0x40 :
  515. val == 1 ? 0x00 :
  516. 0xff;
  517. if (tmp == 0xff)
  518. return -EINVAL;
  519. mutex_lock(&data->update_lock);
  520. /* Get fresh readings */
  521. data->fan_div[nr] = adm1031_read_value(client,
  522. ADM1031_REG_FAN_DIV(nr));
  523. data->fan_min[nr] = adm1031_read_value(client,
  524. ADM1031_REG_FAN_MIN(nr));
  525. /* Write the new clock divider and fan min */
  526. old_div = FAN_DIV_FROM_REG(data->fan_div[nr]);
  527. data->fan_div[nr] = tmp | (0x3f & data->fan_div[nr]);
  528. new_min = data->fan_min[nr] * old_div / val;
  529. data->fan_min[nr] = new_min > 0xff ? 0xff : new_min;
  530. adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr),
  531. data->fan_div[nr]);
  532. adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr),
  533. data->fan_min[nr]);
  534. /* Invalidate the cache: fan speed is no longer valid */
  535. data->valid = 0;
  536. mutex_unlock(&data->update_lock);
  537. return count;
  538. }
  539. #define fan_offset(offset) \
  540. static SENSOR_DEVICE_ATTR(fan##offset##_input, S_IRUGO, \
  541. show_fan, NULL, offset - 1); \
  542. static SENSOR_DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
  543. show_fan_min, set_fan_min, offset - 1); \
  544. static SENSOR_DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
  545. show_fan_div, set_fan_div, offset - 1)
  546. fan_offset(1);
  547. fan_offset(2);
  548. /* Temps */
  549. static ssize_t show_temp(struct device *dev,
  550. struct device_attribute *attr, char *buf)
  551. {
  552. int nr = to_sensor_dev_attr(attr)->index;
  553. struct adm1031_data *data = adm1031_update_device(dev);
  554. int ext;
  555. ext = nr == 0 ?
  556. ((data->ext_temp[nr] >> 6) & 0x3) * 2 :
  557. (((data->ext_temp[nr] >> ((nr - 1) * 3)) & 7));
  558. return sprintf(buf, "%d\n", TEMP_FROM_REG_EXT(data->temp[nr], ext));
  559. }
  560. static ssize_t show_temp_offset(struct device *dev,
  561. struct device_attribute *attr, char *buf)
  562. {
  563. int nr = to_sensor_dev_attr(attr)->index;
  564. struct adm1031_data *data = adm1031_update_device(dev);
  565. return sprintf(buf, "%d\n",
  566. TEMP_OFFSET_FROM_REG(data->temp_offset[nr]));
  567. }
  568. static ssize_t show_temp_min(struct device *dev,
  569. struct device_attribute *attr, char *buf)
  570. {
  571. int nr = to_sensor_dev_attr(attr)->index;
  572. struct adm1031_data *data = adm1031_update_device(dev);
  573. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
  574. }
  575. static ssize_t show_temp_max(struct device *dev,
  576. struct device_attribute *attr, char *buf)
  577. {
  578. int nr = to_sensor_dev_attr(attr)->index;
  579. struct adm1031_data *data = adm1031_update_device(dev);
  580. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
  581. }
  582. static ssize_t show_temp_crit(struct device *dev,
  583. struct device_attribute *attr, char *buf)
  584. {
  585. int nr = to_sensor_dev_attr(attr)->index;
  586. struct adm1031_data *data = adm1031_update_device(dev);
  587. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr]));
  588. }
  589. static ssize_t set_temp_offset(struct device *dev,
  590. struct device_attribute *attr, const char *buf,
  591. size_t count)
  592. {
  593. struct i2c_client *client = to_i2c_client(dev);
  594. struct adm1031_data *data = i2c_get_clientdata(client);
  595. int nr = to_sensor_dev_attr(attr)->index;
  596. long val;
  597. int ret;
  598. ret = kstrtol(buf, 10, &val);
  599. if (ret)
  600. return ret;
  601. val = SENSORS_LIMIT(val, -15000, 15000);
  602. mutex_lock(&data->update_lock);
  603. data->temp_offset[nr] = TEMP_OFFSET_TO_REG(val);
  604. adm1031_write_value(client, ADM1031_REG_TEMP_OFFSET(nr),
  605. data->temp_offset[nr]);
  606. mutex_unlock(&data->update_lock);
  607. return count;
  608. }
  609. static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,
  610. const char *buf, size_t count)
  611. {
  612. struct i2c_client *client = to_i2c_client(dev);
  613. struct adm1031_data *data = i2c_get_clientdata(client);
  614. int nr = to_sensor_dev_attr(attr)->index;
  615. long val;
  616. int ret;
  617. ret = kstrtol(buf, 10, &val);
  618. if (ret)
  619. return ret;
  620. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  621. mutex_lock(&data->update_lock);
  622. data->temp_min[nr] = TEMP_TO_REG(val);
  623. adm1031_write_value(client, ADM1031_REG_TEMP_MIN(nr),
  624. data->temp_min[nr]);
  625. mutex_unlock(&data->update_lock);
  626. return count;
  627. }
  628. static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,
  629. const char *buf, size_t count)
  630. {
  631. struct i2c_client *client = to_i2c_client(dev);
  632. struct adm1031_data *data = i2c_get_clientdata(client);
  633. int nr = to_sensor_dev_attr(attr)->index;
  634. long val;
  635. int ret;
  636. ret = kstrtol(buf, 10, &val);
  637. if (ret)
  638. return ret;
  639. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  640. mutex_lock(&data->update_lock);
  641. data->temp_max[nr] = TEMP_TO_REG(val);
  642. adm1031_write_value(client, ADM1031_REG_TEMP_MAX(nr),
  643. data->temp_max[nr]);
  644. mutex_unlock(&data->update_lock);
  645. return count;
  646. }
  647. static ssize_t set_temp_crit(struct device *dev, struct device_attribute *attr,
  648. const char *buf, size_t count)
  649. {
  650. struct i2c_client *client = to_i2c_client(dev);
  651. struct adm1031_data *data = i2c_get_clientdata(client);
  652. int nr = to_sensor_dev_attr(attr)->index;
  653. long val;
  654. int ret;
  655. ret = kstrtol(buf, 10, &val);
  656. if (ret)
  657. return ret;
  658. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  659. mutex_lock(&data->update_lock);
  660. data->temp_crit[nr] = TEMP_TO_REG(val);
  661. adm1031_write_value(client, ADM1031_REG_TEMP_CRIT(nr),
  662. data->temp_crit[nr]);
  663. mutex_unlock(&data->update_lock);
  664. return count;
  665. }
  666. #define temp_reg(offset) \
  667. static SENSOR_DEVICE_ATTR(temp##offset##_input, S_IRUGO, \
  668. show_temp, NULL, offset - 1); \
  669. static SENSOR_DEVICE_ATTR(temp##offset##_offset, S_IRUGO | S_IWUSR, \
  670. show_temp_offset, set_temp_offset, offset - 1); \
  671. static SENSOR_DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
  672. show_temp_min, set_temp_min, offset - 1); \
  673. static SENSOR_DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
  674. show_temp_max, set_temp_max, offset - 1); \
  675. static SENSOR_DEVICE_ATTR(temp##offset##_crit, S_IRUGO | S_IWUSR, \
  676. show_temp_crit, set_temp_crit, offset - 1)
  677. temp_reg(1);
  678. temp_reg(2);
  679. temp_reg(3);
  680. /* Alarms */
  681. static ssize_t show_alarms(struct device *dev, struct device_attribute *attr,
  682. char *buf)
  683. {
  684. struct adm1031_data *data = adm1031_update_device(dev);
  685. return sprintf(buf, "%d\n", data->alarm);
  686. }
  687. static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
  688. static ssize_t show_alarm(struct device *dev,
  689. struct device_attribute *attr, char *buf)
  690. {
  691. int bitnr = to_sensor_dev_attr(attr)->index;
  692. struct adm1031_data *data = adm1031_update_device(dev);
  693. return sprintf(buf, "%d\n", (data->alarm >> bitnr) & 1);
  694. }
  695. static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL, 0);
  696. static SENSOR_DEVICE_ATTR(fan1_fault, S_IRUGO, show_alarm, NULL, 1);
  697. static SENSOR_DEVICE_ATTR(temp2_max_alarm, S_IRUGO, show_alarm, NULL, 2);
  698. static SENSOR_DEVICE_ATTR(temp2_min_alarm, S_IRUGO, show_alarm, NULL, 3);
  699. static SENSOR_DEVICE_ATTR(temp2_crit_alarm, S_IRUGO, show_alarm, NULL, 4);
  700. static SENSOR_DEVICE_ATTR(temp2_fault, S_IRUGO, show_alarm, NULL, 5);
  701. static SENSOR_DEVICE_ATTR(temp1_max_alarm, S_IRUGO, show_alarm, NULL, 6);
  702. static SENSOR_DEVICE_ATTR(temp1_min_alarm, S_IRUGO, show_alarm, NULL, 7);
  703. static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL, 8);
  704. static SENSOR_DEVICE_ATTR(fan2_fault, S_IRUGO, show_alarm, NULL, 9);
  705. static SENSOR_DEVICE_ATTR(temp3_max_alarm, S_IRUGO, show_alarm, NULL, 10);
  706. static SENSOR_DEVICE_ATTR(temp3_min_alarm, S_IRUGO, show_alarm, NULL, 11);
  707. static SENSOR_DEVICE_ATTR(temp3_crit_alarm, S_IRUGO, show_alarm, NULL, 12);
  708. static SENSOR_DEVICE_ATTR(temp3_fault, S_IRUGO, show_alarm, NULL, 13);
  709. static SENSOR_DEVICE_ATTR(temp1_crit_alarm, S_IRUGO, show_alarm, NULL, 14);
  710. /* Update Interval */
  711. static const unsigned int update_intervals[] = {
  712. 16000, 8000, 4000, 2000, 1000, 500, 250, 125,
  713. };
  714. static ssize_t show_update_interval(struct device *dev,
  715. struct device_attribute *attr, char *buf)
  716. {
  717. struct i2c_client *client = to_i2c_client(dev);
  718. struct adm1031_data *data = i2c_get_clientdata(client);
  719. return sprintf(buf, "%u\n", data->update_interval);
  720. }
  721. static ssize_t set_update_interval(struct device *dev,
  722. struct device_attribute *attr,
  723. const char *buf, size_t count)
  724. {
  725. struct i2c_client *client = to_i2c_client(dev);
  726. struct adm1031_data *data = i2c_get_clientdata(client);
  727. unsigned long val;
  728. int i, err;
  729. u8 reg;
  730. err = kstrtoul(buf, 10, &val);
  731. if (err)
  732. return err;
  733. /*
  734. * Find the nearest update interval from the table.
  735. * Use it to determine the matching update rate.
  736. */
  737. for (i = 0; i < ARRAY_SIZE(update_intervals) - 1; i++) {
  738. if (val >= update_intervals[i])
  739. break;
  740. }
  741. /* if not found, we point to the last entry (lowest update interval) */
  742. /* set the new update rate while preserving other settings */
  743. reg = adm1031_read_value(client, ADM1031_REG_FAN_FILTER);
  744. reg &= ~ADM1031_UPDATE_RATE_MASK;
  745. reg |= i << ADM1031_UPDATE_RATE_SHIFT;
  746. adm1031_write_value(client, ADM1031_REG_FAN_FILTER, reg);
  747. mutex_lock(&data->update_lock);
  748. data->update_interval = update_intervals[i];
  749. mutex_unlock(&data->update_lock);
  750. return count;
  751. }
  752. static DEVICE_ATTR(update_interval, S_IRUGO | S_IWUSR, show_update_interval,
  753. set_update_interval);
  754. static struct attribute *adm1031_attributes[] = {
  755. &sensor_dev_attr_fan1_input.dev_attr.attr,
  756. &sensor_dev_attr_fan1_div.dev_attr.attr,
  757. &sensor_dev_attr_fan1_min.dev_attr.attr,
  758. &sensor_dev_attr_fan1_alarm.dev_attr.attr,
  759. &sensor_dev_attr_fan1_fault.dev_attr.attr,
  760. &sensor_dev_attr_pwm1.dev_attr.attr,
  761. &sensor_dev_attr_auto_fan1_channel.dev_attr.attr,
  762. &sensor_dev_attr_temp1_input.dev_attr.attr,
  763. &sensor_dev_attr_temp1_offset.dev_attr.attr,
  764. &sensor_dev_attr_temp1_min.dev_attr.attr,
  765. &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
  766. &sensor_dev_attr_temp1_max.dev_attr.attr,
  767. &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
  768. &sensor_dev_attr_temp1_crit.dev_attr.attr,
  769. &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
  770. &sensor_dev_attr_temp2_input.dev_attr.attr,
  771. &sensor_dev_attr_temp2_offset.dev_attr.attr,
  772. &sensor_dev_attr_temp2_min.dev_attr.attr,
  773. &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
  774. &sensor_dev_attr_temp2_max.dev_attr.attr,
  775. &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
  776. &sensor_dev_attr_temp2_crit.dev_attr.attr,
  777. &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
  778. &sensor_dev_attr_temp2_fault.dev_attr.attr,
  779. &sensor_dev_attr_auto_temp1_off.dev_attr.attr,
  780. &sensor_dev_attr_auto_temp1_min.dev_attr.attr,
  781. &sensor_dev_attr_auto_temp1_max.dev_attr.attr,
  782. &sensor_dev_attr_auto_temp2_off.dev_attr.attr,
  783. &sensor_dev_attr_auto_temp2_min.dev_attr.attr,
  784. &sensor_dev_attr_auto_temp2_max.dev_attr.attr,
  785. &sensor_dev_attr_auto_fan1_min_pwm.dev_attr.attr,
  786. &dev_attr_update_interval.attr,
  787. &dev_attr_alarms.attr,
  788. NULL
  789. };
  790. static const struct attribute_group adm1031_group = {
  791. .attrs = adm1031_attributes,
  792. };
  793. static struct attribute *adm1031_attributes_opt[] = {
  794. &sensor_dev_attr_fan2_input.dev_attr.attr,
  795. &sensor_dev_attr_fan2_div.dev_attr.attr,
  796. &sensor_dev_attr_fan2_min.dev_attr.attr,
  797. &sensor_dev_attr_fan2_alarm.dev_attr.attr,
  798. &sensor_dev_attr_fan2_fault.dev_attr.attr,
  799. &sensor_dev_attr_pwm2.dev_attr.attr,
  800. &sensor_dev_attr_auto_fan2_channel.dev_attr.attr,
  801. &sensor_dev_attr_temp3_input.dev_attr.attr,
  802. &sensor_dev_attr_temp3_offset.dev_attr.attr,
  803. &sensor_dev_attr_temp3_min.dev_attr.attr,
  804. &sensor_dev_attr_temp3_min_alarm.dev_attr.attr,
  805. &sensor_dev_attr_temp3_max.dev_attr.attr,
  806. &sensor_dev_attr_temp3_max_alarm.dev_attr.attr,
  807. &sensor_dev_attr_temp3_crit.dev_attr.attr,
  808. &sensor_dev_attr_temp3_crit_alarm.dev_attr.attr,
  809. &sensor_dev_attr_temp3_fault.dev_attr.attr,
  810. &sensor_dev_attr_auto_temp3_off.dev_attr.attr,
  811. &sensor_dev_attr_auto_temp3_min.dev_attr.attr,
  812. &sensor_dev_attr_auto_temp3_max.dev_attr.attr,
  813. &sensor_dev_attr_auto_fan2_min_pwm.dev_attr.attr,
  814. NULL
  815. };
  816. static const struct attribute_group adm1031_group_opt = {
  817. .attrs = adm1031_attributes_opt,
  818. };
  819. /* Return 0 if detection is successful, -ENODEV otherwise */
  820. static int adm1031_detect(struct i2c_client *client,
  821. struct i2c_board_info *info)
  822. {
  823. struct i2c_adapter *adapter = client->adapter;
  824. const char *name;
  825. int id, co;
  826. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  827. return -ENODEV;
  828. id = i2c_smbus_read_byte_data(client, 0x3d);
  829. co = i2c_smbus_read_byte_data(client, 0x3e);
  830. if (!((id == 0x31 || id == 0x30) && co == 0x41))
  831. return -ENODEV;
  832. name = (id == 0x30) ? "adm1030" : "adm1031";
  833. strlcpy(info->type, name, I2C_NAME_SIZE);
  834. return 0;
  835. }
  836. static int adm1031_probe(struct i2c_client *client,
  837. const struct i2c_device_id *id)
  838. {
  839. struct adm1031_data *data;
  840. int err;
  841. data = kzalloc(sizeof(struct adm1031_data), GFP_KERNEL);
  842. if (!data) {
  843. err = -ENOMEM;
  844. goto exit;
  845. }
  846. i2c_set_clientdata(client, data);
  847. data->chip_type = id->driver_data;
  848. mutex_init(&data->update_lock);
  849. if (data->chip_type == adm1030)
  850. data->chan_select_table = &auto_channel_select_table_adm1030;
  851. else
  852. data->chan_select_table = &auto_channel_select_table_adm1031;
  853. /* Initialize the ADM1031 chip */
  854. adm1031_init_client(client);
  855. /* Register sysfs hooks */
  856. err = sysfs_create_group(&client->dev.kobj, &adm1031_group);
  857. if (err)
  858. goto exit_free;
  859. if (data->chip_type == adm1031) {
  860. err = sysfs_create_group(&client->dev.kobj, &adm1031_group_opt);
  861. if (err)
  862. goto exit_remove;
  863. }
  864. data->hwmon_dev = hwmon_device_register(&client->dev);
  865. if (IS_ERR(data->hwmon_dev)) {
  866. err = PTR_ERR(data->hwmon_dev);
  867. goto exit_remove;
  868. }
  869. return 0;
  870. exit_remove:
  871. sysfs_remove_group(&client->dev.kobj, &adm1031_group);
  872. sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt);
  873. exit_free:
  874. kfree(data);
  875. exit:
  876. return err;
  877. }
  878. static int adm1031_remove(struct i2c_client *client)
  879. {
  880. struct adm1031_data *data = i2c_get_clientdata(client);
  881. hwmon_device_unregister(data->hwmon_dev);
  882. sysfs_remove_group(&client->dev.kobj, &adm1031_group);
  883. sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt);
  884. kfree(data);
  885. return 0;
  886. }
  887. static void adm1031_init_client(struct i2c_client *client)
  888. {
  889. unsigned int read_val;
  890. unsigned int mask;
  891. int i;
  892. struct adm1031_data *data = i2c_get_clientdata(client);
  893. mask = (ADM1031_CONF2_PWM1_ENABLE | ADM1031_CONF2_TACH1_ENABLE);
  894. if (data->chip_type == adm1031) {
  895. mask |= (ADM1031_CONF2_PWM2_ENABLE |
  896. ADM1031_CONF2_TACH2_ENABLE);
  897. }
  898. /* Initialize the ADM1031 chip (enables fan speed reading ) */
  899. read_val = adm1031_read_value(client, ADM1031_REG_CONF2);
  900. if ((read_val | mask) != read_val)
  901. adm1031_write_value(client, ADM1031_REG_CONF2, read_val | mask);
  902. read_val = adm1031_read_value(client, ADM1031_REG_CONF1);
  903. if ((read_val | ADM1031_CONF1_MONITOR_ENABLE) != read_val) {
  904. adm1031_write_value(client, ADM1031_REG_CONF1,
  905. read_val | ADM1031_CONF1_MONITOR_ENABLE);
  906. }
  907. /* Read the chip's update rate */
  908. mask = ADM1031_UPDATE_RATE_MASK;
  909. read_val = adm1031_read_value(client, ADM1031_REG_FAN_FILTER);
  910. i = (read_val & mask) >> ADM1031_UPDATE_RATE_SHIFT;
  911. /* Save it as update interval */
  912. data->update_interval = update_intervals[i];
  913. }
  914. static struct adm1031_data *adm1031_update_device(struct device *dev)
  915. {
  916. struct i2c_client *client = to_i2c_client(dev);
  917. struct adm1031_data *data = i2c_get_clientdata(client);
  918. unsigned long next_update;
  919. int chan;
  920. mutex_lock(&data->update_lock);
  921. next_update = data->last_updated
  922. + msecs_to_jiffies(data->update_interval);
  923. if (time_after(jiffies, next_update) || !data->valid) {
  924. dev_dbg(&client->dev, "Starting adm1031 update\n");
  925. for (chan = 0;
  926. chan < ((data->chip_type == adm1031) ? 3 : 2); chan++) {
  927. u8 oldh, newh;
  928. oldh =
  929. adm1031_read_value(client, ADM1031_REG_TEMP(chan));
  930. data->ext_temp[chan] =
  931. adm1031_read_value(client, ADM1031_REG_EXT_TEMP);
  932. newh =
  933. adm1031_read_value(client, ADM1031_REG_TEMP(chan));
  934. if (newh != oldh) {
  935. data->ext_temp[chan] =
  936. adm1031_read_value(client,
  937. ADM1031_REG_EXT_TEMP);
  938. #ifdef DEBUG
  939. oldh =
  940. adm1031_read_value(client,
  941. ADM1031_REG_TEMP(chan));
  942. /* oldh is actually newer */
  943. if (newh != oldh)
  944. dev_warn(&client->dev,
  945. "Remote temperature may be wrong.\n");
  946. #endif
  947. }
  948. data->temp[chan] = newh;
  949. data->temp_offset[chan] =
  950. adm1031_read_value(client,
  951. ADM1031_REG_TEMP_OFFSET(chan));
  952. data->temp_min[chan] =
  953. adm1031_read_value(client,
  954. ADM1031_REG_TEMP_MIN(chan));
  955. data->temp_max[chan] =
  956. adm1031_read_value(client,
  957. ADM1031_REG_TEMP_MAX(chan));
  958. data->temp_crit[chan] =
  959. adm1031_read_value(client,
  960. ADM1031_REG_TEMP_CRIT(chan));
  961. data->auto_temp[chan] =
  962. adm1031_read_value(client,
  963. ADM1031_REG_AUTO_TEMP(chan));
  964. }
  965. data->conf1 = adm1031_read_value(client, ADM1031_REG_CONF1);
  966. data->conf2 = adm1031_read_value(client, ADM1031_REG_CONF2);
  967. data->alarm = adm1031_read_value(client, ADM1031_REG_STATUS(0))
  968. | (adm1031_read_value(client, ADM1031_REG_STATUS(1)) << 8);
  969. if (data->chip_type == adm1030)
  970. data->alarm &= 0xc0ff;
  971. for (chan = 0; chan < (data->chip_type == adm1030 ? 1 : 2);
  972. chan++) {
  973. data->fan_div[chan] =
  974. adm1031_read_value(client,
  975. ADM1031_REG_FAN_DIV(chan));
  976. data->fan_min[chan] =
  977. adm1031_read_value(client,
  978. ADM1031_REG_FAN_MIN(chan));
  979. data->fan[chan] =
  980. adm1031_read_value(client,
  981. ADM1031_REG_FAN_SPEED(chan));
  982. data->pwm[chan] =
  983. (adm1031_read_value(client,
  984. ADM1031_REG_PWM) >> (4 * chan)) & 0x0f;
  985. }
  986. data->last_updated = jiffies;
  987. data->valid = 1;
  988. }
  989. mutex_unlock(&data->update_lock);
  990. return data;
  991. }
  992. module_i2c_driver(adm1031_driver);
  993. MODULE_AUTHOR("Alexandre d'Alton <alex@alexdalton.org>");
  994. MODULE_DESCRIPTION("ADM1031/ADM1030 driver");
  995. MODULE_LICENSE("GPL");