adt7475.c 53 KB

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