adm1031.c 31 KB

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