adm1031.c 30 KB

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