adm1031.c 30 KB

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