adm1031.c 34 KB

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