adm1031.c 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149
  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. static int __init sensors_adm1031_init(void)
  984. {
  985. return i2c_add_driver(&adm1031_driver);
  986. }
  987. static void __exit sensors_adm1031_exit(void)
  988. {
  989. i2c_del_driver(&adm1031_driver);
  990. }
  991. MODULE_AUTHOR("Alexandre d'Alton <alex@alexdalton.org>");
  992. MODULE_DESCRIPTION("ADM1031/ADM1030 driver");
  993. MODULE_LICENSE("GPL");
  994. module_init(sensors_adm1031_init);
  995. module_exit(sensors_adm1031_exit);