adt7475.c 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618
  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. * Copyright (C) 2009 Jean Delvare <khali@linux-fr.org>
  7. *
  8. * Derived from the lm83 driver by Jean Delvare
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License version 2 as
  12. * published by the Free Software Foundation.
  13. */
  14. #include <linux/module.h>
  15. #include <linux/init.h>
  16. #include <linux/slab.h>
  17. #include <linux/i2c.h>
  18. #include <linux/hwmon.h>
  19. #include <linux/hwmon-sysfs.h>
  20. #include <linux/hwmon-vid.h>
  21. #include <linux/err.h>
  22. /* Indexes for the sysfs hooks */
  23. #define INPUT 0
  24. #define MIN 1
  25. #define MAX 2
  26. #define CONTROL 3
  27. #define OFFSET 3
  28. #define AUTOMIN 4
  29. #define THERM 5
  30. #define HYSTERSIS 6
  31. /* These are unique identifiers for the sysfs functions - unlike the
  32. numbers above, these are not also indexes into an array
  33. */
  34. #define ALARM 9
  35. #define FAULT 10
  36. /* 7475 Common Registers */
  37. #define REG_DEVREV2 0x12 /* ADT7490 only */
  38. #define REG_VTT 0x1E /* ADT7490 only */
  39. #define REG_EXTEND3 0x1F /* ADT7490 only */
  40. #define REG_VOLTAGE_BASE 0x20
  41. #define REG_TEMP_BASE 0x25
  42. #define REG_TACH_BASE 0x28
  43. #define REG_PWM_BASE 0x30
  44. #define REG_PWM_MAX_BASE 0x38
  45. #define REG_DEVID 0x3D
  46. #define REG_VENDID 0x3E
  47. #define REG_DEVID2 0x3F
  48. #define REG_STATUS1 0x41
  49. #define REG_STATUS2 0x42
  50. #define REG_VID 0x43 /* ADT7476 only */
  51. #define REG_VOLTAGE_MIN_BASE 0x44
  52. #define REG_VOLTAGE_MAX_BASE 0x45
  53. #define REG_TEMP_MIN_BASE 0x4E
  54. #define REG_TEMP_MAX_BASE 0x4F
  55. #define REG_TACH_MIN_BASE 0x54
  56. #define REG_PWM_CONFIG_BASE 0x5C
  57. #define REG_TEMP_TRANGE_BASE 0x5F
  58. #define REG_PWM_MIN_BASE 0x64
  59. #define REG_TEMP_TMIN_BASE 0x67
  60. #define REG_TEMP_THERM_BASE 0x6A
  61. #define REG_REMOTE1_HYSTERSIS 0x6D
  62. #define REG_REMOTE2_HYSTERSIS 0x6E
  63. #define REG_TEMP_OFFSET_BASE 0x70
  64. #define REG_CONFIG2 0x73
  65. #define REG_EXTEND1 0x76
  66. #define REG_EXTEND2 0x77
  67. #define REG_CONFIG3 0x78
  68. #define REG_CONFIG5 0x7C
  69. #define REG_CONFIG4 0x7D
  70. #define REG_STATUS4 0x81 /* ADT7490 only */
  71. #define REG_VTT_MIN 0x84 /* ADT7490 only */
  72. #define REG_VTT_MAX 0x86 /* ADT7490 only */
  73. #define VID_VIDSEL 0x80 /* ADT7476 only */
  74. #define CONFIG2_ATTN 0x20
  75. #define CONFIG3_SMBALERT 0x01
  76. #define CONFIG3_THERM 0x02
  77. #define CONFIG4_PINFUNC 0x03
  78. #define CONFIG4_MAXDUTY 0x08
  79. #define CONFIG4_ATTN_IN10 0x30
  80. #define CONFIG4_ATTN_IN43 0xC0
  81. #define CONFIG5_TWOSCOMP 0x01
  82. #define CONFIG5_TEMPOFFSET 0x02
  83. #define CONFIG5_VIDGPIO 0x10 /* ADT7476 only */
  84. /* ADT7475 Settings */
  85. #define ADT7475_VOLTAGE_COUNT 5 /* Not counting Vtt */
  86. #define ADT7475_TEMP_COUNT 3
  87. #define ADT7475_TACH_COUNT 4
  88. #define ADT7475_PWM_COUNT 3
  89. /* Macro to read the registers */
  90. #define adt7475_read(reg) i2c_smbus_read_byte_data(client, (reg))
  91. /* Macros to easily index the registers */
  92. #define TACH_REG(idx) (REG_TACH_BASE + ((idx) * 2))
  93. #define TACH_MIN_REG(idx) (REG_TACH_MIN_BASE + ((idx) * 2))
  94. #define PWM_REG(idx) (REG_PWM_BASE + (idx))
  95. #define PWM_MAX_REG(idx) (REG_PWM_MAX_BASE + (idx))
  96. #define PWM_MIN_REG(idx) (REG_PWM_MIN_BASE + (idx))
  97. #define PWM_CONFIG_REG(idx) (REG_PWM_CONFIG_BASE + (idx))
  98. #define VOLTAGE_REG(idx) (REG_VOLTAGE_BASE + (idx))
  99. #define VOLTAGE_MIN_REG(idx) (REG_VOLTAGE_MIN_BASE + ((idx) * 2))
  100. #define VOLTAGE_MAX_REG(idx) (REG_VOLTAGE_MAX_BASE + ((idx) * 2))
  101. #define TEMP_REG(idx) (REG_TEMP_BASE + (idx))
  102. #define TEMP_MIN_REG(idx) (REG_TEMP_MIN_BASE + ((idx) * 2))
  103. #define TEMP_MAX_REG(idx) (REG_TEMP_MAX_BASE + ((idx) * 2))
  104. #define TEMP_TMIN_REG(idx) (REG_TEMP_TMIN_BASE + (idx))
  105. #define TEMP_THERM_REG(idx) (REG_TEMP_THERM_BASE + (idx))
  106. #define TEMP_OFFSET_REG(idx) (REG_TEMP_OFFSET_BASE + (idx))
  107. #define TEMP_TRANGE_REG(idx) (REG_TEMP_TRANGE_BASE + (idx))
  108. static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
  109. enum chips { adt7473, adt7475, adt7476, adt7490 };
  110. static const struct i2c_device_id adt7475_id[] = {
  111. { "adt7473", adt7473 },
  112. { "adt7475", adt7475 },
  113. { "adt7476", adt7476 },
  114. { "adt7490", adt7490 },
  115. { }
  116. };
  117. MODULE_DEVICE_TABLE(i2c, adt7475_id);
  118. struct adt7475_data {
  119. struct device *hwmon_dev;
  120. struct mutex lock;
  121. unsigned long measure_updated;
  122. unsigned long limits_updated;
  123. char valid;
  124. u8 config4;
  125. u8 config5;
  126. u8 has_voltage;
  127. u8 bypass_attn; /* Bypass voltage attenuator */
  128. u8 has_pwm2:1;
  129. u8 has_fan4:1;
  130. u8 has_vid:1;
  131. u32 alarms;
  132. u16 voltage[3][6];
  133. u16 temp[7][3];
  134. u16 tach[2][4];
  135. u8 pwm[4][3];
  136. u8 range[3];
  137. u8 pwmctl[3];
  138. u8 pwmchan[3];
  139. u8 vid;
  140. u8 vrm;
  141. };
  142. static struct i2c_driver adt7475_driver;
  143. static struct adt7475_data *adt7475_update_device(struct device *dev);
  144. static void adt7475_read_hystersis(struct i2c_client *client);
  145. static void adt7475_read_pwm(struct i2c_client *client, int index);
  146. /* Given a temp value, convert it to register value */
  147. static inline u16 temp2reg(struct adt7475_data *data, long val)
  148. {
  149. u16 ret;
  150. if (!(data->config5 & CONFIG5_TWOSCOMP)) {
  151. val = SENSORS_LIMIT(val, -64000, 191000);
  152. ret = (val + 64500) / 1000;
  153. } else {
  154. val = SENSORS_LIMIT(val, -128000, 127000);
  155. if (val < -500)
  156. ret = (256500 + val) / 1000;
  157. else
  158. ret = (val + 500) / 1000;
  159. }
  160. return ret << 2;
  161. }
  162. /* Given a register value, convert it to a real temp value */
  163. static inline int reg2temp(struct adt7475_data *data, u16 reg)
  164. {
  165. if (data->config5 & CONFIG5_TWOSCOMP) {
  166. if (reg >= 512)
  167. return (reg - 1024) * 250;
  168. else
  169. return reg * 250;
  170. } else
  171. return (reg - 256) * 250;
  172. }
  173. static inline int tach2rpm(u16 tach)
  174. {
  175. if (tach == 0 || tach == 0xFFFF)
  176. return 0;
  177. return (90000 * 60) / tach;
  178. }
  179. static inline u16 rpm2tach(unsigned long rpm)
  180. {
  181. if (rpm == 0)
  182. return 0;
  183. return SENSORS_LIMIT((90000 * 60) / rpm, 1, 0xFFFF);
  184. }
  185. /* Scaling factors for voltage inputs, taken from the ADT7490 datasheet */
  186. static const int adt7473_in_scaling[ADT7475_VOLTAGE_COUNT + 1][2] = {
  187. { 45, 94 }, /* +2.5V */
  188. { 175, 525 }, /* Vccp */
  189. { 68, 71 }, /* Vcc */
  190. { 93, 47 }, /* +5V */
  191. { 120, 20 }, /* +12V */
  192. { 45, 45 }, /* Vtt */
  193. };
  194. static inline int reg2volt(int channel, u16 reg, u8 bypass_attn)
  195. {
  196. const int *r = adt7473_in_scaling[channel];
  197. if (bypass_attn & (1 << channel))
  198. return DIV_ROUND_CLOSEST(reg * 2250, 1024);
  199. return DIV_ROUND_CLOSEST(reg * (r[0] + r[1]) * 2250, r[1] * 1024);
  200. }
  201. static inline u16 volt2reg(int channel, long volt, u8 bypass_attn)
  202. {
  203. const int *r = adt7473_in_scaling[channel];
  204. long reg;
  205. if (bypass_attn & (1 << channel))
  206. reg = (volt * 1024) / 2250;
  207. else
  208. reg = (volt * r[1] * 1024) / ((r[0] + r[1]) * 2250);
  209. return SENSORS_LIMIT(reg, 0, 1023) & (0xff << 2);
  210. }
  211. static u16 adt7475_read_word(struct i2c_client *client, int reg)
  212. {
  213. u16 val;
  214. val = i2c_smbus_read_byte_data(client, reg);
  215. val |= (i2c_smbus_read_byte_data(client, reg + 1) << 8);
  216. return val;
  217. }
  218. static void adt7475_write_word(struct i2c_client *client, int reg, u16 val)
  219. {
  220. i2c_smbus_write_byte_data(client, reg + 1, val >> 8);
  221. i2c_smbus_write_byte_data(client, reg, val & 0xFF);
  222. }
  223. /* Find the nearest value in a table - used for pwm frequency and
  224. auto temp range */
  225. static int find_nearest(long val, const int *array, int size)
  226. {
  227. int i;
  228. if (val < array[0])
  229. return 0;
  230. if (val > array[size - 1])
  231. return size - 1;
  232. for (i = 0; i < size - 1; i++) {
  233. int a, b;
  234. if (val > array[i + 1])
  235. continue;
  236. a = val - array[i];
  237. b = array[i + 1] - val;
  238. return (a <= b) ? i : i + 1;
  239. }
  240. return 0;
  241. }
  242. static ssize_t show_voltage(struct device *dev, struct device_attribute *attr,
  243. char *buf)
  244. {
  245. struct adt7475_data *data = adt7475_update_device(dev);
  246. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  247. unsigned short val;
  248. switch (sattr->nr) {
  249. case ALARM:
  250. return sprintf(buf, "%d\n",
  251. (data->alarms >> sattr->index) & 1);
  252. default:
  253. val = data->voltage[sattr->nr][sattr->index];
  254. return sprintf(buf, "%d\n",
  255. reg2volt(sattr->index, val, data->bypass_attn));
  256. }
  257. }
  258. static ssize_t set_voltage(struct device *dev, struct device_attribute *attr,
  259. const char *buf, size_t count)
  260. {
  261. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  262. struct i2c_client *client = to_i2c_client(dev);
  263. struct adt7475_data *data = i2c_get_clientdata(client);
  264. unsigned char reg;
  265. long val;
  266. if (strict_strtol(buf, 10, &val))
  267. return -EINVAL;
  268. mutex_lock(&data->lock);
  269. data->voltage[sattr->nr][sattr->index] =
  270. volt2reg(sattr->index, val, data->bypass_attn);
  271. if (sattr->index < ADT7475_VOLTAGE_COUNT) {
  272. if (sattr->nr == MIN)
  273. reg = VOLTAGE_MIN_REG(sattr->index);
  274. else
  275. reg = VOLTAGE_MAX_REG(sattr->index);
  276. } else {
  277. if (sattr->nr == MIN)
  278. reg = REG_VTT_MIN;
  279. else
  280. reg = REG_VTT_MAX;
  281. }
  282. i2c_smbus_write_byte_data(client, reg,
  283. data->voltage[sattr->nr][sattr->index] >> 2);
  284. mutex_unlock(&data->lock);
  285. return count;
  286. }
  287. static ssize_t show_temp(struct device *dev, struct device_attribute *attr,
  288. char *buf)
  289. {
  290. struct adt7475_data *data = adt7475_update_device(dev);
  291. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  292. int out;
  293. switch (sattr->nr) {
  294. case HYSTERSIS:
  295. mutex_lock(&data->lock);
  296. out = data->temp[sattr->nr][sattr->index];
  297. if (sattr->index != 1)
  298. out = (out >> 4) & 0xF;
  299. else
  300. out = (out & 0xF);
  301. /* Show the value as an absolute number tied to
  302. * THERM */
  303. out = reg2temp(data, data->temp[THERM][sattr->index]) -
  304. out * 1000;
  305. mutex_unlock(&data->lock);
  306. break;
  307. case OFFSET:
  308. /* Offset is always 2's complement, regardless of the
  309. * setting in CONFIG5 */
  310. mutex_lock(&data->lock);
  311. out = (s8)data->temp[sattr->nr][sattr->index];
  312. if (data->config5 & CONFIG5_TEMPOFFSET)
  313. out *= 1000;
  314. else
  315. out *= 500;
  316. mutex_unlock(&data->lock);
  317. break;
  318. case ALARM:
  319. out = (data->alarms >> (sattr->index + 4)) & 1;
  320. break;
  321. case FAULT:
  322. /* Note - only for remote1 and remote2 */
  323. out = !!(data->alarms & (sattr->index ? 0x8000 : 0x4000));
  324. break;
  325. default:
  326. /* All other temp values are in the configured format */
  327. out = reg2temp(data, data->temp[sattr->nr][sattr->index]);
  328. }
  329. return sprintf(buf, "%d\n", out);
  330. }
  331. static ssize_t set_temp(struct device *dev, struct device_attribute *attr,
  332. const char *buf, size_t count)
  333. {
  334. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  335. struct i2c_client *client = to_i2c_client(dev);
  336. struct adt7475_data *data = i2c_get_clientdata(client);
  337. unsigned char reg = 0;
  338. u8 out;
  339. int temp;
  340. long val;
  341. if (strict_strtol(buf, 10, &val))
  342. return -EINVAL;
  343. mutex_lock(&data->lock);
  344. /* We need the config register in all cases for temp <-> reg conv. */
  345. data->config5 = adt7475_read(REG_CONFIG5);
  346. switch (sattr->nr) {
  347. case OFFSET:
  348. if (data->config5 & CONFIG5_TEMPOFFSET) {
  349. val = SENSORS_LIMIT(val, -63000, 127000);
  350. out = data->temp[OFFSET][sattr->index] = val / 1000;
  351. } else {
  352. val = SENSORS_LIMIT(val, -63000, 64000);
  353. out = data->temp[OFFSET][sattr->index] = val / 500;
  354. }
  355. break;
  356. case HYSTERSIS:
  357. /* The value will be given as an absolute value, turn it
  358. into an offset based on THERM */
  359. /* Read fresh THERM and HYSTERSIS values from the chip */
  360. data->temp[THERM][sattr->index] =
  361. adt7475_read(TEMP_THERM_REG(sattr->index)) << 2;
  362. adt7475_read_hystersis(client);
  363. temp = reg2temp(data, data->temp[THERM][sattr->index]);
  364. val = SENSORS_LIMIT(val, temp - 15000, temp);
  365. val = (temp - val) / 1000;
  366. if (sattr->index != 1) {
  367. data->temp[HYSTERSIS][sattr->index] &= 0xF0;
  368. data->temp[HYSTERSIS][sattr->index] |= (val & 0xF) << 4;
  369. } else {
  370. data->temp[HYSTERSIS][sattr->index] &= 0x0F;
  371. data->temp[HYSTERSIS][sattr->index] |= (val & 0xF);
  372. }
  373. out = data->temp[HYSTERSIS][sattr->index];
  374. break;
  375. default:
  376. data->temp[sattr->nr][sattr->index] = temp2reg(data, val);
  377. /* We maintain an extra 2 digits of precision for simplicity
  378. * - shift those back off before writing the value */
  379. out = (u8) (data->temp[sattr->nr][sattr->index] >> 2);
  380. }
  381. switch (sattr->nr) {
  382. case MIN:
  383. reg = TEMP_MIN_REG(sattr->index);
  384. break;
  385. case MAX:
  386. reg = TEMP_MAX_REG(sattr->index);
  387. break;
  388. case OFFSET:
  389. reg = TEMP_OFFSET_REG(sattr->index);
  390. break;
  391. case AUTOMIN:
  392. reg = TEMP_TMIN_REG(sattr->index);
  393. break;
  394. case THERM:
  395. reg = TEMP_THERM_REG(sattr->index);
  396. break;
  397. case HYSTERSIS:
  398. if (sattr->index != 2)
  399. reg = REG_REMOTE1_HYSTERSIS;
  400. else
  401. reg = REG_REMOTE2_HYSTERSIS;
  402. break;
  403. }
  404. i2c_smbus_write_byte_data(client, reg, out);
  405. mutex_unlock(&data->lock);
  406. return count;
  407. }
  408. /* Table of autorange values - the user will write the value in millidegrees,
  409. and we'll convert it */
  410. static const int autorange_table[] = {
  411. 2000, 2500, 3330, 4000, 5000, 6670, 8000,
  412. 10000, 13330, 16000, 20000, 26670, 32000, 40000,
  413. 53330, 80000
  414. };
  415. static ssize_t show_point2(struct device *dev, struct device_attribute *attr,
  416. char *buf)
  417. {
  418. struct adt7475_data *data = adt7475_update_device(dev);
  419. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  420. int out, val;
  421. mutex_lock(&data->lock);
  422. out = (data->range[sattr->index] >> 4) & 0x0F;
  423. val = reg2temp(data, data->temp[AUTOMIN][sattr->index]);
  424. mutex_unlock(&data->lock);
  425. return sprintf(buf, "%d\n", val + autorange_table[out]);
  426. }
  427. static ssize_t set_point2(struct device *dev, struct device_attribute *attr,
  428. const char *buf, size_t count)
  429. {
  430. struct i2c_client *client = to_i2c_client(dev);
  431. struct adt7475_data *data = i2c_get_clientdata(client);
  432. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  433. int temp;
  434. long val;
  435. if (strict_strtol(buf, 10, &val))
  436. return -EINVAL;
  437. mutex_lock(&data->lock);
  438. /* Get a fresh copy of the needed registers */
  439. data->config5 = adt7475_read(REG_CONFIG5);
  440. data->temp[AUTOMIN][sattr->index] =
  441. adt7475_read(TEMP_TMIN_REG(sattr->index)) << 2;
  442. data->range[sattr->index] =
  443. adt7475_read(TEMP_TRANGE_REG(sattr->index));
  444. /* The user will write an absolute value, so subtract the start point
  445. to figure the range */
  446. temp = reg2temp(data, data->temp[AUTOMIN][sattr->index]);
  447. val = SENSORS_LIMIT(val, temp + autorange_table[0],
  448. temp + autorange_table[ARRAY_SIZE(autorange_table) - 1]);
  449. val -= temp;
  450. /* Find the nearest table entry to what the user wrote */
  451. val = find_nearest(val, autorange_table, ARRAY_SIZE(autorange_table));
  452. data->range[sattr->index] &= ~0xF0;
  453. data->range[sattr->index] |= val << 4;
  454. i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(sattr->index),
  455. data->range[sattr->index]);
  456. mutex_unlock(&data->lock);
  457. return count;
  458. }
  459. static ssize_t show_tach(struct device *dev, struct device_attribute *attr,
  460. char *buf)
  461. {
  462. struct adt7475_data *data = adt7475_update_device(dev);
  463. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  464. int out;
  465. if (sattr->nr == ALARM)
  466. out = (data->alarms >> (sattr->index + 10)) & 1;
  467. else
  468. out = tach2rpm(data->tach[sattr->nr][sattr->index]);
  469. return sprintf(buf, "%d\n", out);
  470. }
  471. static ssize_t set_tach(struct device *dev, struct device_attribute *attr,
  472. const char *buf, size_t count)
  473. {
  474. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  475. struct i2c_client *client = to_i2c_client(dev);
  476. struct adt7475_data *data = i2c_get_clientdata(client);
  477. unsigned long val;
  478. if (strict_strtoul(buf, 10, &val))
  479. return -EINVAL;
  480. mutex_lock(&data->lock);
  481. data->tach[MIN][sattr->index] = rpm2tach(val);
  482. adt7475_write_word(client, TACH_MIN_REG(sattr->index),
  483. data->tach[MIN][sattr->index]);
  484. mutex_unlock(&data->lock);
  485. return count;
  486. }
  487. static ssize_t show_pwm(struct device *dev, struct device_attribute *attr,
  488. char *buf)
  489. {
  490. struct adt7475_data *data = adt7475_update_device(dev);
  491. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  492. return sprintf(buf, "%d\n", data->pwm[sattr->nr][sattr->index]);
  493. }
  494. static ssize_t show_pwmchan(struct device *dev, struct device_attribute *attr,
  495. char *buf)
  496. {
  497. struct adt7475_data *data = adt7475_update_device(dev);
  498. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  499. return sprintf(buf, "%d\n", data->pwmchan[sattr->index]);
  500. }
  501. static ssize_t show_pwmctrl(struct device *dev, struct device_attribute *attr,
  502. char *buf)
  503. {
  504. struct adt7475_data *data = adt7475_update_device(dev);
  505. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  506. return sprintf(buf, "%d\n", data->pwmctl[sattr->index]);
  507. }
  508. static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,
  509. const char *buf, size_t count)
  510. {
  511. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  512. struct i2c_client *client = to_i2c_client(dev);
  513. struct adt7475_data *data = i2c_get_clientdata(client);
  514. unsigned char reg = 0;
  515. long val;
  516. if (strict_strtol(buf, 10, &val))
  517. return -EINVAL;
  518. mutex_lock(&data->lock);
  519. switch (sattr->nr) {
  520. case INPUT:
  521. /* Get a fresh value for CONTROL */
  522. data->pwm[CONTROL][sattr->index] =
  523. adt7475_read(PWM_CONFIG_REG(sattr->index));
  524. /* If we are not in manual mode, then we shouldn't allow
  525. * the user to set the pwm speed */
  526. if (((data->pwm[CONTROL][sattr->index] >> 5) & 7) != 7) {
  527. mutex_unlock(&data->lock);
  528. return count;
  529. }
  530. reg = PWM_REG(sattr->index);
  531. break;
  532. case MIN:
  533. reg = PWM_MIN_REG(sattr->index);
  534. break;
  535. case MAX:
  536. reg = PWM_MAX_REG(sattr->index);
  537. break;
  538. }
  539. data->pwm[sattr->nr][sattr->index] = SENSORS_LIMIT(val, 0, 0xFF);
  540. i2c_smbus_write_byte_data(client, reg,
  541. data->pwm[sattr->nr][sattr->index]);
  542. mutex_unlock(&data->lock);
  543. return count;
  544. }
  545. /* Called by set_pwmctrl and set_pwmchan */
  546. static int hw_set_pwm(struct i2c_client *client, int index,
  547. unsigned int pwmctl, unsigned int pwmchan)
  548. {
  549. struct adt7475_data *data = i2c_get_clientdata(client);
  550. long val = 0;
  551. switch (pwmctl) {
  552. case 0:
  553. val = 0x03; /* Run at full speed */
  554. break;
  555. case 1:
  556. val = 0x07; /* Manual mode */
  557. break;
  558. case 2:
  559. switch (pwmchan) {
  560. case 1:
  561. /* Remote1 controls PWM */
  562. val = 0x00;
  563. break;
  564. case 2:
  565. /* local controls PWM */
  566. val = 0x01;
  567. break;
  568. case 4:
  569. /* remote2 controls PWM */
  570. val = 0x02;
  571. break;
  572. case 6:
  573. /* local/remote2 control PWM */
  574. val = 0x05;
  575. break;
  576. case 7:
  577. /* All three control PWM */
  578. val = 0x06;
  579. break;
  580. default:
  581. return -EINVAL;
  582. }
  583. break;
  584. default:
  585. return -EINVAL;
  586. }
  587. data->pwmctl[index] = pwmctl;
  588. data->pwmchan[index] = pwmchan;
  589. data->pwm[CONTROL][index] &= ~0xE0;
  590. data->pwm[CONTROL][index] |= (val & 7) << 5;
  591. i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
  592. data->pwm[CONTROL][index]);
  593. return 0;
  594. }
  595. static ssize_t set_pwmchan(struct device *dev, struct device_attribute *attr,
  596. const char *buf, size_t count)
  597. {
  598. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  599. struct i2c_client *client = to_i2c_client(dev);
  600. struct adt7475_data *data = i2c_get_clientdata(client);
  601. int r;
  602. long val;
  603. if (strict_strtol(buf, 10, &val))
  604. return -EINVAL;
  605. mutex_lock(&data->lock);
  606. /* Read Modify Write PWM values */
  607. adt7475_read_pwm(client, sattr->index);
  608. r = hw_set_pwm(client, sattr->index, data->pwmctl[sattr->index], val);
  609. if (r)
  610. count = r;
  611. mutex_unlock(&data->lock);
  612. return count;
  613. }
  614. static ssize_t set_pwmctrl(struct device *dev, struct device_attribute *attr,
  615. const char *buf, size_t count)
  616. {
  617. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  618. struct i2c_client *client = to_i2c_client(dev);
  619. struct adt7475_data *data = i2c_get_clientdata(client);
  620. int r;
  621. long val;
  622. if (strict_strtol(buf, 10, &val))
  623. return -EINVAL;
  624. mutex_lock(&data->lock);
  625. /* Read Modify Write PWM values */
  626. adt7475_read_pwm(client, sattr->index);
  627. r = hw_set_pwm(client, sattr->index, val, data->pwmchan[sattr->index]);
  628. if (r)
  629. count = r;
  630. mutex_unlock(&data->lock);
  631. return count;
  632. }
  633. /* List of frequencies for the PWM */
  634. static const int pwmfreq_table[] = {
  635. 11, 14, 22, 29, 35, 44, 58, 88
  636. };
  637. static ssize_t show_pwmfreq(struct device *dev, struct device_attribute *attr,
  638. char *buf)
  639. {
  640. struct adt7475_data *data = adt7475_update_device(dev);
  641. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  642. return sprintf(buf, "%d\n",
  643. pwmfreq_table[data->range[sattr->index] & 7]);
  644. }
  645. static ssize_t set_pwmfreq(struct device *dev, struct device_attribute *attr,
  646. const char *buf, size_t count)
  647. {
  648. struct sensor_device_attribute_2 *sattr = to_sensor_dev_attr_2(attr);
  649. struct i2c_client *client = to_i2c_client(dev);
  650. struct adt7475_data *data = i2c_get_clientdata(client);
  651. int out;
  652. long val;
  653. if (strict_strtol(buf, 10, &val))
  654. return -EINVAL;
  655. out = find_nearest(val, pwmfreq_table, ARRAY_SIZE(pwmfreq_table));
  656. mutex_lock(&data->lock);
  657. data->range[sattr->index] =
  658. adt7475_read(TEMP_TRANGE_REG(sattr->index));
  659. data->range[sattr->index] &= ~7;
  660. data->range[sattr->index] |= out;
  661. i2c_smbus_write_byte_data(client, TEMP_TRANGE_REG(sattr->index),
  662. data->range[sattr->index]);
  663. mutex_unlock(&data->lock);
  664. return count;
  665. }
  666. static ssize_t show_pwm_at_crit(struct device *dev,
  667. struct device_attribute *devattr, char *buf)
  668. {
  669. struct adt7475_data *data = adt7475_update_device(dev);
  670. return sprintf(buf, "%d\n", !!(data->config4 & CONFIG4_MAXDUTY));
  671. }
  672. static ssize_t set_pwm_at_crit(struct device *dev,
  673. struct device_attribute *devattr,
  674. const char *buf, size_t count)
  675. {
  676. struct i2c_client *client = to_i2c_client(dev);
  677. struct adt7475_data *data = i2c_get_clientdata(client);
  678. long val;
  679. if (strict_strtol(buf, 10, &val))
  680. return -EINVAL;
  681. if (val != 0 && val != 1)
  682. return -EINVAL;
  683. mutex_lock(&data->lock);
  684. data->config4 = i2c_smbus_read_byte_data(client, REG_CONFIG4);
  685. if (val)
  686. data->config4 |= CONFIG4_MAXDUTY;
  687. else
  688. data->config4 &= ~CONFIG4_MAXDUTY;
  689. i2c_smbus_write_byte_data(client, REG_CONFIG4, data->config4);
  690. mutex_unlock(&data->lock);
  691. return count;
  692. }
  693. static ssize_t show_vrm(struct device *dev, struct device_attribute *devattr,
  694. char *buf)
  695. {
  696. struct adt7475_data *data = dev_get_drvdata(dev);
  697. return sprintf(buf, "%d\n", (int)data->vrm);
  698. }
  699. static ssize_t set_vrm(struct device *dev, struct device_attribute *devattr,
  700. const char *buf, size_t count)
  701. {
  702. struct adt7475_data *data = dev_get_drvdata(dev);
  703. long val;
  704. if (strict_strtol(buf, 10, &val))
  705. return -EINVAL;
  706. if (val < 0 || val > 255)
  707. return -EINVAL;
  708. data->vrm = val;
  709. return count;
  710. }
  711. static ssize_t show_vid(struct device *dev, struct device_attribute *devattr,
  712. char *buf)
  713. {
  714. struct adt7475_data *data = adt7475_update_device(dev);
  715. return sprintf(buf, "%d\n", vid_from_reg(data->vid, data->vrm));
  716. }
  717. static SENSOR_DEVICE_ATTR_2(in0_input, S_IRUGO, show_voltage, NULL, INPUT, 0);
  718. static SENSOR_DEVICE_ATTR_2(in0_max, S_IRUGO | S_IWUSR, show_voltage,
  719. set_voltage, MAX, 0);
  720. static SENSOR_DEVICE_ATTR_2(in0_min, S_IRUGO | S_IWUSR, show_voltage,
  721. set_voltage, MIN, 0);
  722. static SENSOR_DEVICE_ATTR_2(in0_alarm, S_IRUGO, show_voltage, NULL, ALARM, 0);
  723. static SENSOR_DEVICE_ATTR_2(in1_input, S_IRUGO, show_voltage, NULL, INPUT, 1);
  724. static SENSOR_DEVICE_ATTR_2(in1_max, S_IRUGO | S_IWUSR, show_voltage,
  725. set_voltage, MAX, 1);
  726. static SENSOR_DEVICE_ATTR_2(in1_min, S_IRUGO | S_IWUSR, show_voltage,
  727. set_voltage, MIN, 1);
  728. static SENSOR_DEVICE_ATTR_2(in1_alarm, S_IRUGO, show_voltage, NULL, ALARM, 1);
  729. static SENSOR_DEVICE_ATTR_2(in2_input, S_IRUGO, show_voltage, NULL, INPUT, 2);
  730. static SENSOR_DEVICE_ATTR_2(in2_max, S_IRUGO | S_IWUSR, show_voltage,
  731. set_voltage, MAX, 2);
  732. static SENSOR_DEVICE_ATTR_2(in2_min, S_IRUGO | S_IWUSR, show_voltage,
  733. set_voltage, MIN, 2);
  734. static SENSOR_DEVICE_ATTR_2(in2_alarm, S_IRUGO, show_voltage, NULL, ALARM, 2);
  735. static SENSOR_DEVICE_ATTR_2(in3_input, S_IRUGO, show_voltage, NULL, INPUT, 3);
  736. static SENSOR_DEVICE_ATTR_2(in3_max, S_IRUGO | S_IWUSR, show_voltage,
  737. set_voltage, MAX, 3);
  738. static SENSOR_DEVICE_ATTR_2(in3_min, S_IRUGO | S_IWUSR, show_voltage,
  739. set_voltage, MIN, 3);
  740. static SENSOR_DEVICE_ATTR_2(in3_alarm, S_IRUGO, show_voltage, NULL, ALARM, 3);
  741. static SENSOR_DEVICE_ATTR_2(in4_input, S_IRUGO, show_voltage, NULL, INPUT, 4);
  742. static SENSOR_DEVICE_ATTR_2(in4_max, S_IRUGO | S_IWUSR, show_voltage,
  743. set_voltage, MAX, 4);
  744. static SENSOR_DEVICE_ATTR_2(in4_min, S_IRUGO | S_IWUSR, show_voltage,
  745. set_voltage, MIN, 4);
  746. static SENSOR_DEVICE_ATTR_2(in4_alarm, S_IRUGO, show_voltage, NULL, ALARM, 8);
  747. static SENSOR_DEVICE_ATTR_2(in5_input, S_IRUGO, show_voltage, NULL, INPUT, 5);
  748. static SENSOR_DEVICE_ATTR_2(in5_max, S_IRUGO | S_IWUSR, show_voltage,
  749. set_voltage, MAX, 5);
  750. static SENSOR_DEVICE_ATTR_2(in5_min, S_IRUGO | S_IWUSR, show_voltage,
  751. set_voltage, MIN, 5);
  752. static SENSOR_DEVICE_ATTR_2(in5_alarm, S_IRUGO, show_voltage, NULL, ALARM, 31);
  753. static SENSOR_DEVICE_ATTR_2(temp1_input, S_IRUGO, show_temp, NULL, INPUT, 0);
  754. static SENSOR_DEVICE_ATTR_2(temp1_alarm, S_IRUGO, show_temp, NULL, ALARM, 0);
  755. static SENSOR_DEVICE_ATTR_2(temp1_fault, S_IRUGO, show_temp, NULL, FAULT, 0);
  756. static SENSOR_DEVICE_ATTR_2(temp1_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
  757. MAX, 0);
  758. static SENSOR_DEVICE_ATTR_2(temp1_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
  759. MIN, 0);
  760. static SENSOR_DEVICE_ATTR_2(temp1_offset, S_IRUGO | S_IWUSR, show_temp,
  761. set_temp, OFFSET, 0);
  762. static SENSOR_DEVICE_ATTR_2(temp1_auto_point1_temp, S_IRUGO | S_IWUSR,
  763. show_temp, set_temp, AUTOMIN, 0);
  764. static SENSOR_DEVICE_ATTR_2(temp1_auto_point2_temp, S_IRUGO | S_IWUSR,
  765. show_point2, set_point2, 0, 0);
  766. static SENSOR_DEVICE_ATTR_2(temp1_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
  767. THERM, 0);
  768. static SENSOR_DEVICE_ATTR_2(temp1_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
  769. set_temp, HYSTERSIS, 0);
  770. static SENSOR_DEVICE_ATTR_2(temp2_input, S_IRUGO, show_temp, NULL, INPUT, 1);
  771. static SENSOR_DEVICE_ATTR_2(temp2_alarm, S_IRUGO, show_temp, NULL, ALARM, 1);
  772. static SENSOR_DEVICE_ATTR_2(temp2_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
  773. MAX, 1);
  774. static SENSOR_DEVICE_ATTR_2(temp2_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
  775. MIN, 1);
  776. static SENSOR_DEVICE_ATTR_2(temp2_offset, S_IRUGO | S_IWUSR, show_temp,
  777. set_temp, OFFSET, 1);
  778. static SENSOR_DEVICE_ATTR_2(temp2_auto_point1_temp, S_IRUGO | S_IWUSR,
  779. show_temp, set_temp, AUTOMIN, 1);
  780. static SENSOR_DEVICE_ATTR_2(temp2_auto_point2_temp, S_IRUGO | S_IWUSR,
  781. show_point2, set_point2, 0, 1);
  782. static SENSOR_DEVICE_ATTR_2(temp2_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
  783. THERM, 1);
  784. static SENSOR_DEVICE_ATTR_2(temp2_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
  785. set_temp, HYSTERSIS, 1);
  786. static SENSOR_DEVICE_ATTR_2(temp3_input, S_IRUGO, show_temp, NULL, INPUT, 2);
  787. static SENSOR_DEVICE_ATTR_2(temp3_alarm, S_IRUGO, show_temp, NULL, ALARM, 2);
  788. static SENSOR_DEVICE_ATTR_2(temp3_fault, S_IRUGO, show_temp, NULL, FAULT, 2);
  789. static SENSOR_DEVICE_ATTR_2(temp3_max, S_IRUGO | S_IWUSR, show_temp, set_temp,
  790. MAX, 2);
  791. static SENSOR_DEVICE_ATTR_2(temp3_min, S_IRUGO | S_IWUSR, show_temp, set_temp,
  792. MIN, 2);
  793. static SENSOR_DEVICE_ATTR_2(temp3_offset, S_IRUGO | S_IWUSR, show_temp,
  794. set_temp, OFFSET, 2);
  795. static SENSOR_DEVICE_ATTR_2(temp3_auto_point1_temp, S_IRUGO | S_IWUSR,
  796. show_temp, set_temp, AUTOMIN, 2);
  797. static SENSOR_DEVICE_ATTR_2(temp3_auto_point2_temp, S_IRUGO | S_IWUSR,
  798. show_point2, set_point2, 0, 2);
  799. static SENSOR_DEVICE_ATTR_2(temp3_crit, S_IRUGO | S_IWUSR, show_temp, set_temp,
  800. THERM, 2);
  801. static SENSOR_DEVICE_ATTR_2(temp3_crit_hyst, S_IRUGO | S_IWUSR, show_temp,
  802. set_temp, HYSTERSIS, 2);
  803. static SENSOR_DEVICE_ATTR_2(fan1_input, S_IRUGO, show_tach, NULL, INPUT, 0);
  804. static SENSOR_DEVICE_ATTR_2(fan1_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
  805. MIN, 0);
  806. static SENSOR_DEVICE_ATTR_2(fan1_alarm, S_IRUGO, show_tach, NULL, ALARM, 0);
  807. static SENSOR_DEVICE_ATTR_2(fan2_input, S_IRUGO, show_tach, NULL, INPUT, 1);
  808. static SENSOR_DEVICE_ATTR_2(fan2_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
  809. MIN, 1);
  810. static SENSOR_DEVICE_ATTR_2(fan2_alarm, S_IRUGO, show_tach, NULL, ALARM, 1);
  811. static SENSOR_DEVICE_ATTR_2(fan3_input, S_IRUGO, show_tach, NULL, INPUT, 2);
  812. static SENSOR_DEVICE_ATTR_2(fan3_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
  813. MIN, 2);
  814. static SENSOR_DEVICE_ATTR_2(fan3_alarm, S_IRUGO, show_tach, NULL, ALARM, 2);
  815. static SENSOR_DEVICE_ATTR_2(fan4_input, S_IRUGO, show_tach, NULL, INPUT, 3);
  816. static SENSOR_DEVICE_ATTR_2(fan4_min, S_IRUGO | S_IWUSR, show_tach, set_tach,
  817. MIN, 3);
  818. static SENSOR_DEVICE_ATTR_2(fan4_alarm, S_IRUGO, show_tach, NULL, ALARM, 3);
  819. static SENSOR_DEVICE_ATTR_2(pwm1, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
  820. 0);
  821. static SENSOR_DEVICE_ATTR_2(pwm1_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
  822. set_pwmfreq, INPUT, 0);
  823. static SENSOR_DEVICE_ATTR_2(pwm1_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
  824. set_pwmctrl, INPUT, 0);
  825. static SENSOR_DEVICE_ATTR_2(pwm1_auto_channels_temp, S_IRUGO | S_IWUSR,
  826. show_pwmchan, set_pwmchan, INPUT, 0);
  827. static SENSOR_DEVICE_ATTR_2(pwm1_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
  828. set_pwm, MIN, 0);
  829. static SENSOR_DEVICE_ATTR_2(pwm1_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
  830. set_pwm, MAX, 0);
  831. static SENSOR_DEVICE_ATTR_2(pwm2, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
  832. 1);
  833. static SENSOR_DEVICE_ATTR_2(pwm2_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
  834. set_pwmfreq, INPUT, 1);
  835. static SENSOR_DEVICE_ATTR_2(pwm2_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
  836. set_pwmctrl, INPUT, 1);
  837. static SENSOR_DEVICE_ATTR_2(pwm2_auto_channels_temp, S_IRUGO | S_IWUSR,
  838. show_pwmchan, set_pwmchan, INPUT, 1);
  839. static SENSOR_DEVICE_ATTR_2(pwm2_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
  840. set_pwm, MIN, 1);
  841. static SENSOR_DEVICE_ATTR_2(pwm2_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
  842. set_pwm, MAX, 1);
  843. static SENSOR_DEVICE_ATTR_2(pwm3, S_IRUGO | S_IWUSR, show_pwm, set_pwm, INPUT,
  844. 2);
  845. static SENSOR_DEVICE_ATTR_2(pwm3_freq, S_IRUGO | S_IWUSR, show_pwmfreq,
  846. set_pwmfreq, INPUT, 2);
  847. static SENSOR_DEVICE_ATTR_2(pwm3_enable, S_IRUGO | S_IWUSR, show_pwmctrl,
  848. set_pwmctrl, INPUT, 2);
  849. static SENSOR_DEVICE_ATTR_2(pwm3_auto_channels_temp, S_IRUGO | S_IWUSR,
  850. show_pwmchan, set_pwmchan, INPUT, 2);
  851. static SENSOR_DEVICE_ATTR_2(pwm3_auto_point1_pwm, S_IRUGO | S_IWUSR, show_pwm,
  852. set_pwm, MIN, 2);
  853. static SENSOR_DEVICE_ATTR_2(pwm3_auto_point2_pwm, S_IRUGO | S_IWUSR, show_pwm,
  854. set_pwm, MAX, 2);
  855. /* Non-standard name, might need revisiting */
  856. static DEVICE_ATTR(pwm_use_point2_pwm_at_crit, S_IWUSR | S_IRUGO,
  857. show_pwm_at_crit, set_pwm_at_crit);
  858. static DEVICE_ATTR(vrm, S_IWUSR | S_IRUGO, show_vrm, set_vrm);
  859. static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL);
  860. static struct attribute *adt7475_attrs[] = {
  861. &sensor_dev_attr_in1_input.dev_attr.attr,
  862. &sensor_dev_attr_in1_max.dev_attr.attr,
  863. &sensor_dev_attr_in1_min.dev_attr.attr,
  864. &sensor_dev_attr_in1_alarm.dev_attr.attr,
  865. &sensor_dev_attr_in2_input.dev_attr.attr,
  866. &sensor_dev_attr_in2_max.dev_attr.attr,
  867. &sensor_dev_attr_in2_min.dev_attr.attr,
  868. &sensor_dev_attr_in2_alarm.dev_attr.attr,
  869. &sensor_dev_attr_temp1_input.dev_attr.attr,
  870. &sensor_dev_attr_temp1_alarm.dev_attr.attr,
  871. &sensor_dev_attr_temp1_fault.dev_attr.attr,
  872. &sensor_dev_attr_temp1_max.dev_attr.attr,
  873. &sensor_dev_attr_temp1_min.dev_attr.attr,
  874. &sensor_dev_attr_temp1_offset.dev_attr.attr,
  875. &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
  876. &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
  877. &sensor_dev_attr_temp1_crit.dev_attr.attr,
  878. &sensor_dev_attr_temp1_crit_hyst.dev_attr.attr,
  879. &sensor_dev_attr_temp2_input.dev_attr.attr,
  880. &sensor_dev_attr_temp2_alarm.dev_attr.attr,
  881. &sensor_dev_attr_temp2_max.dev_attr.attr,
  882. &sensor_dev_attr_temp2_min.dev_attr.attr,
  883. &sensor_dev_attr_temp2_offset.dev_attr.attr,
  884. &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
  885. &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
  886. &sensor_dev_attr_temp2_crit.dev_attr.attr,
  887. &sensor_dev_attr_temp2_crit_hyst.dev_attr.attr,
  888. &sensor_dev_attr_temp3_input.dev_attr.attr,
  889. &sensor_dev_attr_temp3_fault.dev_attr.attr,
  890. &sensor_dev_attr_temp3_alarm.dev_attr.attr,
  891. &sensor_dev_attr_temp3_max.dev_attr.attr,
  892. &sensor_dev_attr_temp3_min.dev_attr.attr,
  893. &sensor_dev_attr_temp3_offset.dev_attr.attr,
  894. &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
  895. &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
  896. &sensor_dev_attr_temp3_crit.dev_attr.attr,
  897. &sensor_dev_attr_temp3_crit_hyst.dev_attr.attr,
  898. &sensor_dev_attr_fan1_input.dev_attr.attr,
  899. &sensor_dev_attr_fan1_min.dev_attr.attr,
  900. &sensor_dev_attr_fan1_alarm.dev_attr.attr,
  901. &sensor_dev_attr_fan2_input.dev_attr.attr,
  902. &sensor_dev_attr_fan2_min.dev_attr.attr,
  903. &sensor_dev_attr_fan2_alarm.dev_attr.attr,
  904. &sensor_dev_attr_fan3_input.dev_attr.attr,
  905. &sensor_dev_attr_fan3_min.dev_attr.attr,
  906. &sensor_dev_attr_fan3_alarm.dev_attr.attr,
  907. &sensor_dev_attr_pwm1.dev_attr.attr,
  908. &sensor_dev_attr_pwm1_freq.dev_attr.attr,
  909. &sensor_dev_attr_pwm1_enable.dev_attr.attr,
  910. &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
  911. &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
  912. &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
  913. &sensor_dev_attr_pwm3.dev_attr.attr,
  914. &sensor_dev_attr_pwm3_freq.dev_attr.attr,
  915. &sensor_dev_attr_pwm3_enable.dev_attr.attr,
  916. &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
  917. &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
  918. &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
  919. &dev_attr_pwm_use_point2_pwm_at_crit.attr,
  920. NULL,
  921. };
  922. static struct attribute *fan4_attrs[] = {
  923. &sensor_dev_attr_fan4_input.dev_attr.attr,
  924. &sensor_dev_attr_fan4_min.dev_attr.attr,
  925. &sensor_dev_attr_fan4_alarm.dev_attr.attr,
  926. NULL
  927. };
  928. static struct attribute *pwm2_attrs[] = {
  929. &sensor_dev_attr_pwm2.dev_attr.attr,
  930. &sensor_dev_attr_pwm2_freq.dev_attr.attr,
  931. &sensor_dev_attr_pwm2_enable.dev_attr.attr,
  932. &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
  933. &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
  934. &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
  935. NULL
  936. };
  937. static struct attribute *in0_attrs[] = {
  938. &sensor_dev_attr_in0_input.dev_attr.attr,
  939. &sensor_dev_attr_in0_max.dev_attr.attr,
  940. &sensor_dev_attr_in0_min.dev_attr.attr,
  941. &sensor_dev_attr_in0_alarm.dev_attr.attr,
  942. NULL
  943. };
  944. static struct attribute *in3_attrs[] = {
  945. &sensor_dev_attr_in3_input.dev_attr.attr,
  946. &sensor_dev_attr_in3_max.dev_attr.attr,
  947. &sensor_dev_attr_in3_min.dev_attr.attr,
  948. &sensor_dev_attr_in3_alarm.dev_attr.attr,
  949. NULL
  950. };
  951. static struct attribute *in4_attrs[] = {
  952. &sensor_dev_attr_in4_input.dev_attr.attr,
  953. &sensor_dev_attr_in4_max.dev_attr.attr,
  954. &sensor_dev_attr_in4_min.dev_attr.attr,
  955. &sensor_dev_attr_in4_alarm.dev_attr.attr,
  956. NULL
  957. };
  958. static struct attribute *in5_attrs[] = {
  959. &sensor_dev_attr_in5_input.dev_attr.attr,
  960. &sensor_dev_attr_in5_max.dev_attr.attr,
  961. &sensor_dev_attr_in5_min.dev_attr.attr,
  962. &sensor_dev_attr_in5_alarm.dev_attr.attr,
  963. NULL
  964. };
  965. static struct attribute *vid_attrs[] = {
  966. &dev_attr_cpu0_vid.attr,
  967. &dev_attr_vrm.attr,
  968. NULL
  969. };
  970. static struct attribute_group adt7475_attr_group = { .attrs = adt7475_attrs };
  971. static struct attribute_group fan4_attr_group = { .attrs = fan4_attrs };
  972. static struct attribute_group pwm2_attr_group = { .attrs = pwm2_attrs };
  973. static struct attribute_group in0_attr_group = { .attrs = in0_attrs };
  974. static struct attribute_group in3_attr_group = { .attrs = in3_attrs };
  975. static struct attribute_group in4_attr_group = { .attrs = in4_attrs };
  976. static struct attribute_group in5_attr_group = { .attrs = in5_attrs };
  977. static struct attribute_group vid_attr_group = { .attrs = vid_attrs };
  978. static int adt7475_detect(struct i2c_client *client,
  979. struct i2c_board_info *info)
  980. {
  981. struct i2c_adapter *adapter = client->adapter;
  982. int vendid, devid, devid2;
  983. const char *name;
  984. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  985. return -ENODEV;
  986. vendid = adt7475_read(REG_VENDID);
  987. devid2 = adt7475_read(REG_DEVID2);
  988. if (vendid != 0x41 || /* Analog Devices */
  989. (devid2 & 0xf8) != 0x68)
  990. return -ENODEV;
  991. devid = adt7475_read(REG_DEVID);
  992. if (devid == 0x73)
  993. name = "adt7473";
  994. else if (devid == 0x75 && client->addr == 0x2e)
  995. name = "adt7475";
  996. else if (devid == 0x76)
  997. name = "adt7476";
  998. else if ((devid2 & 0xfc) == 0x6c)
  999. name = "adt7490";
  1000. else {
  1001. dev_dbg(&adapter->dev,
  1002. "Couldn't detect an ADT7473/75/76/90 part at "
  1003. "0x%02x\n", (unsigned int)client->addr);
  1004. return -ENODEV;
  1005. }
  1006. strlcpy(info->type, name, I2C_NAME_SIZE);
  1007. return 0;
  1008. }
  1009. static void adt7475_remove_files(struct i2c_client *client,
  1010. struct adt7475_data *data)
  1011. {
  1012. sysfs_remove_group(&client->dev.kobj, &adt7475_attr_group);
  1013. if (data->has_fan4)
  1014. sysfs_remove_group(&client->dev.kobj, &fan4_attr_group);
  1015. if (data->has_pwm2)
  1016. sysfs_remove_group(&client->dev.kobj, &pwm2_attr_group);
  1017. if (data->has_voltage & (1 << 0))
  1018. sysfs_remove_group(&client->dev.kobj, &in0_attr_group);
  1019. if (data->has_voltage & (1 << 3))
  1020. sysfs_remove_group(&client->dev.kobj, &in3_attr_group);
  1021. if (data->has_voltage & (1 << 4))
  1022. sysfs_remove_group(&client->dev.kobj, &in4_attr_group);
  1023. if (data->has_voltage & (1 << 5))
  1024. sysfs_remove_group(&client->dev.kobj, &in5_attr_group);
  1025. if (data->has_vid)
  1026. sysfs_remove_group(&client->dev.kobj, &vid_attr_group);
  1027. }
  1028. static int adt7475_probe(struct i2c_client *client,
  1029. const struct i2c_device_id *id)
  1030. {
  1031. static const char *names[] = {
  1032. [adt7473] = "ADT7473",
  1033. [adt7475] = "ADT7475",
  1034. [adt7476] = "ADT7476",
  1035. [adt7490] = "ADT7490",
  1036. };
  1037. struct adt7475_data *data;
  1038. int i, ret = 0, revision;
  1039. u8 config2, config3;
  1040. data = kzalloc(sizeof(*data), GFP_KERNEL);
  1041. if (data == NULL)
  1042. return -ENOMEM;
  1043. mutex_init(&data->lock);
  1044. i2c_set_clientdata(client, data);
  1045. /* Initialize device-specific values */
  1046. switch (id->driver_data) {
  1047. case adt7476:
  1048. data->has_voltage = 0x0e; /* in1 to in3 */
  1049. revision = adt7475_read(REG_DEVID2) & 0x07;
  1050. break;
  1051. case adt7490:
  1052. data->has_voltage = 0x3e; /* in1 to in5 */
  1053. revision = adt7475_read(REG_DEVID2) & 0x03;
  1054. if (revision == 0x03)
  1055. revision += adt7475_read(REG_DEVREV2);
  1056. break;
  1057. default:
  1058. data->has_voltage = 0x06; /* in1, in2 */
  1059. revision = adt7475_read(REG_DEVID2) & 0x07;
  1060. }
  1061. config3 = adt7475_read(REG_CONFIG3);
  1062. /* Pin PWM2 may alternatively be used for ALERT output */
  1063. if (!(config3 & CONFIG3_SMBALERT))
  1064. data->has_pwm2 = 1;
  1065. /* Meaning of this bit is inverted for the ADT7473-1 */
  1066. if (id->driver_data == adt7473 && revision >= 1)
  1067. data->has_pwm2 = !data->has_pwm2;
  1068. data->config4 = adt7475_read(REG_CONFIG4);
  1069. /* Pin TACH4 may alternatively be used for THERM */
  1070. if ((data->config4 & CONFIG4_PINFUNC) == 0x0)
  1071. data->has_fan4 = 1;
  1072. /* THERM configuration is more complex on the ADT7476 and ADT7490,
  1073. because 2 different pins (TACH4 and +2.5 Vin) can be used for
  1074. this function */
  1075. if (id->driver_data == adt7490) {
  1076. if ((data->config4 & CONFIG4_PINFUNC) == 0x1 &&
  1077. !(config3 & CONFIG3_THERM))
  1078. data->has_fan4 = 1;
  1079. }
  1080. if (id->driver_data == adt7476 || id->driver_data == adt7490) {
  1081. if (!(config3 & CONFIG3_THERM) ||
  1082. (data->config4 & CONFIG4_PINFUNC) == 0x1)
  1083. data->has_voltage |= (1 << 0); /* in0 */
  1084. }
  1085. /* On the ADT7476, the +12V input pin may instead be used as VID5,
  1086. and VID pins may alternatively be used as GPIO */
  1087. if (id->driver_data == adt7476) {
  1088. u8 vid = adt7475_read(REG_VID);
  1089. if (!(vid & VID_VIDSEL))
  1090. data->has_voltage |= (1 << 4); /* in4 */
  1091. data->has_vid = !(adt7475_read(REG_CONFIG5) & CONFIG5_VIDGPIO);
  1092. }
  1093. /* Voltage attenuators can be bypassed, globally or individually */
  1094. config2 = adt7475_read(REG_CONFIG2);
  1095. if (config2 & CONFIG2_ATTN) {
  1096. data->bypass_attn = (0x3 << 3) | 0x3;
  1097. } else {
  1098. data->bypass_attn = ((data->config4 & CONFIG4_ATTN_IN10) >> 4) |
  1099. ((data->config4 & CONFIG4_ATTN_IN43) >> 3);
  1100. }
  1101. data->bypass_attn &= data->has_voltage;
  1102. /* Call adt7475_read_pwm for all pwm's as this will reprogram any
  1103. pwm's which are disabled to manual mode with 0% duty cycle */
  1104. for (i = 0; i < ADT7475_PWM_COUNT; i++)
  1105. adt7475_read_pwm(client, i);
  1106. ret = sysfs_create_group(&client->dev.kobj, &adt7475_attr_group);
  1107. if (ret)
  1108. goto efree;
  1109. /* Features that can be disabled individually */
  1110. if (data->has_fan4) {
  1111. ret = sysfs_create_group(&client->dev.kobj, &fan4_attr_group);
  1112. if (ret)
  1113. goto eremove;
  1114. }
  1115. if (data->has_pwm2) {
  1116. ret = sysfs_create_group(&client->dev.kobj, &pwm2_attr_group);
  1117. if (ret)
  1118. goto eremove;
  1119. }
  1120. if (data->has_voltage & (1 << 0)) {
  1121. ret = sysfs_create_group(&client->dev.kobj, &in0_attr_group);
  1122. if (ret)
  1123. goto eremove;
  1124. }
  1125. if (data->has_voltage & (1 << 3)) {
  1126. ret = sysfs_create_group(&client->dev.kobj, &in3_attr_group);
  1127. if (ret)
  1128. goto eremove;
  1129. }
  1130. if (data->has_voltage & (1 << 4)) {
  1131. ret = sysfs_create_group(&client->dev.kobj, &in4_attr_group);
  1132. if (ret)
  1133. goto eremove;
  1134. }
  1135. if (data->has_voltage & (1 << 5)) {
  1136. ret = sysfs_create_group(&client->dev.kobj, &in5_attr_group);
  1137. if (ret)
  1138. goto eremove;
  1139. }
  1140. if (data->has_vid) {
  1141. data->vrm = vid_which_vrm();
  1142. ret = sysfs_create_group(&client->dev.kobj, &vid_attr_group);
  1143. if (ret)
  1144. goto eremove;
  1145. }
  1146. data->hwmon_dev = hwmon_device_register(&client->dev);
  1147. if (IS_ERR(data->hwmon_dev)) {
  1148. ret = PTR_ERR(data->hwmon_dev);
  1149. goto eremove;
  1150. }
  1151. dev_info(&client->dev, "%s device, revision %d\n",
  1152. names[id->driver_data], revision);
  1153. if ((data->has_voltage & 0x11) || data->has_fan4 || data->has_pwm2)
  1154. dev_info(&client->dev, "Optional features:%s%s%s%s%s\n",
  1155. (data->has_voltage & (1 << 0)) ? " in0" : "",
  1156. (data->has_voltage & (1 << 4)) ? " in4" : "",
  1157. data->has_fan4 ? " fan4" : "",
  1158. data->has_pwm2 ? " pwm2" : "",
  1159. data->has_vid ? " vid" : "");
  1160. if (data->bypass_attn)
  1161. dev_info(&client->dev, "Bypassing attenuators on:%s%s%s%s\n",
  1162. (data->bypass_attn & (1 << 0)) ? " in0" : "",
  1163. (data->bypass_attn & (1 << 1)) ? " in1" : "",
  1164. (data->bypass_attn & (1 << 3)) ? " in3" : "",
  1165. (data->bypass_attn & (1 << 4)) ? " in4" : "");
  1166. return 0;
  1167. eremove:
  1168. adt7475_remove_files(client, data);
  1169. efree:
  1170. kfree(data);
  1171. return ret;
  1172. }
  1173. static int adt7475_remove(struct i2c_client *client)
  1174. {
  1175. struct adt7475_data *data = i2c_get_clientdata(client);
  1176. hwmon_device_unregister(data->hwmon_dev);
  1177. adt7475_remove_files(client, data);
  1178. kfree(data);
  1179. return 0;
  1180. }
  1181. static struct i2c_driver adt7475_driver = {
  1182. .class = I2C_CLASS_HWMON,
  1183. .driver = {
  1184. .name = "adt7475",
  1185. },
  1186. .probe = adt7475_probe,
  1187. .remove = adt7475_remove,
  1188. .id_table = adt7475_id,
  1189. .detect = adt7475_detect,
  1190. .address_list = normal_i2c,
  1191. };
  1192. static void adt7475_read_hystersis(struct i2c_client *client)
  1193. {
  1194. struct adt7475_data *data = i2c_get_clientdata(client);
  1195. data->temp[HYSTERSIS][0] = (u16) adt7475_read(REG_REMOTE1_HYSTERSIS);
  1196. data->temp[HYSTERSIS][1] = data->temp[HYSTERSIS][0];
  1197. data->temp[HYSTERSIS][2] = (u16) adt7475_read(REG_REMOTE2_HYSTERSIS);
  1198. }
  1199. static void adt7475_read_pwm(struct i2c_client *client, int index)
  1200. {
  1201. struct adt7475_data *data = i2c_get_clientdata(client);
  1202. unsigned int v;
  1203. data->pwm[CONTROL][index] = adt7475_read(PWM_CONFIG_REG(index));
  1204. /* Figure out the internal value for pwmctrl and pwmchan
  1205. based on the current settings */
  1206. v = (data->pwm[CONTROL][index] >> 5) & 7;
  1207. if (v == 3)
  1208. data->pwmctl[index] = 0;
  1209. else if (v == 7)
  1210. data->pwmctl[index] = 1;
  1211. else if (v == 4) {
  1212. /* The fan is disabled - we don't want to
  1213. support that, so change to manual mode and
  1214. set the duty cycle to 0 instead
  1215. */
  1216. data->pwm[INPUT][index] = 0;
  1217. data->pwm[CONTROL][index] &= ~0xE0;
  1218. data->pwm[CONTROL][index] |= (7 << 5);
  1219. i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
  1220. data->pwm[INPUT][index]);
  1221. i2c_smbus_write_byte_data(client, PWM_CONFIG_REG(index),
  1222. data->pwm[CONTROL][index]);
  1223. data->pwmctl[index] = 1;
  1224. } else {
  1225. data->pwmctl[index] = 2;
  1226. switch (v) {
  1227. case 0:
  1228. data->pwmchan[index] = 1;
  1229. break;
  1230. case 1:
  1231. data->pwmchan[index] = 2;
  1232. break;
  1233. case 2:
  1234. data->pwmchan[index] = 4;
  1235. break;
  1236. case 5:
  1237. data->pwmchan[index] = 6;
  1238. break;
  1239. case 6:
  1240. data->pwmchan[index] = 7;
  1241. break;
  1242. }
  1243. }
  1244. }
  1245. static struct adt7475_data *adt7475_update_device(struct device *dev)
  1246. {
  1247. struct i2c_client *client = to_i2c_client(dev);
  1248. struct adt7475_data *data = i2c_get_clientdata(client);
  1249. u16 ext;
  1250. int i;
  1251. mutex_lock(&data->lock);
  1252. /* Measurement values update every 2 seconds */
  1253. if (time_after(jiffies, data->measure_updated + HZ * 2) ||
  1254. !data->valid) {
  1255. data->alarms = adt7475_read(REG_STATUS2) << 8;
  1256. data->alarms |= adt7475_read(REG_STATUS1);
  1257. ext = (adt7475_read(REG_EXTEND2) << 8) |
  1258. adt7475_read(REG_EXTEND1);
  1259. for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
  1260. if (!(data->has_voltage & (1 << i)))
  1261. continue;
  1262. data->voltage[INPUT][i] =
  1263. (adt7475_read(VOLTAGE_REG(i)) << 2) |
  1264. ((ext >> (i * 2)) & 3);
  1265. }
  1266. for (i = 0; i < ADT7475_TEMP_COUNT; i++)
  1267. data->temp[INPUT][i] =
  1268. (adt7475_read(TEMP_REG(i)) << 2) |
  1269. ((ext >> ((i + 5) * 2)) & 3);
  1270. if (data->has_voltage & (1 << 5)) {
  1271. data->alarms |= adt7475_read(REG_STATUS4) << 24;
  1272. ext = adt7475_read(REG_EXTEND3);
  1273. data->voltage[INPUT][5] = adt7475_read(REG_VTT) << 2 |
  1274. ((ext >> 4) & 3);
  1275. }
  1276. for (i = 0; i < ADT7475_TACH_COUNT; i++) {
  1277. if (i == 3 && !data->has_fan4)
  1278. continue;
  1279. data->tach[INPUT][i] =
  1280. adt7475_read_word(client, TACH_REG(i));
  1281. }
  1282. /* Updated by hw when in auto mode */
  1283. for (i = 0; i < ADT7475_PWM_COUNT; i++) {
  1284. if (i == 1 && !data->has_pwm2)
  1285. continue;
  1286. data->pwm[INPUT][i] = adt7475_read(PWM_REG(i));
  1287. }
  1288. if (data->has_vid)
  1289. data->vid = adt7475_read(REG_VID) & 0x3f;
  1290. data->measure_updated = jiffies;
  1291. }
  1292. /* Limits and settings, should never change update every 60 seconds */
  1293. if (time_after(jiffies, data->limits_updated + HZ * 60) ||
  1294. !data->valid) {
  1295. data->config4 = adt7475_read(REG_CONFIG4);
  1296. data->config5 = adt7475_read(REG_CONFIG5);
  1297. for (i = 0; i < ADT7475_VOLTAGE_COUNT; i++) {
  1298. if (!(data->has_voltage & (1 << i)))
  1299. continue;
  1300. /* Adjust values so they match the input precision */
  1301. data->voltage[MIN][i] =
  1302. adt7475_read(VOLTAGE_MIN_REG(i)) << 2;
  1303. data->voltage[MAX][i] =
  1304. adt7475_read(VOLTAGE_MAX_REG(i)) << 2;
  1305. }
  1306. if (data->has_voltage & (1 << 5)) {
  1307. data->voltage[MIN][5] = adt7475_read(REG_VTT_MIN) << 2;
  1308. data->voltage[MAX][5] = adt7475_read(REG_VTT_MAX) << 2;
  1309. }
  1310. for (i = 0; i < ADT7475_TEMP_COUNT; i++) {
  1311. /* Adjust values so they match the input precision */
  1312. data->temp[MIN][i] =
  1313. adt7475_read(TEMP_MIN_REG(i)) << 2;
  1314. data->temp[MAX][i] =
  1315. adt7475_read(TEMP_MAX_REG(i)) << 2;
  1316. data->temp[AUTOMIN][i] =
  1317. adt7475_read(TEMP_TMIN_REG(i)) << 2;
  1318. data->temp[THERM][i] =
  1319. adt7475_read(TEMP_THERM_REG(i)) << 2;
  1320. data->temp[OFFSET][i] =
  1321. adt7475_read(TEMP_OFFSET_REG(i));
  1322. }
  1323. adt7475_read_hystersis(client);
  1324. for (i = 0; i < ADT7475_TACH_COUNT; i++) {
  1325. if (i == 3 && !data->has_fan4)
  1326. continue;
  1327. data->tach[MIN][i] =
  1328. adt7475_read_word(client, TACH_MIN_REG(i));
  1329. }
  1330. for (i = 0; i < ADT7475_PWM_COUNT; i++) {
  1331. if (i == 1 && !data->has_pwm2)
  1332. continue;
  1333. data->pwm[MAX][i] = adt7475_read(PWM_MAX_REG(i));
  1334. data->pwm[MIN][i] = adt7475_read(PWM_MIN_REG(i));
  1335. /* Set the channel and control information */
  1336. adt7475_read_pwm(client, i);
  1337. }
  1338. data->range[0] = adt7475_read(TEMP_TRANGE_REG(0));
  1339. data->range[1] = adt7475_read(TEMP_TRANGE_REG(1));
  1340. data->range[2] = adt7475_read(TEMP_TRANGE_REG(2));
  1341. data->limits_updated = jiffies;
  1342. data->valid = 1;
  1343. }
  1344. mutex_unlock(&data->lock);
  1345. return data;
  1346. }
  1347. static int __init sensors_adt7475_init(void)
  1348. {
  1349. return i2c_add_driver(&adt7475_driver);
  1350. }
  1351. static void __exit sensors_adt7475_exit(void)
  1352. {
  1353. i2c_del_driver(&adt7475_driver);
  1354. }
  1355. MODULE_AUTHOR("Advanced Micro Devices, Inc");
  1356. MODULE_DESCRIPTION("adt7475 driver");
  1357. MODULE_LICENSE("GPL");
  1358. module_init(sensors_adt7475_init);
  1359. module_exit(sensors_adt7475_exit);