adt7462.c 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002
  1. /*
  2. * A hwmon driver for the Analog Devices ADT7462
  3. * Copyright (C) 2008 IBM
  4. *
  5. * Author: Darrick J. Wong <djwong@us.ibm.com>
  6. *
  7. * This program is free software; you can redistribute it and/or modify
  8. * it under the terms of the GNU General Public License as published by
  9. * the Free Software Foundation; either version 2 of the License, or
  10. * (at your option) any later version.
  11. *
  12. * This program is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  15. * GNU General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU General Public License
  18. * along with this program; if not, write to the Free Software
  19. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  20. */
  21. #include <linux/module.h>
  22. #include <linux/jiffies.h>
  23. #include <linux/i2c.h>
  24. #include <linux/hwmon.h>
  25. #include <linux/hwmon-sysfs.h>
  26. #include <linux/err.h>
  27. #include <linux/mutex.h>
  28. #include <linux/delay.h>
  29. #include <linux/log2.h>
  30. /* Addresses to scan */
  31. static const unsigned short normal_i2c[] = { 0x58, 0x5C, I2C_CLIENT_END };
  32. /* Insmod parameters */
  33. I2C_CLIENT_INSMOD_1(adt7462);
  34. /* ADT7462 registers */
  35. #define ADT7462_REG_DEVICE 0x3D
  36. #define ADT7462_REG_VENDOR 0x3E
  37. #define ADT7462_REG_REVISION 0x3F
  38. #define ADT7462_REG_MIN_TEMP_BASE_ADDR 0x44
  39. #define ADT7462_REG_MIN_TEMP_MAX_ADDR 0x47
  40. #define ADT7462_REG_MAX_TEMP_BASE_ADDR 0x48
  41. #define ADT7462_REG_MAX_TEMP_MAX_ADDR 0x4B
  42. #define ADT7462_REG_TEMP_BASE_ADDR 0x88
  43. #define ADT7462_REG_TEMP_MAX_ADDR 0x8F
  44. #define ADT7462_REG_FAN_BASE_ADDR 0x98
  45. #define ADT7462_REG_FAN_MAX_ADDR 0x9F
  46. #define ADT7462_REG_FAN2_BASE_ADDR 0xA2
  47. #define ADT7462_REG_FAN2_MAX_ADDR 0xA9
  48. #define ADT7462_REG_FAN_ENABLE 0x07
  49. #define ADT7462_REG_FAN_MIN_BASE_ADDR 0x78
  50. #define ADT7462_REG_FAN_MIN_MAX_ADDR 0x7F
  51. #define ADT7462_REG_CFG2 0x02
  52. #define ADT7462_FSPD_MASK 0x20
  53. #define ADT7462_REG_PWM_BASE_ADDR 0xAA
  54. #define ADT7462_REG_PWM_MAX_ADDR 0xAD
  55. #define ADT7462_REG_PWM_MIN_BASE_ADDR 0x28
  56. #define ADT7462_REG_PWM_MIN_MAX_ADDR 0x2B
  57. #define ADT7462_REG_PWM_MAX 0x2C
  58. #define ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR 0x5C
  59. #define ADT7462_REG_PWM_TEMP_MIN_MAX_ADDR 0x5F
  60. #define ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR 0x60
  61. #define ADT7462_REG_PWM_TEMP_RANGE_MAX_ADDR 0x63
  62. #define ADT7462_PWM_HYST_MASK 0x0F
  63. #define ADT7462_PWM_RANGE_MASK 0xF0
  64. #define ADT7462_PWM_RANGE_SHIFT 4
  65. #define ADT7462_REG_PWM_CFG_BASE_ADDR 0x21
  66. #define ADT7462_REG_PWM_CFG_MAX_ADDR 0x24
  67. #define ADT7462_PWM_CHANNEL_MASK 0xE0
  68. #define ADT7462_PWM_CHANNEL_SHIFT 5
  69. #define ADT7462_REG_PIN_CFG_BASE_ADDR 0x10
  70. #define ADT7462_REG_PIN_CFG_MAX_ADDR 0x13
  71. #define ADT7462_PIN7_INPUT 0x01 /* cfg0 */
  72. #define ADT7462_DIODE3_INPUT 0x20
  73. #define ADT7462_DIODE1_INPUT 0x40
  74. #define ADT7462_VID_INPUT 0x80
  75. #define ADT7462_PIN22_INPUT 0x04 /* cfg1 */
  76. #define ADT7462_PIN21_INPUT 0x08
  77. #define ADT7462_PIN19_INPUT 0x10
  78. #define ADT7462_PIN15_INPUT 0x20
  79. #define ADT7462_PIN13_INPUT 0x40
  80. #define ADT7462_PIN8_INPUT 0x80
  81. #define ADT7462_PIN23_MASK 0x03
  82. #define ADT7462_PIN23_SHIFT 0
  83. #define ADT7462_PIN26_MASK 0x0C /* cfg2 */
  84. #define ADT7462_PIN26_SHIFT 2
  85. #define ADT7462_PIN25_MASK 0x30
  86. #define ADT7462_PIN25_SHIFT 4
  87. #define ADT7462_PIN24_MASK 0xC0
  88. #define ADT7462_PIN24_SHIFT 6
  89. #define ADT7462_PIN26_VOLT_INPUT 0x08
  90. #define ADT7462_PIN25_VOLT_INPUT 0x20
  91. #define ADT7462_PIN28_SHIFT 6 /* cfg3 */
  92. #define ADT7462_PIN28_VOLT 0x5
  93. #define ADT7462_REG_ALARM1 0xB8
  94. #define ADT7462_LT_ALARM 0x02
  95. #define ADT7462_R1T_ALARM 0x04
  96. #define ADT7462_R2T_ALARM 0x08
  97. #define ADT7462_R3T_ALARM 0x10
  98. #define ADT7462_REG_ALARM2 0xBB
  99. #define ADT7462_V0_ALARM 0x01
  100. #define ADT7462_V1_ALARM 0x02
  101. #define ADT7462_V2_ALARM 0x04
  102. #define ADT7462_V3_ALARM 0x08
  103. #define ADT7462_V4_ALARM 0x10
  104. #define ADT7462_V5_ALARM 0x20
  105. #define ADT7462_V6_ALARM 0x40
  106. #define ADT7462_V7_ALARM 0x80
  107. #define ADT7462_REG_ALARM3 0xBC
  108. #define ADT7462_V8_ALARM 0x08
  109. #define ADT7462_V9_ALARM 0x10
  110. #define ADT7462_V10_ALARM 0x20
  111. #define ADT7462_V11_ALARM 0x40
  112. #define ADT7462_V12_ALARM 0x80
  113. #define ADT7462_REG_ALARM4 0xBD
  114. #define ADT7462_F0_ALARM 0x01
  115. #define ADT7462_F1_ALARM 0x02
  116. #define ADT7462_F2_ALARM 0x04
  117. #define ADT7462_F3_ALARM 0x08
  118. #define ADT7462_F4_ALARM 0x10
  119. #define ADT7462_F5_ALARM 0x20
  120. #define ADT7462_F6_ALARM 0x40
  121. #define ADT7462_F7_ALARM 0x80
  122. #define ADT7462_ALARM1 0x0000
  123. #define ADT7462_ALARM2 0x0100
  124. #define ADT7462_ALARM3 0x0200
  125. #define ADT7462_ALARM4 0x0300
  126. #define ADT7462_ALARM_REG_SHIFT 8
  127. #define ADT7462_ALARM_FLAG_MASK 0x0F
  128. #define ADT7462_TEMP_COUNT 4
  129. #define ADT7462_TEMP_REG(x) (ADT7462_REG_TEMP_BASE_ADDR + (x * 2))
  130. #define ADT7462_TEMP_MIN_REG(x) (ADT7462_REG_MIN_TEMP_BASE_ADDR + (x))
  131. #define ADT7462_TEMP_MAX_REG(x) (ADT7462_REG_MAX_TEMP_BASE_ADDR + (x))
  132. #define TEMP_FRAC_OFFSET 6
  133. #define ADT7462_FAN_COUNT 8
  134. #define ADT7462_REG_FAN_MIN(x) (ADT7462_REG_FAN_MIN_BASE_ADDR + (x))
  135. #define ADT7462_PWM_COUNT 4
  136. #define ADT7462_REG_PWM(x) (ADT7462_REG_PWM_BASE_ADDR + (x))
  137. #define ADT7462_REG_PWM_MIN(x) (ADT7462_REG_PWM_MIN_BASE_ADDR + (x))
  138. #define ADT7462_REG_PWM_TMIN(x) \
  139. (ADT7462_REG_PWM_TEMP_MIN_BASE_ADDR + (x))
  140. #define ADT7462_REG_PWM_TRANGE(x) \
  141. (ADT7462_REG_PWM_TEMP_RANGE_BASE_ADDR + (x))
  142. #define ADT7462_PIN_CFG_REG_COUNT 4
  143. #define ADT7462_REG_PIN_CFG(x) (ADT7462_REG_PIN_CFG_BASE_ADDR + (x))
  144. #define ADT7462_REG_PWM_CFG(x) (ADT7462_REG_PWM_CFG_BASE_ADDR + (x))
  145. #define ADT7462_ALARM_REG_COUNT 4
  146. /*
  147. * The chip can measure 13 different voltage sources:
  148. *
  149. * 1. +12V1 (pin 7)
  150. * 2. Vccp1/+2.5V/+1.8V/+1.5V (pin 23)
  151. * 3. +12V3 (pin 22)
  152. * 4. +5V (pin 21)
  153. * 5. +1.25V/+0.9V (pin 19)
  154. * 6. +2.5V/+1.8V (pin 15)
  155. * 7. +3.3v (pin 13)
  156. * 8. +12V2 (pin 8)
  157. * 9. Vbatt/FSB_Vtt (pin 26)
  158. * A. +3.3V/+1.2V1 (pin 25)
  159. * B. Vccp2/+2.5V/+1.8V/+1.5V (pin 24)
  160. * C. +1.5V ICH (only if BOTH pin 28/29 are set to +1.5V)
  161. * D. +1.5V 3GPIO (only if BOTH pin 28/29 are set to +1.5V)
  162. *
  163. * Each of these 13 has a factor to convert raw to voltage. Even better,
  164. * the pins can be connected to other sensors (tach/gpio/hot/etc), which
  165. * makes the bookkeeping tricky.
  166. *
  167. * Some, but not all, of these voltages have low/high limits.
  168. */
  169. #define ADT7462_VOLT_COUNT 12
  170. #define ADT7462_VENDOR 0x41
  171. #define ADT7462_DEVICE 0x62
  172. /* datasheet only mentions a revision 4 */
  173. #define ADT7462_REVISION 0x04
  174. /* How often do we reread sensors values? (In jiffies) */
  175. #define SENSOR_REFRESH_INTERVAL (2 * HZ)
  176. /* How often do we reread sensor limit values? (In jiffies) */
  177. #define LIMIT_REFRESH_INTERVAL (60 * HZ)
  178. /* datasheet says to divide this number by the fan reading to get fan rpm */
  179. #define FAN_PERIOD_TO_RPM(x) ((90000 * 60) / (x))
  180. #define FAN_RPM_TO_PERIOD FAN_PERIOD_TO_RPM
  181. #define FAN_PERIOD_INVALID 65535
  182. #define FAN_DATA_VALID(x) ((x) && (x) != FAN_PERIOD_INVALID)
  183. #define MASK_AND_SHIFT(value, prefix) \
  184. (((value) & prefix##_MASK) >> prefix##_SHIFT)
  185. #define ROUND_DIV(x, divisor) (((x) + ((divisor) / 2)) / (divisor))
  186. struct adt7462_data {
  187. struct device *hwmon_dev;
  188. struct attribute_group attrs;
  189. struct mutex lock;
  190. char sensors_valid;
  191. char limits_valid;
  192. unsigned long sensors_last_updated; /* In jiffies */
  193. unsigned long limits_last_updated; /* In jiffies */
  194. u8 temp[ADT7462_TEMP_COUNT];
  195. /* bits 6-7 are quarter pieces of temp */
  196. u8 temp_frac[ADT7462_TEMP_COUNT];
  197. u8 temp_min[ADT7462_TEMP_COUNT];
  198. u8 temp_max[ADT7462_TEMP_COUNT];
  199. u16 fan[ADT7462_FAN_COUNT];
  200. u8 fan_enabled;
  201. u8 fan_min[ADT7462_FAN_COUNT];
  202. u8 cfg2;
  203. u8 pwm[ADT7462_PWM_COUNT];
  204. u8 pin_cfg[ADT7462_PIN_CFG_REG_COUNT];
  205. u8 voltages[ADT7462_VOLT_COUNT];
  206. u8 volt_max[ADT7462_VOLT_COUNT];
  207. u8 volt_min[ADT7462_VOLT_COUNT];
  208. u8 pwm_min[ADT7462_PWM_COUNT];
  209. u8 pwm_tmin[ADT7462_PWM_COUNT];
  210. u8 pwm_trange[ADT7462_PWM_COUNT];
  211. u8 pwm_max; /* only one per chip */
  212. u8 pwm_cfg[ADT7462_PWM_COUNT];
  213. u8 alarms[ADT7462_ALARM_REG_COUNT];
  214. };
  215. static int adt7462_probe(struct i2c_client *client,
  216. const struct i2c_device_id *id);
  217. static int adt7462_detect(struct i2c_client *client, int kind,
  218. struct i2c_board_info *info);
  219. static int adt7462_remove(struct i2c_client *client);
  220. static const struct i2c_device_id adt7462_id[] = {
  221. { "adt7462", adt7462 },
  222. { }
  223. };
  224. MODULE_DEVICE_TABLE(i2c, adt7462_id);
  225. static struct i2c_driver adt7462_driver = {
  226. .class = I2C_CLASS_HWMON,
  227. .driver = {
  228. .name = "adt7462",
  229. },
  230. .probe = adt7462_probe,
  231. .remove = adt7462_remove,
  232. .id_table = adt7462_id,
  233. .detect = adt7462_detect,
  234. .address_data = &addr_data,
  235. };
  236. /*
  237. * 16-bit registers on the ADT7462 are low-byte first. The data sheet says
  238. * that the low byte must be read before the high byte.
  239. */
  240. static inline int adt7462_read_word_data(struct i2c_client *client, u8 reg)
  241. {
  242. u16 foo;
  243. foo = i2c_smbus_read_byte_data(client, reg);
  244. foo |= ((u16)i2c_smbus_read_byte_data(client, reg + 1) << 8);
  245. return foo;
  246. }
  247. /* For some reason these registers are not contiguous. */
  248. static int ADT7462_REG_FAN(int fan)
  249. {
  250. if (fan < 4)
  251. return ADT7462_REG_FAN_BASE_ADDR + (2 * fan);
  252. return ADT7462_REG_FAN2_BASE_ADDR + (2 * (fan - 4));
  253. }
  254. /* Voltage registers are scattered everywhere */
  255. static int ADT7462_REG_VOLT_MAX(struct adt7462_data *data, int which)
  256. {
  257. switch (which) {
  258. case 0:
  259. if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
  260. return 0x7C;
  261. break;
  262. case 1:
  263. return 0x69;
  264. case 2:
  265. if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
  266. return 0x7F;
  267. break;
  268. case 3:
  269. if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
  270. return 0x7E;
  271. break;
  272. case 4:
  273. if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
  274. return 0x4B;
  275. break;
  276. case 5:
  277. if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
  278. return 0x49;
  279. break;
  280. case 6:
  281. if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
  282. return 0x68;
  283. break;
  284. case 7:
  285. if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
  286. return 0x7D;
  287. break;
  288. case 8:
  289. if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
  290. return 0x6C;
  291. break;
  292. case 9:
  293. if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
  294. return 0x6B;
  295. break;
  296. case 10:
  297. return 0x6A;
  298. case 11:
  299. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  300. ADT7462_PIN28_VOLT &&
  301. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  302. return 0x50;
  303. break;
  304. case 12:
  305. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  306. ADT7462_PIN28_VOLT &&
  307. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  308. return 0x4C;
  309. break;
  310. }
  311. return -ENODEV;
  312. }
  313. static int ADT7462_REG_VOLT_MIN(struct adt7462_data *data, int which)
  314. {
  315. switch (which) {
  316. case 0:
  317. if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
  318. return 0x6D;
  319. break;
  320. case 1:
  321. return 0x72;
  322. case 2:
  323. if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
  324. return 0x6F;
  325. break;
  326. case 3:
  327. if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
  328. return 0x71;
  329. break;
  330. case 4:
  331. if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
  332. return 0x47;
  333. break;
  334. case 5:
  335. if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
  336. return 0x45;
  337. break;
  338. case 6:
  339. if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
  340. return 0x70;
  341. break;
  342. case 7:
  343. if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
  344. return 0x6E;
  345. break;
  346. case 8:
  347. if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
  348. return 0x75;
  349. break;
  350. case 9:
  351. if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
  352. return 0x74;
  353. break;
  354. case 10:
  355. return 0x73;
  356. case 11:
  357. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  358. ADT7462_PIN28_VOLT &&
  359. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  360. return 0x76;
  361. break;
  362. case 12:
  363. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  364. ADT7462_PIN28_VOLT &&
  365. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  366. return 0x77;
  367. break;
  368. }
  369. return -ENODEV;
  370. }
  371. static int ADT7462_REG_VOLT(struct adt7462_data *data, int which)
  372. {
  373. switch (which) {
  374. case 0:
  375. if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
  376. return 0xA3;
  377. break;
  378. case 1:
  379. return 0x90;
  380. case 2:
  381. if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
  382. return 0xA9;
  383. break;
  384. case 3:
  385. if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
  386. return 0xA7;
  387. break;
  388. case 4:
  389. if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT))
  390. return 0x8F;
  391. break;
  392. case 5:
  393. if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT))
  394. return 0x8B;
  395. break;
  396. case 6:
  397. if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
  398. return 0x96;
  399. break;
  400. case 7:
  401. if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
  402. return 0xA5;
  403. break;
  404. case 8:
  405. if (!(data->pin_cfg[2] & ADT7462_PIN26_VOLT_INPUT))
  406. return 0x93;
  407. break;
  408. case 9:
  409. if (!(data->pin_cfg[2] & ADT7462_PIN25_VOLT_INPUT))
  410. return 0x92;
  411. break;
  412. case 10:
  413. return 0x91;
  414. case 11:
  415. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  416. ADT7462_PIN28_VOLT &&
  417. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  418. return 0x94;
  419. break;
  420. case 12:
  421. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  422. ADT7462_PIN28_VOLT &&
  423. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  424. return 0x95;
  425. break;
  426. }
  427. return -ENODEV;
  428. }
  429. /* Provide labels for sysfs */
  430. static const char *voltage_label(struct adt7462_data *data, int which)
  431. {
  432. switch (which) {
  433. case 0:
  434. if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
  435. return "+12V1";
  436. break;
  437. case 1:
  438. switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
  439. case 0:
  440. return "Vccp1";
  441. case 1:
  442. return "+2.5V";
  443. case 2:
  444. return "+1.8V";
  445. case 3:
  446. return "+1.5V";
  447. }
  448. case 2:
  449. if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
  450. return "+12V3";
  451. break;
  452. case 3:
  453. if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
  454. return "+5V";
  455. break;
  456. case 4:
  457. if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
  458. if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
  459. return "+0.9V";
  460. return "+1.25V";
  461. }
  462. break;
  463. case 5:
  464. if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
  465. if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
  466. return "+1.8V";
  467. return "+2.5V";
  468. }
  469. break;
  470. case 6:
  471. if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
  472. return "+3.3V";
  473. break;
  474. case 7:
  475. if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
  476. return "+12V2";
  477. break;
  478. case 8:
  479. switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
  480. case 0:
  481. return "Vbatt";
  482. case 1:
  483. return "FSB_Vtt";
  484. }
  485. break;
  486. case 9:
  487. switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
  488. case 0:
  489. return "+3.3V";
  490. case 1:
  491. return "+1.2V1";
  492. }
  493. break;
  494. case 10:
  495. switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
  496. case 0:
  497. return "Vccp2";
  498. case 1:
  499. return "+2.5V";
  500. case 2:
  501. return "+1.8V";
  502. case 3:
  503. return "+1.5";
  504. }
  505. case 11:
  506. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  507. ADT7462_PIN28_VOLT &&
  508. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  509. return "+1.5V ICH";
  510. break;
  511. case 12:
  512. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  513. ADT7462_PIN28_VOLT &&
  514. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  515. return "+1.5V 3GPIO";
  516. break;
  517. }
  518. return "N/A";
  519. }
  520. /* Multipliers are actually in uV, not mV. */
  521. static int voltage_multiplier(struct adt7462_data *data, int which)
  522. {
  523. switch (which) {
  524. case 0:
  525. if (!(data->pin_cfg[0] & ADT7462_PIN7_INPUT))
  526. return 62500;
  527. break;
  528. case 1:
  529. switch (MASK_AND_SHIFT(data->pin_cfg[1], ADT7462_PIN23)) {
  530. case 0:
  531. if (data->pin_cfg[0] & ADT7462_VID_INPUT)
  532. return 12500;
  533. return 6250;
  534. case 1:
  535. return 13000;
  536. case 2:
  537. return 9400;
  538. case 3:
  539. return 7800;
  540. }
  541. case 2:
  542. if (!(data->pin_cfg[1] & ADT7462_PIN22_INPUT))
  543. return 62500;
  544. break;
  545. case 3:
  546. if (!(data->pin_cfg[1] & ADT7462_PIN21_INPUT))
  547. return 26000;
  548. break;
  549. case 4:
  550. if (!(data->pin_cfg[0] & ADT7462_DIODE3_INPUT)) {
  551. if (data->pin_cfg[1] & ADT7462_PIN19_INPUT)
  552. return 4690;
  553. return 6500;
  554. }
  555. break;
  556. case 5:
  557. if (!(data->pin_cfg[0] & ADT7462_DIODE1_INPUT)) {
  558. if (data->pin_cfg[1] & ADT7462_PIN15_INPUT)
  559. return 9400;
  560. return 13000;
  561. }
  562. break;
  563. case 6:
  564. if (!(data->pin_cfg[1] & ADT7462_PIN13_INPUT))
  565. return 17200;
  566. break;
  567. case 7:
  568. if (!(data->pin_cfg[1] & ADT7462_PIN8_INPUT))
  569. return 62500;
  570. break;
  571. case 8:
  572. switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN26)) {
  573. case 0:
  574. return 15600;
  575. case 1:
  576. return 6250;
  577. }
  578. break;
  579. case 9:
  580. switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN25)) {
  581. case 0:
  582. return 17200;
  583. case 1:
  584. return 6250;
  585. }
  586. break;
  587. case 10:
  588. switch (MASK_AND_SHIFT(data->pin_cfg[2], ADT7462_PIN24)) {
  589. case 0:
  590. return 6250;
  591. case 1:
  592. return 13000;
  593. case 2:
  594. return 9400;
  595. case 3:
  596. return 7800;
  597. }
  598. case 11:
  599. case 12:
  600. if (data->pin_cfg[3] >> ADT7462_PIN28_SHIFT ==
  601. ADT7462_PIN28_VOLT &&
  602. !(data->pin_cfg[0] & ADT7462_VID_INPUT))
  603. return 7800;
  604. }
  605. return 0;
  606. }
  607. static int temp_enabled(struct adt7462_data *data, int which)
  608. {
  609. switch (which) {
  610. case 0:
  611. case 2:
  612. return 1;
  613. case 1:
  614. if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
  615. return 1;
  616. break;
  617. case 3:
  618. if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
  619. return 1;
  620. break;
  621. }
  622. return 0;
  623. }
  624. static const char *temp_label(struct adt7462_data *data, int which)
  625. {
  626. switch (which) {
  627. case 0:
  628. return "local";
  629. case 1:
  630. if (data->pin_cfg[0] & ADT7462_DIODE1_INPUT)
  631. return "remote1";
  632. break;
  633. case 2:
  634. return "remote2";
  635. case 3:
  636. if (data->pin_cfg[0] & ADT7462_DIODE3_INPUT)
  637. return "remote3";
  638. break;
  639. }
  640. return "N/A";
  641. }
  642. /* Map Trange register values to mC */
  643. #define NUM_TRANGE_VALUES 16
  644. static const int trange_values[NUM_TRANGE_VALUES] = {
  645. 2000,
  646. 2500,
  647. 3300,
  648. 4000,
  649. 5000,
  650. 6700,
  651. 8000,
  652. 10000,
  653. 13300,
  654. 16000,
  655. 20000,
  656. 26700,
  657. 32000,
  658. 40000,
  659. 53300,
  660. 80000
  661. };
  662. static int find_trange_value(int trange)
  663. {
  664. int i;
  665. for (i = 0; i < NUM_TRANGE_VALUES; i++)
  666. if (trange_values[i] == trange)
  667. return i;
  668. return -ENODEV;
  669. }
  670. static struct adt7462_data *adt7462_update_device(struct device *dev)
  671. {
  672. struct i2c_client *client = to_i2c_client(dev);
  673. struct adt7462_data *data = i2c_get_clientdata(client);
  674. unsigned long local_jiffies = jiffies;
  675. int i;
  676. mutex_lock(&data->lock);
  677. if (time_before(local_jiffies, data->sensors_last_updated +
  678. SENSOR_REFRESH_INTERVAL)
  679. && data->sensors_valid)
  680. goto no_sensor_update;
  681. for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
  682. /*
  683. * Reading the fractional register locks the integral
  684. * register until both have been read.
  685. */
  686. data->temp_frac[i] = i2c_smbus_read_byte_data(client,
  687. ADT7462_TEMP_REG(i));
  688. data->temp[i] = i2c_smbus_read_byte_data(client,
  689. ADT7462_TEMP_REG(i) + 1);
  690. }
  691. for (i = 0; i < ADT7462_FAN_COUNT; i++)
  692. data->fan[i] = adt7462_read_word_data(client,
  693. ADT7462_REG_FAN(i));
  694. data->fan_enabled = i2c_smbus_read_byte_data(client,
  695. ADT7462_REG_FAN_ENABLE);
  696. for (i = 0; i < ADT7462_PWM_COUNT; i++)
  697. data->pwm[i] = i2c_smbus_read_byte_data(client,
  698. ADT7462_REG_PWM(i));
  699. for (i = 0; i < ADT7462_PIN_CFG_REG_COUNT; i++)
  700. data->pin_cfg[i] = i2c_smbus_read_byte_data(client,
  701. ADT7462_REG_PIN_CFG(i));
  702. for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
  703. int reg = ADT7462_REG_VOLT(data, i);
  704. if (!reg)
  705. data->voltages[i] = 0;
  706. else
  707. data->voltages[i] = i2c_smbus_read_byte_data(client,
  708. reg);
  709. }
  710. data->alarms[0] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM1);
  711. data->alarms[1] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM2);
  712. data->alarms[2] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM3);
  713. data->alarms[3] = i2c_smbus_read_byte_data(client, ADT7462_REG_ALARM4);
  714. data->sensors_last_updated = local_jiffies;
  715. data->sensors_valid = 1;
  716. no_sensor_update:
  717. if (time_before(local_jiffies, data->limits_last_updated +
  718. LIMIT_REFRESH_INTERVAL)
  719. && data->limits_valid)
  720. goto out;
  721. for (i = 0; i < ADT7462_TEMP_COUNT; i++) {
  722. data->temp_min[i] = i2c_smbus_read_byte_data(client,
  723. ADT7462_TEMP_MIN_REG(i));
  724. data->temp_max[i] = i2c_smbus_read_byte_data(client,
  725. ADT7462_TEMP_MAX_REG(i));
  726. }
  727. for (i = 0; i < ADT7462_FAN_COUNT; i++)
  728. data->fan_min[i] = i2c_smbus_read_byte_data(client,
  729. ADT7462_REG_FAN_MIN(i));
  730. for (i = 0; i < ADT7462_VOLT_COUNT; i++) {
  731. int reg = ADT7462_REG_VOLT_MAX(data, i);
  732. data->volt_max[i] =
  733. (reg ? i2c_smbus_read_byte_data(client, reg) : 0);
  734. reg = ADT7462_REG_VOLT_MIN(data, i);
  735. data->volt_min[i] =
  736. (reg ? i2c_smbus_read_byte_data(client, reg) : 0);
  737. }
  738. for (i = 0; i < ADT7462_PWM_COUNT; i++) {
  739. data->pwm_min[i] = i2c_smbus_read_byte_data(client,
  740. ADT7462_REG_PWM_MIN(i));
  741. data->pwm_tmin[i] = i2c_smbus_read_byte_data(client,
  742. ADT7462_REG_PWM_TMIN(i));
  743. data->pwm_trange[i] = i2c_smbus_read_byte_data(client,
  744. ADT7462_REG_PWM_TRANGE(i));
  745. data->pwm_cfg[i] = i2c_smbus_read_byte_data(client,
  746. ADT7462_REG_PWM_CFG(i));
  747. }
  748. data->pwm_max = i2c_smbus_read_byte_data(client, ADT7462_REG_PWM_MAX);
  749. data->cfg2 = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
  750. data->limits_last_updated = local_jiffies;
  751. data->limits_valid = 1;
  752. out:
  753. mutex_unlock(&data->lock);
  754. return data;
  755. }
  756. static ssize_t show_temp_min(struct device *dev,
  757. struct device_attribute *devattr,
  758. char *buf)
  759. {
  760. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  761. struct adt7462_data *data = adt7462_update_device(dev);
  762. if (!temp_enabled(data, attr->index))
  763. return sprintf(buf, "0\n");
  764. return sprintf(buf, "%d\n", 1000 * (data->temp_min[attr->index] - 64));
  765. }
  766. static ssize_t set_temp_min(struct device *dev,
  767. struct device_attribute *devattr,
  768. const char *buf,
  769. size_t count)
  770. {
  771. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  772. struct i2c_client *client = to_i2c_client(dev);
  773. struct adt7462_data *data = i2c_get_clientdata(client);
  774. long temp;
  775. if (strict_strtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
  776. return -EINVAL;
  777. temp = ROUND_DIV(temp, 1000) + 64;
  778. temp = SENSORS_LIMIT(temp, 0, 255);
  779. mutex_lock(&data->lock);
  780. data->temp_min[attr->index] = temp;
  781. i2c_smbus_write_byte_data(client, ADT7462_TEMP_MIN_REG(attr->index),
  782. temp);
  783. mutex_unlock(&data->lock);
  784. return count;
  785. }
  786. static ssize_t show_temp_max(struct device *dev,
  787. struct device_attribute *devattr,
  788. char *buf)
  789. {
  790. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  791. struct adt7462_data *data = adt7462_update_device(dev);
  792. if (!temp_enabled(data, attr->index))
  793. return sprintf(buf, "0\n");
  794. return sprintf(buf, "%d\n", 1000 * (data->temp_max[attr->index] - 64));
  795. }
  796. static ssize_t set_temp_max(struct device *dev,
  797. struct device_attribute *devattr,
  798. const char *buf,
  799. size_t count)
  800. {
  801. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  802. struct i2c_client *client = to_i2c_client(dev);
  803. struct adt7462_data *data = i2c_get_clientdata(client);
  804. long temp;
  805. if (strict_strtol(buf, 10, &temp) || !temp_enabled(data, attr->index))
  806. return -EINVAL;
  807. temp = ROUND_DIV(temp, 1000) + 64;
  808. temp = SENSORS_LIMIT(temp, 0, 255);
  809. mutex_lock(&data->lock);
  810. data->temp_max[attr->index] = temp;
  811. i2c_smbus_write_byte_data(client, ADT7462_TEMP_MAX_REG(attr->index),
  812. temp);
  813. mutex_unlock(&data->lock);
  814. return count;
  815. }
  816. static ssize_t show_temp(struct device *dev, struct device_attribute *devattr,
  817. char *buf)
  818. {
  819. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  820. struct adt7462_data *data = adt7462_update_device(dev);
  821. u8 frac = data->temp_frac[attr->index] >> TEMP_FRAC_OFFSET;
  822. if (!temp_enabled(data, attr->index))
  823. return sprintf(buf, "0\n");
  824. return sprintf(buf, "%d\n", 1000 * (data->temp[attr->index] - 64) +
  825. 250 * frac);
  826. }
  827. static ssize_t show_temp_label(struct device *dev,
  828. struct device_attribute *devattr,
  829. char *buf)
  830. {
  831. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  832. struct adt7462_data *data = adt7462_update_device(dev);
  833. return sprintf(buf, "%s\n", temp_label(data, attr->index));
  834. }
  835. static ssize_t show_volt_max(struct device *dev,
  836. struct device_attribute *devattr,
  837. char *buf)
  838. {
  839. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  840. struct adt7462_data *data = adt7462_update_device(dev);
  841. int x = voltage_multiplier(data, attr->index);
  842. x *= data->volt_max[attr->index];
  843. x /= 1000; /* convert from uV to mV */
  844. return sprintf(buf, "%d\n", x);
  845. }
  846. static ssize_t set_volt_max(struct device *dev,
  847. struct device_attribute *devattr,
  848. const char *buf,
  849. size_t count)
  850. {
  851. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  852. struct i2c_client *client = to_i2c_client(dev);
  853. struct adt7462_data *data = i2c_get_clientdata(client);
  854. int x = voltage_multiplier(data, attr->index);
  855. long temp;
  856. if (strict_strtol(buf, 10, &temp) || !x)
  857. return -EINVAL;
  858. temp *= 1000; /* convert mV to uV */
  859. temp = ROUND_DIV(temp, x);
  860. temp = SENSORS_LIMIT(temp, 0, 255);
  861. mutex_lock(&data->lock);
  862. data->volt_max[attr->index] = temp;
  863. i2c_smbus_write_byte_data(client,
  864. ADT7462_REG_VOLT_MAX(data, attr->index),
  865. temp);
  866. mutex_unlock(&data->lock);
  867. return count;
  868. }
  869. static ssize_t show_volt_min(struct device *dev,
  870. struct device_attribute *devattr,
  871. char *buf)
  872. {
  873. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  874. struct adt7462_data *data = adt7462_update_device(dev);
  875. int x = voltage_multiplier(data, attr->index);
  876. x *= data->volt_min[attr->index];
  877. x /= 1000; /* convert from uV to mV */
  878. return sprintf(buf, "%d\n", x);
  879. }
  880. static ssize_t set_volt_min(struct device *dev,
  881. struct device_attribute *devattr,
  882. const char *buf,
  883. size_t count)
  884. {
  885. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  886. struct i2c_client *client = to_i2c_client(dev);
  887. struct adt7462_data *data = i2c_get_clientdata(client);
  888. int x = voltage_multiplier(data, attr->index);
  889. long temp;
  890. if (strict_strtol(buf, 10, &temp) || !x)
  891. return -EINVAL;
  892. temp *= 1000; /* convert mV to uV */
  893. temp = ROUND_DIV(temp, x);
  894. temp = SENSORS_LIMIT(temp, 0, 255);
  895. mutex_lock(&data->lock);
  896. data->volt_min[attr->index] = temp;
  897. i2c_smbus_write_byte_data(client,
  898. ADT7462_REG_VOLT_MIN(data, attr->index),
  899. temp);
  900. mutex_unlock(&data->lock);
  901. return count;
  902. }
  903. static ssize_t show_voltage(struct device *dev,
  904. struct device_attribute *devattr,
  905. char *buf)
  906. {
  907. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  908. struct adt7462_data *data = adt7462_update_device(dev);
  909. int x = voltage_multiplier(data, attr->index);
  910. x *= data->voltages[attr->index];
  911. x /= 1000; /* convert from uV to mV */
  912. return sprintf(buf, "%d\n", x);
  913. }
  914. static ssize_t show_voltage_label(struct device *dev,
  915. struct device_attribute *devattr,
  916. char *buf)
  917. {
  918. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  919. struct adt7462_data *data = adt7462_update_device(dev);
  920. return sprintf(buf, "%s\n", voltage_label(data, attr->index));
  921. }
  922. static ssize_t show_alarm(struct device *dev,
  923. struct device_attribute *devattr,
  924. char *buf)
  925. {
  926. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  927. struct adt7462_data *data = adt7462_update_device(dev);
  928. int reg = attr->index >> ADT7462_ALARM_REG_SHIFT;
  929. int mask = attr->index & ADT7462_ALARM_FLAG_MASK;
  930. if (data->alarms[reg] & mask)
  931. return sprintf(buf, "1\n");
  932. else
  933. return sprintf(buf, "0\n");
  934. }
  935. static int fan_enabled(struct adt7462_data *data, int fan)
  936. {
  937. return data->fan_enabled & (1 << fan);
  938. }
  939. static ssize_t show_fan_min(struct device *dev,
  940. struct device_attribute *devattr,
  941. char *buf)
  942. {
  943. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  944. struct adt7462_data *data = adt7462_update_device(dev);
  945. u16 temp;
  946. /* Only the MSB of the min fan period is stored... */
  947. temp = data->fan_min[attr->index];
  948. temp <<= 8;
  949. if (!fan_enabled(data, attr->index) ||
  950. !FAN_DATA_VALID(temp))
  951. return sprintf(buf, "0\n");
  952. return sprintf(buf, "%d\n", FAN_PERIOD_TO_RPM(temp));
  953. }
  954. static ssize_t set_fan_min(struct device *dev,
  955. struct device_attribute *devattr,
  956. const char *buf, size_t count)
  957. {
  958. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  959. struct i2c_client *client = to_i2c_client(dev);
  960. struct adt7462_data *data = i2c_get_clientdata(client);
  961. long temp;
  962. if (strict_strtol(buf, 10, &temp) || !temp ||
  963. !fan_enabled(data, attr->index))
  964. return -EINVAL;
  965. temp = FAN_RPM_TO_PERIOD(temp);
  966. temp >>= 8;
  967. temp = SENSORS_LIMIT(temp, 1, 255);
  968. mutex_lock(&data->lock);
  969. data->fan_min[attr->index] = temp;
  970. i2c_smbus_write_byte_data(client, ADT7462_REG_FAN_MIN(attr->index),
  971. temp);
  972. mutex_unlock(&data->lock);
  973. return count;
  974. }
  975. static ssize_t show_fan(struct device *dev, struct device_attribute *devattr,
  976. char *buf)
  977. {
  978. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  979. struct adt7462_data *data = adt7462_update_device(dev);
  980. if (!fan_enabled(data, attr->index) ||
  981. !FAN_DATA_VALID(data->fan[attr->index]))
  982. return sprintf(buf, "0\n");
  983. return sprintf(buf, "%d\n",
  984. FAN_PERIOD_TO_RPM(data->fan[attr->index]));
  985. }
  986. static ssize_t show_force_pwm_max(struct device *dev,
  987. struct device_attribute *devattr,
  988. char *buf)
  989. {
  990. struct adt7462_data *data = adt7462_update_device(dev);
  991. return sprintf(buf, "%d\n", (data->cfg2 & ADT7462_FSPD_MASK ? 1 : 0));
  992. }
  993. static ssize_t set_force_pwm_max(struct device *dev,
  994. struct device_attribute *devattr,
  995. const char *buf,
  996. size_t count)
  997. {
  998. struct i2c_client *client = to_i2c_client(dev);
  999. struct adt7462_data *data = i2c_get_clientdata(client);
  1000. long temp;
  1001. u8 reg;
  1002. if (strict_strtol(buf, 10, &temp))
  1003. return -EINVAL;
  1004. mutex_lock(&data->lock);
  1005. reg = i2c_smbus_read_byte_data(client, ADT7462_REG_CFG2);
  1006. if (temp)
  1007. reg |= ADT7462_FSPD_MASK;
  1008. else
  1009. reg &= ~ADT7462_FSPD_MASK;
  1010. data->cfg2 = reg;
  1011. i2c_smbus_write_byte_data(client, ADT7462_REG_CFG2, reg);
  1012. mutex_unlock(&data->lock);
  1013. return count;
  1014. }
  1015. static ssize_t show_pwm(struct device *dev, struct device_attribute *devattr,
  1016. char *buf)
  1017. {
  1018. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1019. struct adt7462_data *data = adt7462_update_device(dev);
  1020. return sprintf(buf, "%d\n", data->pwm[attr->index]);
  1021. }
  1022. static ssize_t set_pwm(struct device *dev, struct device_attribute *devattr,
  1023. const char *buf, size_t count)
  1024. {
  1025. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1026. struct i2c_client *client = to_i2c_client(dev);
  1027. struct adt7462_data *data = i2c_get_clientdata(client);
  1028. long temp;
  1029. if (strict_strtol(buf, 10, &temp))
  1030. return -EINVAL;
  1031. temp = SENSORS_LIMIT(temp, 0, 255);
  1032. mutex_lock(&data->lock);
  1033. data->pwm[attr->index] = temp;
  1034. i2c_smbus_write_byte_data(client, ADT7462_REG_PWM(attr->index), temp);
  1035. mutex_unlock(&data->lock);
  1036. return count;
  1037. }
  1038. static ssize_t show_pwm_max(struct device *dev,
  1039. struct device_attribute *devattr,
  1040. char *buf)
  1041. {
  1042. struct adt7462_data *data = adt7462_update_device(dev);
  1043. return sprintf(buf, "%d\n", data->pwm_max);
  1044. }
  1045. static ssize_t set_pwm_max(struct device *dev,
  1046. struct device_attribute *devattr,
  1047. const char *buf,
  1048. size_t count)
  1049. {
  1050. struct i2c_client *client = to_i2c_client(dev);
  1051. struct adt7462_data *data = i2c_get_clientdata(client);
  1052. long temp;
  1053. if (strict_strtol(buf, 10, &temp))
  1054. return -EINVAL;
  1055. temp = SENSORS_LIMIT(temp, 0, 255);
  1056. mutex_lock(&data->lock);
  1057. data->pwm_max = temp;
  1058. i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MAX, temp);
  1059. mutex_unlock(&data->lock);
  1060. return count;
  1061. }
  1062. static ssize_t show_pwm_min(struct device *dev,
  1063. struct device_attribute *devattr,
  1064. char *buf)
  1065. {
  1066. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1067. struct adt7462_data *data = adt7462_update_device(dev);
  1068. return sprintf(buf, "%d\n", data->pwm_min[attr->index]);
  1069. }
  1070. static ssize_t set_pwm_min(struct device *dev,
  1071. struct device_attribute *devattr,
  1072. const char *buf,
  1073. size_t count)
  1074. {
  1075. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1076. struct i2c_client *client = to_i2c_client(dev);
  1077. struct adt7462_data *data = i2c_get_clientdata(client);
  1078. long temp;
  1079. if (strict_strtol(buf, 10, &temp))
  1080. return -EINVAL;
  1081. temp = SENSORS_LIMIT(temp, 0, 255);
  1082. mutex_lock(&data->lock);
  1083. data->pwm_min[attr->index] = temp;
  1084. i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_MIN(attr->index),
  1085. temp);
  1086. mutex_unlock(&data->lock);
  1087. return count;
  1088. }
  1089. static ssize_t show_pwm_hyst(struct device *dev,
  1090. struct device_attribute *devattr,
  1091. char *buf)
  1092. {
  1093. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1094. struct adt7462_data *data = adt7462_update_device(dev);
  1095. return sprintf(buf, "%d\n", 1000 *
  1096. (data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK));
  1097. }
  1098. static ssize_t set_pwm_hyst(struct device *dev,
  1099. struct device_attribute *devattr,
  1100. const char *buf,
  1101. size_t count)
  1102. {
  1103. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1104. struct i2c_client *client = to_i2c_client(dev);
  1105. struct adt7462_data *data = i2c_get_clientdata(client);
  1106. long temp;
  1107. if (strict_strtol(buf, 10, &temp))
  1108. return -EINVAL;
  1109. temp = ROUND_DIV(temp, 1000);
  1110. temp = SENSORS_LIMIT(temp, 0, 15);
  1111. /* package things up */
  1112. temp &= ADT7462_PWM_HYST_MASK;
  1113. temp |= data->pwm_trange[attr->index] & ADT7462_PWM_RANGE_MASK;
  1114. mutex_lock(&data->lock);
  1115. data->pwm_trange[attr->index] = temp;
  1116. i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
  1117. temp);
  1118. mutex_unlock(&data->lock);
  1119. return count;
  1120. }
  1121. static ssize_t show_pwm_tmax(struct device *dev,
  1122. struct device_attribute *devattr,
  1123. char *buf)
  1124. {
  1125. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1126. struct adt7462_data *data = adt7462_update_device(dev);
  1127. /* tmax = tmin + trange */
  1128. int trange = trange_values[data->pwm_trange[attr->index] >>
  1129. ADT7462_PWM_RANGE_SHIFT];
  1130. int tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
  1131. return sprintf(buf, "%d\n", tmin + trange);
  1132. }
  1133. static ssize_t set_pwm_tmax(struct device *dev,
  1134. struct device_attribute *devattr,
  1135. const char *buf,
  1136. size_t count)
  1137. {
  1138. int temp;
  1139. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1140. struct i2c_client *client = to_i2c_client(dev);
  1141. struct adt7462_data *data = i2c_get_clientdata(client);
  1142. int tmin, trange_value;
  1143. long trange;
  1144. if (strict_strtol(buf, 10, &trange))
  1145. return -EINVAL;
  1146. /* trange = tmax - tmin */
  1147. tmin = (data->pwm_tmin[attr->index] - 64) * 1000;
  1148. trange_value = find_trange_value(trange - tmin);
  1149. if (trange_value < 0)
  1150. return -EINVAL;
  1151. temp = trange_value << ADT7462_PWM_RANGE_SHIFT;
  1152. temp |= data->pwm_trange[attr->index] & ADT7462_PWM_HYST_MASK;
  1153. mutex_lock(&data->lock);
  1154. data->pwm_trange[attr->index] = temp;
  1155. i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TRANGE(attr->index),
  1156. temp);
  1157. mutex_unlock(&data->lock);
  1158. return count;
  1159. }
  1160. static ssize_t show_pwm_tmin(struct device *dev,
  1161. struct device_attribute *devattr,
  1162. char *buf)
  1163. {
  1164. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1165. struct adt7462_data *data = adt7462_update_device(dev);
  1166. return sprintf(buf, "%d\n", 1000 * (data->pwm_tmin[attr->index] - 64));
  1167. }
  1168. static ssize_t set_pwm_tmin(struct device *dev,
  1169. struct device_attribute *devattr,
  1170. const char *buf,
  1171. size_t count)
  1172. {
  1173. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1174. struct i2c_client *client = to_i2c_client(dev);
  1175. struct adt7462_data *data = i2c_get_clientdata(client);
  1176. long temp;
  1177. if (strict_strtol(buf, 10, &temp))
  1178. return -EINVAL;
  1179. temp = ROUND_DIV(temp, 1000) + 64;
  1180. temp = SENSORS_LIMIT(temp, 0, 255);
  1181. mutex_lock(&data->lock);
  1182. data->pwm_tmin[attr->index] = temp;
  1183. i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_TMIN(attr->index),
  1184. temp);
  1185. mutex_unlock(&data->lock);
  1186. return count;
  1187. }
  1188. static ssize_t show_pwm_auto(struct device *dev,
  1189. struct device_attribute *devattr,
  1190. char *buf)
  1191. {
  1192. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1193. struct adt7462_data *data = adt7462_update_device(dev);
  1194. int cfg = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
  1195. switch (cfg) {
  1196. case 4: /* off */
  1197. return sprintf(buf, "0\n");
  1198. case 7: /* manual */
  1199. return sprintf(buf, "1\n");
  1200. default: /* automatic */
  1201. return sprintf(buf, "2\n");
  1202. }
  1203. }
  1204. static void set_pwm_channel(struct i2c_client *client,
  1205. struct adt7462_data *data,
  1206. int which,
  1207. int value)
  1208. {
  1209. int temp = data->pwm_cfg[which] & ~ADT7462_PWM_CHANNEL_MASK;
  1210. temp |= value << ADT7462_PWM_CHANNEL_SHIFT;
  1211. mutex_lock(&data->lock);
  1212. data->pwm_cfg[which] = temp;
  1213. i2c_smbus_write_byte_data(client, ADT7462_REG_PWM_CFG(which), temp);
  1214. mutex_unlock(&data->lock);
  1215. }
  1216. static ssize_t set_pwm_auto(struct device *dev,
  1217. struct device_attribute *devattr,
  1218. const char *buf,
  1219. size_t count)
  1220. {
  1221. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1222. struct i2c_client *client = to_i2c_client(dev);
  1223. struct adt7462_data *data = i2c_get_clientdata(client);
  1224. long temp;
  1225. if (strict_strtol(buf, 10, &temp))
  1226. return -EINVAL;
  1227. switch (temp) {
  1228. case 0: /* off */
  1229. set_pwm_channel(client, data, attr->index, 4);
  1230. return count;
  1231. case 1: /* manual */
  1232. set_pwm_channel(client, data, attr->index, 7);
  1233. return count;
  1234. default:
  1235. return -EINVAL;
  1236. }
  1237. }
  1238. static ssize_t show_pwm_auto_temp(struct device *dev,
  1239. struct device_attribute *devattr,
  1240. char *buf)
  1241. {
  1242. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1243. struct adt7462_data *data = adt7462_update_device(dev);
  1244. int channel = data->pwm_cfg[attr->index] >> ADT7462_PWM_CHANNEL_SHIFT;
  1245. switch (channel) {
  1246. case 0: /* temp[1234] only */
  1247. case 1:
  1248. case 2:
  1249. case 3:
  1250. return sprintf(buf, "%d\n", (1 << channel));
  1251. case 5: /* temp1 & temp4 */
  1252. return sprintf(buf, "9\n");
  1253. case 6:
  1254. return sprintf(buf, "15\n");
  1255. default:
  1256. return sprintf(buf, "0\n");
  1257. }
  1258. }
  1259. static int cvt_auto_temp(int input)
  1260. {
  1261. if (input == 0xF)
  1262. return 6;
  1263. if (input == 0x9)
  1264. return 5;
  1265. if (input < 1 || !is_power_of_2(input))
  1266. return -EINVAL;
  1267. return ilog2(input);
  1268. }
  1269. static ssize_t set_pwm_auto_temp(struct device *dev,
  1270. struct device_attribute *devattr,
  1271. const char *buf,
  1272. size_t count)
  1273. {
  1274. struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr);
  1275. struct i2c_client *client = to_i2c_client(dev);
  1276. struct adt7462_data *data = i2c_get_clientdata(client);
  1277. long temp;
  1278. if (strict_strtol(buf, 10, &temp))
  1279. return -EINVAL;
  1280. temp = cvt_auto_temp(temp);
  1281. if (temp < 0)
  1282. return temp;
  1283. set_pwm_channel(client, data, attr->index, temp);
  1284. return count;
  1285. }
  1286. static SENSOR_DEVICE_ATTR(temp1_max, S_IWUSR | S_IRUGO, show_temp_max,
  1287. set_temp_max, 0);
  1288. static SENSOR_DEVICE_ATTR(temp2_max, S_IWUSR | S_IRUGO, show_temp_max,
  1289. set_temp_max, 1);
  1290. static SENSOR_DEVICE_ATTR(temp3_max, S_IWUSR | S_IRUGO, show_temp_max,
  1291. set_temp_max, 2);
  1292. static SENSOR_DEVICE_ATTR(temp4_max, S_IWUSR | S_IRUGO, show_temp_max,
  1293. set_temp_max, 3);
  1294. static SENSOR_DEVICE_ATTR(temp1_min, S_IWUSR | S_IRUGO, show_temp_min,
  1295. set_temp_min, 0);
  1296. static SENSOR_DEVICE_ATTR(temp2_min, S_IWUSR | S_IRUGO, show_temp_min,
  1297. set_temp_min, 1);
  1298. static SENSOR_DEVICE_ATTR(temp3_min, S_IWUSR | S_IRUGO, show_temp_min,
  1299. set_temp_min, 2);
  1300. static SENSOR_DEVICE_ATTR(temp4_min, S_IWUSR | S_IRUGO, show_temp_min,
  1301. set_temp_min, 3);
  1302. static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);
  1303. static SENSOR_DEVICE_ATTR(temp2_input, S_IRUGO, show_temp, NULL, 1);
  1304. static SENSOR_DEVICE_ATTR(temp3_input, S_IRUGO, show_temp, NULL, 2);
  1305. static SENSOR_DEVICE_ATTR(temp4_input, S_IRUGO, show_temp, NULL, 3);
  1306. static SENSOR_DEVICE_ATTR(temp1_label, S_IRUGO, show_temp_label, NULL, 0);
  1307. static SENSOR_DEVICE_ATTR(temp2_label, S_IRUGO, show_temp_label, NULL, 1);
  1308. static SENSOR_DEVICE_ATTR(temp3_label, S_IRUGO, show_temp_label, NULL, 2);
  1309. static SENSOR_DEVICE_ATTR(temp4_label, S_IRUGO, show_temp_label, NULL, 3);
  1310. static SENSOR_DEVICE_ATTR(temp1_alarm, S_IRUGO, show_alarm, NULL,
  1311. ADT7462_ALARM1 | ADT7462_LT_ALARM);
  1312. static SENSOR_DEVICE_ATTR(temp2_alarm, S_IRUGO, show_alarm, NULL,
  1313. ADT7462_ALARM1 | ADT7462_R1T_ALARM);
  1314. static SENSOR_DEVICE_ATTR(temp3_alarm, S_IRUGO, show_alarm, NULL,
  1315. ADT7462_ALARM1 | ADT7462_R2T_ALARM);
  1316. static SENSOR_DEVICE_ATTR(temp4_alarm, S_IRUGO, show_alarm, NULL,
  1317. ADT7462_ALARM1 | ADT7462_R3T_ALARM);
  1318. static SENSOR_DEVICE_ATTR(in1_max, S_IWUSR | S_IRUGO, show_volt_max,
  1319. set_volt_max, 0);
  1320. static SENSOR_DEVICE_ATTR(in2_max, S_IWUSR | S_IRUGO, show_volt_max,
  1321. set_volt_max, 1);
  1322. static SENSOR_DEVICE_ATTR(in3_max, S_IWUSR | S_IRUGO, show_volt_max,
  1323. set_volt_max, 2);
  1324. static SENSOR_DEVICE_ATTR(in4_max, S_IWUSR | S_IRUGO, show_volt_max,
  1325. set_volt_max, 3);
  1326. static SENSOR_DEVICE_ATTR(in5_max, S_IWUSR | S_IRUGO, show_volt_max,
  1327. set_volt_max, 4);
  1328. static SENSOR_DEVICE_ATTR(in6_max, S_IWUSR | S_IRUGO, show_volt_max,
  1329. set_volt_max, 5);
  1330. static SENSOR_DEVICE_ATTR(in7_max, S_IWUSR | S_IRUGO, show_volt_max,
  1331. set_volt_max, 6);
  1332. static SENSOR_DEVICE_ATTR(in8_max, S_IWUSR | S_IRUGO, show_volt_max,
  1333. set_volt_max, 7);
  1334. static SENSOR_DEVICE_ATTR(in9_max, S_IWUSR | S_IRUGO, show_volt_max,
  1335. set_volt_max, 8);
  1336. static SENSOR_DEVICE_ATTR(in10_max, S_IWUSR | S_IRUGO, show_volt_max,
  1337. set_volt_max, 9);
  1338. static SENSOR_DEVICE_ATTR(in11_max, S_IWUSR | S_IRUGO, show_volt_max,
  1339. set_volt_max, 10);
  1340. static SENSOR_DEVICE_ATTR(in12_max, S_IWUSR | S_IRUGO, show_volt_max,
  1341. set_volt_max, 11);
  1342. static SENSOR_DEVICE_ATTR(in13_max, S_IWUSR | S_IRUGO, show_volt_max,
  1343. set_volt_max, 12);
  1344. static SENSOR_DEVICE_ATTR(in1_min, S_IWUSR | S_IRUGO, show_volt_min,
  1345. set_volt_min, 0);
  1346. static SENSOR_DEVICE_ATTR(in2_min, S_IWUSR | S_IRUGO, show_volt_min,
  1347. set_volt_min, 1);
  1348. static SENSOR_DEVICE_ATTR(in3_min, S_IWUSR | S_IRUGO, show_volt_min,
  1349. set_volt_min, 2);
  1350. static SENSOR_DEVICE_ATTR(in4_min, S_IWUSR | S_IRUGO, show_volt_min,
  1351. set_volt_min, 3);
  1352. static SENSOR_DEVICE_ATTR(in5_min, S_IWUSR | S_IRUGO, show_volt_min,
  1353. set_volt_min, 4);
  1354. static SENSOR_DEVICE_ATTR(in6_min, S_IWUSR | S_IRUGO, show_volt_min,
  1355. set_volt_min, 5);
  1356. static SENSOR_DEVICE_ATTR(in7_min, S_IWUSR | S_IRUGO, show_volt_min,
  1357. set_volt_min, 6);
  1358. static SENSOR_DEVICE_ATTR(in8_min, S_IWUSR | S_IRUGO, show_volt_min,
  1359. set_volt_min, 7);
  1360. static SENSOR_DEVICE_ATTR(in9_min, S_IWUSR | S_IRUGO, show_volt_min,
  1361. set_volt_min, 8);
  1362. static SENSOR_DEVICE_ATTR(in10_min, S_IWUSR | S_IRUGO, show_volt_min,
  1363. set_volt_min, 9);
  1364. static SENSOR_DEVICE_ATTR(in11_min, S_IWUSR | S_IRUGO, show_volt_min,
  1365. set_volt_min, 10);
  1366. static SENSOR_DEVICE_ATTR(in12_min, S_IWUSR | S_IRUGO, show_volt_min,
  1367. set_volt_min, 11);
  1368. static SENSOR_DEVICE_ATTR(in13_min, S_IWUSR | S_IRUGO, show_volt_min,
  1369. set_volt_min, 12);
  1370. static SENSOR_DEVICE_ATTR(in1_input, S_IRUGO, show_voltage, NULL, 0);
  1371. static SENSOR_DEVICE_ATTR(in2_input, S_IRUGO, show_voltage, NULL, 1);
  1372. static SENSOR_DEVICE_ATTR(in3_input, S_IRUGO, show_voltage, NULL, 2);
  1373. static SENSOR_DEVICE_ATTR(in4_input, S_IRUGO, show_voltage, NULL, 3);
  1374. static SENSOR_DEVICE_ATTR(in5_input, S_IRUGO, show_voltage, NULL, 4);
  1375. static SENSOR_DEVICE_ATTR(in6_input, S_IRUGO, show_voltage, NULL, 5);
  1376. static SENSOR_DEVICE_ATTR(in7_input, S_IRUGO, show_voltage, NULL, 6);
  1377. static SENSOR_DEVICE_ATTR(in8_input, S_IRUGO, show_voltage, NULL, 7);
  1378. static SENSOR_DEVICE_ATTR(in9_input, S_IRUGO, show_voltage, NULL, 8);
  1379. static SENSOR_DEVICE_ATTR(in10_input, S_IRUGO, show_voltage, NULL, 9);
  1380. static SENSOR_DEVICE_ATTR(in11_input, S_IRUGO, show_voltage, NULL, 10);
  1381. static SENSOR_DEVICE_ATTR(in12_input, S_IRUGO, show_voltage, NULL, 11);
  1382. static SENSOR_DEVICE_ATTR(in13_input, S_IRUGO, show_voltage, NULL, 12);
  1383. static SENSOR_DEVICE_ATTR(in1_label, S_IRUGO, show_voltage_label, NULL, 0);
  1384. static SENSOR_DEVICE_ATTR(in2_label, S_IRUGO, show_voltage_label, NULL, 1);
  1385. static SENSOR_DEVICE_ATTR(in3_label, S_IRUGO, show_voltage_label, NULL, 2);
  1386. static SENSOR_DEVICE_ATTR(in4_label, S_IRUGO, show_voltage_label, NULL, 3);
  1387. static SENSOR_DEVICE_ATTR(in5_label, S_IRUGO, show_voltage_label, NULL, 4);
  1388. static SENSOR_DEVICE_ATTR(in6_label, S_IRUGO, show_voltage_label, NULL, 5);
  1389. static SENSOR_DEVICE_ATTR(in7_label, S_IRUGO, show_voltage_label, NULL, 6);
  1390. static SENSOR_DEVICE_ATTR(in8_label, S_IRUGO, show_voltage_label, NULL, 7);
  1391. static SENSOR_DEVICE_ATTR(in9_label, S_IRUGO, show_voltage_label, NULL, 8);
  1392. static SENSOR_DEVICE_ATTR(in10_label, S_IRUGO, show_voltage_label, NULL, 9);
  1393. static SENSOR_DEVICE_ATTR(in11_label, S_IRUGO, show_voltage_label, NULL, 10);
  1394. static SENSOR_DEVICE_ATTR(in12_label, S_IRUGO, show_voltage_label, NULL, 11);
  1395. static SENSOR_DEVICE_ATTR(in13_label, S_IRUGO, show_voltage_label, NULL, 12);
  1396. static SENSOR_DEVICE_ATTR(in1_alarm, S_IRUGO, show_alarm, NULL,
  1397. ADT7462_ALARM2 | ADT7462_V0_ALARM);
  1398. static SENSOR_DEVICE_ATTR(in2_alarm, S_IRUGO, show_alarm, NULL,
  1399. ADT7462_ALARM2 | ADT7462_V7_ALARM);
  1400. static SENSOR_DEVICE_ATTR(in3_alarm, S_IRUGO, show_alarm, NULL,
  1401. ADT7462_ALARM2 | ADT7462_V2_ALARM);
  1402. static SENSOR_DEVICE_ATTR(in4_alarm, S_IRUGO, show_alarm, NULL,
  1403. ADT7462_ALARM2 | ADT7462_V6_ALARM);
  1404. static SENSOR_DEVICE_ATTR(in5_alarm, S_IRUGO, show_alarm, NULL,
  1405. ADT7462_ALARM2 | ADT7462_V5_ALARM);
  1406. static SENSOR_DEVICE_ATTR(in6_alarm, S_IRUGO, show_alarm, NULL,
  1407. ADT7462_ALARM2 | ADT7462_V4_ALARM);
  1408. static SENSOR_DEVICE_ATTR(in7_alarm, S_IRUGO, show_alarm, NULL,
  1409. ADT7462_ALARM2 | ADT7462_V3_ALARM);
  1410. static SENSOR_DEVICE_ATTR(in8_alarm, S_IRUGO, show_alarm, NULL,
  1411. ADT7462_ALARM2 | ADT7462_V1_ALARM);
  1412. static SENSOR_DEVICE_ATTR(in9_alarm, S_IRUGO, show_alarm, NULL,
  1413. ADT7462_ALARM3 | ADT7462_V10_ALARM);
  1414. static SENSOR_DEVICE_ATTR(in10_alarm, S_IRUGO, show_alarm, NULL,
  1415. ADT7462_ALARM3 | ADT7462_V9_ALARM);
  1416. static SENSOR_DEVICE_ATTR(in11_alarm, S_IRUGO, show_alarm, NULL,
  1417. ADT7462_ALARM3 | ADT7462_V8_ALARM);
  1418. static SENSOR_DEVICE_ATTR(in12_alarm, S_IRUGO, show_alarm, NULL,
  1419. ADT7462_ALARM3 | ADT7462_V11_ALARM);
  1420. static SENSOR_DEVICE_ATTR(in13_alarm, S_IRUGO, show_alarm, NULL,
  1421. ADT7462_ALARM3 | ADT7462_V12_ALARM);
  1422. static SENSOR_DEVICE_ATTR(fan1_min, S_IWUSR | S_IRUGO, show_fan_min,
  1423. set_fan_min, 0);
  1424. static SENSOR_DEVICE_ATTR(fan2_min, S_IWUSR | S_IRUGO, show_fan_min,
  1425. set_fan_min, 1);
  1426. static SENSOR_DEVICE_ATTR(fan3_min, S_IWUSR | S_IRUGO, show_fan_min,
  1427. set_fan_min, 2);
  1428. static SENSOR_DEVICE_ATTR(fan4_min, S_IWUSR | S_IRUGO, show_fan_min,
  1429. set_fan_min, 3);
  1430. static SENSOR_DEVICE_ATTR(fan5_min, S_IWUSR | S_IRUGO, show_fan_min,
  1431. set_fan_min, 4);
  1432. static SENSOR_DEVICE_ATTR(fan6_min, S_IWUSR | S_IRUGO, show_fan_min,
  1433. set_fan_min, 5);
  1434. static SENSOR_DEVICE_ATTR(fan7_min, S_IWUSR | S_IRUGO, show_fan_min,
  1435. set_fan_min, 6);
  1436. static SENSOR_DEVICE_ATTR(fan8_min, S_IWUSR | S_IRUGO, show_fan_min,
  1437. set_fan_min, 7);
  1438. static SENSOR_DEVICE_ATTR(fan1_input, S_IRUGO, show_fan, NULL, 0);
  1439. static SENSOR_DEVICE_ATTR(fan2_input, S_IRUGO, show_fan, NULL, 1);
  1440. static SENSOR_DEVICE_ATTR(fan3_input, S_IRUGO, show_fan, NULL, 2);
  1441. static SENSOR_DEVICE_ATTR(fan4_input, S_IRUGO, show_fan, NULL, 3);
  1442. static SENSOR_DEVICE_ATTR(fan5_input, S_IRUGO, show_fan, NULL, 4);
  1443. static SENSOR_DEVICE_ATTR(fan6_input, S_IRUGO, show_fan, NULL, 5);
  1444. static SENSOR_DEVICE_ATTR(fan7_input, S_IRUGO, show_fan, NULL, 6);
  1445. static SENSOR_DEVICE_ATTR(fan8_input, S_IRUGO, show_fan, NULL, 7);
  1446. static SENSOR_DEVICE_ATTR(fan1_alarm, S_IRUGO, show_alarm, NULL,
  1447. ADT7462_ALARM4 | ADT7462_F0_ALARM);
  1448. static SENSOR_DEVICE_ATTR(fan2_alarm, S_IRUGO, show_alarm, NULL,
  1449. ADT7462_ALARM4 | ADT7462_F1_ALARM);
  1450. static SENSOR_DEVICE_ATTR(fan3_alarm, S_IRUGO, show_alarm, NULL,
  1451. ADT7462_ALARM4 | ADT7462_F2_ALARM);
  1452. static SENSOR_DEVICE_ATTR(fan4_alarm, S_IRUGO, show_alarm, NULL,
  1453. ADT7462_ALARM4 | ADT7462_F3_ALARM);
  1454. static SENSOR_DEVICE_ATTR(fan5_alarm, S_IRUGO, show_alarm, NULL,
  1455. ADT7462_ALARM4 | ADT7462_F4_ALARM);
  1456. static SENSOR_DEVICE_ATTR(fan6_alarm, S_IRUGO, show_alarm, NULL,
  1457. ADT7462_ALARM4 | ADT7462_F5_ALARM);
  1458. static SENSOR_DEVICE_ATTR(fan7_alarm, S_IRUGO, show_alarm, NULL,
  1459. ADT7462_ALARM4 | ADT7462_F6_ALARM);
  1460. static SENSOR_DEVICE_ATTR(fan8_alarm, S_IRUGO, show_alarm, NULL,
  1461. ADT7462_ALARM4 | ADT7462_F7_ALARM);
  1462. static SENSOR_DEVICE_ATTR(force_pwm_max, S_IWUSR | S_IRUGO,
  1463. show_force_pwm_max, set_force_pwm_max, 0);
  1464. static SENSOR_DEVICE_ATTR(pwm1, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 0);
  1465. static SENSOR_DEVICE_ATTR(pwm2, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 1);
  1466. static SENSOR_DEVICE_ATTR(pwm3, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 2);
  1467. static SENSOR_DEVICE_ATTR(pwm4, S_IWUSR | S_IRUGO, show_pwm, set_pwm, 3);
  1468. static SENSOR_DEVICE_ATTR(pwm1_auto_point1_pwm, S_IWUSR | S_IRUGO,
  1469. show_pwm_min, set_pwm_min, 0);
  1470. static SENSOR_DEVICE_ATTR(pwm2_auto_point1_pwm, S_IWUSR | S_IRUGO,
  1471. show_pwm_min, set_pwm_min, 1);
  1472. static SENSOR_DEVICE_ATTR(pwm3_auto_point1_pwm, S_IWUSR | S_IRUGO,
  1473. show_pwm_min, set_pwm_min, 2);
  1474. static SENSOR_DEVICE_ATTR(pwm4_auto_point1_pwm, S_IWUSR | S_IRUGO,
  1475. show_pwm_min, set_pwm_min, 3);
  1476. static SENSOR_DEVICE_ATTR(pwm1_auto_point2_pwm, S_IWUSR | S_IRUGO,
  1477. show_pwm_max, set_pwm_max, 0);
  1478. static SENSOR_DEVICE_ATTR(pwm2_auto_point2_pwm, S_IWUSR | S_IRUGO,
  1479. show_pwm_max, set_pwm_max, 1);
  1480. static SENSOR_DEVICE_ATTR(pwm3_auto_point2_pwm, S_IWUSR | S_IRUGO,
  1481. show_pwm_max, set_pwm_max, 2);
  1482. static SENSOR_DEVICE_ATTR(pwm4_auto_point2_pwm, S_IWUSR | S_IRUGO,
  1483. show_pwm_max, set_pwm_max, 3);
  1484. static SENSOR_DEVICE_ATTR(temp1_auto_point1_hyst, S_IWUSR | S_IRUGO,
  1485. show_pwm_hyst, set_pwm_hyst, 0);
  1486. static SENSOR_DEVICE_ATTR(temp2_auto_point1_hyst, S_IWUSR | S_IRUGO,
  1487. show_pwm_hyst, set_pwm_hyst, 1);
  1488. static SENSOR_DEVICE_ATTR(temp3_auto_point1_hyst, S_IWUSR | S_IRUGO,
  1489. show_pwm_hyst, set_pwm_hyst, 2);
  1490. static SENSOR_DEVICE_ATTR(temp4_auto_point1_hyst, S_IWUSR | S_IRUGO,
  1491. show_pwm_hyst, set_pwm_hyst, 3);
  1492. static SENSOR_DEVICE_ATTR(temp1_auto_point2_hyst, S_IWUSR | S_IRUGO,
  1493. show_pwm_hyst, set_pwm_hyst, 0);
  1494. static SENSOR_DEVICE_ATTR(temp2_auto_point2_hyst, S_IWUSR | S_IRUGO,
  1495. show_pwm_hyst, set_pwm_hyst, 1);
  1496. static SENSOR_DEVICE_ATTR(temp3_auto_point2_hyst, S_IWUSR | S_IRUGO,
  1497. show_pwm_hyst, set_pwm_hyst, 2);
  1498. static SENSOR_DEVICE_ATTR(temp4_auto_point2_hyst, S_IWUSR | S_IRUGO,
  1499. show_pwm_hyst, set_pwm_hyst, 3);
  1500. static SENSOR_DEVICE_ATTR(temp1_auto_point1_temp, S_IWUSR | S_IRUGO,
  1501. show_pwm_tmin, set_pwm_tmin, 0);
  1502. static SENSOR_DEVICE_ATTR(temp2_auto_point1_temp, S_IWUSR | S_IRUGO,
  1503. show_pwm_tmin, set_pwm_tmin, 1);
  1504. static SENSOR_DEVICE_ATTR(temp3_auto_point1_temp, S_IWUSR | S_IRUGO,
  1505. show_pwm_tmin, set_pwm_tmin, 2);
  1506. static SENSOR_DEVICE_ATTR(temp4_auto_point1_temp, S_IWUSR | S_IRUGO,
  1507. show_pwm_tmin, set_pwm_tmin, 3);
  1508. static SENSOR_DEVICE_ATTR(temp1_auto_point2_temp, S_IWUSR | S_IRUGO,
  1509. show_pwm_tmax, set_pwm_tmax, 0);
  1510. static SENSOR_DEVICE_ATTR(temp2_auto_point2_temp, S_IWUSR | S_IRUGO,
  1511. show_pwm_tmax, set_pwm_tmax, 1);
  1512. static SENSOR_DEVICE_ATTR(temp3_auto_point2_temp, S_IWUSR | S_IRUGO,
  1513. show_pwm_tmax, set_pwm_tmax, 2);
  1514. static SENSOR_DEVICE_ATTR(temp4_auto_point2_temp, S_IWUSR | S_IRUGO,
  1515. show_pwm_tmax, set_pwm_tmax, 3);
  1516. static SENSOR_DEVICE_ATTR(pwm1_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
  1517. set_pwm_auto, 0);
  1518. static SENSOR_DEVICE_ATTR(pwm2_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
  1519. set_pwm_auto, 1);
  1520. static SENSOR_DEVICE_ATTR(pwm3_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
  1521. set_pwm_auto, 2);
  1522. static SENSOR_DEVICE_ATTR(pwm4_enable, S_IWUSR | S_IRUGO, show_pwm_auto,
  1523. set_pwm_auto, 3);
  1524. static SENSOR_DEVICE_ATTR(pwm1_auto_channels_temp, S_IWUSR | S_IRUGO,
  1525. show_pwm_auto_temp, set_pwm_auto_temp, 0);
  1526. static SENSOR_DEVICE_ATTR(pwm2_auto_channels_temp, S_IWUSR | S_IRUGO,
  1527. show_pwm_auto_temp, set_pwm_auto_temp, 1);
  1528. static SENSOR_DEVICE_ATTR(pwm3_auto_channels_temp, S_IWUSR | S_IRUGO,
  1529. show_pwm_auto_temp, set_pwm_auto_temp, 2);
  1530. static SENSOR_DEVICE_ATTR(pwm4_auto_channels_temp, S_IWUSR | S_IRUGO,
  1531. show_pwm_auto_temp, set_pwm_auto_temp, 3);
  1532. static struct attribute *adt7462_attr[] =
  1533. {
  1534. &sensor_dev_attr_temp1_max.dev_attr.attr,
  1535. &sensor_dev_attr_temp2_max.dev_attr.attr,
  1536. &sensor_dev_attr_temp3_max.dev_attr.attr,
  1537. &sensor_dev_attr_temp4_max.dev_attr.attr,
  1538. &sensor_dev_attr_temp1_min.dev_attr.attr,
  1539. &sensor_dev_attr_temp2_min.dev_attr.attr,
  1540. &sensor_dev_attr_temp3_min.dev_attr.attr,
  1541. &sensor_dev_attr_temp4_min.dev_attr.attr,
  1542. &sensor_dev_attr_temp1_input.dev_attr.attr,
  1543. &sensor_dev_attr_temp2_input.dev_attr.attr,
  1544. &sensor_dev_attr_temp3_input.dev_attr.attr,
  1545. &sensor_dev_attr_temp4_input.dev_attr.attr,
  1546. &sensor_dev_attr_temp1_label.dev_attr.attr,
  1547. &sensor_dev_attr_temp2_label.dev_attr.attr,
  1548. &sensor_dev_attr_temp3_label.dev_attr.attr,
  1549. &sensor_dev_attr_temp4_label.dev_attr.attr,
  1550. &sensor_dev_attr_temp1_alarm.dev_attr.attr,
  1551. &sensor_dev_attr_temp2_alarm.dev_attr.attr,
  1552. &sensor_dev_attr_temp3_alarm.dev_attr.attr,
  1553. &sensor_dev_attr_temp4_alarm.dev_attr.attr,
  1554. &sensor_dev_attr_in1_max.dev_attr.attr,
  1555. &sensor_dev_attr_in2_max.dev_attr.attr,
  1556. &sensor_dev_attr_in3_max.dev_attr.attr,
  1557. &sensor_dev_attr_in4_max.dev_attr.attr,
  1558. &sensor_dev_attr_in5_max.dev_attr.attr,
  1559. &sensor_dev_attr_in6_max.dev_attr.attr,
  1560. &sensor_dev_attr_in7_max.dev_attr.attr,
  1561. &sensor_dev_attr_in8_max.dev_attr.attr,
  1562. &sensor_dev_attr_in9_max.dev_attr.attr,
  1563. &sensor_dev_attr_in10_max.dev_attr.attr,
  1564. &sensor_dev_attr_in11_max.dev_attr.attr,
  1565. &sensor_dev_attr_in12_max.dev_attr.attr,
  1566. &sensor_dev_attr_in13_max.dev_attr.attr,
  1567. &sensor_dev_attr_in1_min.dev_attr.attr,
  1568. &sensor_dev_attr_in2_min.dev_attr.attr,
  1569. &sensor_dev_attr_in3_min.dev_attr.attr,
  1570. &sensor_dev_attr_in4_min.dev_attr.attr,
  1571. &sensor_dev_attr_in5_min.dev_attr.attr,
  1572. &sensor_dev_attr_in6_min.dev_attr.attr,
  1573. &sensor_dev_attr_in7_min.dev_attr.attr,
  1574. &sensor_dev_attr_in8_min.dev_attr.attr,
  1575. &sensor_dev_attr_in9_min.dev_attr.attr,
  1576. &sensor_dev_attr_in10_min.dev_attr.attr,
  1577. &sensor_dev_attr_in11_min.dev_attr.attr,
  1578. &sensor_dev_attr_in12_min.dev_attr.attr,
  1579. &sensor_dev_attr_in13_min.dev_attr.attr,
  1580. &sensor_dev_attr_in1_input.dev_attr.attr,
  1581. &sensor_dev_attr_in2_input.dev_attr.attr,
  1582. &sensor_dev_attr_in3_input.dev_attr.attr,
  1583. &sensor_dev_attr_in4_input.dev_attr.attr,
  1584. &sensor_dev_attr_in5_input.dev_attr.attr,
  1585. &sensor_dev_attr_in6_input.dev_attr.attr,
  1586. &sensor_dev_attr_in7_input.dev_attr.attr,
  1587. &sensor_dev_attr_in8_input.dev_attr.attr,
  1588. &sensor_dev_attr_in9_input.dev_attr.attr,
  1589. &sensor_dev_attr_in10_input.dev_attr.attr,
  1590. &sensor_dev_attr_in11_input.dev_attr.attr,
  1591. &sensor_dev_attr_in12_input.dev_attr.attr,
  1592. &sensor_dev_attr_in13_input.dev_attr.attr,
  1593. &sensor_dev_attr_in1_label.dev_attr.attr,
  1594. &sensor_dev_attr_in2_label.dev_attr.attr,
  1595. &sensor_dev_attr_in3_label.dev_attr.attr,
  1596. &sensor_dev_attr_in4_label.dev_attr.attr,
  1597. &sensor_dev_attr_in5_label.dev_attr.attr,
  1598. &sensor_dev_attr_in6_label.dev_attr.attr,
  1599. &sensor_dev_attr_in7_label.dev_attr.attr,
  1600. &sensor_dev_attr_in8_label.dev_attr.attr,
  1601. &sensor_dev_attr_in9_label.dev_attr.attr,
  1602. &sensor_dev_attr_in10_label.dev_attr.attr,
  1603. &sensor_dev_attr_in11_label.dev_attr.attr,
  1604. &sensor_dev_attr_in12_label.dev_attr.attr,
  1605. &sensor_dev_attr_in13_label.dev_attr.attr,
  1606. &sensor_dev_attr_in1_alarm.dev_attr.attr,
  1607. &sensor_dev_attr_in2_alarm.dev_attr.attr,
  1608. &sensor_dev_attr_in3_alarm.dev_attr.attr,
  1609. &sensor_dev_attr_in4_alarm.dev_attr.attr,
  1610. &sensor_dev_attr_in5_alarm.dev_attr.attr,
  1611. &sensor_dev_attr_in6_alarm.dev_attr.attr,
  1612. &sensor_dev_attr_in7_alarm.dev_attr.attr,
  1613. &sensor_dev_attr_in8_alarm.dev_attr.attr,
  1614. &sensor_dev_attr_in9_alarm.dev_attr.attr,
  1615. &sensor_dev_attr_in10_alarm.dev_attr.attr,
  1616. &sensor_dev_attr_in11_alarm.dev_attr.attr,
  1617. &sensor_dev_attr_in12_alarm.dev_attr.attr,
  1618. &sensor_dev_attr_in13_alarm.dev_attr.attr,
  1619. &sensor_dev_attr_fan1_min.dev_attr.attr,
  1620. &sensor_dev_attr_fan2_min.dev_attr.attr,
  1621. &sensor_dev_attr_fan3_min.dev_attr.attr,
  1622. &sensor_dev_attr_fan4_min.dev_attr.attr,
  1623. &sensor_dev_attr_fan5_min.dev_attr.attr,
  1624. &sensor_dev_attr_fan6_min.dev_attr.attr,
  1625. &sensor_dev_attr_fan7_min.dev_attr.attr,
  1626. &sensor_dev_attr_fan8_min.dev_attr.attr,
  1627. &sensor_dev_attr_fan1_input.dev_attr.attr,
  1628. &sensor_dev_attr_fan2_input.dev_attr.attr,
  1629. &sensor_dev_attr_fan3_input.dev_attr.attr,
  1630. &sensor_dev_attr_fan4_input.dev_attr.attr,
  1631. &sensor_dev_attr_fan5_input.dev_attr.attr,
  1632. &sensor_dev_attr_fan6_input.dev_attr.attr,
  1633. &sensor_dev_attr_fan7_input.dev_attr.attr,
  1634. &sensor_dev_attr_fan8_input.dev_attr.attr,
  1635. &sensor_dev_attr_fan1_alarm.dev_attr.attr,
  1636. &sensor_dev_attr_fan2_alarm.dev_attr.attr,
  1637. &sensor_dev_attr_fan3_alarm.dev_attr.attr,
  1638. &sensor_dev_attr_fan4_alarm.dev_attr.attr,
  1639. &sensor_dev_attr_fan5_alarm.dev_attr.attr,
  1640. &sensor_dev_attr_fan6_alarm.dev_attr.attr,
  1641. &sensor_dev_attr_fan7_alarm.dev_attr.attr,
  1642. &sensor_dev_attr_fan8_alarm.dev_attr.attr,
  1643. &sensor_dev_attr_force_pwm_max.dev_attr.attr,
  1644. &sensor_dev_attr_pwm1.dev_attr.attr,
  1645. &sensor_dev_attr_pwm2.dev_attr.attr,
  1646. &sensor_dev_attr_pwm3.dev_attr.attr,
  1647. &sensor_dev_attr_pwm4.dev_attr.attr,
  1648. &sensor_dev_attr_pwm1_auto_point1_pwm.dev_attr.attr,
  1649. &sensor_dev_attr_pwm2_auto_point1_pwm.dev_attr.attr,
  1650. &sensor_dev_attr_pwm3_auto_point1_pwm.dev_attr.attr,
  1651. &sensor_dev_attr_pwm4_auto_point1_pwm.dev_attr.attr,
  1652. &sensor_dev_attr_pwm1_auto_point2_pwm.dev_attr.attr,
  1653. &sensor_dev_attr_pwm2_auto_point2_pwm.dev_attr.attr,
  1654. &sensor_dev_attr_pwm3_auto_point2_pwm.dev_attr.attr,
  1655. &sensor_dev_attr_pwm4_auto_point2_pwm.dev_attr.attr,
  1656. &sensor_dev_attr_temp1_auto_point1_hyst.dev_attr.attr,
  1657. &sensor_dev_attr_temp2_auto_point1_hyst.dev_attr.attr,
  1658. &sensor_dev_attr_temp3_auto_point1_hyst.dev_attr.attr,
  1659. &sensor_dev_attr_temp4_auto_point1_hyst.dev_attr.attr,
  1660. &sensor_dev_attr_temp1_auto_point2_hyst.dev_attr.attr,
  1661. &sensor_dev_attr_temp2_auto_point2_hyst.dev_attr.attr,
  1662. &sensor_dev_attr_temp3_auto_point2_hyst.dev_attr.attr,
  1663. &sensor_dev_attr_temp4_auto_point2_hyst.dev_attr.attr,
  1664. &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
  1665. &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
  1666. &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
  1667. &sensor_dev_attr_temp4_auto_point1_temp.dev_attr.attr,
  1668. &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
  1669. &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
  1670. &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
  1671. &sensor_dev_attr_temp4_auto_point2_temp.dev_attr.attr,
  1672. &sensor_dev_attr_pwm1_enable.dev_attr.attr,
  1673. &sensor_dev_attr_pwm2_enable.dev_attr.attr,
  1674. &sensor_dev_attr_pwm3_enable.dev_attr.attr,
  1675. &sensor_dev_attr_pwm4_enable.dev_attr.attr,
  1676. &sensor_dev_attr_pwm1_auto_channels_temp.dev_attr.attr,
  1677. &sensor_dev_attr_pwm2_auto_channels_temp.dev_attr.attr,
  1678. &sensor_dev_attr_pwm3_auto_channels_temp.dev_attr.attr,
  1679. &sensor_dev_attr_pwm4_auto_channels_temp.dev_attr.attr,
  1680. NULL
  1681. };
  1682. /* Return 0 if detection is successful, -ENODEV otherwise */
  1683. static int adt7462_detect(struct i2c_client *client, int kind,
  1684. struct i2c_board_info *info)
  1685. {
  1686. struct i2c_adapter *adapter = client->adapter;
  1687. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  1688. return -ENODEV;
  1689. if (kind <= 0) {
  1690. int vendor, device, revision;
  1691. vendor = i2c_smbus_read_byte_data(client, ADT7462_REG_VENDOR);
  1692. if (vendor != ADT7462_VENDOR)
  1693. return -ENODEV;
  1694. device = i2c_smbus_read_byte_data(client, ADT7462_REG_DEVICE);
  1695. if (device != ADT7462_DEVICE)
  1696. return -ENODEV;
  1697. revision = i2c_smbus_read_byte_data(client,
  1698. ADT7462_REG_REVISION);
  1699. if (revision != ADT7462_REVISION)
  1700. return -ENODEV;
  1701. } else
  1702. dev_dbg(&adapter->dev, "detection forced\n");
  1703. strlcpy(info->type, "adt7462", I2C_NAME_SIZE);
  1704. return 0;
  1705. }
  1706. static int adt7462_probe(struct i2c_client *client,
  1707. const struct i2c_device_id *id)
  1708. {
  1709. struct adt7462_data *data;
  1710. int err;
  1711. data = kzalloc(sizeof(struct adt7462_data), GFP_KERNEL);
  1712. if (!data) {
  1713. err = -ENOMEM;
  1714. goto exit;
  1715. }
  1716. i2c_set_clientdata(client, data);
  1717. mutex_init(&data->lock);
  1718. dev_info(&client->dev, "%s chip found\n", client->name);
  1719. /* Register sysfs hooks */
  1720. data->attrs.attrs = adt7462_attr;
  1721. err = sysfs_create_group(&client->dev.kobj, &data->attrs);
  1722. if (err)
  1723. goto exit_free;
  1724. data->hwmon_dev = hwmon_device_register(&client->dev);
  1725. if (IS_ERR(data->hwmon_dev)) {
  1726. err = PTR_ERR(data->hwmon_dev);
  1727. goto exit_remove;
  1728. }
  1729. return 0;
  1730. exit_remove:
  1731. sysfs_remove_group(&client->dev.kobj, &data->attrs);
  1732. exit_free:
  1733. kfree(data);
  1734. exit:
  1735. return err;
  1736. }
  1737. static int adt7462_remove(struct i2c_client *client)
  1738. {
  1739. struct adt7462_data *data = i2c_get_clientdata(client);
  1740. hwmon_device_unregister(data->hwmon_dev);
  1741. sysfs_remove_group(&client->dev.kobj, &data->attrs);
  1742. kfree(data);
  1743. return 0;
  1744. }
  1745. static int __init adt7462_init(void)
  1746. {
  1747. return i2c_add_driver(&adt7462_driver);
  1748. }
  1749. static void __exit adt7462_exit(void)
  1750. {
  1751. i2c_del_driver(&adt7462_driver);
  1752. }
  1753. MODULE_AUTHOR("Darrick J. Wong <djwong@us.ibm.com>");
  1754. MODULE_DESCRIPTION("ADT7462 driver");
  1755. MODULE_LICENSE("GPL");
  1756. module_init(adt7462_init);
  1757. module_exit(adt7462_exit);