adm1031.c 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021
  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) (0x0a + (nr))
  37. #define ADM1031_REG_AUTO_TEMP(nr) (0x24 + (nr))
  38. #define ADM1031_REG_STATUS(nr) (0x2 + (nr))
  39. #define ADM1031_REG_CONF1 0x00
  40. #define ADM1031_REG_CONF2 0x01
  41. #define ADM1031_REG_EXT_TEMP 0x06
  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 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_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 const 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 const 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
  192. * not been 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. data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
  227. if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^
  228. (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) {
  229. if (data->conf1 & ADM1031_CONF1_AUTO_MODE){
  230. /* Switch to Auto Fan Mode
  231. * Save PWM registers
  232. * Set PWM registers to 33% Both */
  233. data->old_pwm[0] = data->pwm[0];
  234. data->old_pwm[1] = data->pwm[1];
  235. adm1031_write_value(client, ADM1031_REG_PWM, 0x55);
  236. } else {
  237. /* Switch to Manual Mode */
  238. data->pwm[0] = data->old_pwm[0];
  239. data->pwm[1] = data->old_pwm[1];
  240. /* Restore PWM registers */
  241. adm1031_write_value(client, ADM1031_REG_PWM,
  242. data->pwm[0] | (data->pwm[1] << 4));
  243. }
  244. }
  245. data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
  246. adm1031_write_value(client, ADM1031_REG_CONF1, data->conf1);
  247. mutex_unlock(&data->update_lock);
  248. return count;
  249. }
  250. #define fan_auto_channel_offset(offset) \
  251. static ssize_t show_fan_auto_channel_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
  252. { \
  253. return show_fan_auto_channel(dev, buf, offset - 1); \
  254. } \
  255. static ssize_t set_fan_auto_channel_##offset (struct device *dev, struct device_attribute *attr, \
  256. const char *buf, size_t count) \
  257. { \
  258. return set_fan_auto_channel(dev, buf, count, offset - 1); \
  259. } \
  260. static DEVICE_ATTR(auto_fan##offset##_channel, S_IRUGO | S_IWUSR, \
  261. show_fan_auto_channel_##offset, \
  262. set_fan_auto_channel_##offset)
  263. fan_auto_channel_offset(1);
  264. fan_auto_channel_offset(2);
  265. /* Auto Temps */
  266. static ssize_t show_auto_temp_off(struct device *dev, char *buf, int nr)
  267. {
  268. struct adm1031_data *data = adm1031_update_device(dev);
  269. return sprintf(buf, "%d\n",
  270. AUTO_TEMP_OFF_FROM_REG(data->auto_temp[nr]));
  271. }
  272. static ssize_t show_auto_temp_min(struct device *dev, char *buf, int nr)
  273. {
  274. struct adm1031_data *data = adm1031_update_device(dev);
  275. return sprintf(buf, "%d\n",
  276. AUTO_TEMP_MIN_FROM_REG(data->auto_temp[nr]));
  277. }
  278. static ssize_t
  279. set_auto_temp_min(struct device *dev, const char *buf, size_t count, int nr)
  280. {
  281. struct i2c_client *client = to_i2c_client(dev);
  282. struct adm1031_data *data = i2c_get_clientdata(client);
  283. int val = simple_strtol(buf, NULL, 10);
  284. mutex_lock(&data->update_lock);
  285. data->auto_temp[nr] = AUTO_TEMP_MIN_TO_REG(val, data->auto_temp[nr]);
  286. adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
  287. data->auto_temp[nr]);
  288. mutex_unlock(&data->update_lock);
  289. return count;
  290. }
  291. static ssize_t show_auto_temp_max(struct device *dev, char *buf, int nr)
  292. {
  293. struct adm1031_data *data = adm1031_update_device(dev);
  294. return sprintf(buf, "%d\n",
  295. AUTO_TEMP_MAX_FROM_REG(data->auto_temp[nr]));
  296. }
  297. static ssize_t
  298. set_auto_temp_max(struct device *dev, const char *buf, size_t count, int nr)
  299. {
  300. struct i2c_client *client = to_i2c_client(dev);
  301. struct adm1031_data *data = i2c_get_clientdata(client);
  302. int val = simple_strtol(buf, NULL, 10);
  303. mutex_lock(&data->update_lock);
  304. data->temp_max[nr] = AUTO_TEMP_MAX_TO_REG(val, data->auto_temp[nr], data->pwm[nr]);
  305. adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
  306. data->temp_max[nr]);
  307. mutex_unlock(&data->update_lock);
  308. return count;
  309. }
  310. #define auto_temp_reg(offset) \
  311. static ssize_t show_auto_temp_##offset##_off (struct device *dev, struct device_attribute *attr, char *buf) \
  312. { \
  313. return show_auto_temp_off(dev, buf, offset - 1); \
  314. } \
  315. static ssize_t show_auto_temp_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf) \
  316. { \
  317. return show_auto_temp_min(dev, buf, offset - 1); \
  318. } \
  319. static ssize_t show_auto_temp_##offset##_max (struct device *dev, struct device_attribute *attr, char *buf) \
  320. { \
  321. return show_auto_temp_max(dev, buf, offset - 1); \
  322. } \
  323. static ssize_t set_auto_temp_##offset##_min (struct device *dev, struct device_attribute *attr, \
  324. const char *buf, size_t count) \
  325. { \
  326. return set_auto_temp_min(dev, buf, count, offset - 1); \
  327. } \
  328. static ssize_t set_auto_temp_##offset##_max (struct device *dev, struct device_attribute *attr, \
  329. const char *buf, size_t count) \
  330. { \
  331. return set_auto_temp_max(dev, buf, count, offset - 1); \
  332. } \
  333. static DEVICE_ATTR(auto_temp##offset##_off, S_IRUGO, \
  334. show_auto_temp_##offset##_off, NULL); \
  335. static DEVICE_ATTR(auto_temp##offset##_min, S_IRUGO | S_IWUSR, \
  336. show_auto_temp_##offset##_min, set_auto_temp_##offset##_min);\
  337. static DEVICE_ATTR(auto_temp##offset##_max, S_IRUGO | S_IWUSR, \
  338. show_auto_temp_##offset##_max, set_auto_temp_##offset##_max)
  339. auto_temp_reg(1);
  340. auto_temp_reg(2);
  341. auto_temp_reg(3);
  342. /* pwm */
  343. static ssize_t show_pwm(struct device *dev, char *buf, int nr)
  344. {
  345. struct adm1031_data *data = adm1031_update_device(dev);
  346. return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr]));
  347. }
  348. static ssize_t
  349. set_pwm(struct device *dev, const char *buf, size_t count, int nr)
  350. {
  351. struct i2c_client *client = to_i2c_client(dev);
  352. struct adm1031_data *data = i2c_get_clientdata(client);
  353. int val = simple_strtol(buf, NULL, 10);
  354. int reg;
  355. mutex_lock(&data->update_lock);
  356. if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) &&
  357. (((val>>4) & 0xf) != 5)) {
  358. /* In automatic mode, the only PWM accepted is 33% */
  359. mutex_unlock(&data->update_lock);
  360. return -EINVAL;
  361. }
  362. data->pwm[nr] = PWM_TO_REG(val);
  363. reg = adm1031_read_value(client, ADM1031_REG_PWM);
  364. adm1031_write_value(client, ADM1031_REG_PWM,
  365. nr ? ((data->pwm[nr] << 4) & 0xf0) | (reg & 0xf)
  366. : (data->pwm[nr] & 0xf) | (reg & 0xf0));
  367. mutex_unlock(&data->update_lock);
  368. return count;
  369. }
  370. #define pwm_reg(offset) \
  371. static ssize_t show_pwm_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
  372. { \
  373. return show_pwm(dev, buf, offset - 1); \
  374. } \
  375. static ssize_t set_pwm_##offset (struct device *dev, struct device_attribute *attr, \
  376. const char *buf, size_t count) \
  377. { \
  378. return set_pwm(dev, buf, count, offset - 1); \
  379. } \
  380. static DEVICE_ATTR(pwm##offset, S_IRUGO | S_IWUSR, \
  381. show_pwm_##offset, set_pwm_##offset)
  382. pwm_reg(1);
  383. pwm_reg(2);
  384. /* Fans */
  385. /*
  386. * That function checks the cases where the fan reading is not
  387. * relevant. It is used to provide 0 as fan reading when the fan is
  388. * not supposed to run
  389. */
  390. static int trust_fan_readings(struct adm1031_data *data, int chan)
  391. {
  392. int res = 0;
  393. if (data->conf1 & ADM1031_CONF1_AUTO_MODE) {
  394. switch (data->conf1 & 0x60) {
  395. case 0x00: /* remote temp1 controls fan1 remote temp2 controls fan2 */
  396. res = data->temp[chan+1] >=
  397. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[chan+1]);
  398. break;
  399. case 0x20: /* remote temp1 controls both fans */
  400. res =
  401. data->temp[1] >=
  402. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1]);
  403. break;
  404. case 0x40: /* remote temp2 controls both fans */
  405. res =
  406. data->temp[2] >=
  407. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2]);
  408. break;
  409. case 0x60: /* max controls both fans */
  410. res =
  411. data->temp[0] >=
  412. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[0])
  413. || data->temp[1] >=
  414. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1])
  415. || (data->chip_type == adm1031
  416. && data->temp[2] >=
  417. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2]));
  418. break;
  419. }
  420. } else {
  421. res = data->pwm[chan] > 0;
  422. }
  423. return res;
  424. }
  425. static ssize_t show_fan(struct device *dev, char *buf, int nr)
  426. {
  427. struct adm1031_data *data = adm1031_update_device(dev);
  428. int value;
  429. value = trust_fan_readings(data, nr) ? FAN_FROM_REG(data->fan[nr],
  430. FAN_DIV_FROM_REG(data->fan_div[nr])) : 0;
  431. return sprintf(buf, "%d\n", value);
  432. }
  433. static ssize_t show_fan_div(struct device *dev, char *buf, int nr)
  434. {
  435. struct adm1031_data *data = adm1031_update_device(dev);
  436. return sprintf(buf, "%d\n", FAN_DIV_FROM_REG(data->fan_div[nr]));
  437. }
  438. static ssize_t show_fan_min(struct device *dev, char *buf, int nr)
  439. {
  440. struct adm1031_data *data = adm1031_update_device(dev);
  441. return sprintf(buf, "%d\n",
  442. FAN_FROM_REG(data->fan_min[nr],
  443. FAN_DIV_FROM_REG(data->fan_div[nr])));
  444. }
  445. static ssize_t
  446. set_fan_min(struct device *dev, const char *buf, size_t count, int nr)
  447. {
  448. struct i2c_client *client = to_i2c_client(dev);
  449. struct adm1031_data *data = i2c_get_clientdata(client);
  450. int val = simple_strtol(buf, NULL, 10);
  451. mutex_lock(&data->update_lock);
  452. if (val) {
  453. data->fan_min[nr] =
  454. FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr]));
  455. } else {
  456. data->fan_min[nr] = 0xff;
  457. }
  458. adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), data->fan_min[nr]);
  459. mutex_unlock(&data->update_lock);
  460. return count;
  461. }
  462. static ssize_t
  463. set_fan_div(struct device *dev, const char *buf, size_t count, int nr)
  464. {
  465. struct i2c_client *client = to_i2c_client(dev);
  466. struct adm1031_data *data = i2c_get_clientdata(client);
  467. int val = simple_strtol(buf, NULL, 10);
  468. u8 tmp;
  469. int old_div;
  470. int new_min;
  471. tmp = val == 8 ? 0xc0 :
  472. val == 4 ? 0x80 :
  473. val == 2 ? 0x40 :
  474. val == 1 ? 0x00 :
  475. 0xff;
  476. if (tmp == 0xff)
  477. return -EINVAL;
  478. mutex_lock(&data->update_lock);
  479. /* Get fresh readings */
  480. data->fan_div[nr] = adm1031_read_value(client,
  481. ADM1031_REG_FAN_DIV(nr));
  482. data->fan_min[nr] = adm1031_read_value(client,
  483. ADM1031_REG_FAN_MIN(nr));
  484. /* Write the new clock divider and fan min */
  485. old_div = FAN_DIV_FROM_REG(data->fan_div[nr]);
  486. data->fan_div[nr] = tmp | (0x3f & data->fan_div[nr]);
  487. new_min = data->fan_min[nr] * old_div / val;
  488. data->fan_min[nr] = new_min > 0xff ? 0xff : new_min;
  489. adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr),
  490. data->fan_div[nr]);
  491. adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr),
  492. data->fan_min[nr]);
  493. /* Invalidate the cache: fan speed is no longer valid */
  494. data->valid = 0;
  495. mutex_unlock(&data->update_lock);
  496. return count;
  497. }
  498. #define fan_offset(offset) \
  499. static ssize_t show_fan_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
  500. { \
  501. return show_fan(dev, buf, offset - 1); \
  502. } \
  503. static ssize_t show_fan_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf) \
  504. { \
  505. return show_fan_min(dev, buf, offset - 1); \
  506. } \
  507. static ssize_t show_fan_##offset##_div (struct device *dev, struct device_attribute *attr, char *buf) \
  508. { \
  509. return show_fan_div(dev, buf, offset - 1); \
  510. } \
  511. static ssize_t set_fan_##offset##_min (struct device *dev, struct device_attribute *attr, \
  512. const char *buf, size_t count) \
  513. { \
  514. return set_fan_min(dev, buf, count, offset - 1); \
  515. } \
  516. static ssize_t set_fan_##offset##_div (struct device *dev, struct device_attribute *attr, \
  517. const char *buf, size_t count) \
  518. { \
  519. return set_fan_div(dev, buf, count, offset - 1); \
  520. } \
  521. static DEVICE_ATTR(fan##offset##_input, S_IRUGO, show_fan_##offset, \
  522. NULL); \
  523. static DEVICE_ATTR(fan##offset##_min, S_IRUGO | S_IWUSR, \
  524. show_fan_##offset##_min, set_fan_##offset##_min); \
  525. static DEVICE_ATTR(fan##offset##_div, S_IRUGO | S_IWUSR, \
  526. show_fan_##offset##_div, set_fan_##offset##_div); \
  527. static DEVICE_ATTR(auto_fan##offset##_min_pwm, S_IRUGO | S_IWUSR, \
  528. show_pwm_##offset, set_pwm_##offset)
  529. fan_offset(1);
  530. fan_offset(2);
  531. /* Temps */
  532. static ssize_t show_temp(struct device *dev, char *buf, int nr)
  533. {
  534. struct adm1031_data *data = adm1031_update_device(dev);
  535. int ext;
  536. ext = nr == 0 ?
  537. ((data->ext_temp[nr] >> 6) & 0x3) * 2 :
  538. (((data->ext_temp[nr] >> ((nr - 1) * 3)) & 7));
  539. return sprintf(buf, "%d\n", TEMP_FROM_REG_EXT(data->temp[nr], ext));
  540. }
  541. static ssize_t show_temp_min(struct device *dev, char *buf, int nr)
  542. {
  543. struct adm1031_data *data = adm1031_update_device(dev);
  544. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
  545. }
  546. static ssize_t show_temp_max(struct device *dev, char *buf, int nr)
  547. {
  548. struct adm1031_data *data = adm1031_update_device(dev);
  549. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
  550. }
  551. static ssize_t show_temp_crit(struct device *dev, char *buf, int nr)
  552. {
  553. struct adm1031_data *data = adm1031_update_device(dev);
  554. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr]));
  555. }
  556. static ssize_t
  557. set_temp_min(struct device *dev, const char *buf, size_t count, int nr)
  558. {
  559. struct i2c_client *client = to_i2c_client(dev);
  560. struct adm1031_data *data = i2c_get_clientdata(client);
  561. int val;
  562. val = simple_strtol(buf, NULL, 10);
  563. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  564. mutex_lock(&data->update_lock);
  565. data->temp_min[nr] = TEMP_TO_REG(val);
  566. adm1031_write_value(client, ADM1031_REG_TEMP_MIN(nr),
  567. data->temp_min[nr]);
  568. mutex_unlock(&data->update_lock);
  569. return count;
  570. }
  571. static ssize_t
  572. set_temp_max(struct device *dev, const char *buf, size_t count, int nr)
  573. {
  574. struct i2c_client *client = to_i2c_client(dev);
  575. struct adm1031_data *data = i2c_get_clientdata(client);
  576. int val;
  577. val = simple_strtol(buf, NULL, 10);
  578. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  579. mutex_lock(&data->update_lock);
  580. data->temp_max[nr] = TEMP_TO_REG(val);
  581. adm1031_write_value(client, ADM1031_REG_TEMP_MAX(nr),
  582. data->temp_max[nr]);
  583. mutex_unlock(&data->update_lock);
  584. return count;
  585. }
  586. static ssize_t
  587. set_temp_crit(struct device *dev, const char *buf, size_t count, int nr)
  588. {
  589. struct i2c_client *client = to_i2c_client(dev);
  590. struct adm1031_data *data = i2c_get_clientdata(client);
  591. int val;
  592. val = simple_strtol(buf, NULL, 10);
  593. val = SENSORS_LIMIT(val, -55000, nr == 0 ? 127750 : 127875);
  594. mutex_lock(&data->update_lock);
  595. data->temp_crit[nr] = TEMP_TO_REG(val);
  596. adm1031_write_value(client, ADM1031_REG_TEMP_CRIT(nr),
  597. data->temp_crit[nr]);
  598. mutex_unlock(&data->update_lock);
  599. return count;
  600. }
  601. #define temp_reg(offset) \
  602. static ssize_t show_temp_##offset (struct device *dev, struct device_attribute *attr, char *buf) \
  603. { \
  604. return show_temp(dev, buf, offset - 1); \
  605. } \
  606. static ssize_t show_temp_##offset##_min (struct device *dev, struct device_attribute *attr, char *buf) \
  607. { \
  608. return show_temp_min(dev, buf, offset - 1); \
  609. } \
  610. static ssize_t show_temp_##offset##_max (struct device *dev, struct device_attribute *attr, char *buf) \
  611. { \
  612. return show_temp_max(dev, buf, offset - 1); \
  613. } \
  614. static ssize_t show_temp_##offset##_crit (struct device *dev, struct device_attribute *attr, char *buf) \
  615. { \
  616. return show_temp_crit(dev, buf, offset - 1); \
  617. } \
  618. static ssize_t set_temp_##offset##_min (struct device *dev, struct device_attribute *attr, \
  619. const char *buf, size_t count) \
  620. { \
  621. return set_temp_min(dev, buf, count, offset - 1); \
  622. } \
  623. static ssize_t set_temp_##offset##_max (struct device *dev, struct device_attribute *attr, \
  624. const char *buf, size_t count) \
  625. { \
  626. return set_temp_max(dev, buf, count, offset - 1); \
  627. } \
  628. static ssize_t set_temp_##offset##_crit (struct device *dev, struct device_attribute *attr, \
  629. const char *buf, size_t count) \
  630. { \
  631. return set_temp_crit(dev, buf, count, offset - 1); \
  632. } \
  633. static DEVICE_ATTR(temp##offset##_input, S_IRUGO, show_temp_##offset, \
  634. NULL); \
  635. static DEVICE_ATTR(temp##offset##_min, S_IRUGO | S_IWUSR, \
  636. show_temp_##offset##_min, set_temp_##offset##_min); \
  637. static DEVICE_ATTR(temp##offset##_max, S_IRUGO | S_IWUSR, \
  638. show_temp_##offset##_max, set_temp_##offset##_max); \
  639. static DEVICE_ATTR(temp##offset##_crit, S_IRUGO | S_IWUSR, \
  640. show_temp_##offset##_crit, set_temp_##offset##_crit)
  641. temp_reg(1);
  642. temp_reg(2);
  643. temp_reg(3);
  644. /* Alarms */
  645. static ssize_t show_alarms(struct device *dev, struct device_attribute *attr, char *buf)
  646. {
  647. struct adm1031_data *data = adm1031_update_device(dev);
  648. return sprintf(buf, "%d\n", data->alarm);
  649. }
  650. static DEVICE_ATTR(alarms, S_IRUGO, show_alarms, NULL);
  651. static int adm1031_attach_adapter(struct i2c_adapter *adapter)
  652. {
  653. if (!(adapter->class & I2C_CLASS_HWMON))
  654. return 0;
  655. return i2c_probe(adapter, &addr_data, adm1031_detect);
  656. }
  657. static struct attribute *adm1031_attributes[] = {
  658. &dev_attr_fan1_input.attr,
  659. &dev_attr_fan1_div.attr,
  660. &dev_attr_fan1_min.attr,
  661. &dev_attr_pwm1.attr,
  662. &dev_attr_auto_fan1_channel.attr,
  663. &dev_attr_temp1_input.attr,
  664. &dev_attr_temp1_min.attr,
  665. &dev_attr_temp1_max.attr,
  666. &dev_attr_temp1_crit.attr,
  667. &dev_attr_temp2_input.attr,
  668. &dev_attr_temp2_min.attr,
  669. &dev_attr_temp2_max.attr,
  670. &dev_attr_temp2_crit.attr,
  671. &dev_attr_auto_temp1_off.attr,
  672. &dev_attr_auto_temp1_min.attr,
  673. &dev_attr_auto_temp1_max.attr,
  674. &dev_attr_auto_temp2_off.attr,
  675. &dev_attr_auto_temp2_min.attr,
  676. &dev_attr_auto_temp2_max.attr,
  677. &dev_attr_auto_fan1_min_pwm.attr,
  678. &dev_attr_alarms.attr,
  679. NULL
  680. };
  681. static const struct attribute_group adm1031_group = {
  682. .attrs = adm1031_attributes,
  683. };
  684. static struct attribute *adm1031_attributes_opt[] = {
  685. &dev_attr_fan2_input.attr,
  686. &dev_attr_fan2_div.attr,
  687. &dev_attr_fan2_min.attr,
  688. &dev_attr_pwm2.attr,
  689. &dev_attr_auto_fan2_channel.attr,
  690. &dev_attr_temp3_input.attr,
  691. &dev_attr_temp3_min.attr,
  692. &dev_attr_temp3_max.attr,
  693. &dev_attr_temp3_crit.attr,
  694. &dev_attr_auto_temp3_off.attr,
  695. &dev_attr_auto_temp3_min.attr,
  696. &dev_attr_auto_temp3_max.attr,
  697. &dev_attr_auto_fan2_min_pwm.attr,
  698. NULL
  699. };
  700. static const struct attribute_group adm1031_group_opt = {
  701. .attrs = adm1031_attributes_opt,
  702. };
  703. /* This function is called by i2c_probe */
  704. static int adm1031_detect(struct i2c_adapter *adapter, int address, int kind)
  705. {
  706. struct i2c_client *client;
  707. struct adm1031_data *data;
  708. int err = 0;
  709. const char *name = "";
  710. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  711. goto exit;
  712. if (!(data = kzalloc(sizeof(struct adm1031_data), GFP_KERNEL))) {
  713. err = -ENOMEM;
  714. goto exit;
  715. }
  716. client = &data->client;
  717. i2c_set_clientdata(client, data);
  718. client->addr = address;
  719. client->adapter = adapter;
  720. client->driver = &adm1031_driver;
  721. if (kind < 0) {
  722. int id, co;
  723. id = i2c_smbus_read_byte_data(client, 0x3d);
  724. co = i2c_smbus_read_byte_data(client, 0x3e);
  725. if (!((id == 0x31 || id == 0x30) && co == 0x41))
  726. goto exit_free;
  727. kind = (id == 0x30) ? adm1030 : adm1031;
  728. }
  729. if (kind <= 0)
  730. kind = adm1031;
  731. /* Given the detected chip type, set the chip name and the
  732. * auto fan control helper table. */
  733. if (kind == adm1030) {
  734. name = "adm1030";
  735. data->chan_select_table = &auto_channel_select_table_adm1030;
  736. } else if (kind == adm1031) {
  737. name = "adm1031";
  738. data->chan_select_table = &auto_channel_select_table_adm1031;
  739. }
  740. data->chip_type = kind;
  741. strlcpy(client->name, name, I2C_NAME_SIZE);
  742. mutex_init(&data->update_lock);
  743. /* Tell the I2C layer a new client has arrived */
  744. if ((err = i2c_attach_client(client)))
  745. goto exit_free;
  746. /* Initialize the ADM1031 chip */
  747. adm1031_init_client(client);
  748. /* Register sysfs hooks */
  749. if ((err = sysfs_create_group(&client->dev.kobj, &adm1031_group)))
  750. goto exit_detach;
  751. if (kind == adm1031) {
  752. if ((err = sysfs_create_group(&client->dev.kobj,
  753. &adm1031_group_opt)))
  754. goto exit_remove;
  755. }
  756. data->hwmon_dev = hwmon_device_register(&client->dev);
  757. if (IS_ERR(data->hwmon_dev)) {
  758. err = PTR_ERR(data->hwmon_dev);
  759. goto exit_remove;
  760. }
  761. return 0;
  762. exit_remove:
  763. sysfs_remove_group(&client->dev.kobj, &adm1031_group);
  764. sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt);
  765. exit_detach:
  766. i2c_detach_client(client);
  767. exit_free:
  768. kfree(data);
  769. exit:
  770. return err;
  771. }
  772. static int adm1031_detach_client(struct i2c_client *client)
  773. {
  774. struct adm1031_data *data = i2c_get_clientdata(client);
  775. int ret;
  776. hwmon_device_unregister(data->hwmon_dev);
  777. sysfs_remove_group(&client->dev.kobj, &adm1031_group);
  778. sysfs_remove_group(&client->dev.kobj, &adm1031_group_opt);
  779. if ((ret = i2c_detach_client(client)) != 0) {
  780. return ret;
  781. }
  782. kfree(data);
  783. return 0;
  784. }
  785. static void adm1031_init_client(struct i2c_client *client)
  786. {
  787. unsigned int read_val;
  788. unsigned int mask;
  789. struct adm1031_data *data = i2c_get_clientdata(client);
  790. mask = (ADM1031_CONF2_PWM1_ENABLE | ADM1031_CONF2_TACH1_ENABLE);
  791. if (data->chip_type == adm1031) {
  792. mask |= (ADM1031_CONF2_PWM2_ENABLE |
  793. ADM1031_CONF2_TACH2_ENABLE);
  794. }
  795. /* Initialize the ADM1031 chip (enables fan speed reading ) */
  796. read_val = adm1031_read_value(client, ADM1031_REG_CONF2);
  797. if ((read_val | mask) != read_val) {
  798. adm1031_write_value(client, ADM1031_REG_CONF2, read_val | mask);
  799. }
  800. read_val = adm1031_read_value(client, ADM1031_REG_CONF1);
  801. if ((read_val | ADM1031_CONF1_MONITOR_ENABLE) != read_val) {
  802. adm1031_write_value(client, ADM1031_REG_CONF1, read_val |
  803. ADM1031_CONF1_MONITOR_ENABLE);
  804. }
  805. }
  806. static struct adm1031_data *adm1031_update_device(struct device *dev)
  807. {
  808. struct i2c_client *client = to_i2c_client(dev);
  809. struct adm1031_data *data = i2c_get_clientdata(client);
  810. int chan;
  811. mutex_lock(&data->update_lock);
  812. if (time_after(jiffies, data->last_updated + HZ + HZ / 2)
  813. || !data->valid) {
  814. dev_dbg(&client->dev, "Starting adm1031 update\n");
  815. for (chan = 0;
  816. chan < ((data->chip_type == adm1031) ? 3 : 2); chan++) {
  817. u8 oldh, newh;
  818. oldh =
  819. adm1031_read_value(client, ADM1031_REG_TEMP(chan));
  820. data->ext_temp[chan] =
  821. adm1031_read_value(client, ADM1031_REG_EXT_TEMP);
  822. newh =
  823. adm1031_read_value(client, ADM1031_REG_TEMP(chan));
  824. if (newh != oldh) {
  825. data->ext_temp[chan] =
  826. adm1031_read_value(client,
  827. ADM1031_REG_EXT_TEMP);
  828. #ifdef DEBUG
  829. oldh =
  830. adm1031_read_value(client,
  831. ADM1031_REG_TEMP(chan));
  832. /* oldh is actually newer */
  833. if (newh != oldh)
  834. dev_warn(&client->dev,
  835. "Remote temperature may be "
  836. "wrong.\n");
  837. #endif
  838. }
  839. data->temp[chan] = newh;
  840. data->temp_min[chan] =
  841. adm1031_read_value(client,
  842. ADM1031_REG_TEMP_MIN(chan));
  843. data->temp_max[chan] =
  844. adm1031_read_value(client,
  845. ADM1031_REG_TEMP_MAX(chan));
  846. data->temp_crit[chan] =
  847. adm1031_read_value(client,
  848. ADM1031_REG_TEMP_CRIT(chan));
  849. data->auto_temp[chan] =
  850. adm1031_read_value(client,
  851. ADM1031_REG_AUTO_TEMP(chan));
  852. }
  853. data->conf1 = adm1031_read_value(client, ADM1031_REG_CONF1);
  854. data->conf2 = adm1031_read_value(client, ADM1031_REG_CONF2);
  855. data->alarm = adm1031_read_value(client, ADM1031_REG_STATUS(0))
  856. | (adm1031_read_value(client, ADM1031_REG_STATUS(1))
  857. << 8);
  858. if (data->chip_type == adm1030) {
  859. data->alarm &= 0xc0ff;
  860. }
  861. for (chan=0; chan<(data->chip_type == adm1030 ? 1 : 2); chan++) {
  862. data->fan_div[chan] =
  863. adm1031_read_value(client, ADM1031_REG_FAN_DIV(chan));
  864. data->fan_min[chan] =
  865. adm1031_read_value(client, ADM1031_REG_FAN_MIN(chan));
  866. data->fan[chan] =
  867. adm1031_read_value(client, ADM1031_REG_FAN_SPEED(chan));
  868. data->pwm[chan] =
  869. 0xf & (adm1031_read_value(client, ADM1031_REG_PWM) >>
  870. (4*chan));
  871. }
  872. data->last_updated = jiffies;
  873. data->valid = 1;
  874. }
  875. mutex_unlock(&data->update_lock);
  876. return data;
  877. }
  878. static int __init sensors_adm1031_init(void)
  879. {
  880. return i2c_add_driver(&adm1031_driver);
  881. }
  882. static void __exit sensors_adm1031_exit(void)
  883. {
  884. i2c_del_driver(&adm1031_driver);
  885. }
  886. MODULE_AUTHOR("Alexandre d'Alton <alex@alexdalton.org>");
  887. MODULE_DESCRIPTION("ADM1031/ADM1030 driver");
  888. MODULE_LICENSE("GPL");
  889. module_init(sensors_adm1031_init);
  890. module_exit(sensors_adm1031_exit);