adt7475.c 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282
  1. /*
  2. * adt7475 - Thermal sensor driver for the ADT7475 chip and derivatives
  3. * Copyright (C) 2007-2008, Advanced Micro Devices, Inc.
  4. * Copyright (C) 2008 Jordan Crouse <jordan@cosmicpenguin.net>
  5. * Copyright (C) 2008 Hans de Goede <hdegoede@redhat.com>
  6. * Derived from the lm83 driver by Jean Delvare
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License version 2 as
  10. * published by the Free Software Foundation.
  11. */
  12. #include <linux/module.h>
  13. #include <linux/init.h>
  14. #include <linux/slab.h>
  15. #include <linux/i2c.h>
  16. #include <linux/hwmon.h>
  17. #include <linux/hwmon-sysfs.h>
  18. #include <linux/err.h>
  19. /* Indexes for the sysfs hooks */
  20. #define INPUT 0
  21. #define MIN 1
  22. #define MAX 2
  23. #define CONTROL 3
  24. #define OFFSET 3
  25. #define AUTOMIN 4
  26. #define THERM 5
  27. #define HYSTERSIS 6
  28. /* These are unique identifiers for the sysfs functions - unlike the
  29. numbers above, these are not also indexes into an array
  30. */
  31. #define ALARM 9
  32. #define FAULT 10
  33. /* 7475 Common Registers */
  34. #define REG_VOLTAGE_BASE 0x20
  35. #define REG_TEMP_BASE 0x25
  36. #define REG_TACH_BASE 0x28
  37. #define REG_PWM_BASE 0x30
  38. #define REG_PWM_MAX_BASE 0x38
  39. #define REG_DEVID 0x3D
  40. #define REG_VENDID 0x3E
  41. #define REG_STATUS1 0x41
  42. #define REG_STATUS2 0x42
  43. #define REG_VOLTAGE_MIN_BASE 0x44
  44. #define REG_VOLTAGE_MAX_BASE 0x45
  45. #define REG_TEMP_MIN_BASE 0x4E
  46. #define REG_TEMP_MAX_BASE 0x4F
  47. #define REG_TACH_MIN_BASE 0x54
  48. #define REG_PWM_CONFIG_BASE 0x5C
  49. #define REG_TEMP_TRANGE_BASE 0x5F
  50. #define REG_PWM_MIN_BASE 0x64
  51. #define REG_TEMP_TMIN_BASE 0x67
  52. #define REG_TEMP_THERM_BASE 0x6A
  53. #define REG_REMOTE1_HYSTERSIS 0x6D
  54. #define REG_REMOTE2_HYSTERSIS 0x6E
  55. #define REG_TEMP_OFFSET_BASE 0x70
  56. #define REG_EXTEND1 0x76
  57. #define REG_EXTEND2 0x77
  58. #define REG_CONFIG5 0x7C
  59. #define REG_CONFIG4 0x7D
  60. #define CONFIG4_MAXDUTY 0x08
  61. #define CONFIG5_TWOSCOMP 0x01
  62. #define CONFIG5_TEMPOFFSET 0x02
  63. /* ADT7475 Settings */
  64. #define ADT7475_VOLTAGE_COUNT 5 /* Not counting Vtt */
  65. #define ADT7475_TEMP_COUNT 3
  66. #define ADT7475_TACH_COUNT 4
  67. #define ADT7475_PWM_COUNT 3
  68. /* Macro to read the registers */
  69. #define adt7475_read(reg) i2c_smbus_read_byte_data(client, (reg))
  70. /* Macros to easily index the registers */
  71. #define TACH_REG(idx) (REG_TACH_BASE + ((idx) * 2))
  72. #define TACH_MIN_REG(idx) (REG_TACH_MIN_BASE + ((idx) * 2))
  73. #define PWM_REG(idx) (REG_PWM_BASE + (idx))
  74. #define PWM_MAX_REG(idx) (REG_PWM_MAX_BASE + (idx))
  75. #define PWM_MIN_REG(idx) (REG_PWM_MIN_BASE + (idx))
  76. #define PWM_CONFIG_REG(idx) (REG_PWM_CONFIG_BASE + (idx))
  77. #define VOLTAGE_REG(idx) (REG_VOLTAGE_BASE + (idx))
  78. #define VOLTAGE_MIN_REG(idx) (REG_VOLTAGE_MIN_BASE + ((idx) * 2))
  79. #define VOLTAGE_MAX_REG(idx) (REG_VOLTAGE_MAX_BASE + ((idx) * 2))
  80. #define TEMP_REG(idx) (REG_TEMP_BASE + (idx))
  81. #define TEMP_MIN_REG(idx) (REG_TEMP_MIN_BASE + ((idx) * 2))
  82. #define TEMP_MAX_REG(idx) (REG_TEMP_MAX_BASE + ((idx) * 2))
  83. #define TEMP_TMIN_REG(idx) (REG_TEMP_TMIN_BASE + (idx))
  84. #define TEMP_THERM_REG(idx) (REG_TEMP_THERM_BASE + (idx))
  85. #define TEMP_OFFSET_REG(idx) (REG_TEMP_OFFSET_BASE + (idx))
  86. #define TEMP_TRANGE_REG(idx) (REG_TEMP_TRANGE_BASE + (idx))
  87. static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
  88. I2C_CLIENT_INSMOD_2(adt7473, adt7475);
  89. static const struct i2c_device_id adt7475_id[] = {
  90. { "adt7473", adt7473 },
  91. { "adt7475", adt7475 },
  92. { }
  93. };
  94. MODULE_DEVICE_TABLE(i2c, adt7475_id);
  95. struct adt7475_data {
  96. struct device *hwmon_dev;
  97. struct mutex lock;
  98. unsigned long measure_updated;
  99. unsigned long limits_updated;
  100. char valid;
  101. u8 config4;
  102. u8 config5;
  103. u8 has_voltage;
  104. u16 alarms;
  105. u16 voltage[3][6];
  106. u16 temp[7][3];
  107. u16 tach[2][4];
  108. u8 pwm[4][3];
  109. u8 range[3];
  110. u8 pwmctl[3];
  111. u8 pwmchan[3];
  112. };
  113. static struct i2c_driver adt7475_driver;
  114. static struct adt7475_data *adt7475_update_device(struct device *dev);
  115. static void adt7475_read_hystersis(struct i2c_client *client);
  116. static void adt7475_read_pwm(struct i2c_client *client, int index);
  117. /* Given a temp value, convert it to register value */
  118. static inline u16 temp2reg(struct adt7475_data *data, long val)
  119. {
  120. u16 ret;
  121. if (!(data->config5 & CONFIG5_TWOSCOMP)) {
  122. val = SENSORS_LIMIT(val, -64000, 191000);
  123. ret = (val + 64500) / 1000;
  124. } else {
  125. val = SENSORS_LIMIT(val, -128000, 127000);
  126. if (val < -500)
  127. ret = (256500 + val) / 1000;
  128. else
  129. ret = (val + 500) / 1000;
  130. }
  131. return ret << 2;
  132. }
  133. /* Given a register value, convert it to a real temp value */
  134. static inline int reg2temp(struct adt7475_data *data, u16 reg)
  135. {
  136. if (data->config5 & CONFIG5_TWOSCOMP) {
  137. if (reg >= 512)
  138. return (reg - 1024) * 250;
  139. else
  140. return reg * 250;
  141. } else
  142. return (reg - 256) * 250;
  143. }
  144. static inline int tach2rpm(u16 tach)
  145. {
  146. if (tach == 0 || tach == 0xFFFF)
  147. return 0;
  148. return (90000 * 60) / tach;
  149. }
  150. static inline u16 rpm2tach(unsigned long rpm)
  151. {
  152. if (rpm == 0)
  153. return 0;
  154. return SENSORS_LIMIT((90000 * 60) / rpm, 1, 0xFFFF);
  155. }
  156. /* Scaling factors for voltage inputs, taken from the ADT7490 datasheet */
  157. static const int adt7473_in_scaling[ADT7475_VOLTAGE_COUNT + 1][2] = {
  158. { 45, 94 }, /* +2.5V */
  159. { 175, 525 }, /* Vccp */
  160. { 68, 71 }, /* Vcc */
  161. { 93, 47 }, /* +5V */
  162. { 120, 20 }, /* +12V */
  163. { 45, 45 }, /* Vtt */
  164. };
  165. static inline int reg2volt(int channel, u16 reg)
  166. {
  167. const int *r = adt7473_in_scaling[channel];
  168. return DIV_ROUND_CLOSEST(reg * (r[0] + r[1]) * 2250, r[1] * 1024);
  169. }
  170. static inline u16 volt2reg(int channel, long volt)
  171. {
  172. const int *r = adt7473_in_scaling[channel];
  173. long reg;
  174. reg = (volt * r[1] * 1024) / ((r[0] + r[1]) * 2250);
  175. return SENSORS_LIMIT(reg, 0, 1023) & (0xff << 2);
  176. }
  177. static u16 adt7475_read_word(struct i2c_client *client, int reg)
  178. {
  179. u16 val;
  180. val = i2c_smbus_read_byte_data(client, reg);
  181. val |= (i2c_smbus_read_byte_data(client, reg + 1) << 8);
  182. return val;
  183. }
  184. static void adt7475_write_word(struct i2c_client *client, int reg, u16 val)
  185. {
  186. i2c_smbus_write_byte_data(client, reg + 1, val >> 8);
  187. i2c_smbus_write_byte_data(client, reg, val & 0xFF);
  188. }
  189. /* Find the nearest value in a table - used for pwm frequency and
  190. auto temp range */
  191. static int find_nearest(long val, const int *array, int size)
  192. {
  193. int i;
  194. if (val < array[0])
  195. return 0;
  196. if (val > array[size - 1])
  197. return size - 1;
  198. for (i = 0; i < size - 1; i++) {
  199. int a, b;
  200. if (val > array[i + 1])
  201. continue;
  202. a = val - array[i];
  203. b = array[i + 1] - val;
  204. return (a <= b) ? i : i + 1;
  205. }
  206. return 0;
  207. }
  208. static ssize_t show_voltage(struct device *dev, struct device_attribute *attr,
  209. char *buf)
  210. {
  211. struct adt7475_data *data = adt7475_update_device(dev);
  212. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  213. unsigned short val;
  214. switch (sattr->nr) {
  215. case ALARM:
  216. return sprintf(buf, "%d\n",
  217. (data->alarms >> sattr->index) & 1);
  218. default:
  219. val = data->voltage[sattr->nr][sattr->index];
  220. return sprintf(buf, "%d\n", reg2volt(sattr->index, val));
  221. }
  222. }
  223. static ssize_t set_voltage(struct device *dev, struct device_attribute *attr,
  224. const char *buf, size_t count)
  225. {
  226. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  227. struct i2c_client *client = to_i2c_client(dev);
  228. struct adt7475_data *data = i2c_get_clientdata(client);
  229. unsigned char reg;
  230. long val;
  231. if (strict_strtol(buf, 10, &val))
  232. return -EINVAL;
  233. mutex_lock(&data->lock);
  234. data->voltage[sattr->nr][sattr->index] = volt2reg(sattr->index, val);
  235. if (sattr->nr == MIN)
  236. reg = VOLTAGE_MIN_REG(sattr->index);
  237. else
  238. reg = VOLTAGE_MAX_REG(sattr->index);
  239. i2c_smbus_write_byte_data(client, reg,
  240. data->voltage[sattr->nr][sattr->index] >> 2);
  241. mutex_unlock(&data->lock);
  242. return count;
  243. }
  244. static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
  245. char *buf)
  246. {
  247. struct adt7475_data *data = adt7475_update_device(dev);
  248. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  249. int out;
  250. switch (sattr->nr) {
  251. case HYSTERSIS:
  252. mutex_lock(&data->lock);
  253. out = data->temp[sattr->nr][sattr->index];
  254. if (sattr->index != 1)
  255. out = (out >> 4) & 0xF;
  256. else
  257. out = (out & 0xF);
  258. /* Show the value as an absolute number tied to
  259. * THERM */
  260. out = reg2temp(data, data->temp[THERM][sattr->index]) -
  261. out * 1000;
  262. mutex_unlock(&data->lock);
  263. break;
  264. case OFFSET:
  265. /* Offset is always 2's complement, regardless of the
  266. * setting in CONFIG5 */
  267. mutex_lock(&data->lock);
  268. out = (s8)data->temp[sattr->nr][sattr->index];
  269. if (data->config5 & CONFIG5_TEMPOFFSET)
  270. out *= 1000;
  271. else
  272. out *= 500;
  273. mutex_unlock(&data->lock);
  274. break;
  275. case ALARM:
  276. out = (data->alarms >> (sattr->index + 4)) & 1;
  277. break;
  278. case FAULT:
  279. /* Note - only for remote1 and remote2 */
  280. out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000));
  281. break;
  282. default:
  283. /* All other temp values are in the configured format */
  284. out = reg2temp(data, data->temp[sattr->nr][sattr->index]);
  285. }
  286. return sprintf(buf, "%d\n", out);
  287. }
  288. static ssize_t set_temp(struct device *dev, struct device_attribute *attr,
  289. const char *buf, size_t count)
  290. {
  291. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  292. struct i2c_client *client = to_i2c_client(dev);
  293. struct adt7475_data *data = i2c_get_clientdata(client);
  294. unsigned char reg = 0;
  295. u8 out;
  296. int temp;
  297. long val;
  298. if (strict_strtol(buf, 10, &val))
  299. return -EINVAL;
  300. mutex_lock(&data->lock);
  301. /* We need the config register in all cases for temp <-> reg conv. */
  302. data->config5 = adt7475_read(REG_CONFIG5);
  303. switch (sattr->nr) {
  304. case OFFSET:
  305. if (data->config5 & CONFIG5_TEMPOFFSET) {
  306. val = SENSORS_LIMIT(val, -63000, 127000);
  307. out = data->temp[OFFSET][sattr->index] = val / 1000;
  308. } else {
  309. val = SENSORS_LIMIT(val, -63000, 64000);
  310. out = data->temp[OFFSET][sattr->index] = val / 500;
  311. }
  312. break;
  313. case HYSTERSIS:
  314. /* The value will be given as an absolute value, turn it
  315. into an offset based on THERM */
  316. /* Read fresh THERM and HYSTERSIS values from the chip */
  317. data->temp[THERM][sattr->index] =
  318. adt7475_read(TEMP_THERM_REG(sattr->index)) << 2;
  319. adt7475_read_hystersis(client);
  320. temp = reg2temp(data, data->temp[THERM][sattr->index]);
  321. val = SENSORS_LIMIT(val, temp - 15000, temp);
  322. val = (temp - val) / 1000;
  323. if (sattr->index != 1) {
  324. data->temp[HYSTERSIS][sattr->index] &= 0xF0;
  325. data->temp[HYSTERSIS][sattr->index] |= (val & 0xF) << 4;
  326. } else {
  327. data->temp[HYSTERSIS][sattr->index] &= 0x0F;
  328. data->temp[HYSTERSIS][sattr->index] |= (val & 0xF);
  329. }
  330. out = data->temp[HYSTERSIS][sattr->index];
  331. break;
  332. default:
  333. data->temp[sattr->nr][sattr->index] = temp2reg(data, val);
  334. /* We maintain an extra 2 digits of precision for simplicity
  335. * - shift those back off before writing the value */
  336. out = (u8) (data->temp[sattr->nr][sattr->index] >> 2);
  337. }
  338. switch (sattr->nr) {
  339. case MIN:
  340. reg = TEMP_MIN_REG(sattr->index);
  341. break;
  342. case MAX:
  343. reg = TEMP_MAX_REG(sattr->index);
  344. break;
  345. case OFFSET:
  346. reg = TEMP_OFFSET_REG(sattr->index);
  347. break;
  348. case AUTOMIN:
  349. reg = TEMP_TMIN_REG(sattr->index);
  350. break;
  351. case THERM:
  352. reg = TEMP_THERM_REG(sattr->index);
  353. break;
  354. case HYSTERSIS:
  355. if (sattr->index != 2)
  356. reg = REG_REMOTE1_HYSTERSIS;
  357. else
  358. reg = REG_REMOTE2_HYSTERSIS;
  359. break;
  360. }
  361. i2c_smbus_write_byte_data(client, reg, out);
  362. mutex_unlock(&data->lock);
  363. return count;
  364. }
  365. /* Table of autorange values - the user will write the value in millidegrees,
  366. and we'll convert it */
  367. static const int autorange_table[] = {
  368. 2000, 2500, 3330, 4000, 5000, 6670, 8000,
  369. 10000, 13330, 16000, 20000, 26670, 32000, 40000,
  370. 53330, 80000
  371. };
  372. static ssize_t show_point2(struct device *dev, struct device_attribute *attr,
  373. char *buf)
  374. {
  375. struct adt7475_data *data = adt7475_update_device(dev);
  376. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  377. int out, val;
  378. mutex_lock(&data->lock);
  379. out = (data->range[sattr->index] >> 4) & 0x0F;
  380. val = reg2temp(data, data->temp[AUTOMIN][sattr->index]);
  381. mutex_unlock(&data->lock);
  382. return sprintf(buf, "%d\n", val + autorange_table[out]);
  383. }
  384. static ssize_t set_point2(struct device *dev, struct device_attribute *attr,
  385. const char *buf, size_t count)
  386. {
  387. struct i2c_client *client = to_i2c_client(dev);
  388. struct adt7475_data *data = i2c_get_clientdata(client);
  389. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  390. int temp;
  391. long val;
  392. if (strict_strtol(buf, 10, &val))
  393. return -EINVAL;
  394. mutex_lock(&data->lock);
  395. /* Get a fresh copy of the needed registers */
  396. data->config5 = adt7475_read(REG_CONFIG5);
  397. data->temp[AUTOMIN][sattr->index] =
  398. adt7475_read(TEMP_TMIN_REG(sattr->index)) << 2;
  399. data->range[sattr->index] =
  400. adt7475_read(TEMP_TRANGE_REG(sattr->index));
  401. /* The user will write an absolute value, so subtract the start point
  402. to figure the range */
  403. temp = reg2temp(data, data->temp[AUTOMIN][sattr->index]);
  404. val = SENSORS_LIMIT(val, temp + autorange_table[0],
  405. temp + autorange_table[ARRAY_SIZE(autorange_table) - 1]);
  406. val -= temp;
  407. /* Find the nearest table entry to what the user wrote */
  408. val = find_nearest(val, autorange_table, ARRAY_SIZE(autorange_table));
  409. data->range[sattr->index] &= ~0xF0;
  410. data->range[sattr->index] |= val << 4;
  411. i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(sattr->index),
  412. data->range[sattr->index]);
  413. mutex_unlock(&data->lock);
  414. return count;
  415. }
  416. static ssize_t show_tach(struct device *dev, struct device_attribute *attr,
  417. char *buf)
  418. {
  419. struct adt7475_data *data = adt7475_update_device(dev);
  420. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  421. int out;
  422. if (sattr->nr == ALARM)
  423. out = (data->alarms >> (sattr->index + 10)) & 1;
  424. else
  425. out = tach2rpm(data->tach[sattr->nr][sattr->index]);
  426. return sprintf(buf, "%d\n", out);
  427. }
  428. static ssize_t set_tach(struct device *dev, struct device_attribute *attr,
  429. const char *buf, size_t count)
  430. {
  431. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  432. struct i2c_client *client = to_i2c_client(dev);
  433. struct adt7475_data *data = i2c_get_clientdata(client);
  434. unsigned long val;
  435. if (strict_strtoul(buf, 10, &val))
  436. return -EINVAL;
  437. mutex_lock(&data->lock);
  438. data->tach[MIN][sattr->index] = rpm2tach(val);
  439. adt7475_write_word(client, TACH_MIN_REG(sattr->index),
  440. data->tach[MIN][sattr->index]);
  441. mutex_unlock(&data->lock);
  442. return count;
  443. }
  444. static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
  445. char *buf)
  446. {
  447. struct adt7475_data *data = adt7475_update_device(dev);
  448. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  449. return sprintf(buf, "%d\n", data->pwm[sattr->nr][sattr->index]);
  450. }
  451. static ssize_t show_pwmchan(struct device *dev, struct device_attribute *attr,
  452. char *buf)
  453. {
  454. struct adt7475_data *data = adt7475_update_device(dev);
  455. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  456. return sprintf(buf, "%d\n", data->pwmchan[sattr->index]);
  457. }
  458. static ssize_t show_pwmctrl(struct device *dev, struct device_attribute *attr,
  459. char *buf)
  460. {
  461. struct adt7475_data *data = adt7475_update_device(dev);
  462. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  463. return sprintf(buf, "%d\n", data->pwmctl[sattr->index]);
  464. }
  465. static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
  466. const char *buf, size_t count)
  467. {
  468. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  469. struct i2c_client *client = to_i2c_client(dev);
  470. struct adt7475_data *data = i2c_get_clientdata(client);
  471. unsigned char reg = 0;
  472. long val;
  473. if (strict_strtol(buf, 10, &val))
  474. return -EINVAL;
  475. mutex_lock(&data->lock);
  476. switch (sattr->nr) {
  477. case INPUT:
  478. /* Get a fresh value for CONTROL */
  479. data->pwm[CONTROL][sattr->index] =
  480. adt7475_read(PWM_CONFIG_REG(sattr->index));
  481. /* If we are not in manual mode, then we shouldn't allow
  482. * the user to set the pwm speed */
  483. if (((data->pwm[CONTROL][sattr->index] >> 5) & 7) != 7) {
  484. mutex_unlock(&data->lock);
  485. return count;
  486. }
  487. reg = PWM_REG(sattr->index);
  488. break;
  489. case MIN:
  490. reg = PWM_MIN_REG(sattr->index);
  491. break;
  492. case MAX:
  493. reg = PWM_MAX_REG(sattr->index);
  494. break;
  495. }
  496. data->pwm[sattr->nr][sattr->index] = SENSORS_LIMIT(val, 0, 0xFF);
  497. i2c_smbus_write_byte_data(client, reg,
  498. data->pwm[sattr->nr][sattr->index]);
  499. mutex_unlock(&data->lock);
  500. return count;
  501. }
  502. /* Called by set_pwmctrl and set_pwmchan */
  503. static int hw_set_pwm(struct i2c_client *client, int index,
  504. unsigned int pwmctl, unsigned int pwmchan)
  505. {
  506. struct adt7475_data *data = i2c_get_clientdata(client);
  507. long val = 0;
  508. switch (pwmctl) {
  509. case 0:
  510. val = 0x03; /* Run at full speed */
  511. break;
  512. case 1:
  513. val = 0x07; /* Manual mode */
  514. break;
  515. case 2:
  516. switch (pwmchan) {
  517. case 1:
  518. /* Remote1 controls PWM */
  519. val = 0x00;
  520. break;
  521. case 2:
  522. /* local controls PWM */
  523. val = 0x01;
  524. break;
  525. case 4:
  526. /* remote2 controls PWM */
  527. val = 0x02;
  528. break;
  529. case 6:
  530. /* local/remote2 control PWM */
  531. val = 0x05;
  532. break;
  533. case 7:
  534. /* All three control PWM */
  535. val = 0x06;
  536. break;
  537. default:
  538. return -EINVAL;
  539. }
  540. break;
  541. default:
  542. return -EINVAL;
  543. }
  544. data->pwmctl[index] = pwmctl;
  545. data->pwmchan[index] = pwmchan;
  546. data->pwm[CONTROL][index] &= ~0xE0;
  547. data->pwm[CONTROL][index] |= (val & 7) << 5;
  548. i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
  549. data->pwm[CONTROL][index]);
  550. return 0;
  551. }
  552. static ssize_t set_pwmchan(struct device *dev, struct device_attribute *attr,
  553. const char *buf, size_t count)
  554. {
  555. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  556. struct i2c_client *client = to_i2c_client(dev);
  557. struct adt7475_data *data = i2c_get_clientdata(client);
  558. int r;
  559. long val;
  560. if (strict_strtol(buf, 10, &val))
  561. return -EINVAL;
  562. mutex_lock(&data->lock);
  563. /* Read Modify Write PWM values */
  564. adt7475_read_pwm(client, sattr->index);
  565. r = hw_set_pwm(client, sattr->index, data->pwmctl[sattr->index], val);
  566. if (r)
  567. count = r;
  568. mutex_unlock(&data->lock);
  569. return count;
  570. }
  571. static ssize_t set_pwmctrl(struct device *dev, struct device_attribute *attr,
  572. const char *buf, size_t count)
  573. {
  574. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  575. struct i2c_client *client = to_i2c_client(dev);
  576. struct adt7475_data *data = i2c_get_clientdata(client);
  577. int r;
  578. long val;
  579. if (strict_strtol(buf, 10, &val))
  580. return -EINVAL;
  581. mutex_lock(&data->lock);
  582. /* Read Modify Write PWM values */
  583. adt7475_read_pwm(client, sattr->index);
  584. r = hw_set_pwm(client, sattr->index, val, data->pwmchan[sattr->index]);
  585. if (r)
  586. count = r;
  587. mutex_unlock(&data->lock);
  588. return count;
  589. }
  590. /* List of frequencies for the PWM */
  591. static const int pwmfreq_table[] = {
  592. 11, 14, 22, 29, 35, 44, 58, 88
  593. };
  594. static ssize_t show_pwmfreq(struct device *dev, struct device_attribute *attr,
  595. char *buf)
  596. {
  597. struct adt7475_data *data = adt7475_update_device(dev);
  598. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  599. return sprintf(buf, "%d\n",
  600. pwmfreq_table[data->range[sattr->index] & 7]);
  601. }
  602. static ssize_t set_pwmfreq(struct device *dev, struct device_attribute *attr,
  603. const char *buf, size_t count)
  604. {
  605. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  606. struct i2c_client *client = to_i2c_client(dev);
  607. struct adt7475_data *data = i2c_get_clientdata(client);
  608. int out;
  609. long val;
  610. if (strict_strtol(buf, 10, &val))
  611. return -EINVAL;
  612. out = find_nearest(val, pwmfreq_table, ARRAY_SIZE(pwmfreq_table));
  613. mutex_lock(&data->lock);
  614. data->range[sattr->index] =
  615. adt7475_read(TEMP_TRANGE_REG(sattr->index));
  616. data->range[sattr->index] &= ~7;
  617. data->range[sattr->index] |= out;
  618. i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(sattr->index),
  619. data->range[sattr->index]);
  620. mutex_unlock(&data->lock);
  621. return count;
  622. }
  623. static ssize_t show_pwm_at_crit(struct device *dev,
  624. struct device_attribute *devattr, char *buf)
  625. {
  626. struct adt7475_data *data = adt7475_update_device(dev);
  627. return sprintf(buf, "%d\n", !!(data->config4 & CONFIG4_MAXDUTY));
  628. }
  629. static ssize_t set_pwm_at_crit(struct device *dev,
  630. struct device_attribute *devattr,
  631. const char *buf, size_t count)
  632. {
  633. struct i2c_client *client = to_i2c_client(dev);
  634. struct adt7475_data *data = i2c_get_clientdata(client);
  635. long val;
  636. if (strict_strtol(buf, 10, &val))
  637. return -EINVAL;
  638. if (val != 0 && val != 1)
  639. return -EINVAL;
  640. mutex_lock(&data->lock);
  641. data->config4 = i2c_smbus_read_byte_data(client, REG_CONFIG4);
  642. if (val)
  643. data->config4 |= CONFIG4_MAXDUTY;
  644. else
  645. data->config4 &= ~CONFIG4_MAXDUTY;
  646. i2c_smbus_write_byte_data(client, REG_CONFIG4, data->config4);
  647. mutex_unlock(&data->lock);
  648. return count;
  649. }
  650. static SENSOR_DEVICE_ATTR_2(in1_input, S_IRUGO, show_voltage, NULL, INPUT, 1);
  651. static SENSOR_DEVICE_ATTR_2(in1_max, S_IRUGO | S_IWUSR, show_voltage,
  652. set_voltage, MAX, 1);
  653. static SENSOR_DEVICE_ATTR_2(in1_min, S_IRUGO | S_IWUSR, show_voltage,
  654. set_voltage, MIN, 1);
  655. static SENSOR_DEVICE_ATTR_2(in1_alarm, S_IRUGO, show_voltage, NULL, ALARM, 1);
  656. static SENSOR_DEVICE_ATTR_2(in2_input, S_IRUGO, show_voltage, NULL, INPUT, 2);
  657. static SENSOR_DEVICE_ATTR_2(in2_max, S_IRUGO | S_IWUSR, show_voltage,
  658. set_voltage, MAX, 2);
  659. static SENSOR_DEVICE_ATTR_2(in2_min, S_IRUGO | S_IWUSR, show_voltage,
  660. set_voltage, MIN, 2);
  661. static SENSOR_DEVICE_ATTR_2(in2_alarm, S_IRUGO, show_voltage, NULL, ALARM, 2);
  662. static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, INPUT, 0);
  663. static SENSOR_DEVICE_ATTR_2(temp1_alarm, S_IRUGO, show_temp, NULL, ALARM, 0);
  664. static SENSOR_DEVICE_ATTR_2(temp1_fault, S_IRUGO, show_temp, NULL, FAULT, 0);
  665. static SENSOR_DEVICE_ATTR_2(temp1_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
  666. MAX, 0);
  667. static SENSOR_DEVICE_ATTR_2(temp1_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
  668. MIN, 0);
  669. static SENSOR_DEVICE_ATTR_2(temp1_offset, S_IRUGO | S_IWUSR, show_temp,
  670. set_temp, OFFSET, 0);
  671. static SENSOR_DEVICE_ATTR_2(temp1_auto_point1_temp, S_IRUGO | S_IWUSR,
  672. show_temp, set_temp, AUTOMIN, 0);
  673. static SENSOR_DEVICE_ATTR_2(temp1_auto_point2_temp, S_IRUGO | S_IWUSR,
  674. show_point2, set_point2, 0, 0);
  675. static SENSOR_DEVICE_ATTR_2(temp1_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
  676. THERM, 0);
  677. static SENSOR_DEVICE_ATTR_2(temp1_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
  678. set_temp, HYSTERSIS, 0);
  679. static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, INPUT, 1);
  680. static SENSOR_DEVICE_ATTR_2(temp2_alarm, S_IRUGO, show_temp, NULL, ALARM, 1);
  681. static SENSOR_DEVICE_ATTR_2(temp2_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
  682. MAX, 1);
  683. static SENSOR_DEVICE_ATTR_2(temp2_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
  684. MIN, 1);
  685. static SENSOR_DEVICE_ATTR_2(temp2_offset, S_IRUGO | S_IWUSR, show_temp,
  686. set_temp, OFFSET, 1);
  687. static SENSOR_DEVICE_ATTR_2(temp2_auto_point1_temp, S_IRUGO | S_IWUSR,
  688. show_temp, set_temp, AUTOMIN, 1);
  689. static SENSOR_DEVICE_ATTR_2(temp2_auto_point2_temp, S_IRUGO | S_IWUSR,
  690. show_point2, set_point2, 0, 1);
  691. static SENSOR_DEVICE_ATTR_2(temp2_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
  692. THERM, 1);
  693. static SENSOR_DEVICE_ATTR_2(temp2_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
  694. set_temp, HYSTERSIS, 1);
  695. static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, INPUT, 2);
  696. static SENSOR_DEVICE_ATTR_2(temp3_alarm, S_IRUGO, show_temp, NULL, ALARM, 2);
  697. static SENSOR_DEVICE_ATTR_2(temp3_fault, S_IRUGO, show_temp, NULL, FAULT, 2);
  698. static SENSOR_DEVICE_ATTR_2(temp3_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
  699. MAX, 2);
  700. static SENSOR_DEVICE_ATTR_2(temp3_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
  701. MIN, 2);
  702. static SENSOR_DEVICE_ATTR_2(temp3_offset, S_IRUGO | S_IWUSR, show_temp,
  703. set_temp, OFFSET, 2);
  704. static SENSOR_DEVICE_ATTR_2(temp3_auto_point1_temp, S_IRUGO | S_IWUSR,
  705. show_temp, set_temp, AUTOMIN, 2);
  706. static SENSOR_DEVICE_ATTR_2(temp3_auto_point2_temp, S_IRUGO | S_IWUSR,
  707. show_point2, set_point2, 0, 2);
  708. static SENSOR_DEVICE_ATTR_2(temp3_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
  709. THERM, 2);
  710. static SENSOR_DEVICE_ATTR_2(temp3_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
  711. set_temp, HYSTERSIS, 2);
  712. static SENSOR_DEVICE_ATTR_2(fan1_input, S_IRUGO, show_tach, NULL, INPUT, 0);
  713. static SENSOR_DEVICE_ATTR_2(fan1_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
  714. MIN, 0);
  715. static SENSOR_DEVICE_ATTR_2(fan1_alarm, S_IRUGO, show_tach, NULL, ALARM, 0);
  716. static SENSOR_DEVICE_ATTR_2(fan2_input, S_IRUGO, show_tach, NULL, INPUT, 1);
  717. static SENSOR_DEVICE_ATTR_2(fan2_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
  718. MIN, 1);
  719. static SENSOR_DEVICE_ATTR_2(fan2_alarm, S_IRUGO, show_tach, NULL, ALARM, 1);
  720. static SENSOR_DEVICE_ATTR_2(fan3_input, S_IRUGO, show_tach, NULL, INPUT, 2);
  721. static SENSOR_DEVICE_ATTR_2(fan3_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
  722. MIN, 2);
  723. static SENSOR_DEVICE_ATTR_2(fan3_alarm, S_IRUGO, show_tach, NULL, ALARM, 2);
  724. static SENSOR_DEVICE_ATTR_2(fan4_input, S_IRUGO, show_tach, NULL, INPUT, 3);
  725. static SENSOR_DEVICE_ATTR_2(fan4_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
  726. MIN, 3);
  727. static SENSOR_DEVICE_ATTR_2(fan4_alarm, S_IRUGO, show_tach, NULL, ALARM, 3);
  728. static SENSOR_DEVICE_ATTR_2(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
  729. 0);
  730. static SENSOR_DEVICE_ATTR_2(pwm1_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
  731. set_pwmfreq, INPUT, 0);
  732. static SENSOR_DEVICE_ATTR_2(pwm1_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
  733. set_pwmctrl, INPUT, 0);
  734. static SENSOR_DEVICE_ATTR_2(pwm1_auto_channels_temp, S_IRUGO | S_IWUSR,
  735. show_pwmchan, set_pwmchan, INPUT, 0);
  736. static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
  737. set_pwm, MIN, 0);
  738. static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
  739. set_pwm, MAX, 0);
  740. static SENSOR_DEVICE_ATTR_2(pwm2, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
  741. 1);
  742. static SENSOR_DEVICE_ATTR_2(pwm2_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
  743. set_pwmfreq, INPUT, 1);
  744. static SENSOR_DEVICE_ATTR_2(pwm2_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
  745. set_pwmctrl, INPUT, 1);
  746. static SENSOR_DEVICE_ATTR_2(pwm2_auto_channels_temp, S_IRUGO | S_IWUSR,
  747. show_pwmchan, set_pwmchan, INPUT, 1);
  748. static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
  749. set_pwm, MIN, 1);
  750. static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
  751. set_pwm, MAX, 1);
  752. static SENSOR_DEVICE_ATTR_2(pwm3, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
  753. 2);
  754. static SENSOR_DEVICE_ATTR_2(pwm3_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
  755. set_pwmfreq, INPUT, 2);
  756. static SENSOR_DEVICE_ATTR_2(pwm3_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
  757. set_pwmctrl, INPUT, 2);
  758. static SENSOR_DEVICE_ATTR_2(pwm3_auto_channels_temp, S_IRUGO | S_IWUSR,
  759. show_pwmchan, set_pwmchan, INPUT, 2);
  760. static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
  761. set_pwm, MIN, 2);
  762. static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
  763. set_pwm, MAX, 2);
  764. /* Non-standard name, might need revisiting */
  765. static DEVICE_ATTR(pwm_use_point2_pwm_at_crit, S_IWUSR | S_IRUGO,
  766. show_pwm_at_crit, set_pwm_at_crit);
  767. static struct attribute *adt7475_attrs[] = {
  768. &sensor_dev_attr_in1_input.dev_attr.attr,
  769. &sensor_dev_attr_in1_max.dev_attr.attr,
  770. &sensor_dev_attr_in1_min.dev_attr.attr,
  771. &sensor_dev_attr_in1_alarm.dev_attr.attr,
  772. &sensor_dev_attr_in2_input.dev_attr.attr,
  773. &sensor_dev_attr_in2_max.dev_attr.attr,
  774. &sensor_dev_attr_in2_min.dev_attr.attr,
  775. &sensor_dev_attr_in2_alarm.dev_attr.attr,
  776. &sensor_dev_attr_temp1_input.dev_attr.attr,
  777. &sensor_dev_attr_temp1_alarm.dev_attr.attr,
  778. &sensor_dev_attr_temp1_fault.dev_attr.attr,
  779. &sensor_dev_attr_temp1_max.dev_attr.attr,
  780. &sensor_dev_attr_temp1_min.dev_attr.attr,
  781. &sensor_dev_attr_temp1_offset.dev_attr.attr,
  782. &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
  783. &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
  784. &sensor_dev_attr_temp1_crit.dev_attr.attr,
  785. &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
  786. &sensor_dev_attr_temp2_input.dev_attr.attr,
  787. &sensor_dev_attr_temp2_alarm.dev_attr.attr,
  788. &sensor_dev_attr_temp2_max.dev_attr.attr,
  789. &sensor_dev_attr_temp2_min.dev_attr.attr,
  790. &sensor_dev_attr_temp2_offset.dev_attr.attr,
  791. &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
  792. &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
  793. &sensor_dev_attr_temp2_crit.dev_attr.attr,
  794. &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr,
  795. &sensor_dev_attr_temp3_input.dev_attr.attr,
  796. &sensor_dev_attr_temp3_fault.dev_attr.attr,
  797. &sensor_dev_attr_temp3_alarm.dev_attr.attr,
  798. &sensor_dev_attr_temp3_max.dev_attr.attr,
  799. &sensor_dev_attr_temp3_min.dev_attr.attr,
  800. &sensor_dev_attr_temp3_offset.dev_attr.attr,
  801. &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
  802. &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
  803. &sensor_dev_attr_temp3_crit.dev_attr.attr,
  804. &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr,
  805. &sensor_dev_attr_fan1_input.dev_attr.attr,
  806. &sensor_dev_attr_fan1_min.dev_attr.attr,
  807. &sensor_dev_attr_fan1_alarm.dev_attr.attr,
  808. &sensor_dev_attr_fan2_input.dev_attr.attr,
  809. &sensor_dev_attr_fan2_min.dev_attr.attr,
  810. &sensor_dev_attr_fan2_alarm.dev_attr.attr,
  811. &sensor_dev_attr_fan3_input.dev_attr.attr,
  812. &sensor_dev_attr_fan3_min.dev_attr.attr,
  813. &sensor_dev_attr_fan3_alarm.dev_attr.attr,
  814. &sensor_dev_attr_fan4_input.dev_attr.attr,
  815. &sensor_dev_attr_fan4_min.dev_attr.attr,
  816. &sensor_dev_attr_fan4_alarm.dev_attr.attr,
  817. &sensor_dev_attr_pwm1.dev_attr.attr,
  818. &sensor_dev_attr_pwm1_freq.dev_attr.attr,
  819. &sensor_dev_attr_pwm1_enable.dev_attr.attr,
  820. &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
  821. &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
  822. &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
  823. &sensor_dev_attr_pwm2.dev_attr.attr,
  824. &sensor_dev_attr_pwm2_freq.dev_attr.attr,
  825. &sensor_dev_attr_pwm2_enable.dev_attr.attr,
  826. &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
  827. &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
  828. &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
  829. &sensor_dev_attr_pwm3.dev_attr.attr,
  830. &sensor_dev_attr_pwm3_freq.dev_attr.attr,
  831. &sensor_dev_attr_pwm3_enable.dev_attr.attr,
  832. &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
  833. &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
  834. &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
  835. &dev_attr_pwm_use_point2_pwm_at_crit.attr,
  836. NULL,
  837. };
  838. static struct attribute_group adt7475_attr_group = { .attrs = adt7475_attrs };
  839. static int adt7475_detect(struct i2c_client *client, int kind,
  840. struct i2c_board_info *info)
  841. {
  842. struct i2c_adapter *adapter = client->adapter;
  843. int vendid, devid;
  844. const char *name;
  845. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  846. return -ENODEV;
  847. vendid = adt7475_read(REG_VENDID);
  848. devid = adt7475_read(REG_DEVID);
  849. if (vendid == 0x41 && devid == 0x73)
  850. name = "adt7473";
  851. else if (vendid == 0x41 && devid == 0x75 && client->addr == 0x2e)
  852. name = "adt7475";
  853. else {
  854. dev_dbg(&adapter->dev,
  855. "Couldn't detect an ADT7473 or ADT7475 part at "
  856. "0x%02x\n", (unsigned int)client->addr);
  857. return -ENODEV;
  858. }
  859. strlcpy(info->type, name, I2C_NAME_SIZE);
  860. return 0;
  861. }
  862. static int adt7475_probe(struct i2c_client *client,
  863. const struct i2c_device_id *id)
  864. {
  865. struct adt7475_data *data;
  866. int i, ret = 0;
  867. data = kzalloc(sizeof(*data), GFP_KERNEL);
  868. if (data == NULL)
  869. return -ENOMEM;
  870. mutex_init(&data->lock);
  871. i2c_set_clientdata(client, data);
  872. /* Initialize device-specific values */
  873. switch (id->driver_data) {
  874. default:
  875. data->has_voltage = 0x06; /* in1, in2 */
  876. }
  877. /* Call adt7475_read_pwm for all pwm's as this will reprogram any
  878. pwm's which are disabled to manual mode with 0% duty cycle */
  879. for (i = 0; i < ADT7475_PWM_COUNT; i++)
  880. adt7475_read_pwm(client, i);
  881. ret = sysfs_create_group(&client->dev.kobj, &adt7475_attr_group);
  882. if (ret)
  883. goto efree;
  884. data->hwmon_dev = hwmon_device_register(&client->dev);
  885. if (IS_ERR(data->hwmon_dev)) {
  886. ret = PTR_ERR(data->hwmon_dev);
  887. goto eremove;
  888. }
  889. return 0;
  890. eremove:
  891. sysfs_remove_group(&client->dev.kobj, &adt7475_attr_group);
  892. efree:
  893. kfree(data);
  894. return ret;
  895. }
  896. static int adt7475_remove(struct i2c_client *client)
  897. {
  898. struct adt7475_data *data = i2c_get_clientdata(client);
  899. hwmon_device_unregister(data->hwmon_dev);
  900. sysfs_remove_group(&client->dev.kobj, &adt7475_attr_group);
  901. kfree(data);
  902. return 0;
  903. }
  904. static struct i2c_driver adt7475_driver = {
  905. .class = I2C_CLASS_HWMON,
  906. .driver = {
  907. .name = "adt7475",
  908. },
  909. .probe = adt7475_probe,
  910. .remove = adt7475_remove,
  911. .id_table = adt7475_id,
  912. .detect = adt7475_detect,
  913. .address_data = &addr_data,
  914. };
  915. static void adt7475_read_hystersis(struct i2c_client *client)
  916. {
  917. struct adt7475_data *data = i2c_get_clientdata(client);
  918. data->temp[HYSTERSIS][0] = (u16) adt7475_read(REG_REMOTE1_HYSTERSIS);
  919. data->temp[HYSTERSIS][1] = data->temp[HYSTERSIS][0];
  920. data->temp[HYSTERSIS][2] = (u16) adt7475_read(REG_REMOTE2_HYSTERSIS);
  921. }
  922. static void adt7475_read_pwm(struct i2c_client *client, int index)
  923. {
  924. struct adt7475_data *data = i2c_get_clientdata(client);
  925. unsigned int v;
  926. data->pwm[CONTROL][index] = adt7475_read(PWM_CONFIG_REG(index));
  927. /* Figure out the internal value for pwmctrl and pwmchan
  928. based on the current settings */
  929. v = (data->pwm[CONTROL][index] >> 5) & 7;
  930. if (v == 3)
  931. data->pwmctl[index] = 0;
  932. else if (v == 7)
  933. data->pwmctl[index] = 1;
  934. else if (v == 4) {
  935. /* The fan is disabled - we don't want to
  936. support that, so change to manual mode and
  937. set the duty cycle to 0 instead
  938. */
  939. data->pwm[INPUT][index] = 0;
  940. data->pwm[CONTROL][index] &= ~0xE0;
  941. data->pwm[CONTROL][index] |= (7 << 5);
  942. i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
  943. data->pwm[INPUT][index]);
  944. i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
  945. data->pwm[CONTROL][index]);
  946. data->pwmctl[index] = 1;
  947. } else {
  948. data->pwmctl[index] = 2;
  949. switch (v) {
  950. case 0:
  951. data->pwmchan[index] = 1;
  952. break;
  953. case 1:
  954. data->pwmchan[index] = 2;
  955. break;
  956. case 2:
  957. data->pwmchan[index] = 4;
  958. break;
  959. case 5:
  960. data->pwmchan[index] = 6;
  961. break;
  962. case 6:
  963. data->pwmchan[index] = 7;
  964. break;
  965. }
  966. }
  967. }
  968. static struct adt7475_data *adt7475_update_device(struct device *dev)
  969. {
  970. struct i2c_client *client = to_i2c_client(dev);
  971. struct adt7475_data *data = i2c_get_clientdata(client);
  972. u8 ext;
  973. int i;
  974. mutex_lock(&data->lock);
  975. /* Measurement values update every 2 seconds */
  976. if (time_after(jiffies, data->measure_updated + HZ * 2) ||
  977. !data->valid) {
  978. data->alarms = adt7475_read(REG_STATUS2) << 8;
  979. data->alarms |= adt7475_read(REG_STATUS1);
  980. ext = adt7475_read(REG_EXTEND1);
  981. for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
  982. if (!(data->has_voltage & (1 << i)))
  983. continue;
  984. data->voltage[INPUT][i] =
  985. (adt7475_read(VOLTAGE_REG(i)) << 2) |
  986. ((ext >> (i * 2)) & 3);
  987. }
  988. ext = adt7475_read(REG_EXTEND2);
  989. for (i = 0; i < ADT7475_TEMP_COUNT; i++)
  990. data->temp[INPUT][i] =
  991. (adt7475_read(TEMP_REG(i)) << 2) |
  992. ((ext >> ((i + 1) * 2)) & 3);
  993. for (i = 0; i < ADT7475_TACH_COUNT; i++)
  994. data->tach[INPUT][i] =
  995. adt7475_read_word(client, TACH_REG(i));
  996. /* Updated by hw when in auto mode */
  997. for (i = 0; i < ADT7475_PWM_COUNT; i++)
  998. data->pwm[INPUT][i] = adt7475_read(PWM_REG(i));
  999. data->measure_updated = jiffies;
  1000. }
  1001. /* Limits and settings, should never change update every 60 seconds */
  1002. if (time_after(jiffies, data->limits_updated + HZ * 60) ||
  1003. !data->valid) {
  1004. data->config4 = adt7475_read(REG_CONFIG4);
  1005. data->config5 = adt7475_read(REG_CONFIG5);
  1006. for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
  1007. if (!(data->has_voltage & (1 << i)))
  1008. continue;
  1009. /* Adjust values so they match the input precision */
  1010. data->voltage[MIN][i] =
  1011. adt7475_read(VOLTAGE_MIN_REG(i)) << 2;
  1012. data->voltage[MAX][i] =
  1013. adt7475_read(VOLTAGE_MAX_REG(i)) << 2;
  1014. }
  1015. for (i = 0; i < ADT7475_TEMP_COUNT; i++) {
  1016. /* Adjust values so they match the input precision */
  1017. data->temp[MIN][i] =
  1018. adt7475_read(TEMP_MIN_REG(i)) << 2;
  1019. data->temp[MAX][i] =
  1020. adt7475_read(TEMP_MAX_REG(i)) << 2;
  1021. data->temp[AUTOMIN][i] =
  1022. adt7475_read(TEMP_TMIN_REG(i)) << 2;
  1023. data->temp[THERM][i] =
  1024. adt7475_read(TEMP_THERM_REG(i)) << 2;
  1025. data->temp[OFFSET][i] =
  1026. adt7475_read(TEMP_OFFSET_REG(i));
  1027. }
  1028. adt7475_read_hystersis(client);
  1029. for (i = 0; i < ADT7475_TACH_COUNT; i++)
  1030. data->tach[MIN][i] =
  1031. adt7475_read_word(client, TACH_MIN_REG(i));
  1032. for (i = 0; i < ADT7475_PWM_COUNT; i++) {
  1033. data->pwm[MAX][i] = adt7475_read(PWM_MAX_REG(i));
  1034. data->pwm[MIN][i] = adt7475_read(PWM_MIN_REG(i));
  1035. /* Set the channel and control information */
  1036. adt7475_read_pwm(client, i);
  1037. }
  1038. data->range[0] = adt7475_read(TEMP_TRANGE_REG(0));
  1039. data->range[1] = adt7475_read(TEMP_TRANGE_REG(1));
  1040. data->range[2] = adt7475_read(TEMP_TRANGE_REG(2));
  1041. data->limits_updated = jiffies;
  1042. data->valid = 1;
  1043. }
  1044. mutex_unlock(&data->lock);
  1045. return data;
  1046. }
  1047. static int __init sensors_adt7475_init(void)
  1048. {
  1049. return i2c_add_driver(&adt7475_driver);
  1050. }
  1051. static void __exit sensors_adt7475_exit(void)
  1052. {
  1053. i2c_del_driver(&adt7475_driver);
  1054. }
  1055. MODULE_AUTHOR("Advanced Micro Devices, Inc");
  1056. MODULE_DESCRIPTION("adt7475 driver");
  1057. MODULE_LICENSE("GPL");
  1058. module_init(sensors_adt7475_init);
  1059. module_exit(sensors_adt7475_exit);