adm1031.c 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * adm1031.c - Part of lm_sensors, Linux kernel modules for hardware
  4. * monitoring
  5. * Based on lm75.c and lm85.c
  6. * Supports adm1030 / adm1031
  7. * Copyright (C) 2004 Alexandre d'Alton <[email protected]>
  8. * Reworked by Jean Delvare <[email protected]>
  9. */
  10. #include <linux/module.h>
  11. #include <linux/init.h>
  12. #include <linux/slab.h>
  13. #include <linux/jiffies.h>
  14. #include <linux/i2c.h>
  15. #include <linux/hwmon.h>
  16. #include <linux/hwmon-sysfs.h>
  17. #include <linux/err.h>
  18. #include <linux/mutex.h>
  19. /* Following macros takes channel parameter starting from 0 to 2 */
  20. #define ADM1031_REG_FAN_SPEED(nr) (0x08 + (nr))
  21. #define ADM1031_REG_FAN_DIV(nr) (0x20 + (nr))
  22. #define ADM1031_REG_PWM (0x22)
  23. #define ADM1031_REG_FAN_MIN(nr) (0x10 + (nr))
  24. #define ADM1031_REG_FAN_FILTER (0x23)
  25. #define ADM1031_REG_TEMP_OFFSET(nr) (0x0d + (nr))
  26. #define ADM1031_REG_TEMP_MAX(nr) (0x14 + 4 * (nr))
  27. #define ADM1031_REG_TEMP_MIN(nr) (0x15 + 4 * (nr))
  28. #define ADM1031_REG_TEMP_CRIT(nr) (0x16 + 4 * (nr))
  29. #define ADM1031_REG_TEMP(nr) (0x0a + (nr))
  30. #define ADM1031_REG_AUTO_TEMP(nr) (0x24 + (nr))
  31. #define ADM1031_REG_STATUS(nr) (0x2 + (nr))
  32. #define ADM1031_REG_CONF1 0x00
  33. #define ADM1031_REG_CONF2 0x01
  34. #define ADM1031_REG_EXT_TEMP 0x06
  35. #define ADM1031_CONF1_MONITOR_ENABLE 0x01 /* Monitoring enable */
  36. #define ADM1031_CONF1_PWM_INVERT 0x08 /* PWM Invert */
  37. #define ADM1031_CONF1_AUTO_MODE 0x80 /* Auto FAN */
  38. #define ADM1031_CONF2_PWM1_ENABLE 0x01
  39. #define ADM1031_CONF2_PWM2_ENABLE 0x02
  40. #define ADM1031_CONF2_TACH1_ENABLE 0x04
  41. #define ADM1031_CONF2_TACH2_ENABLE 0x08
  42. #define ADM1031_CONF2_TEMP_ENABLE(chan) (0x10 << (chan))
  43. #define ADM1031_UPDATE_RATE_MASK 0x1c
  44. #define ADM1031_UPDATE_RATE_SHIFT 2
  45. /* Addresses to scan */
  46. static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
  47. enum chips { adm1030, adm1031 };
  48. typedef u8 auto_chan_table_t[8][2];
  49. /* Each client has this additional data */
  50. struct adm1031_data {
  51. struct i2c_client *client;
  52. const struct attribute_group *groups[3];
  53. struct mutex update_lock;
  54. int chip_type;
  55. bool valid; /* true if following fields are valid */
  56. unsigned long last_updated; /* In jiffies */
  57. unsigned int update_interval; /* In milliseconds */
  58. /*
  59. * The chan_select_table contains the possible configurations for
  60. * auto fan control.
  61. */
  62. const auto_chan_table_t *chan_select_table;
  63. u16 alarm;
  64. u8 conf1;
  65. u8 conf2;
  66. u8 fan[2];
  67. u8 fan_div[2];
  68. u8 fan_min[2];
  69. u8 pwm[2];
  70. u8 old_pwm[2];
  71. s8 temp[3];
  72. u8 ext_temp[3];
  73. u8 auto_temp[3];
  74. u8 auto_temp_min[3];
  75. u8 auto_temp_off[3];
  76. u8 auto_temp_max[3];
  77. s8 temp_offset[3];
  78. s8 temp_min[3];
  79. s8 temp_max[3];
  80. s8 temp_crit[3];
  81. };
  82. static inline u8 adm1031_read_value(struct i2c_client *client, u8 reg)
  83. {
  84. return i2c_smbus_read_byte_data(client, reg);
  85. }
  86. static inline int
  87. adm1031_write_value(struct i2c_client *client, u8 reg, unsigned int value)
  88. {
  89. return i2c_smbus_write_byte_data(client, reg, value);
  90. }
  91. static struct adm1031_data *adm1031_update_device(struct device *dev)
  92. {
  93. struct adm1031_data *data = dev_get_drvdata(dev);
  94. struct i2c_client *client = data->client;
  95. unsigned long next_update;
  96. int chan;
  97. mutex_lock(&data->update_lock);
  98. next_update = data->last_updated
  99. + msecs_to_jiffies(data->update_interval);
  100. if (time_after(jiffies, next_update) || !data->valid) {
  101. dev_dbg(&client->dev, "Starting adm1031 update\n");
  102. for (chan = 0;
  103. chan < ((data->chip_type == adm1031) ? 3 : 2); chan++) {
  104. u8 oldh, newh;
  105. oldh =
  106. adm1031_read_value(client, ADM1031_REG_TEMP(chan));
  107. data->ext_temp[chan] =
  108. adm1031_read_value(client, ADM1031_REG_EXT_TEMP);
  109. newh =
  110. adm1031_read_value(client, ADM1031_REG_TEMP(chan));
  111. if (newh != oldh) {
  112. data->ext_temp[chan] =
  113. adm1031_read_value(client,
  114. ADM1031_REG_EXT_TEMP);
  115. #ifdef DEBUG
  116. oldh =
  117. adm1031_read_value(client,
  118. ADM1031_REG_TEMP(chan));
  119. /* oldh is actually newer */
  120. if (newh != oldh)
  121. dev_warn(&client->dev,
  122. "Remote temperature may be wrong.\n");
  123. #endif
  124. }
  125. data->temp[chan] = newh;
  126. data->temp_offset[chan] =
  127. adm1031_read_value(client,
  128. ADM1031_REG_TEMP_OFFSET(chan));
  129. data->temp_min[chan] =
  130. adm1031_read_value(client,
  131. ADM1031_REG_TEMP_MIN(chan));
  132. data->temp_max[chan] =
  133. adm1031_read_value(client,
  134. ADM1031_REG_TEMP_MAX(chan));
  135. data->temp_crit[chan] =
  136. adm1031_read_value(client,
  137. ADM1031_REG_TEMP_CRIT(chan));
  138. data->auto_temp[chan] =
  139. adm1031_read_value(client,
  140. ADM1031_REG_AUTO_TEMP(chan));
  141. }
  142. data->conf1 = adm1031_read_value(client, ADM1031_REG_CONF1);
  143. data->conf2 = adm1031_read_value(client, ADM1031_REG_CONF2);
  144. data->alarm = adm1031_read_value(client, ADM1031_REG_STATUS(0))
  145. | (adm1031_read_value(client, ADM1031_REG_STATUS(1)) << 8);
  146. if (data->chip_type == adm1030)
  147. data->alarm &= 0xc0ff;
  148. for (chan = 0; chan < (data->chip_type == adm1030 ? 1 : 2);
  149. chan++) {
  150. data->fan_div[chan] =
  151. adm1031_read_value(client,
  152. ADM1031_REG_FAN_DIV(chan));
  153. data->fan_min[chan] =
  154. adm1031_read_value(client,
  155. ADM1031_REG_FAN_MIN(chan));
  156. data->fan[chan] =
  157. adm1031_read_value(client,
  158. ADM1031_REG_FAN_SPEED(chan));
  159. data->pwm[chan] =
  160. (adm1031_read_value(client,
  161. ADM1031_REG_PWM) >> (4 * chan)) & 0x0f;
  162. }
  163. data->last_updated = jiffies;
  164. data->valid = true;
  165. }
  166. mutex_unlock(&data->update_lock);
  167. return data;
  168. }
  169. #define TEMP_TO_REG(val) (((val) < 0 ? ((val - 500) / 1000) : \
  170. ((val + 500) / 1000)))
  171. #define TEMP_FROM_REG(val) ((val) * 1000)
  172. #define TEMP_FROM_REG_EXT(val, ext) (TEMP_FROM_REG(val) + (ext) * 125)
  173. #define TEMP_OFFSET_TO_REG(val) (TEMP_TO_REG(val) & 0x8f)
  174. #define TEMP_OFFSET_FROM_REG(val) TEMP_FROM_REG((val) < 0 ? \
  175. (val) | 0x70 : (val))
  176. #define FAN_FROM_REG(reg, div) ((reg) ? \
  177. (11250 * 60) / ((reg) * (div)) : 0)
  178. static int FAN_TO_REG(int reg, int div)
  179. {
  180. int tmp;
  181. tmp = FAN_FROM_REG(clamp_val(reg, 0, 65535), div);
  182. return tmp > 255 ? 255 : tmp;
  183. }
  184. #define FAN_DIV_FROM_REG(reg) (1<<(((reg)&0xc0)>>6))
  185. #define PWM_TO_REG(val) (clamp_val((val), 0, 255) >> 4)
  186. #define PWM_FROM_REG(val) ((val) << 4)
  187. #define FAN_CHAN_FROM_REG(reg) (((reg) >> 5) & 7)
  188. #define FAN_CHAN_TO_REG(val, reg) \
  189. (((reg) & 0x1F) | (((val) << 5) & 0xe0))
  190. #define AUTO_TEMP_MIN_TO_REG(val, reg) \
  191. ((((val) / 500) & 0xf8) | ((reg) & 0x7))
  192. #define AUTO_TEMP_RANGE_FROM_REG(reg) (5000 * (1 << ((reg) & 0x7)))
  193. #define AUTO_TEMP_MIN_FROM_REG(reg) (1000 * ((((reg) >> 3) & 0x1f) << 2))
  194. #define AUTO_TEMP_MIN_FROM_REG_DEG(reg) ((((reg) >> 3) & 0x1f) << 2)
  195. #define AUTO_TEMP_OFF_FROM_REG(reg) \
  196. (AUTO_TEMP_MIN_FROM_REG(reg) - 5000)
  197. #define AUTO_TEMP_MAX_FROM_REG(reg) \
  198. (AUTO_TEMP_RANGE_FROM_REG(reg) + \
  199. AUTO_TEMP_MIN_FROM_REG(reg))
  200. static int AUTO_TEMP_MAX_TO_REG(int val, int reg, int pwm)
  201. {
  202. int ret;
  203. int range = ((val - AUTO_TEMP_MIN_FROM_REG(reg)) * 10) / (16 - pwm);
  204. ret = ((reg & 0xf8) |
  205. (range < 10000 ? 0 :
  206. range < 20000 ? 1 :
  207. range < 40000 ? 2 : range < 80000 ? 3 : 4));
  208. return ret;
  209. }
  210. /* FAN auto control */
  211. #define GET_FAN_AUTO_BITFIELD(data, idx) \
  212. (*(data)->chan_select_table)[FAN_CHAN_FROM_REG((data)->conf1)][idx % 2]
  213. /*
  214. * The tables below contains the possible values for the auto fan
  215. * control bitfields. the index in the table is the register value.
  216. * MSb is the auto fan control enable bit, so the four first entries
  217. * in the table disables auto fan control when both bitfields are zero.
  218. */
  219. static const auto_chan_table_t auto_channel_select_table_adm1031 = {
  220. { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
  221. { 2 /* 0b010 */ , 4 /* 0b100 */ },
  222. { 2 /* 0b010 */ , 2 /* 0b010 */ },
  223. { 4 /* 0b100 */ , 4 /* 0b100 */ },
  224. { 7 /* 0b111 */ , 7 /* 0b111 */ },
  225. };
  226. static const auto_chan_table_t auto_channel_select_table_adm1030 = {
  227. { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 },
  228. { 2 /* 0b10 */ , 0 },
  229. { 0xff /* invalid */ , 0 },
  230. { 0xff /* invalid */ , 0 },
  231. { 3 /* 0b11 */ , 0 },
  232. };
  233. /*
  234. * That function checks if a bitfield is valid and returns the other bitfield
  235. * nearest match if no exact match where found.
  236. */
  237. static int
  238. get_fan_auto_nearest(struct adm1031_data *data, int chan, u8 val, u8 reg)
  239. {
  240. int i;
  241. int first_match = -1, exact_match = -1;
  242. u8 other_reg_val =
  243. (*data->chan_select_table)[FAN_CHAN_FROM_REG(reg)][chan ? 0 : 1];
  244. if (val == 0)
  245. return 0;
  246. for (i = 0; i < 8; i++) {
  247. if ((val == (*data->chan_select_table)[i][chan]) &&
  248. ((*data->chan_select_table)[i][chan ? 0 : 1] ==
  249. other_reg_val)) {
  250. /* We found an exact match */
  251. exact_match = i;
  252. break;
  253. } else if (val == (*data->chan_select_table)[i][chan] &&
  254. first_match == -1) {
  255. /*
  256. * Save the first match in case of an exact match has
  257. * not been found
  258. */
  259. first_match = i;
  260. }
  261. }
  262. if (exact_match >= 0)
  263. return exact_match;
  264. else if (first_match >= 0)
  265. return first_match;
  266. return -EINVAL;
  267. }
  268. static ssize_t fan_auto_channel_show(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", GET_FAN_AUTO_BITFIELD(data, nr));
  274. }
  275. static ssize_t
  276. fan_auto_channel_store(struct device *dev, struct device_attribute *attr,
  277. const char *buf, size_t count)
  278. {
  279. struct adm1031_data *data = dev_get_drvdata(dev);
  280. struct i2c_client *client = data->client;
  281. int nr = to_sensor_dev_attr(attr)->index;
  282. long val;
  283. u8 reg;
  284. int ret;
  285. u8 old_fan_mode;
  286. ret = kstrtol(buf, 10, &val);
  287. if (ret)
  288. return ret;
  289. old_fan_mode = data->conf1;
  290. mutex_lock(&data->update_lock);
  291. ret = get_fan_auto_nearest(data, nr, val, data->conf1);
  292. if (ret < 0) {
  293. mutex_unlock(&data->update_lock);
  294. return ret;
  295. }
  296. reg = ret;
  297. data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
  298. if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) ^
  299. (old_fan_mode & ADM1031_CONF1_AUTO_MODE)) {
  300. if (data->conf1 & ADM1031_CONF1_AUTO_MODE) {
  301. /*
  302. * Switch to Auto Fan Mode
  303. * Save PWM registers
  304. * Set PWM registers to 33% Both
  305. */
  306. data->old_pwm[0] = data->pwm[0];
  307. data->old_pwm[1] = data->pwm[1];
  308. adm1031_write_value(client, ADM1031_REG_PWM, 0x55);
  309. } else {
  310. /* Switch to Manual Mode */
  311. data->pwm[0] = data->old_pwm[0];
  312. data->pwm[1] = data->old_pwm[1];
  313. /* Restore PWM registers */
  314. adm1031_write_value(client, ADM1031_REG_PWM,
  315. data->pwm[0] | (data->pwm[1] << 4));
  316. }
  317. }
  318. data->conf1 = FAN_CHAN_TO_REG(reg, data->conf1);
  319. adm1031_write_value(client, ADM1031_REG_CONF1, data->conf1);
  320. mutex_unlock(&data->update_lock);
  321. return count;
  322. }
  323. static SENSOR_DEVICE_ATTR_RW(auto_fan1_channel, fan_auto_channel, 0);
  324. static SENSOR_DEVICE_ATTR_RW(auto_fan2_channel, fan_auto_channel, 1);
  325. /* Auto Temps */
  326. static ssize_t auto_temp_off_show(struct device *dev,
  327. struct device_attribute *attr, char *buf)
  328. {
  329. int nr = to_sensor_dev_attr(attr)->index;
  330. struct adm1031_data *data = adm1031_update_device(dev);
  331. return sprintf(buf, "%d\n",
  332. AUTO_TEMP_OFF_FROM_REG(data->auto_temp[nr]));
  333. }
  334. static ssize_t auto_temp_min_show(struct device *dev,
  335. struct device_attribute *attr, char *buf)
  336. {
  337. int nr = to_sensor_dev_attr(attr)->index;
  338. struct adm1031_data *data = adm1031_update_device(dev);
  339. return sprintf(buf, "%d\n",
  340. AUTO_TEMP_MIN_FROM_REG(data->auto_temp[nr]));
  341. }
  342. static ssize_t
  343. auto_temp_min_store(struct device *dev, struct device_attribute *attr,
  344. const char *buf, size_t count)
  345. {
  346. struct adm1031_data *data = dev_get_drvdata(dev);
  347. struct i2c_client *client = data->client;
  348. int nr = to_sensor_dev_attr(attr)->index;
  349. long val;
  350. int ret;
  351. ret = kstrtol(buf, 10, &val);
  352. if (ret)
  353. return ret;
  354. val = clamp_val(val, 0, 127000);
  355. mutex_lock(&data->update_lock);
  356. data->auto_temp[nr] = AUTO_TEMP_MIN_TO_REG(val, data->auto_temp[nr]);
  357. adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
  358. data->auto_temp[nr]);
  359. mutex_unlock(&data->update_lock);
  360. return count;
  361. }
  362. static ssize_t auto_temp_max_show(struct device *dev,
  363. struct device_attribute *attr, char *buf)
  364. {
  365. int nr = to_sensor_dev_attr(attr)->index;
  366. struct adm1031_data *data = adm1031_update_device(dev);
  367. return sprintf(buf, "%d\n",
  368. AUTO_TEMP_MAX_FROM_REG(data->auto_temp[nr]));
  369. }
  370. static ssize_t
  371. auto_temp_max_store(struct device *dev, struct device_attribute *attr,
  372. const char *buf, size_t count)
  373. {
  374. struct adm1031_data *data = dev_get_drvdata(dev);
  375. struct i2c_client *client = data->client;
  376. int nr = to_sensor_dev_attr(attr)->index;
  377. long val;
  378. int ret;
  379. ret = kstrtol(buf, 10, &val);
  380. if (ret)
  381. return ret;
  382. val = clamp_val(val, 0, 127000);
  383. mutex_lock(&data->update_lock);
  384. data->temp_max[nr] = AUTO_TEMP_MAX_TO_REG(val, data->auto_temp[nr],
  385. data->pwm[nr]);
  386. adm1031_write_value(client, ADM1031_REG_AUTO_TEMP(nr),
  387. data->temp_max[nr]);
  388. mutex_unlock(&data->update_lock);
  389. return count;
  390. }
  391. static SENSOR_DEVICE_ATTR_RO(auto_temp1_off, auto_temp_off, 0);
  392. static SENSOR_DEVICE_ATTR_RW(auto_temp1_min, auto_temp_min, 0);
  393. static SENSOR_DEVICE_ATTR_RW(auto_temp1_max, auto_temp_max, 0);
  394. static SENSOR_DEVICE_ATTR_RO(auto_temp2_off, auto_temp_off, 1);
  395. static SENSOR_DEVICE_ATTR_RW(auto_temp2_min, auto_temp_min, 1);
  396. static SENSOR_DEVICE_ATTR_RW(auto_temp2_max, auto_temp_max, 1);
  397. static SENSOR_DEVICE_ATTR_RO(auto_temp3_off, auto_temp_off, 2);
  398. static SENSOR_DEVICE_ATTR_RW(auto_temp3_min, auto_temp_min, 2);
  399. static SENSOR_DEVICE_ATTR_RW(auto_temp3_max, auto_temp_max, 2);
  400. /* pwm */
  401. static ssize_t pwm_show(struct device *dev, struct device_attribute *attr,
  402. char *buf)
  403. {
  404. int nr = to_sensor_dev_attr(attr)->index;
  405. struct adm1031_data *data = adm1031_update_device(dev);
  406. return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm[nr]));
  407. }
  408. static ssize_t pwm_store(struct device *dev, struct device_attribute *attr,
  409. const char *buf, size_t count)
  410. {
  411. struct adm1031_data *data = dev_get_drvdata(dev);
  412. struct i2c_client *client = data->client;
  413. int nr = to_sensor_dev_attr(attr)->index;
  414. long val;
  415. int ret, reg;
  416. ret = kstrtol(buf, 10, &val);
  417. if (ret)
  418. return ret;
  419. mutex_lock(&data->update_lock);
  420. if ((data->conf1 & ADM1031_CONF1_AUTO_MODE) &&
  421. (((val>>4) & 0xf) != 5)) {
  422. /* In automatic mode, the only PWM accepted is 33% */
  423. mutex_unlock(&data->update_lock);
  424. return -EINVAL;
  425. }
  426. data->pwm[nr] = PWM_TO_REG(val);
  427. reg = adm1031_read_value(client, ADM1031_REG_PWM);
  428. adm1031_write_value(client, ADM1031_REG_PWM,
  429. nr ? ((data->pwm[nr] << 4) & 0xf0) | (reg & 0xf)
  430. : (data->pwm[nr] & 0xf) | (reg & 0xf0));
  431. mutex_unlock(&data->update_lock);
  432. return count;
  433. }
  434. static SENSOR_DEVICE_ATTR_RW(pwm1, pwm, 0);
  435. static SENSOR_DEVICE_ATTR_RW(pwm2, pwm, 1);
  436. static SENSOR_DEVICE_ATTR_RW(auto_fan1_min_pwm, pwm, 0);
  437. static SENSOR_DEVICE_ATTR_RW(auto_fan2_min_pwm, pwm, 1);
  438. /* Fans */
  439. /*
  440. * That function checks the cases where the fan reading is not
  441. * relevant. It is used to provide 0 as fan reading when the fan is
  442. * not supposed to run
  443. */
  444. static int trust_fan_readings(struct adm1031_data *data, int chan)
  445. {
  446. int res = 0;
  447. if (data->conf1 & ADM1031_CONF1_AUTO_MODE) {
  448. switch (data->conf1 & 0x60) {
  449. case 0x00:
  450. /*
  451. * remote temp1 controls fan1,
  452. * remote temp2 controls fan2
  453. */
  454. res = data->temp[chan+1] >=
  455. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[chan+1]);
  456. break;
  457. case 0x20: /* remote temp1 controls both fans */
  458. res =
  459. data->temp[1] >=
  460. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1]);
  461. break;
  462. case 0x40: /* remote temp2 controls both fans */
  463. res =
  464. data->temp[2] >=
  465. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2]);
  466. break;
  467. case 0x60: /* max controls both fans */
  468. res =
  469. data->temp[0] >=
  470. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[0])
  471. || data->temp[1] >=
  472. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[1])
  473. || (data->chip_type == adm1031
  474. && data->temp[2] >=
  475. AUTO_TEMP_MIN_FROM_REG_DEG(data->auto_temp[2]));
  476. break;
  477. }
  478. } else {
  479. res = data->pwm[chan] > 0;
  480. }
  481. return res;
  482. }
  483. static ssize_t fan_show(struct device *dev, struct device_attribute *attr,
  484. char *buf)
  485. {
  486. int nr = to_sensor_dev_attr(attr)->index;
  487. struct adm1031_data *data = adm1031_update_device(dev);
  488. int value;
  489. value = trust_fan_readings(data, nr) ? FAN_FROM_REG(data->fan[nr],
  490. FAN_DIV_FROM_REG(data->fan_div[nr])) : 0;
  491. return sprintf(buf, "%d\n", value);
  492. }
  493. static ssize_t fan_div_show(struct device *dev, struct device_attribute *attr,
  494. char *buf)
  495. {
  496. int nr = to_sensor_dev_attr(attr)->index;
  497. struct adm1031_data *data = adm1031_update_device(dev);
  498. return sprintf(buf, "%d\n", FAN_DIV_FROM_REG(data->fan_div[nr]));
  499. }
  500. static ssize_t fan_min_show(struct device *dev, struct device_attribute *attr,
  501. char *buf)
  502. {
  503. int nr = to_sensor_dev_attr(attr)->index;
  504. struct adm1031_data *data = adm1031_update_device(dev);
  505. return sprintf(buf, "%d\n",
  506. FAN_FROM_REG(data->fan_min[nr],
  507. FAN_DIV_FROM_REG(data->fan_div[nr])));
  508. }
  509. static ssize_t fan_min_store(struct device *dev,
  510. struct device_attribute *attr, const char *buf,
  511. size_t count)
  512. {
  513. struct adm1031_data *data = dev_get_drvdata(dev);
  514. struct i2c_client *client = data->client;
  515. int nr = to_sensor_dev_attr(attr)->index;
  516. long val;
  517. int ret;
  518. ret = kstrtol(buf, 10, &val);
  519. if (ret)
  520. return ret;
  521. mutex_lock(&data->update_lock);
  522. if (val) {
  523. data->fan_min[nr] =
  524. FAN_TO_REG(val, FAN_DIV_FROM_REG(data->fan_div[nr]));
  525. } else {
  526. data->fan_min[nr] = 0xff;
  527. }
  528. adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr), data->fan_min[nr]);
  529. mutex_unlock(&data->update_lock);
  530. return count;
  531. }
  532. static ssize_t fan_div_store(struct device *dev,
  533. struct device_attribute *attr, const char *buf,
  534. size_t count)
  535. {
  536. struct adm1031_data *data = dev_get_drvdata(dev);
  537. struct i2c_client *client = data->client;
  538. int nr = to_sensor_dev_attr(attr)->index;
  539. long val;
  540. u8 tmp;
  541. int old_div;
  542. int new_min;
  543. int ret;
  544. ret = kstrtol(buf, 10, &val);
  545. if (ret)
  546. return ret;
  547. tmp = val == 8 ? 0xc0 :
  548. val == 4 ? 0x80 :
  549. val == 2 ? 0x40 :
  550. val == 1 ? 0x00 :
  551. 0xff;
  552. if (tmp == 0xff)
  553. return -EINVAL;
  554. mutex_lock(&data->update_lock);
  555. /* Get fresh readings */
  556. data->fan_div[nr] = adm1031_read_value(client,
  557. ADM1031_REG_FAN_DIV(nr));
  558. data->fan_min[nr] = adm1031_read_value(client,
  559. ADM1031_REG_FAN_MIN(nr));
  560. /* Write the new clock divider and fan min */
  561. old_div = FAN_DIV_FROM_REG(data->fan_div[nr]);
  562. data->fan_div[nr] = tmp | (0x3f & data->fan_div[nr]);
  563. new_min = data->fan_min[nr] * old_div / val;
  564. data->fan_min[nr] = new_min > 0xff ? 0xff : new_min;
  565. adm1031_write_value(client, ADM1031_REG_FAN_DIV(nr),
  566. data->fan_div[nr]);
  567. adm1031_write_value(client, ADM1031_REG_FAN_MIN(nr),
  568. data->fan_min[nr]);
  569. /* Invalidate the cache: fan speed is no longer valid */
  570. data->valid = false;
  571. mutex_unlock(&data->update_lock);
  572. return count;
  573. }
  574. static SENSOR_DEVICE_ATTR_RO(fan1_input, fan, 0);
  575. static SENSOR_DEVICE_ATTR_RW(fan1_min, fan_min, 0);
  576. static SENSOR_DEVICE_ATTR_RW(fan1_div, fan_div, 0);
  577. static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1);
  578. static SENSOR_DEVICE_ATTR_RW(fan2_min, fan_min, 1);
  579. static SENSOR_DEVICE_ATTR_RW(fan2_div, fan_div, 1);
  580. /* Temps */
  581. static ssize_t temp_show(struct device *dev, struct device_attribute *attr,
  582. char *buf)
  583. {
  584. int nr = to_sensor_dev_attr(attr)->index;
  585. struct adm1031_data *data = adm1031_update_device(dev);
  586. int ext;
  587. ext = nr == 0 ?
  588. ((data->ext_temp[nr] >> 6) & 0x3) * 2 :
  589. (((data->ext_temp[nr] >> ((nr - 1) * 3)) & 7));
  590. return sprintf(buf, "%d\n", TEMP_FROM_REG_EXT(data->temp[nr], ext));
  591. }
  592. static ssize_t temp_offset_show(struct device *dev,
  593. struct device_attribute *attr, char *buf)
  594. {
  595. int nr = to_sensor_dev_attr(attr)->index;
  596. struct adm1031_data *data = adm1031_update_device(dev);
  597. return sprintf(buf, "%d\n",
  598. TEMP_OFFSET_FROM_REG(data->temp_offset[nr]));
  599. }
  600. static ssize_t temp_min_show(struct device *dev,
  601. struct device_attribute *attr, char *buf)
  602. {
  603. int nr = to_sensor_dev_attr(attr)->index;
  604. struct adm1031_data *data = adm1031_update_device(dev);
  605. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
  606. }
  607. static ssize_t temp_max_show(struct device *dev,
  608. struct device_attribute *attr, char *buf)
  609. {
  610. int nr = to_sensor_dev_attr(attr)->index;
  611. struct adm1031_data *data = adm1031_update_device(dev);
  612. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
  613. }
  614. static ssize_t temp_crit_show(struct device *dev,
  615. struct device_attribute *attr, char *buf)
  616. {
  617. int nr = to_sensor_dev_attr(attr)->index;
  618. struct adm1031_data *data = adm1031_update_device(dev);
  619. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr]));
  620. }
  621. static ssize_t temp_offset_store(struct device *dev,
  622. struct device_attribute *attr,
  623. const char *buf, size_t count)
  624. {
  625. struct adm1031_data *data = dev_get_drvdata(dev);
  626. struct i2c_client *client = data->client;
  627. int nr = to_sensor_dev_attr(attr)->index;
  628. long val;
  629. int ret;
  630. ret = kstrtol(buf, 10, &val);
  631. if (ret)
  632. return ret;
  633. val = clamp_val(val, -15000, 15000);
  634. mutex_lock(&data->update_lock);
  635. data->temp_offset[nr] = TEMP_OFFSET_TO_REG(val);
  636. adm1031_write_value(client, ADM1031_REG_TEMP_OFFSET(nr),
  637. data->temp_offset[nr]);
  638. mutex_unlock(&data->update_lock);
  639. return count;
  640. }
  641. static ssize_t temp_min_store(struct device *dev,
  642. struct device_attribute *attr, const char *buf,
  643. size_t count)
  644. {
  645. struct adm1031_data *data = dev_get_drvdata(dev);
  646. struct i2c_client *client = data->client;
  647. int nr = to_sensor_dev_attr(attr)->index;
  648. long val;
  649. int ret;
  650. ret = kstrtol(buf, 10, &val);
  651. if (ret)
  652. return ret;
  653. val = clamp_val(val, -55000, 127000);
  654. mutex_lock(&data->update_lock);
  655. data->temp_min[nr] = TEMP_TO_REG(val);
  656. adm1031_write_value(client, ADM1031_REG_TEMP_MIN(nr),
  657. data->temp_min[nr]);
  658. mutex_unlock(&data->update_lock);
  659. return count;
  660. }
  661. static ssize_t temp_max_store(struct device *dev,
  662. struct device_attribute *attr, const char *buf,
  663. size_t count)
  664. {
  665. struct adm1031_data *data = dev_get_drvdata(dev);
  666. struct i2c_client *client = data->client;
  667. int nr = to_sensor_dev_attr(attr)->index;
  668. long val;
  669. int ret;
  670. ret = kstrtol(buf, 10, &val);
  671. if (ret)
  672. return ret;
  673. val = clamp_val(val, -55000, 127000);
  674. mutex_lock(&data->update_lock);
  675. data->temp_max[nr] = TEMP_TO_REG(val);
  676. adm1031_write_value(client, ADM1031_REG_TEMP_MAX(nr),
  677. data->temp_max[nr]);
  678. mutex_unlock(&data->update_lock);
  679. return count;
  680. }
  681. static ssize_t temp_crit_store(struct device *dev,
  682. struct device_attribute *attr, const char *buf,
  683. size_t count)
  684. {
  685. struct adm1031_data *data = dev_get_drvdata(dev);
  686. struct i2c_client *client = data->client;
  687. int nr = to_sensor_dev_attr(attr)->index;
  688. long val;
  689. int ret;
  690. ret = kstrtol(buf, 10, &val);
  691. if (ret)
  692. return ret;
  693. val = clamp_val(val, -55000, 127000);
  694. mutex_lock(&data->update_lock);
  695. data->temp_crit[nr] = TEMP_TO_REG(val);
  696. adm1031_write_value(client, ADM1031_REG_TEMP_CRIT(nr),
  697. data->temp_crit[nr]);
  698. mutex_unlock(&data->update_lock);
  699. return count;
  700. }
  701. static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0);
  702. static SENSOR_DEVICE_ATTR_RW(temp1_offset, temp_offset, 0);
  703. static SENSOR_DEVICE_ATTR_RW(temp1_min, temp_min, 0);
  704. static SENSOR_DEVICE_ATTR_RW(temp1_max, temp_max, 0);
  705. static SENSOR_DEVICE_ATTR_RW(temp1_crit, temp_crit, 0);
  706. static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1);
  707. static SENSOR_DEVICE_ATTR_RW(temp2_offset, temp_offset, 1);
  708. static SENSOR_DEVICE_ATTR_RW(temp2_min, temp_min, 1);
  709. static SENSOR_DEVICE_ATTR_RW(temp2_max, temp_max, 1);
  710. static SENSOR_DEVICE_ATTR_RW(temp2_crit, temp_crit, 1);
  711. static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2);
  712. static SENSOR_DEVICE_ATTR_RW(temp3_offset, temp_offset, 2);
  713. static SENSOR_DEVICE_ATTR_RW(temp3_min, temp_min, 2);
  714. static SENSOR_DEVICE_ATTR_RW(temp3_max, temp_max, 2);
  715. static SENSOR_DEVICE_ATTR_RW(temp3_crit, temp_crit, 2);
  716. /* Alarms */
  717. static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
  718. char *buf)
  719. {
  720. struct adm1031_data *data = adm1031_update_device(dev);
  721. return sprintf(buf, "%d\n", data->alarm);
  722. }
  723. static DEVICE_ATTR_RO(alarms);
  724. static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
  725. char *buf)
  726. {
  727. int bitnr = to_sensor_dev_attr(attr)->index;
  728. struct adm1031_data *data = adm1031_update_device(dev);
  729. return sprintf(buf, "%d\n", (data->alarm >> bitnr) & 1);
  730. }
  731. static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm, 0);
  732. static SENSOR_DEVICE_ATTR_RO(fan1_fault, alarm, 1);
  733. static SENSOR_DEVICE_ATTR_RO(temp2_max_alarm, alarm, 2);
  734. static SENSOR_DEVICE_ATTR_RO(temp2_min_alarm, alarm, 3);
  735. static SENSOR_DEVICE_ATTR_RO(temp2_crit_alarm, alarm, 4);
  736. static SENSOR_DEVICE_ATTR_RO(temp2_fault, alarm, 5);
  737. static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 6);
  738. static SENSOR_DEVICE_ATTR_RO(temp1_min_alarm, alarm, 7);
  739. static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm, 8);
  740. static SENSOR_DEVICE_ATTR_RO(fan2_fault, alarm, 9);
  741. static SENSOR_DEVICE_ATTR_RO(temp3_max_alarm, alarm, 10);
  742. static SENSOR_DEVICE_ATTR_RO(temp3_min_alarm, alarm, 11);
  743. static SENSOR_DEVICE_ATTR_RO(temp3_crit_alarm, alarm, 12);
  744. static SENSOR_DEVICE_ATTR_RO(temp3_fault, alarm, 13);
  745. static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 14);
  746. /* Update Interval */
  747. static const unsigned int update_intervals[] = {
  748. 16000, 8000, 4000, 2000, 1000, 500, 250, 125,
  749. };
  750. static ssize_t update_interval_show(struct device *dev,
  751. struct device_attribute *attr, char *buf)
  752. {
  753. struct adm1031_data *data = dev_get_drvdata(dev);
  754. return sprintf(buf, "%u\n", data->update_interval);
  755. }
  756. static ssize_t update_interval_store(struct device *dev,
  757. struct device_attribute *attr,
  758. const char *buf, size_t count)
  759. {
  760. struct adm1031_data *data = dev_get_drvdata(dev);
  761. struct i2c_client *client = data->client;
  762. unsigned long val;
  763. int i, err;
  764. u8 reg;
  765. err = kstrtoul(buf, 10, &val);
  766. if (err)
  767. return err;
  768. /*
  769. * Find the nearest update interval from the table.
  770. * Use it to determine the matching update rate.
  771. */
  772. for (i = 0; i < ARRAY_SIZE(update_intervals) - 1; i++) {
  773. if (val >= update_intervals[i])
  774. break;
  775. }
  776. /* if not found, we point to the last entry (lowest update interval) */
  777. /* set the new update rate while preserving other settings */
  778. reg = adm1031_read_value(client, ADM1031_REG_FAN_FILTER);
  779. reg &= ~ADM1031_UPDATE_RATE_MASK;
  780. reg |= i << ADM1031_UPDATE_RATE_SHIFT;
  781. adm1031_write_value(client, ADM1031_REG_FAN_FILTER, reg);
  782. mutex_lock(&data->update_lock);
  783. data->update_interval = update_intervals[i];
  784. mutex_unlock(&data->update_lock);
  785. return count;
  786. }
  787. static DEVICE_ATTR_RW(update_interval);
  788. static struct attribute *adm1031_attributes[] = {
  789. &sensor_dev_attr_fan1_input.dev_attr.attr,
  790. &sensor_dev_attr_fan1_div.dev_attr.attr,
  791. &sensor_dev_attr_fan1_min.dev_attr.attr,
  792. &sensor_dev_attr_fan1_alarm.dev_attr.attr,
  793. &sensor_dev_attr_fan1_fault.dev_attr.attr,
  794. &sensor_dev_attr_pwm1.dev_attr.attr,
  795. &sensor_dev_attr_auto_fan1_channel.dev_attr.attr,
  796. &sensor_dev_attr_temp1_input.dev_attr.attr,
  797. &sensor_dev_attr_temp1_offset.dev_attr.attr,
  798. &sensor_dev_attr_temp1_min.dev_attr.attr,
  799. &sensor_dev_attr_temp1_min_alarm.dev_attr.attr,
  800. &sensor_dev_attr_temp1_max.dev_attr.attr,
  801. &sensor_dev_attr_temp1_max_alarm.dev_attr.attr,
  802. &sensor_dev_attr_temp1_crit.dev_attr.attr,
  803. &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr,
  804. &sensor_dev_attr_temp2_input.dev_attr.attr,
  805. &sensor_dev_attr_temp2_offset.dev_attr.attr,
  806. &sensor_dev_attr_temp2_min.dev_attr.attr,
  807. &sensor_dev_attr_temp2_min_alarm.dev_attr.attr,
  808. &sensor_dev_attr_temp2_max.dev_attr.attr,
  809. &sensor_dev_attr_temp2_max_alarm.dev_attr.attr,
  810. &sensor_dev_attr_temp2_crit.dev_attr.attr,
  811. &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr,
  812. &sensor_dev_attr_temp2_fault.dev_attr.attr,
  813. &sensor_dev_attr_auto_temp1_off.dev_attr.attr,
  814. &sensor_dev_attr_auto_temp1_min.dev_attr.attr,
  815. &sensor_dev_attr_auto_temp1_max.dev_attr.attr,
  816. &sensor_dev_attr_auto_temp2_off.dev_attr.attr,
  817. &sensor_dev_attr_auto_temp2_min.dev_attr.attr,
  818. &sensor_dev_attr_auto_temp2_max.dev_attr.attr,
  819. &sensor_dev_attr_auto_fan1_min_pwm.dev_attr.attr,
  820. &dev_attr_update_interval.attr,
  821. &dev_attr_alarms.attr,
  822. NULL
  823. };
  824. static const struct attribute_group adm1031_group = {
  825. .attrs = adm1031_attributes,
  826. };
  827. static struct attribute *adm1031_attributes_opt[] = {
  828. &sensor_dev_attr_fan2_input.dev_attr.attr,
  829. &sensor_dev_attr_fan2_div.dev_attr.attr,
  830. &sensor_dev_attr_fan2_min.dev_attr.attr,
  831. &sensor_dev_attr_fan2_alarm.dev_attr.attr,
  832. &sensor_dev_attr_fan2_fault.dev_attr.attr,
  833. &sensor_dev_attr_pwm2.dev_attr.attr,
  834. &sensor_dev_attr_auto_fan2_channel.dev_attr.attr,
  835. &sensor_dev_attr_temp3_input.dev_attr.attr,
  836. &sensor_dev_attr_temp3_offset.dev_attr.attr,
  837. &sensor_dev_attr_temp3_min.dev_attr.attr,
  838. &sensor_dev_attr_temp3_min_alarm.dev_attr.attr,
  839. &sensor_dev_attr_temp3_max.dev_attr.attr,
  840. &sensor_dev_attr_temp3_max_alarm.dev_attr.attr,
  841. &sensor_dev_attr_temp3_crit.dev_attr.attr,
  842. &sensor_dev_attr_temp3_crit_alarm.dev_attr.attr,
  843. &sensor_dev_attr_temp3_fault.dev_attr.attr,
  844. &sensor_dev_attr_auto_temp3_off.dev_attr.attr,
  845. &sensor_dev_attr_auto_temp3_min.dev_attr.attr,
  846. &sensor_dev_attr_auto_temp3_max.dev_attr.attr,
  847. &sensor_dev_attr_auto_fan2_min_pwm.dev_attr.attr,
  848. NULL
  849. };
  850. static const struct attribute_group adm1031_group_opt = {
  851. .attrs = adm1031_attributes_opt,
  852. };
  853. /* Return 0 if detection is successful, -ENODEV otherwise */
  854. static int adm1031_detect(struct i2c_client *client,
  855. struct i2c_board_info *info)
  856. {
  857. struct i2c_adapter *adapter = client->adapter;
  858. const char *name;
  859. int id, co;
  860. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  861. return -ENODEV;
  862. id = i2c_smbus_read_byte_data(client, 0x3d);
  863. co = i2c_smbus_read_byte_data(client, 0x3e);
  864. if (!((id == 0x31 || id == 0x30) && co == 0x41))
  865. return -ENODEV;
  866. name = (id == 0x30) ? "adm1030" : "adm1031";
  867. strscpy(info->type, name, I2C_NAME_SIZE);
  868. return 0;
  869. }
  870. static void adm1031_init_client(struct i2c_client *client)
  871. {
  872. unsigned int read_val;
  873. unsigned int mask;
  874. int i;
  875. struct adm1031_data *data = i2c_get_clientdata(client);
  876. mask = (ADM1031_CONF2_PWM1_ENABLE | ADM1031_CONF2_TACH1_ENABLE);
  877. if (data->chip_type == adm1031) {
  878. mask |= (ADM1031_CONF2_PWM2_ENABLE |
  879. ADM1031_CONF2_TACH2_ENABLE);
  880. }
  881. /* Initialize the ADM1031 chip (enables fan speed reading ) */
  882. read_val = adm1031_read_value(client, ADM1031_REG_CONF2);
  883. if ((read_val | mask) != read_val)
  884. adm1031_write_value(client, ADM1031_REG_CONF2, read_val | mask);
  885. read_val = adm1031_read_value(client, ADM1031_REG_CONF1);
  886. if ((read_val | ADM1031_CONF1_MONITOR_ENABLE) != read_val) {
  887. adm1031_write_value(client, ADM1031_REG_CONF1,
  888. read_val | ADM1031_CONF1_MONITOR_ENABLE);
  889. }
  890. /* Read the chip's update rate */
  891. mask = ADM1031_UPDATE_RATE_MASK;
  892. read_val = adm1031_read_value(client, ADM1031_REG_FAN_FILTER);
  893. i = (read_val & mask) >> ADM1031_UPDATE_RATE_SHIFT;
  894. /* Save it as update interval */
  895. data->update_interval = update_intervals[i];
  896. }
  897. static const struct i2c_device_id adm1031_id[];
  898. static int adm1031_probe(struct i2c_client *client)
  899. {
  900. struct device *dev = &client->dev;
  901. struct device *hwmon_dev;
  902. struct adm1031_data *data;
  903. data = devm_kzalloc(dev, sizeof(struct adm1031_data), GFP_KERNEL);
  904. if (!data)
  905. return -ENOMEM;
  906. i2c_set_clientdata(client, data);
  907. data->client = client;
  908. data->chip_type = i2c_match_id(adm1031_id, client)->driver_data;
  909. mutex_init(&data->update_lock);
  910. if (data->chip_type == adm1030)
  911. data->chan_select_table = &auto_channel_select_table_adm1030;
  912. else
  913. data->chan_select_table = &auto_channel_select_table_adm1031;
  914. /* Initialize the ADM1031 chip */
  915. adm1031_init_client(client);
  916. /* sysfs hooks */
  917. data->groups[0] = &adm1031_group;
  918. if (data->chip_type == adm1031)
  919. data->groups[1] = &adm1031_group_opt;
  920. hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
  921. data, data->groups);
  922. return PTR_ERR_OR_ZERO(hwmon_dev);
  923. }
  924. static const struct i2c_device_id adm1031_id[] = {
  925. { "adm1030", adm1030 },
  926. { "adm1031", adm1031 },
  927. { }
  928. };
  929. MODULE_DEVICE_TABLE(i2c, adm1031_id);
  930. static struct i2c_driver adm1031_driver = {
  931. .class = I2C_CLASS_HWMON,
  932. .driver = {
  933. .name = "adm1031",
  934. },
  935. .probe_new = adm1031_probe,
  936. .id_table = adm1031_id,
  937. .detect = adm1031_detect,
  938. .address_list = normal_i2c,
  939. };
  940. module_i2c_driver(adm1031_driver);
  941. MODULE_AUTHOR("Alexandre d'Alton <[email protected]>");
  942. MODULE_DESCRIPTION("ADM1031/ADM1030 driver");
  943. MODULE_LICENSE("GPL");