adm1031.c 34 KB

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