adm1026.c 59 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * adm1026.c - Part of lm_sensors, Linux kernel modules for hardware
  4. * monitoring
  5. * Copyright (C) 2002, 2003 Philip Pokorny <[email protected]>
  6. * Copyright (C) 2004 Justin Thiessen <[email protected]>
  7. *
  8. * Chip details at:
  9. *
  10. * <https://www.onsemi.com/PowerSolutions/product.do?id=ADM1026>
  11. */
  12. #include <linux/module.h>
  13. #include <linux/init.h>
  14. #include <linux/slab.h>
  15. #include <linux/jiffies.h>
  16. #include <linux/i2c.h>
  17. #include <linux/hwmon.h>
  18. #include <linux/hwmon-sysfs.h>
  19. #include <linux/hwmon-vid.h>
  20. #include <linux/err.h>
  21. #include <linux/mutex.h>
  22. /* Addresses to scan */
  23. static const unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, I2C_CLIENT_END };
  24. static int gpio_input[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1,
  25. -1, -1, -1, -1, -1, -1, -1, -1 };
  26. static int gpio_output[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1,
  27. -1, -1, -1, -1, -1, -1, -1, -1 };
  28. static int gpio_inverted[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1,
  29. -1, -1, -1, -1, -1, -1, -1, -1 };
  30. static int gpio_normal[17] = { -1, -1, -1, -1, -1, -1, -1, -1, -1,
  31. -1, -1, -1, -1, -1, -1, -1, -1 };
  32. static int gpio_fan[8] = { -1, -1, -1, -1, -1, -1, -1, -1 };
  33. module_param_array(gpio_input, int, NULL, 0);
  34. MODULE_PARM_DESC(gpio_input, "List of GPIO pins (0-16) to program as inputs");
  35. module_param_array(gpio_output, int, NULL, 0);
  36. MODULE_PARM_DESC(gpio_output,
  37. "List of GPIO pins (0-16) to program as outputs");
  38. module_param_array(gpio_inverted, int, NULL, 0);
  39. MODULE_PARM_DESC(gpio_inverted,
  40. "List of GPIO pins (0-16) to program as inverted");
  41. module_param_array(gpio_normal, int, NULL, 0);
  42. MODULE_PARM_DESC(gpio_normal,
  43. "List of GPIO pins (0-16) to program as normal/non-inverted");
  44. module_param_array(gpio_fan, int, NULL, 0);
  45. MODULE_PARM_DESC(gpio_fan, "List of GPIO pins (0-7) to program as fan tachs");
  46. /* Many ADM1026 constants specified below */
  47. /* The ADM1026 registers */
  48. #define ADM1026_REG_CONFIG1 0x00
  49. #define CFG1_MONITOR 0x01
  50. #define CFG1_INT_ENABLE 0x02
  51. #define CFG1_INT_CLEAR 0x04
  52. #define CFG1_AIN8_9 0x08
  53. #define CFG1_THERM_HOT 0x10
  54. #define CFG1_DAC_AFC 0x20
  55. #define CFG1_PWM_AFC 0x40
  56. #define CFG1_RESET 0x80
  57. #define ADM1026_REG_CONFIG2 0x01
  58. /* CONFIG2 controls FAN0/GPIO0 through FAN7/GPIO7 */
  59. #define ADM1026_REG_CONFIG3 0x07
  60. #define CFG3_GPIO16_ENABLE 0x01
  61. #define CFG3_CI_CLEAR 0x02
  62. #define CFG3_VREF_250 0x04
  63. #define CFG3_GPIO16_DIR 0x40
  64. #define CFG3_GPIO16_POL 0x80
  65. #define ADM1026_REG_E2CONFIG 0x13
  66. #define E2CFG_READ 0x01
  67. #define E2CFG_WRITE 0x02
  68. #define E2CFG_ERASE 0x04
  69. #define E2CFG_ROM 0x08
  70. #define E2CFG_CLK_EXT 0x80
  71. /*
  72. * There are 10 general analog inputs and 7 dedicated inputs
  73. * They are:
  74. * 0 - 9 = AIN0 - AIN9
  75. * 10 = Vbat
  76. * 11 = 3.3V Standby
  77. * 12 = 3.3V Main
  78. * 13 = +5V
  79. * 14 = Vccp (CPU core voltage)
  80. * 15 = +12V
  81. * 16 = -12V
  82. */
  83. static u16 ADM1026_REG_IN[] = {
  84. 0x30, 0x31, 0x32, 0x33, 0x34, 0x35,
  85. 0x36, 0x37, 0x27, 0x29, 0x26, 0x2a,
  86. 0x2b, 0x2c, 0x2d, 0x2e, 0x2f
  87. };
  88. static u16 ADM1026_REG_IN_MIN[] = {
  89. 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d,
  90. 0x5e, 0x5f, 0x6d, 0x49, 0x6b, 0x4a,
  91. 0x4b, 0x4c, 0x4d, 0x4e, 0x4f
  92. };
  93. static u16 ADM1026_REG_IN_MAX[] = {
  94. 0x50, 0x51, 0x52, 0x53, 0x54, 0x55,
  95. 0x56, 0x57, 0x6c, 0x41, 0x6a, 0x42,
  96. 0x43, 0x44, 0x45, 0x46, 0x47
  97. };
  98. /*
  99. * Temperatures are:
  100. * 0 - Internal
  101. * 1 - External 1
  102. * 2 - External 2
  103. */
  104. static u16 ADM1026_REG_TEMP[] = { 0x1f, 0x28, 0x29 };
  105. static u16 ADM1026_REG_TEMP_MIN[] = { 0x69, 0x48, 0x49 };
  106. static u16 ADM1026_REG_TEMP_MAX[] = { 0x68, 0x40, 0x41 };
  107. static u16 ADM1026_REG_TEMP_TMIN[] = { 0x10, 0x11, 0x12 };
  108. static u16 ADM1026_REG_TEMP_THERM[] = { 0x0d, 0x0e, 0x0f };
  109. static u16 ADM1026_REG_TEMP_OFFSET[] = { 0x1e, 0x6e, 0x6f };
  110. #define ADM1026_REG_FAN(nr) (0x38 + (nr))
  111. #define ADM1026_REG_FAN_MIN(nr) (0x60 + (nr))
  112. #define ADM1026_REG_FAN_DIV_0_3 0x02
  113. #define ADM1026_REG_FAN_DIV_4_7 0x03
  114. #define ADM1026_REG_DAC 0x04
  115. #define ADM1026_REG_PWM 0x05
  116. #define ADM1026_REG_GPIO_CFG_0_3 0x08
  117. #define ADM1026_REG_GPIO_CFG_4_7 0x09
  118. #define ADM1026_REG_GPIO_CFG_8_11 0x0a
  119. #define ADM1026_REG_GPIO_CFG_12_15 0x0b
  120. /* CFG_16 in REG_CFG3 */
  121. #define ADM1026_REG_GPIO_STATUS_0_7 0x24
  122. #define ADM1026_REG_GPIO_STATUS_8_15 0x25
  123. /* STATUS_16 in REG_STATUS4 */
  124. #define ADM1026_REG_GPIO_MASK_0_7 0x1c
  125. #define ADM1026_REG_GPIO_MASK_8_15 0x1d
  126. /* MASK_16 in REG_MASK4 */
  127. #define ADM1026_REG_COMPANY 0x16
  128. #define ADM1026_REG_VERSTEP 0x17
  129. /* These are the recognized values for the above regs */
  130. #define ADM1026_COMPANY_ANALOG_DEV 0x41
  131. #define ADM1026_VERSTEP_GENERIC 0x40
  132. #define ADM1026_VERSTEP_ADM1026 0x44
  133. #define ADM1026_REG_MASK1 0x18
  134. #define ADM1026_REG_MASK2 0x19
  135. #define ADM1026_REG_MASK3 0x1a
  136. #define ADM1026_REG_MASK4 0x1b
  137. #define ADM1026_REG_STATUS1 0x20
  138. #define ADM1026_REG_STATUS2 0x21
  139. #define ADM1026_REG_STATUS3 0x22
  140. #define ADM1026_REG_STATUS4 0x23
  141. #define ADM1026_FAN_ACTIVATION_TEMP_HYST -6
  142. #define ADM1026_FAN_CONTROL_TEMP_RANGE 20
  143. #define ADM1026_PWM_MAX 255
  144. /*
  145. * Conversions. Rounding and limit checking is only done on the TO_REG
  146. * variants. Note that you should be a bit careful with which arguments
  147. * these macros are called: arguments may be evaluated more than once.
  148. */
  149. /*
  150. * IN are scaled according to built-in resistors. These are the
  151. * voltages corresponding to 3/4 of full scale (192 or 0xc0)
  152. * NOTE: The -12V input needs an additional factor to account
  153. * for the Vref pullup resistor.
  154. * NEG12_OFFSET = SCALE * Vref / V-192 - Vref
  155. * = 13875 * 2.50 / 1.875 - 2500
  156. * = 16000
  157. *
  158. * The values in this table are based on Table II, page 15 of the
  159. * datasheet.
  160. */
  161. static int adm1026_scaling[] = { /* .001 Volts */
  162. 2250, 2250, 2250, 2250, 2250, 2250,
  163. 1875, 1875, 1875, 1875, 3000, 3330,
  164. 3330, 4995, 2250, 12000, 13875
  165. };
  166. #define NEG12_OFFSET 16000
  167. #define SCALE(val, from, to) (((val)*(to) + ((from)/2))/(from))
  168. #define INS_TO_REG(n, val) \
  169. SCALE(clamp_val(val, 0, 255 * adm1026_scaling[n] / 192), \
  170. adm1026_scaling[n], 192)
  171. #define INS_FROM_REG(n, val) (SCALE(val, 192, adm1026_scaling[n]))
  172. /*
  173. * FAN speed is measured using 22.5kHz clock and counts for 2 pulses
  174. * and we assume a 2 pulse-per-rev fan tach signal
  175. * 22500 kHz * 60 (sec/min) * 2 (pulse) / 2 (pulse/rev) == 1350000
  176. */
  177. #define FAN_TO_REG(val, div) ((val) <= 0 ? 0xff : \
  178. clamp_val(1350000 / ((val) * (div)), \
  179. 1, 254))
  180. #define FAN_FROM_REG(val, div) ((val) == 0 ? -1 : (val) == 0xff ? 0 : \
  181. 1350000 / ((val) * (div)))
  182. #define DIV_FROM_REG(val) (1 << (val))
  183. #define DIV_TO_REG(val) ((val) >= 8 ? 3 : (val) >= 4 ? 2 : (val) >= 2 ? 1 : 0)
  184. /* Temperature is reported in 1 degC increments */
  185. #define TEMP_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val(val, -128000, 127000), \
  186. 1000)
  187. #define TEMP_FROM_REG(val) ((val) * 1000)
  188. #define OFFSET_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val(val, -128000, 127000), \
  189. 1000)
  190. #define OFFSET_FROM_REG(val) ((val) * 1000)
  191. #define PWM_TO_REG(val) (clamp_val(val, 0, 255))
  192. #define PWM_FROM_REG(val) (val)
  193. #define PWM_MIN_TO_REG(val) ((val) & 0xf0)
  194. #define PWM_MIN_FROM_REG(val) (((val) & 0xf0) + ((val) >> 4))
  195. /*
  196. * Analog output is a voltage, and scaled to millivolts. The datasheet
  197. * indicates that the DAC could be used to drive the fans, but in our
  198. * example board (Arima HDAMA) it isn't connected to the fans at all.
  199. */
  200. #define DAC_TO_REG(val) DIV_ROUND_CLOSEST(clamp_val(val, 0, 2500) * 255, \
  201. 2500)
  202. #define DAC_FROM_REG(val) (((val) * 2500) / 255)
  203. /*
  204. * Chip sampling rates
  205. *
  206. * Some sensors are not updated more frequently than once per second
  207. * so it doesn't make sense to read them more often than that.
  208. * We cache the results and return the saved data if the driver
  209. * is called again before a second has elapsed.
  210. *
  211. * Also, there is significant configuration data for this chip
  212. * So, we keep the config data up to date in the cache
  213. * when it is written and only sample it once every 5 *minutes*
  214. */
  215. #define ADM1026_DATA_INTERVAL (1 * HZ)
  216. #define ADM1026_CONFIG_INTERVAL (5 * 60 * HZ)
  217. /*
  218. * We allow for multiple chips in a single system.
  219. *
  220. * For each registered ADM1026, we need to keep state information
  221. * at client->data. The adm1026_data structure is dynamically
  222. * allocated, when a new client structure is allocated.
  223. */
  224. struct pwm_data {
  225. u8 pwm;
  226. u8 enable;
  227. u8 auto_pwm_min;
  228. };
  229. struct adm1026_data {
  230. struct i2c_client *client;
  231. const struct attribute_group *groups[3];
  232. struct mutex update_lock;
  233. bool valid; /* true if following fields are valid */
  234. unsigned long last_reading; /* In jiffies */
  235. unsigned long last_config; /* In jiffies */
  236. u8 in[17]; /* Register value */
  237. u8 in_max[17]; /* Register value */
  238. u8 in_min[17]; /* Register value */
  239. s8 temp[3]; /* Register value */
  240. s8 temp_min[3]; /* Register value */
  241. s8 temp_max[3]; /* Register value */
  242. s8 temp_tmin[3]; /* Register value */
  243. s8 temp_crit[3]; /* Register value */
  244. s8 temp_offset[3]; /* Register value */
  245. u8 fan[8]; /* Register value */
  246. u8 fan_min[8]; /* Register value */
  247. u8 fan_div[8]; /* Decoded value */
  248. struct pwm_data pwm1; /* Pwm control values */
  249. u8 vrm; /* VRM version */
  250. u8 analog_out; /* Register value (DAC) */
  251. long alarms; /* Register encoding, combined */
  252. long alarm_mask; /* Register encoding, combined */
  253. long gpio; /* Register encoding, combined */
  254. long gpio_mask; /* Register encoding, combined */
  255. u8 gpio_config[17]; /* Decoded value */
  256. u8 config1; /* Register value */
  257. u8 config2; /* Register value */
  258. u8 config3; /* Register value */
  259. };
  260. static int adm1026_read_value(struct i2c_client *client, u8 reg)
  261. {
  262. int res;
  263. if (reg < 0x80) {
  264. /* "RAM" locations */
  265. res = i2c_smbus_read_byte_data(client, reg) & 0xff;
  266. } else {
  267. /* EEPROM, do nothing */
  268. res = 0;
  269. }
  270. return res;
  271. }
  272. static int adm1026_write_value(struct i2c_client *client, u8 reg, int value)
  273. {
  274. int res;
  275. if (reg < 0x80) {
  276. /* "RAM" locations */
  277. res = i2c_smbus_write_byte_data(client, reg, value);
  278. } else {
  279. /* EEPROM, do nothing */
  280. res = 0;
  281. }
  282. return res;
  283. }
  284. static struct adm1026_data *adm1026_update_device(struct device *dev)
  285. {
  286. struct adm1026_data *data = dev_get_drvdata(dev);
  287. struct i2c_client *client = data->client;
  288. int i;
  289. long value, alarms, gpio;
  290. mutex_lock(&data->update_lock);
  291. if (!data->valid
  292. || time_after(jiffies,
  293. data->last_reading + ADM1026_DATA_INTERVAL)) {
  294. /* Things that change quickly */
  295. dev_dbg(&client->dev, "Reading sensor values\n");
  296. for (i = 0; i <= 16; ++i) {
  297. data->in[i] =
  298. adm1026_read_value(client, ADM1026_REG_IN[i]);
  299. }
  300. for (i = 0; i <= 7; ++i) {
  301. data->fan[i] =
  302. adm1026_read_value(client, ADM1026_REG_FAN(i));
  303. }
  304. for (i = 0; i <= 2; ++i) {
  305. /*
  306. * NOTE: temp[] is s8 and we assume 2's complement
  307. * "conversion" in the assignment
  308. */
  309. data->temp[i] =
  310. adm1026_read_value(client, ADM1026_REG_TEMP[i]);
  311. }
  312. data->pwm1.pwm = adm1026_read_value(client,
  313. ADM1026_REG_PWM);
  314. data->analog_out = adm1026_read_value(client,
  315. ADM1026_REG_DAC);
  316. /* GPIO16 is MSbit of alarms, move it to gpio */
  317. alarms = adm1026_read_value(client, ADM1026_REG_STATUS4);
  318. gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */
  319. alarms &= 0x7f;
  320. alarms <<= 8;
  321. alarms |= adm1026_read_value(client, ADM1026_REG_STATUS3);
  322. alarms <<= 8;
  323. alarms |= adm1026_read_value(client, ADM1026_REG_STATUS2);
  324. alarms <<= 8;
  325. alarms |= adm1026_read_value(client, ADM1026_REG_STATUS1);
  326. data->alarms = alarms;
  327. /* Read the GPIO values */
  328. gpio |= adm1026_read_value(client,
  329. ADM1026_REG_GPIO_STATUS_8_15);
  330. gpio <<= 8;
  331. gpio |= adm1026_read_value(client,
  332. ADM1026_REG_GPIO_STATUS_0_7);
  333. data->gpio = gpio;
  334. data->last_reading = jiffies;
  335. } /* last_reading */
  336. if (!data->valid ||
  337. time_after(jiffies, data->last_config + ADM1026_CONFIG_INTERVAL)) {
  338. /* Things that don't change often */
  339. dev_dbg(&client->dev, "Reading config values\n");
  340. for (i = 0; i <= 16; ++i) {
  341. data->in_min[i] = adm1026_read_value(client,
  342. ADM1026_REG_IN_MIN[i]);
  343. data->in_max[i] = adm1026_read_value(client,
  344. ADM1026_REG_IN_MAX[i]);
  345. }
  346. value = adm1026_read_value(client, ADM1026_REG_FAN_DIV_0_3)
  347. | (adm1026_read_value(client, ADM1026_REG_FAN_DIV_4_7)
  348. << 8);
  349. for (i = 0; i <= 7; ++i) {
  350. data->fan_min[i] = adm1026_read_value(client,
  351. ADM1026_REG_FAN_MIN(i));
  352. data->fan_div[i] = DIV_FROM_REG(value & 0x03);
  353. value >>= 2;
  354. }
  355. for (i = 0; i <= 2; ++i) {
  356. /*
  357. * NOTE: temp_xxx[] are s8 and we assume 2's
  358. * complement "conversion" in the assignment
  359. */
  360. data->temp_min[i] = adm1026_read_value(client,
  361. ADM1026_REG_TEMP_MIN[i]);
  362. data->temp_max[i] = adm1026_read_value(client,
  363. ADM1026_REG_TEMP_MAX[i]);
  364. data->temp_tmin[i] = adm1026_read_value(client,
  365. ADM1026_REG_TEMP_TMIN[i]);
  366. data->temp_crit[i] = adm1026_read_value(client,
  367. ADM1026_REG_TEMP_THERM[i]);
  368. data->temp_offset[i] = adm1026_read_value(client,
  369. ADM1026_REG_TEMP_OFFSET[i]);
  370. }
  371. /* Read the STATUS/alarm masks */
  372. alarms = adm1026_read_value(client, ADM1026_REG_MASK4);
  373. gpio = alarms & 0x80 ? 0x0100 : 0; /* GPIO16 */
  374. alarms = (alarms & 0x7f) << 8;
  375. alarms |= adm1026_read_value(client, ADM1026_REG_MASK3);
  376. alarms <<= 8;
  377. alarms |= adm1026_read_value(client, ADM1026_REG_MASK2);
  378. alarms <<= 8;
  379. alarms |= adm1026_read_value(client, ADM1026_REG_MASK1);
  380. data->alarm_mask = alarms;
  381. /* Read the GPIO values */
  382. gpio |= adm1026_read_value(client,
  383. ADM1026_REG_GPIO_MASK_8_15);
  384. gpio <<= 8;
  385. gpio |= adm1026_read_value(client, ADM1026_REG_GPIO_MASK_0_7);
  386. data->gpio_mask = gpio;
  387. /* Read various values from CONFIG1 */
  388. data->config1 = adm1026_read_value(client,
  389. ADM1026_REG_CONFIG1);
  390. if (data->config1 & CFG1_PWM_AFC) {
  391. data->pwm1.enable = 2;
  392. data->pwm1.auto_pwm_min =
  393. PWM_MIN_FROM_REG(data->pwm1.pwm);
  394. }
  395. /* Read the GPIO config */
  396. data->config2 = adm1026_read_value(client,
  397. ADM1026_REG_CONFIG2);
  398. data->config3 = adm1026_read_value(client,
  399. ADM1026_REG_CONFIG3);
  400. data->gpio_config[16] = (data->config3 >> 6) & 0x03;
  401. value = 0;
  402. for (i = 0; i <= 15; ++i) {
  403. if ((i & 0x03) == 0) {
  404. value = adm1026_read_value(client,
  405. ADM1026_REG_GPIO_CFG_0_3 + i/4);
  406. }
  407. data->gpio_config[i] = value & 0x03;
  408. value >>= 2;
  409. }
  410. data->last_config = jiffies;
  411. } /* last_config */
  412. data->valid = true;
  413. mutex_unlock(&data->update_lock);
  414. return data;
  415. }
  416. static ssize_t in_show(struct device *dev, struct device_attribute *attr,
  417. char *buf)
  418. {
  419. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  420. int nr = sensor_attr->index;
  421. struct adm1026_data *data = adm1026_update_device(dev);
  422. return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in[nr]));
  423. }
  424. static ssize_t in_min_show(struct device *dev, struct device_attribute *attr,
  425. char *buf)
  426. {
  427. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  428. int nr = sensor_attr->index;
  429. struct adm1026_data *data = adm1026_update_device(dev);
  430. return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_min[nr]));
  431. }
  432. static ssize_t in_min_store(struct device *dev, struct device_attribute *attr,
  433. const char *buf, size_t count)
  434. {
  435. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  436. int nr = sensor_attr->index;
  437. struct adm1026_data *data = dev_get_drvdata(dev);
  438. struct i2c_client *client = data->client;
  439. long val;
  440. int err;
  441. err = kstrtol(buf, 10, &val);
  442. if (err)
  443. return err;
  444. mutex_lock(&data->update_lock);
  445. data->in_min[nr] = INS_TO_REG(nr, val);
  446. adm1026_write_value(client, ADM1026_REG_IN_MIN[nr], data->in_min[nr]);
  447. mutex_unlock(&data->update_lock);
  448. return count;
  449. }
  450. static ssize_t in_max_show(struct device *dev, struct device_attribute *attr,
  451. char *buf)
  452. {
  453. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  454. int nr = sensor_attr->index;
  455. struct adm1026_data *data = adm1026_update_device(dev);
  456. return sprintf(buf, "%d\n", INS_FROM_REG(nr, data->in_max[nr]));
  457. }
  458. static ssize_t in_max_store(struct device *dev, struct device_attribute *attr,
  459. const char *buf, size_t count)
  460. {
  461. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  462. int nr = sensor_attr->index;
  463. struct adm1026_data *data = dev_get_drvdata(dev);
  464. struct i2c_client *client = data->client;
  465. long val;
  466. int err;
  467. err = kstrtol(buf, 10, &val);
  468. if (err)
  469. return err;
  470. mutex_lock(&data->update_lock);
  471. data->in_max[nr] = INS_TO_REG(nr, val);
  472. adm1026_write_value(client, ADM1026_REG_IN_MAX[nr], data->in_max[nr]);
  473. mutex_unlock(&data->update_lock);
  474. return count;
  475. }
  476. static SENSOR_DEVICE_ATTR_RO(in0_input, in, 0);
  477. static SENSOR_DEVICE_ATTR_RW(in0_min, in_min, 0);
  478. static SENSOR_DEVICE_ATTR_RW(in0_max, in_max, 0);
  479. static SENSOR_DEVICE_ATTR_RO(in1_input, in, 1);
  480. static SENSOR_DEVICE_ATTR_RW(in1_min, in_min, 1);
  481. static SENSOR_DEVICE_ATTR_RW(in1_max, in_max, 1);
  482. static SENSOR_DEVICE_ATTR_RO(in2_input, in, 2);
  483. static SENSOR_DEVICE_ATTR_RW(in2_min, in_min, 2);
  484. static SENSOR_DEVICE_ATTR_RW(in2_max, in_max, 2);
  485. static SENSOR_DEVICE_ATTR_RO(in3_input, in, 3);
  486. static SENSOR_DEVICE_ATTR_RW(in3_min, in_min, 3);
  487. static SENSOR_DEVICE_ATTR_RW(in3_max, in_max, 3);
  488. static SENSOR_DEVICE_ATTR_RO(in4_input, in, 4);
  489. static SENSOR_DEVICE_ATTR_RW(in4_min, in_min, 4);
  490. static SENSOR_DEVICE_ATTR_RW(in4_max, in_max, 4);
  491. static SENSOR_DEVICE_ATTR_RO(in5_input, in, 5);
  492. static SENSOR_DEVICE_ATTR_RW(in5_min, in_min, 5);
  493. static SENSOR_DEVICE_ATTR_RW(in5_max, in_max, 5);
  494. static SENSOR_DEVICE_ATTR_RO(in6_input, in, 6);
  495. static SENSOR_DEVICE_ATTR_RW(in6_min, in_min, 6);
  496. static SENSOR_DEVICE_ATTR_RW(in6_max, in_max, 6);
  497. static SENSOR_DEVICE_ATTR_RO(in7_input, in, 7);
  498. static SENSOR_DEVICE_ATTR_RW(in7_min, in_min, 7);
  499. static SENSOR_DEVICE_ATTR_RW(in7_max, in_max, 7);
  500. static SENSOR_DEVICE_ATTR_RO(in8_input, in, 8);
  501. static SENSOR_DEVICE_ATTR_RW(in8_min, in_min, 8);
  502. static SENSOR_DEVICE_ATTR_RW(in8_max, in_max, 8);
  503. static SENSOR_DEVICE_ATTR_RO(in9_input, in, 9);
  504. static SENSOR_DEVICE_ATTR_RW(in9_min, in_min, 9);
  505. static SENSOR_DEVICE_ATTR_RW(in9_max, in_max, 9);
  506. static SENSOR_DEVICE_ATTR_RO(in10_input, in, 10);
  507. static SENSOR_DEVICE_ATTR_RW(in10_min, in_min, 10);
  508. static SENSOR_DEVICE_ATTR_RW(in10_max, in_max, 10);
  509. static SENSOR_DEVICE_ATTR_RO(in11_input, in, 11);
  510. static SENSOR_DEVICE_ATTR_RW(in11_min, in_min, 11);
  511. static SENSOR_DEVICE_ATTR_RW(in11_max, in_max, 11);
  512. static SENSOR_DEVICE_ATTR_RO(in12_input, in, 12);
  513. static SENSOR_DEVICE_ATTR_RW(in12_min, in_min, 12);
  514. static SENSOR_DEVICE_ATTR_RW(in12_max, in_max, 12);
  515. static SENSOR_DEVICE_ATTR_RO(in13_input, in, 13);
  516. static SENSOR_DEVICE_ATTR_RW(in13_min, in_min, 13);
  517. static SENSOR_DEVICE_ATTR_RW(in13_max, in_max, 13);
  518. static SENSOR_DEVICE_ATTR_RO(in14_input, in, 14);
  519. static SENSOR_DEVICE_ATTR_RW(in14_min, in_min, 14);
  520. static SENSOR_DEVICE_ATTR_RW(in14_max, in_max, 14);
  521. static SENSOR_DEVICE_ATTR_RO(in15_input, in, 15);
  522. static SENSOR_DEVICE_ATTR_RW(in15_min, in_min, 15);
  523. static SENSOR_DEVICE_ATTR_RW(in15_max, in_max, 15);
  524. static ssize_t in16_show(struct device *dev, struct device_attribute *attr,
  525. char *buf)
  526. {
  527. struct adm1026_data *data = adm1026_update_device(dev);
  528. return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in[16]) -
  529. NEG12_OFFSET);
  530. }
  531. static ssize_t in16_min_show(struct device *dev,
  532. struct device_attribute *attr, char *buf)
  533. {
  534. struct adm1026_data *data = adm1026_update_device(dev);
  535. return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in_min[16])
  536. - NEG12_OFFSET);
  537. }
  538. static ssize_t in16_min_store(struct device *dev,
  539. struct device_attribute *attr, const char *buf,
  540. size_t count)
  541. {
  542. struct adm1026_data *data = dev_get_drvdata(dev);
  543. struct i2c_client *client = data->client;
  544. long val;
  545. int err;
  546. err = kstrtol(buf, 10, &val);
  547. if (err)
  548. return err;
  549. mutex_lock(&data->update_lock);
  550. data->in_min[16] = INS_TO_REG(16,
  551. clamp_val(val, INT_MIN,
  552. INT_MAX - NEG12_OFFSET) +
  553. NEG12_OFFSET);
  554. adm1026_write_value(client, ADM1026_REG_IN_MIN[16], data->in_min[16]);
  555. mutex_unlock(&data->update_lock);
  556. return count;
  557. }
  558. static ssize_t in16_max_show(struct device *dev,
  559. struct device_attribute *attr, char *buf)
  560. {
  561. struct adm1026_data *data = adm1026_update_device(dev);
  562. return sprintf(buf, "%d\n", INS_FROM_REG(16, data->in_max[16])
  563. - NEG12_OFFSET);
  564. }
  565. static ssize_t in16_max_store(struct device *dev,
  566. struct device_attribute *attr, const char *buf,
  567. size_t count)
  568. {
  569. struct adm1026_data *data = dev_get_drvdata(dev);
  570. struct i2c_client *client = data->client;
  571. long val;
  572. int err;
  573. err = kstrtol(buf, 10, &val);
  574. if (err)
  575. return err;
  576. mutex_lock(&data->update_lock);
  577. data->in_max[16] = INS_TO_REG(16,
  578. clamp_val(val, INT_MIN,
  579. INT_MAX - NEG12_OFFSET) +
  580. NEG12_OFFSET);
  581. adm1026_write_value(client, ADM1026_REG_IN_MAX[16], data->in_max[16]);
  582. mutex_unlock(&data->update_lock);
  583. return count;
  584. }
  585. static SENSOR_DEVICE_ATTR_RO(in16_input, in16, 16);
  586. static SENSOR_DEVICE_ATTR_RW(in16_min, in16_min, 16);
  587. static SENSOR_DEVICE_ATTR_RW(in16_max, in16_max, 16);
  588. /* Now add fan read/write functions */
  589. static ssize_t fan_show(struct device *dev, struct device_attribute *attr,
  590. char *buf)
  591. {
  592. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  593. int nr = sensor_attr->index;
  594. struct adm1026_data *data = adm1026_update_device(dev);
  595. return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan[nr],
  596. data->fan_div[nr]));
  597. }
  598. static ssize_t fan_min_show(struct device *dev, struct device_attribute *attr,
  599. char *buf)
  600. {
  601. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  602. int nr = sensor_attr->index;
  603. struct adm1026_data *data = adm1026_update_device(dev);
  604. return sprintf(buf, "%d\n", FAN_FROM_REG(data->fan_min[nr],
  605. data->fan_div[nr]));
  606. }
  607. static ssize_t fan_min_store(struct device *dev,
  608. struct device_attribute *attr, const char *buf,
  609. size_t count)
  610. {
  611. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  612. int nr = sensor_attr->index;
  613. struct adm1026_data *data = dev_get_drvdata(dev);
  614. struct i2c_client *client = data->client;
  615. long val;
  616. int err;
  617. err = kstrtol(buf, 10, &val);
  618. if (err)
  619. return err;
  620. mutex_lock(&data->update_lock);
  621. data->fan_min[nr] = FAN_TO_REG(val, data->fan_div[nr]);
  622. adm1026_write_value(client, ADM1026_REG_FAN_MIN(nr),
  623. data->fan_min[nr]);
  624. mutex_unlock(&data->update_lock);
  625. return count;
  626. }
  627. static SENSOR_DEVICE_ATTR_RO(fan1_input, fan, 0);
  628. static SENSOR_DEVICE_ATTR_RW(fan1_min, fan_min, 0);
  629. static SENSOR_DEVICE_ATTR_RO(fan2_input, fan, 1);
  630. static SENSOR_DEVICE_ATTR_RW(fan2_min, fan_min, 1);
  631. static SENSOR_DEVICE_ATTR_RO(fan3_input, fan, 2);
  632. static SENSOR_DEVICE_ATTR_RW(fan3_min, fan_min, 2);
  633. static SENSOR_DEVICE_ATTR_RO(fan4_input, fan, 3);
  634. static SENSOR_DEVICE_ATTR_RW(fan4_min, fan_min, 3);
  635. static SENSOR_DEVICE_ATTR_RO(fan5_input, fan, 4);
  636. static SENSOR_DEVICE_ATTR_RW(fan5_min, fan_min, 4);
  637. static SENSOR_DEVICE_ATTR_RO(fan6_input, fan, 5);
  638. static SENSOR_DEVICE_ATTR_RW(fan6_min, fan_min, 5);
  639. static SENSOR_DEVICE_ATTR_RO(fan7_input, fan, 6);
  640. static SENSOR_DEVICE_ATTR_RW(fan7_min, fan_min, 6);
  641. static SENSOR_DEVICE_ATTR_RO(fan8_input, fan, 7);
  642. static SENSOR_DEVICE_ATTR_RW(fan8_min, fan_min, 7);
  643. /* Adjust fan_min to account for new fan divisor */
  644. static void fixup_fan_min(struct device *dev, int fan, int old_div)
  645. {
  646. struct adm1026_data *data = dev_get_drvdata(dev);
  647. struct i2c_client *client = data->client;
  648. int new_min;
  649. int new_div = data->fan_div[fan];
  650. /* 0 and 0xff are special. Don't adjust them */
  651. if (data->fan_min[fan] == 0 || data->fan_min[fan] == 0xff)
  652. return;
  653. new_min = data->fan_min[fan] * old_div / new_div;
  654. new_min = clamp_val(new_min, 1, 254);
  655. data->fan_min[fan] = new_min;
  656. adm1026_write_value(client, ADM1026_REG_FAN_MIN(fan), new_min);
  657. }
  658. /* Now add fan_div read/write functions */
  659. static ssize_t fan_div_show(struct device *dev, struct device_attribute *attr,
  660. char *buf)
  661. {
  662. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  663. int nr = sensor_attr->index;
  664. struct adm1026_data *data = adm1026_update_device(dev);
  665. return sprintf(buf, "%d\n", data->fan_div[nr]);
  666. }
  667. static ssize_t fan_div_store(struct device *dev,
  668. struct device_attribute *attr, const char *buf,
  669. size_t count)
  670. {
  671. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  672. int nr = sensor_attr->index;
  673. struct adm1026_data *data = dev_get_drvdata(dev);
  674. struct i2c_client *client = data->client;
  675. long val;
  676. int orig_div, new_div;
  677. int err;
  678. err = kstrtol(buf, 10, &val);
  679. if (err)
  680. return err;
  681. new_div = DIV_TO_REG(val);
  682. mutex_lock(&data->update_lock);
  683. orig_div = data->fan_div[nr];
  684. data->fan_div[nr] = DIV_FROM_REG(new_div);
  685. if (nr < 4) { /* 0 <= nr < 4 */
  686. adm1026_write_value(client, ADM1026_REG_FAN_DIV_0_3,
  687. (DIV_TO_REG(data->fan_div[0]) << 0) |
  688. (DIV_TO_REG(data->fan_div[1]) << 2) |
  689. (DIV_TO_REG(data->fan_div[2]) << 4) |
  690. (DIV_TO_REG(data->fan_div[3]) << 6));
  691. } else { /* 3 < nr < 8 */
  692. adm1026_write_value(client, ADM1026_REG_FAN_DIV_4_7,
  693. (DIV_TO_REG(data->fan_div[4]) << 0) |
  694. (DIV_TO_REG(data->fan_div[5]) << 2) |
  695. (DIV_TO_REG(data->fan_div[6]) << 4) |
  696. (DIV_TO_REG(data->fan_div[7]) << 6));
  697. }
  698. if (data->fan_div[nr] != orig_div)
  699. fixup_fan_min(dev, nr, orig_div);
  700. mutex_unlock(&data->update_lock);
  701. return count;
  702. }
  703. static SENSOR_DEVICE_ATTR_RW(fan1_div, fan_div, 0);
  704. static SENSOR_DEVICE_ATTR_RW(fan2_div, fan_div, 1);
  705. static SENSOR_DEVICE_ATTR_RW(fan3_div, fan_div, 2);
  706. static SENSOR_DEVICE_ATTR_RW(fan4_div, fan_div, 3);
  707. static SENSOR_DEVICE_ATTR_RW(fan5_div, fan_div, 4);
  708. static SENSOR_DEVICE_ATTR_RW(fan6_div, fan_div, 5);
  709. static SENSOR_DEVICE_ATTR_RW(fan7_div, fan_div, 6);
  710. static SENSOR_DEVICE_ATTR_RW(fan8_div, fan_div, 7);
  711. /* Temps */
  712. static ssize_t temp_show(struct device *dev, struct device_attribute *attr,
  713. char *buf)
  714. {
  715. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  716. int nr = sensor_attr->index;
  717. struct adm1026_data *data = adm1026_update_device(dev);
  718. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[nr]));
  719. }
  720. static ssize_t temp_min_show(struct device *dev,
  721. struct device_attribute *attr, char *buf)
  722. {
  723. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  724. int nr = sensor_attr->index;
  725. struct adm1026_data *data = adm1026_update_device(dev);
  726. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_min[nr]));
  727. }
  728. static ssize_t temp_min_store(struct device *dev,
  729. struct device_attribute *attr, const char *buf,
  730. size_t count)
  731. {
  732. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  733. int nr = sensor_attr->index;
  734. struct adm1026_data *data = dev_get_drvdata(dev);
  735. struct i2c_client *client = data->client;
  736. long val;
  737. int err;
  738. err = kstrtol(buf, 10, &val);
  739. if (err)
  740. return err;
  741. mutex_lock(&data->update_lock);
  742. data->temp_min[nr] = TEMP_TO_REG(val);
  743. adm1026_write_value(client, ADM1026_REG_TEMP_MIN[nr],
  744. data->temp_min[nr]);
  745. mutex_unlock(&data->update_lock);
  746. return count;
  747. }
  748. static ssize_t temp_max_show(struct device *dev,
  749. struct device_attribute *attr, char *buf)
  750. {
  751. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  752. int nr = sensor_attr->index;
  753. struct adm1026_data *data = adm1026_update_device(dev);
  754. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_max[nr]));
  755. }
  756. static ssize_t temp_max_store(struct device *dev,
  757. struct device_attribute *attr, const char *buf,
  758. size_t count)
  759. {
  760. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  761. int nr = sensor_attr->index;
  762. struct adm1026_data *data = dev_get_drvdata(dev);
  763. struct i2c_client *client = data->client;
  764. long val;
  765. int err;
  766. err = kstrtol(buf, 10, &val);
  767. if (err)
  768. return err;
  769. mutex_lock(&data->update_lock);
  770. data->temp_max[nr] = TEMP_TO_REG(val);
  771. adm1026_write_value(client, ADM1026_REG_TEMP_MAX[nr],
  772. data->temp_max[nr]);
  773. mutex_unlock(&data->update_lock);
  774. return count;
  775. }
  776. static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0);
  777. static SENSOR_DEVICE_ATTR_RW(temp1_min, temp_min, 0);
  778. static SENSOR_DEVICE_ATTR_RW(temp1_max, temp_max, 0);
  779. static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1);
  780. static SENSOR_DEVICE_ATTR_RW(temp2_min, temp_min, 1);
  781. static SENSOR_DEVICE_ATTR_RW(temp2_max, temp_max, 1);
  782. static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2);
  783. static SENSOR_DEVICE_ATTR_RW(temp3_min, temp_min, 2);
  784. static SENSOR_DEVICE_ATTR_RW(temp3_max, temp_max, 2);
  785. static ssize_t temp_offset_show(struct device *dev,
  786. struct device_attribute *attr, char *buf)
  787. {
  788. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  789. int nr = sensor_attr->index;
  790. struct adm1026_data *data = adm1026_update_device(dev);
  791. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_offset[nr]));
  792. }
  793. static ssize_t temp_offset_store(struct device *dev,
  794. struct device_attribute *attr,
  795. const char *buf, size_t count)
  796. {
  797. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  798. int nr = sensor_attr->index;
  799. struct adm1026_data *data = dev_get_drvdata(dev);
  800. struct i2c_client *client = data->client;
  801. long val;
  802. int err;
  803. err = kstrtol(buf, 10, &val);
  804. if (err)
  805. return err;
  806. mutex_lock(&data->update_lock);
  807. data->temp_offset[nr] = TEMP_TO_REG(val);
  808. adm1026_write_value(client, ADM1026_REG_TEMP_OFFSET[nr],
  809. data->temp_offset[nr]);
  810. mutex_unlock(&data->update_lock);
  811. return count;
  812. }
  813. static SENSOR_DEVICE_ATTR_RW(temp1_offset, temp_offset, 0);
  814. static SENSOR_DEVICE_ATTR_RW(temp2_offset, temp_offset, 1);
  815. static SENSOR_DEVICE_ATTR_RW(temp3_offset, temp_offset, 2);
  816. static ssize_t temp_auto_point1_temp_hyst_show(struct device *dev,
  817. struct device_attribute *attr,
  818. char *buf)
  819. {
  820. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  821. int nr = sensor_attr->index;
  822. struct adm1026_data *data = adm1026_update_device(dev);
  823. return sprintf(buf, "%d\n", TEMP_FROM_REG(
  824. ADM1026_FAN_ACTIVATION_TEMP_HYST + data->temp_tmin[nr]));
  825. }
  826. static ssize_t temp_auto_point2_temp_show(struct device *dev,
  827. struct device_attribute *attr,
  828. char *buf)
  829. {
  830. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  831. int nr = sensor_attr->index;
  832. struct adm1026_data *data = adm1026_update_device(dev);
  833. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_tmin[nr] +
  834. ADM1026_FAN_CONTROL_TEMP_RANGE));
  835. }
  836. static ssize_t temp_auto_point1_temp_show(struct device *dev,
  837. struct device_attribute *attr,
  838. char *buf)
  839. {
  840. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  841. int nr = sensor_attr->index;
  842. struct adm1026_data *data = adm1026_update_device(dev);
  843. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_tmin[nr]));
  844. }
  845. static ssize_t temp_auto_point1_temp_store(struct device *dev,
  846. struct device_attribute *attr,
  847. const char *buf, size_t count)
  848. {
  849. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  850. int nr = sensor_attr->index;
  851. struct adm1026_data *data = dev_get_drvdata(dev);
  852. struct i2c_client *client = data->client;
  853. long val;
  854. int err;
  855. err = kstrtol(buf, 10, &val);
  856. if (err)
  857. return err;
  858. mutex_lock(&data->update_lock);
  859. data->temp_tmin[nr] = TEMP_TO_REG(val);
  860. adm1026_write_value(client, ADM1026_REG_TEMP_TMIN[nr],
  861. data->temp_tmin[nr]);
  862. mutex_unlock(&data->update_lock);
  863. return count;
  864. }
  865. static SENSOR_DEVICE_ATTR_RW(temp1_auto_point1_temp, temp_auto_point1_temp, 0);
  866. static SENSOR_DEVICE_ATTR_RO(temp1_auto_point1_temp_hyst,
  867. temp_auto_point1_temp_hyst, 0);
  868. static SENSOR_DEVICE_ATTR_RO(temp1_auto_point2_temp, temp_auto_point2_temp, 0);
  869. static SENSOR_DEVICE_ATTR_RW(temp2_auto_point1_temp, temp_auto_point1_temp, 1);
  870. static SENSOR_DEVICE_ATTR_RO(temp2_auto_point1_temp_hyst,
  871. temp_auto_point1_temp_hyst, 1);
  872. static SENSOR_DEVICE_ATTR_RO(temp2_auto_point2_temp, temp_auto_point2_temp, 1);
  873. static SENSOR_DEVICE_ATTR_RW(temp3_auto_point1_temp, temp_auto_point1_temp, 2);
  874. static SENSOR_DEVICE_ATTR_RO(temp3_auto_point1_temp_hyst,
  875. temp_auto_point1_temp_hyst, 2);
  876. static SENSOR_DEVICE_ATTR_RO(temp3_auto_point2_temp, temp_auto_point2_temp, 2);
  877. static ssize_t show_temp_crit_enable(struct device *dev,
  878. struct device_attribute *attr, char *buf)
  879. {
  880. struct adm1026_data *data = adm1026_update_device(dev);
  881. return sprintf(buf, "%d\n", (data->config1 & CFG1_THERM_HOT) >> 4);
  882. }
  883. static ssize_t set_temp_crit_enable(struct device *dev,
  884. struct device_attribute *attr, const char *buf, size_t count)
  885. {
  886. struct adm1026_data *data = dev_get_drvdata(dev);
  887. struct i2c_client *client = data->client;
  888. unsigned long val;
  889. int err;
  890. err = kstrtoul(buf, 10, &val);
  891. if (err)
  892. return err;
  893. if (val > 1)
  894. return -EINVAL;
  895. mutex_lock(&data->update_lock);
  896. data->config1 = (data->config1 & ~CFG1_THERM_HOT) | (val << 4);
  897. adm1026_write_value(client, ADM1026_REG_CONFIG1, data->config1);
  898. mutex_unlock(&data->update_lock);
  899. return count;
  900. }
  901. static DEVICE_ATTR(temp1_crit_enable, 0644, show_temp_crit_enable,
  902. set_temp_crit_enable);
  903. static DEVICE_ATTR(temp2_crit_enable, 0644, show_temp_crit_enable,
  904. set_temp_crit_enable);
  905. static DEVICE_ATTR(temp3_crit_enable, 0644, show_temp_crit_enable,
  906. set_temp_crit_enable);
  907. static ssize_t temp_crit_show(struct device *dev,
  908. struct device_attribute *attr, char *buf)
  909. {
  910. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  911. int nr = sensor_attr->index;
  912. struct adm1026_data *data = adm1026_update_device(dev);
  913. return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp_crit[nr]));
  914. }
  915. static ssize_t temp_crit_store(struct device *dev,
  916. struct device_attribute *attr, const char *buf,
  917. size_t count)
  918. {
  919. struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);
  920. int nr = sensor_attr->index;
  921. struct adm1026_data *data = dev_get_drvdata(dev);
  922. struct i2c_client *client = data->client;
  923. long val;
  924. int err;
  925. err = kstrtol(buf, 10, &val);
  926. if (err)
  927. return err;
  928. mutex_lock(&data->update_lock);
  929. data->temp_crit[nr] = TEMP_TO_REG(val);
  930. adm1026_write_value(client, ADM1026_REG_TEMP_THERM[nr],
  931. data->temp_crit[nr]);
  932. mutex_unlock(&data->update_lock);
  933. return count;
  934. }
  935. static SENSOR_DEVICE_ATTR_RW(temp1_crit, temp_crit, 0);
  936. static SENSOR_DEVICE_ATTR_RW(temp2_crit, temp_crit, 1);
  937. static SENSOR_DEVICE_ATTR_RW(temp3_crit, temp_crit, 2);
  938. static ssize_t analog_out_show(struct device *dev,
  939. struct device_attribute *attr, char *buf)
  940. {
  941. struct adm1026_data *data = adm1026_update_device(dev);
  942. return sprintf(buf, "%d\n", DAC_FROM_REG(data->analog_out));
  943. }
  944. static ssize_t analog_out_store(struct device *dev,
  945. struct device_attribute *attr,
  946. const char *buf, size_t count)
  947. {
  948. struct adm1026_data *data = dev_get_drvdata(dev);
  949. struct i2c_client *client = data->client;
  950. long val;
  951. int err;
  952. err = kstrtol(buf, 10, &val);
  953. if (err)
  954. return err;
  955. mutex_lock(&data->update_lock);
  956. data->analog_out = DAC_TO_REG(val);
  957. adm1026_write_value(client, ADM1026_REG_DAC, data->analog_out);
  958. mutex_unlock(&data->update_lock);
  959. return count;
  960. }
  961. static DEVICE_ATTR_RW(analog_out);
  962. static ssize_t cpu0_vid_show(struct device *dev,
  963. struct device_attribute *attr, char *buf)
  964. {
  965. struct adm1026_data *data = adm1026_update_device(dev);
  966. int vid = (data->gpio >> 11) & 0x1f;
  967. dev_dbg(dev, "Setting VID from GPIO11-15.\n");
  968. return sprintf(buf, "%d\n", vid_from_reg(vid, data->vrm));
  969. }
  970. static DEVICE_ATTR_RO(cpu0_vid);
  971. static ssize_t vrm_show(struct device *dev, struct device_attribute *attr,
  972. char *buf)
  973. {
  974. struct adm1026_data *data = dev_get_drvdata(dev);
  975. return sprintf(buf, "%d\n", data->vrm);
  976. }
  977. static ssize_t vrm_store(struct device *dev, struct device_attribute *attr,
  978. const char *buf, size_t count)
  979. {
  980. struct adm1026_data *data = dev_get_drvdata(dev);
  981. unsigned long val;
  982. int err;
  983. err = kstrtoul(buf, 10, &val);
  984. if (err)
  985. return err;
  986. if (val > 255)
  987. return -EINVAL;
  988. data->vrm = val;
  989. return count;
  990. }
  991. static DEVICE_ATTR_RW(vrm);
  992. static ssize_t alarms_show(struct device *dev, struct device_attribute *attr,
  993. char *buf)
  994. {
  995. struct adm1026_data *data = adm1026_update_device(dev);
  996. return sprintf(buf, "%ld\n", data->alarms);
  997. }
  998. static DEVICE_ATTR_RO(alarms);
  999. static ssize_t alarm_show(struct device *dev, struct device_attribute *attr,
  1000. char *buf)
  1001. {
  1002. struct adm1026_data *data = adm1026_update_device(dev);
  1003. int bitnr = to_sensor_dev_attr(attr)->index;
  1004. return sprintf(buf, "%ld\n", (data->alarms >> bitnr) & 1);
  1005. }
  1006. static SENSOR_DEVICE_ATTR_RO(temp2_alarm, alarm, 0);
  1007. static SENSOR_DEVICE_ATTR_RO(temp3_alarm, alarm, 1);
  1008. static SENSOR_DEVICE_ATTR_RO(in9_alarm, alarm, 1);
  1009. static SENSOR_DEVICE_ATTR_RO(in11_alarm, alarm, 2);
  1010. static SENSOR_DEVICE_ATTR_RO(in12_alarm, alarm, 3);
  1011. static SENSOR_DEVICE_ATTR_RO(in13_alarm, alarm, 4);
  1012. static SENSOR_DEVICE_ATTR_RO(in14_alarm, alarm, 5);
  1013. static SENSOR_DEVICE_ATTR_RO(in15_alarm, alarm, 6);
  1014. static SENSOR_DEVICE_ATTR_RO(in16_alarm, alarm, 7);
  1015. static SENSOR_DEVICE_ATTR_RO(in0_alarm, alarm, 8);
  1016. static SENSOR_DEVICE_ATTR_RO(in1_alarm, alarm, 9);
  1017. static SENSOR_DEVICE_ATTR_RO(in2_alarm, alarm, 10);
  1018. static SENSOR_DEVICE_ATTR_RO(in3_alarm, alarm, 11);
  1019. static SENSOR_DEVICE_ATTR_RO(in4_alarm, alarm, 12);
  1020. static SENSOR_DEVICE_ATTR_RO(in5_alarm, alarm, 13);
  1021. static SENSOR_DEVICE_ATTR_RO(in6_alarm, alarm, 14);
  1022. static SENSOR_DEVICE_ATTR_RO(in7_alarm, alarm, 15);
  1023. static SENSOR_DEVICE_ATTR_RO(fan1_alarm, alarm, 16);
  1024. static SENSOR_DEVICE_ATTR_RO(fan2_alarm, alarm, 17);
  1025. static SENSOR_DEVICE_ATTR_RO(fan3_alarm, alarm, 18);
  1026. static SENSOR_DEVICE_ATTR_RO(fan4_alarm, alarm, 19);
  1027. static SENSOR_DEVICE_ATTR_RO(fan5_alarm, alarm, 20);
  1028. static SENSOR_DEVICE_ATTR_RO(fan6_alarm, alarm, 21);
  1029. static SENSOR_DEVICE_ATTR_RO(fan7_alarm, alarm, 22);
  1030. static SENSOR_DEVICE_ATTR_RO(fan8_alarm, alarm, 23);
  1031. static SENSOR_DEVICE_ATTR_RO(temp1_alarm, alarm, 24);
  1032. static SENSOR_DEVICE_ATTR_RO(in10_alarm, alarm, 25);
  1033. static SENSOR_DEVICE_ATTR_RO(in8_alarm, alarm, 26);
  1034. static ssize_t alarm_mask_show(struct device *dev,
  1035. struct device_attribute *attr, char *buf)
  1036. {
  1037. struct adm1026_data *data = adm1026_update_device(dev);
  1038. return sprintf(buf, "%ld\n", data->alarm_mask);
  1039. }
  1040. static ssize_t alarm_mask_store(struct device *dev,
  1041. struct device_attribute *attr,
  1042. const char *buf, size_t count)
  1043. {
  1044. struct adm1026_data *data = dev_get_drvdata(dev);
  1045. struct i2c_client *client = data->client;
  1046. unsigned long mask;
  1047. long val;
  1048. int err;
  1049. err = kstrtol(buf, 10, &val);
  1050. if (err)
  1051. return err;
  1052. mutex_lock(&data->update_lock);
  1053. data->alarm_mask = val & 0x7fffffff;
  1054. mask = data->alarm_mask
  1055. | (data->gpio_mask & 0x10000 ? 0x80000000 : 0);
  1056. adm1026_write_value(client, ADM1026_REG_MASK1,
  1057. mask & 0xff);
  1058. mask >>= 8;
  1059. adm1026_write_value(client, ADM1026_REG_MASK2,
  1060. mask & 0xff);
  1061. mask >>= 8;
  1062. adm1026_write_value(client, ADM1026_REG_MASK3,
  1063. mask & 0xff);
  1064. mask >>= 8;
  1065. adm1026_write_value(client, ADM1026_REG_MASK4,
  1066. mask & 0xff);
  1067. mutex_unlock(&data->update_lock);
  1068. return count;
  1069. }
  1070. static DEVICE_ATTR_RW(alarm_mask);
  1071. static ssize_t gpio_show(struct device *dev, struct device_attribute *attr,
  1072. char *buf)
  1073. {
  1074. struct adm1026_data *data = adm1026_update_device(dev);
  1075. return sprintf(buf, "%ld\n", data->gpio);
  1076. }
  1077. static ssize_t gpio_store(struct device *dev, struct device_attribute *attr,
  1078. const char *buf, size_t count)
  1079. {
  1080. struct adm1026_data *data = dev_get_drvdata(dev);
  1081. struct i2c_client *client = data->client;
  1082. long gpio;
  1083. long val;
  1084. int err;
  1085. err = kstrtol(buf, 10, &val);
  1086. if (err)
  1087. return err;
  1088. mutex_lock(&data->update_lock);
  1089. data->gpio = val & 0x1ffff;
  1090. gpio = data->gpio;
  1091. adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_0_7, gpio & 0xff);
  1092. gpio >>= 8;
  1093. adm1026_write_value(client, ADM1026_REG_GPIO_STATUS_8_15, gpio & 0xff);
  1094. gpio = ((gpio >> 1) & 0x80) | (data->alarms >> 24 & 0x7f);
  1095. adm1026_write_value(client, ADM1026_REG_STATUS4, gpio & 0xff);
  1096. mutex_unlock(&data->update_lock);
  1097. return count;
  1098. }
  1099. static DEVICE_ATTR_RW(gpio);
  1100. static ssize_t gpio_mask_show(struct device *dev,
  1101. struct device_attribute *attr,
  1102. char *buf)
  1103. {
  1104. struct adm1026_data *data = adm1026_update_device(dev);
  1105. return sprintf(buf, "%ld\n", data->gpio_mask);
  1106. }
  1107. static ssize_t gpio_mask_store(struct device *dev,
  1108. struct device_attribute *attr, const char *buf,
  1109. size_t count)
  1110. {
  1111. struct adm1026_data *data = dev_get_drvdata(dev);
  1112. struct i2c_client *client = data->client;
  1113. long mask;
  1114. long val;
  1115. int err;
  1116. err = kstrtol(buf, 10, &val);
  1117. if (err)
  1118. return err;
  1119. mutex_lock(&data->update_lock);
  1120. data->gpio_mask = val & 0x1ffff;
  1121. mask = data->gpio_mask;
  1122. adm1026_write_value(client, ADM1026_REG_GPIO_MASK_0_7, mask & 0xff);
  1123. mask >>= 8;
  1124. adm1026_write_value(client, ADM1026_REG_GPIO_MASK_8_15, mask & 0xff);
  1125. mask = ((mask >> 1) & 0x80) | (data->alarm_mask >> 24 & 0x7f);
  1126. adm1026_write_value(client, ADM1026_REG_MASK1, mask & 0xff);
  1127. mutex_unlock(&data->update_lock);
  1128. return count;
  1129. }
  1130. static DEVICE_ATTR_RW(gpio_mask);
  1131. static ssize_t pwm1_show(struct device *dev, struct device_attribute *attr,
  1132. char *buf)
  1133. {
  1134. struct adm1026_data *data = adm1026_update_device(dev);
  1135. return sprintf(buf, "%d\n", PWM_FROM_REG(data->pwm1.pwm));
  1136. }
  1137. static ssize_t pwm1_store(struct device *dev, struct device_attribute *attr,
  1138. const char *buf, size_t count)
  1139. {
  1140. struct adm1026_data *data = dev_get_drvdata(dev);
  1141. struct i2c_client *client = data->client;
  1142. if (data->pwm1.enable == 1) {
  1143. long val;
  1144. int err;
  1145. err = kstrtol(buf, 10, &val);
  1146. if (err)
  1147. return err;
  1148. mutex_lock(&data->update_lock);
  1149. data->pwm1.pwm = PWM_TO_REG(val);
  1150. adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm);
  1151. mutex_unlock(&data->update_lock);
  1152. }
  1153. return count;
  1154. }
  1155. static ssize_t temp1_auto_point1_pwm_show(struct device *dev,
  1156. struct device_attribute *attr,
  1157. char *buf)
  1158. {
  1159. struct adm1026_data *data = adm1026_update_device(dev);
  1160. return sprintf(buf, "%d\n", data->pwm1.auto_pwm_min);
  1161. }
  1162. static ssize_t temp1_auto_point1_pwm_store(struct device *dev,
  1163. struct device_attribute *attr,
  1164. const char *buf, size_t count)
  1165. {
  1166. struct adm1026_data *data = dev_get_drvdata(dev);
  1167. struct i2c_client *client = data->client;
  1168. unsigned long val;
  1169. int err;
  1170. err = kstrtoul(buf, 10, &val);
  1171. if (err)
  1172. return err;
  1173. mutex_lock(&data->update_lock);
  1174. data->pwm1.auto_pwm_min = clamp_val(val, 0, 255);
  1175. if (data->pwm1.enable == 2) { /* apply immediately */
  1176. data->pwm1.pwm = PWM_TO_REG((data->pwm1.pwm & 0x0f) |
  1177. PWM_MIN_TO_REG(data->pwm1.auto_pwm_min));
  1178. adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm);
  1179. }
  1180. mutex_unlock(&data->update_lock);
  1181. return count;
  1182. }
  1183. static ssize_t temp1_auto_point2_pwm_show(struct device *dev,
  1184. struct device_attribute *attr,
  1185. char *buf)
  1186. {
  1187. return sprintf(buf, "%d\n", ADM1026_PWM_MAX);
  1188. }
  1189. static ssize_t pwm1_enable_show(struct device *dev,
  1190. struct device_attribute *attr, char *buf)
  1191. {
  1192. struct adm1026_data *data = adm1026_update_device(dev);
  1193. return sprintf(buf, "%d\n", data->pwm1.enable);
  1194. }
  1195. static ssize_t pwm1_enable_store(struct device *dev,
  1196. struct device_attribute *attr,
  1197. const char *buf, size_t count)
  1198. {
  1199. struct adm1026_data *data = dev_get_drvdata(dev);
  1200. struct i2c_client *client = data->client;
  1201. int old_enable;
  1202. unsigned long val;
  1203. int err;
  1204. err = kstrtoul(buf, 10, &val);
  1205. if (err)
  1206. return err;
  1207. if (val >= 3)
  1208. return -EINVAL;
  1209. mutex_lock(&data->update_lock);
  1210. old_enable = data->pwm1.enable;
  1211. data->pwm1.enable = val;
  1212. data->config1 = (data->config1 & ~CFG1_PWM_AFC)
  1213. | ((val == 2) ? CFG1_PWM_AFC : 0);
  1214. adm1026_write_value(client, ADM1026_REG_CONFIG1, data->config1);
  1215. if (val == 2) { /* apply pwm1_auto_pwm_min to pwm1 */
  1216. data->pwm1.pwm = PWM_TO_REG((data->pwm1.pwm & 0x0f) |
  1217. PWM_MIN_TO_REG(data->pwm1.auto_pwm_min));
  1218. adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm);
  1219. } else if (!((old_enable == 1) && (val == 1))) {
  1220. /* set pwm to safe value */
  1221. data->pwm1.pwm = 255;
  1222. adm1026_write_value(client, ADM1026_REG_PWM, data->pwm1.pwm);
  1223. }
  1224. mutex_unlock(&data->update_lock);
  1225. return count;
  1226. }
  1227. /* enable PWM fan control */
  1228. static DEVICE_ATTR_RW(pwm1);
  1229. static DEVICE_ATTR(pwm2, 0644, pwm1_show, pwm1_store);
  1230. static DEVICE_ATTR(pwm3, 0644, pwm1_show, pwm1_store);
  1231. static DEVICE_ATTR_RW(pwm1_enable);
  1232. static DEVICE_ATTR(pwm2_enable, 0644, pwm1_enable_show,
  1233. pwm1_enable_store);
  1234. static DEVICE_ATTR(pwm3_enable, 0644, pwm1_enable_show,
  1235. pwm1_enable_store);
  1236. static DEVICE_ATTR_RW(temp1_auto_point1_pwm);
  1237. static DEVICE_ATTR(temp2_auto_point1_pwm, 0644,
  1238. temp1_auto_point1_pwm_show, temp1_auto_point1_pwm_store);
  1239. static DEVICE_ATTR(temp3_auto_point1_pwm, 0644,
  1240. temp1_auto_point1_pwm_show, temp1_auto_point1_pwm_store);
  1241. static DEVICE_ATTR_RO(temp1_auto_point2_pwm);
  1242. static DEVICE_ATTR(temp2_auto_point2_pwm, 0444, temp1_auto_point2_pwm_show,
  1243. NULL);
  1244. static DEVICE_ATTR(temp3_auto_point2_pwm, 0444, temp1_auto_point2_pwm_show,
  1245. NULL);
  1246. static struct attribute *adm1026_attributes[] = {
  1247. &sensor_dev_attr_in0_input.dev_attr.attr,
  1248. &sensor_dev_attr_in0_max.dev_attr.attr,
  1249. &sensor_dev_attr_in0_min.dev_attr.attr,
  1250. &sensor_dev_attr_in0_alarm.dev_attr.attr,
  1251. &sensor_dev_attr_in1_input.dev_attr.attr,
  1252. &sensor_dev_attr_in1_max.dev_attr.attr,
  1253. &sensor_dev_attr_in1_min.dev_attr.attr,
  1254. &sensor_dev_attr_in1_alarm.dev_attr.attr,
  1255. &sensor_dev_attr_in2_input.dev_attr.attr,
  1256. &sensor_dev_attr_in2_max.dev_attr.attr,
  1257. &sensor_dev_attr_in2_min.dev_attr.attr,
  1258. &sensor_dev_attr_in2_alarm.dev_attr.attr,
  1259. &sensor_dev_attr_in3_input.dev_attr.attr,
  1260. &sensor_dev_attr_in3_max.dev_attr.attr,
  1261. &sensor_dev_attr_in3_min.dev_attr.attr,
  1262. &sensor_dev_attr_in3_alarm.dev_attr.attr,
  1263. &sensor_dev_attr_in4_input.dev_attr.attr,
  1264. &sensor_dev_attr_in4_max.dev_attr.attr,
  1265. &sensor_dev_attr_in4_min.dev_attr.attr,
  1266. &sensor_dev_attr_in4_alarm.dev_attr.attr,
  1267. &sensor_dev_attr_in5_input.dev_attr.attr,
  1268. &sensor_dev_attr_in5_max.dev_attr.attr,
  1269. &sensor_dev_attr_in5_min.dev_attr.attr,
  1270. &sensor_dev_attr_in5_alarm.dev_attr.attr,
  1271. &sensor_dev_attr_in6_input.dev_attr.attr,
  1272. &sensor_dev_attr_in6_max.dev_attr.attr,
  1273. &sensor_dev_attr_in6_min.dev_attr.attr,
  1274. &sensor_dev_attr_in6_alarm.dev_attr.attr,
  1275. &sensor_dev_attr_in7_input.dev_attr.attr,
  1276. &sensor_dev_attr_in7_max.dev_attr.attr,
  1277. &sensor_dev_attr_in7_min.dev_attr.attr,
  1278. &sensor_dev_attr_in7_alarm.dev_attr.attr,
  1279. &sensor_dev_attr_in10_input.dev_attr.attr,
  1280. &sensor_dev_attr_in10_max.dev_attr.attr,
  1281. &sensor_dev_attr_in10_min.dev_attr.attr,
  1282. &sensor_dev_attr_in10_alarm.dev_attr.attr,
  1283. &sensor_dev_attr_in11_input.dev_attr.attr,
  1284. &sensor_dev_attr_in11_max.dev_attr.attr,
  1285. &sensor_dev_attr_in11_min.dev_attr.attr,
  1286. &sensor_dev_attr_in11_alarm.dev_attr.attr,
  1287. &sensor_dev_attr_in12_input.dev_attr.attr,
  1288. &sensor_dev_attr_in12_max.dev_attr.attr,
  1289. &sensor_dev_attr_in12_min.dev_attr.attr,
  1290. &sensor_dev_attr_in12_alarm.dev_attr.attr,
  1291. &sensor_dev_attr_in13_input.dev_attr.attr,
  1292. &sensor_dev_attr_in13_max.dev_attr.attr,
  1293. &sensor_dev_attr_in13_min.dev_attr.attr,
  1294. &sensor_dev_attr_in13_alarm.dev_attr.attr,
  1295. &sensor_dev_attr_in14_input.dev_attr.attr,
  1296. &sensor_dev_attr_in14_max.dev_attr.attr,
  1297. &sensor_dev_attr_in14_min.dev_attr.attr,
  1298. &sensor_dev_attr_in14_alarm.dev_attr.attr,
  1299. &sensor_dev_attr_in15_input.dev_attr.attr,
  1300. &sensor_dev_attr_in15_max.dev_attr.attr,
  1301. &sensor_dev_attr_in15_min.dev_attr.attr,
  1302. &sensor_dev_attr_in15_alarm.dev_attr.attr,
  1303. &sensor_dev_attr_in16_input.dev_attr.attr,
  1304. &sensor_dev_attr_in16_max.dev_attr.attr,
  1305. &sensor_dev_attr_in16_min.dev_attr.attr,
  1306. &sensor_dev_attr_in16_alarm.dev_attr.attr,
  1307. &sensor_dev_attr_fan1_input.dev_attr.attr,
  1308. &sensor_dev_attr_fan1_div.dev_attr.attr,
  1309. &sensor_dev_attr_fan1_min.dev_attr.attr,
  1310. &sensor_dev_attr_fan1_alarm.dev_attr.attr,
  1311. &sensor_dev_attr_fan2_input.dev_attr.attr,
  1312. &sensor_dev_attr_fan2_div.dev_attr.attr,
  1313. &sensor_dev_attr_fan2_min.dev_attr.attr,
  1314. &sensor_dev_attr_fan2_alarm.dev_attr.attr,
  1315. &sensor_dev_attr_fan3_input.dev_attr.attr,
  1316. &sensor_dev_attr_fan3_div.dev_attr.attr,
  1317. &sensor_dev_attr_fan3_min.dev_attr.attr,
  1318. &sensor_dev_attr_fan3_alarm.dev_attr.attr,
  1319. &sensor_dev_attr_fan4_input.dev_attr.attr,
  1320. &sensor_dev_attr_fan4_div.dev_attr.attr,
  1321. &sensor_dev_attr_fan4_min.dev_attr.attr,
  1322. &sensor_dev_attr_fan4_alarm.dev_attr.attr,
  1323. &sensor_dev_attr_fan5_input.dev_attr.attr,
  1324. &sensor_dev_attr_fan5_div.dev_attr.attr,
  1325. &sensor_dev_attr_fan5_min.dev_attr.attr,
  1326. &sensor_dev_attr_fan5_alarm.dev_attr.attr,
  1327. &sensor_dev_attr_fan6_input.dev_attr.attr,
  1328. &sensor_dev_attr_fan6_div.dev_attr.attr,
  1329. &sensor_dev_attr_fan6_min.dev_attr.attr,
  1330. &sensor_dev_attr_fan6_alarm.dev_attr.attr,
  1331. &sensor_dev_attr_fan7_input.dev_attr.attr,
  1332. &sensor_dev_attr_fan7_div.dev_attr.attr,
  1333. &sensor_dev_attr_fan7_min.dev_attr.attr,
  1334. &sensor_dev_attr_fan7_alarm.dev_attr.attr,
  1335. &sensor_dev_attr_fan8_input.dev_attr.attr,
  1336. &sensor_dev_attr_fan8_div.dev_attr.attr,
  1337. &sensor_dev_attr_fan8_min.dev_attr.attr,
  1338. &sensor_dev_attr_fan8_alarm.dev_attr.attr,
  1339. &sensor_dev_attr_temp1_input.dev_attr.attr,
  1340. &sensor_dev_attr_temp1_max.dev_attr.attr,
  1341. &sensor_dev_attr_temp1_min.dev_attr.attr,
  1342. &sensor_dev_attr_temp1_alarm.dev_attr.attr,
  1343. &sensor_dev_attr_temp2_input.dev_attr.attr,
  1344. &sensor_dev_attr_temp2_max.dev_attr.attr,
  1345. &sensor_dev_attr_temp2_min.dev_attr.attr,
  1346. &sensor_dev_attr_temp2_alarm.dev_attr.attr,
  1347. &sensor_dev_attr_temp1_offset.dev_attr.attr,
  1348. &sensor_dev_attr_temp2_offset.dev_attr.attr,
  1349. &sensor_dev_attr_temp1_auto_point1_temp.dev_attr.attr,
  1350. &sensor_dev_attr_temp2_auto_point1_temp.dev_attr.attr,
  1351. &sensor_dev_attr_temp1_auto_point1_temp_hyst.dev_attr.attr,
  1352. &sensor_dev_attr_temp2_auto_point1_temp_hyst.dev_attr.attr,
  1353. &sensor_dev_attr_temp1_auto_point2_temp.dev_attr.attr,
  1354. &sensor_dev_attr_temp2_auto_point2_temp.dev_attr.attr,
  1355. &sensor_dev_attr_temp1_crit.dev_attr.attr,
  1356. &sensor_dev_attr_temp2_crit.dev_attr.attr,
  1357. &dev_attr_temp1_crit_enable.attr,
  1358. &dev_attr_temp2_crit_enable.attr,
  1359. &dev_attr_cpu0_vid.attr,
  1360. &dev_attr_vrm.attr,
  1361. &dev_attr_alarms.attr,
  1362. &dev_attr_alarm_mask.attr,
  1363. &dev_attr_gpio.attr,
  1364. &dev_attr_gpio_mask.attr,
  1365. &dev_attr_pwm1.attr,
  1366. &dev_attr_pwm2.attr,
  1367. &dev_attr_pwm3.attr,
  1368. &dev_attr_pwm1_enable.attr,
  1369. &dev_attr_pwm2_enable.attr,
  1370. &dev_attr_pwm3_enable.attr,
  1371. &dev_attr_temp1_auto_point1_pwm.attr,
  1372. &dev_attr_temp2_auto_point1_pwm.attr,
  1373. &dev_attr_temp1_auto_point2_pwm.attr,
  1374. &dev_attr_temp2_auto_point2_pwm.attr,
  1375. &dev_attr_analog_out.attr,
  1376. NULL
  1377. };
  1378. static const struct attribute_group adm1026_group = {
  1379. .attrs = adm1026_attributes,
  1380. };
  1381. static struct attribute *adm1026_attributes_temp3[] = {
  1382. &sensor_dev_attr_temp3_input.dev_attr.attr,
  1383. &sensor_dev_attr_temp3_max.dev_attr.attr,
  1384. &sensor_dev_attr_temp3_min.dev_attr.attr,
  1385. &sensor_dev_attr_temp3_alarm.dev_attr.attr,
  1386. &sensor_dev_attr_temp3_offset.dev_attr.attr,
  1387. &sensor_dev_attr_temp3_auto_point1_temp.dev_attr.attr,
  1388. &sensor_dev_attr_temp3_auto_point1_temp_hyst.dev_attr.attr,
  1389. &sensor_dev_attr_temp3_auto_point2_temp.dev_attr.attr,
  1390. &sensor_dev_attr_temp3_crit.dev_attr.attr,
  1391. &dev_attr_temp3_crit_enable.attr,
  1392. &dev_attr_temp3_auto_point1_pwm.attr,
  1393. &dev_attr_temp3_auto_point2_pwm.attr,
  1394. NULL
  1395. };
  1396. static const struct attribute_group adm1026_group_temp3 = {
  1397. .attrs = adm1026_attributes_temp3,
  1398. };
  1399. static struct attribute *adm1026_attributes_in8_9[] = {
  1400. &sensor_dev_attr_in8_input.dev_attr.attr,
  1401. &sensor_dev_attr_in8_max.dev_attr.attr,
  1402. &sensor_dev_attr_in8_min.dev_attr.attr,
  1403. &sensor_dev_attr_in8_alarm.dev_attr.attr,
  1404. &sensor_dev_attr_in9_input.dev_attr.attr,
  1405. &sensor_dev_attr_in9_max.dev_attr.attr,
  1406. &sensor_dev_attr_in9_min.dev_attr.attr,
  1407. &sensor_dev_attr_in9_alarm.dev_attr.attr,
  1408. NULL
  1409. };
  1410. static const struct attribute_group adm1026_group_in8_9 = {
  1411. .attrs = adm1026_attributes_in8_9,
  1412. };
  1413. /* Return 0 if detection is successful, -ENODEV otherwise */
  1414. static int adm1026_detect(struct i2c_client *client,
  1415. struct i2c_board_info *info)
  1416. {
  1417. struct i2c_adapter *adapter = client->adapter;
  1418. int address = client->addr;
  1419. int company, verstep;
  1420. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA)) {
  1421. /* We need to be able to do byte I/O */
  1422. return -ENODEV;
  1423. }
  1424. /* Now, we do the remaining detection. */
  1425. company = adm1026_read_value(client, ADM1026_REG_COMPANY);
  1426. verstep = adm1026_read_value(client, ADM1026_REG_VERSTEP);
  1427. dev_dbg(&adapter->dev,
  1428. "Detecting device at %d,0x%02x with COMPANY: 0x%02x and VERSTEP: 0x%02x\n",
  1429. i2c_adapter_id(client->adapter), client->addr,
  1430. company, verstep);
  1431. /* Determine the chip type. */
  1432. dev_dbg(&adapter->dev, "Autodetecting device at %d,0x%02x...\n",
  1433. i2c_adapter_id(adapter), address);
  1434. if (company == ADM1026_COMPANY_ANALOG_DEV
  1435. && verstep == ADM1026_VERSTEP_ADM1026) {
  1436. /* Analog Devices ADM1026 */
  1437. } else if (company == ADM1026_COMPANY_ANALOG_DEV
  1438. && (verstep & 0xf0) == ADM1026_VERSTEP_GENERIC) {
  1439. dev_err(&adapter->dev,
  1440. "Unrecognized stepping 0x%02x. Defaulting to ADM1026.\n",
  1441. verstep);
  1442. } else if ((verstep & 0xf0) == ADM1026_VERSTEP_GENERIC) {
  1443. dev_err(&adapter->dev,
  1444. "Found version/stepping 0x%02x. Assuming generic ADM1026.\n",
  1445. verstep);
  1446. } else {
  1447. dev_dbg(&adapter->dev, "Autodetection failed\n");
  1448. /* Not an ADM1026... */
  1449. return -ENODEV;
  1450. }
  1451. strscpy(info->type, "adm1026", I2C_NAME_SIZE);
  1452. return 0;
  1453. }
  1454. static void adm1026_print_gpio(struct i2c_client *client)
  1455. {
  1456. struct adm1026_data *data = i2c_get_clientdata(client);
  1457. int i;
  1458. dev_dbg(&client->dev, "GPIO config is:\n");
  1459. for (i = 0; i <= 7; ++i) {
  1460. if (data->config2 & (1 << i)) {
  1461. dev_dbg(&client->dev, "\t%sGP%s%d\n",
  1462. data->gpio_config[i] & 0x02 ? "" : "!",
  1463. data->gpio_config[i] & 0x01 ? "OUT" : "IN",
  1464. i);
  1465. } else {
  1466. dev_dbg(&client->dev, "\tFAN%d\n", i);
  1467. }
  1468. }
  1469. for (i = 8; i <= 15; ++i) {
  1470. dev_dbg(&client->dev, "\t%sGP%s%d\n",
  1471. data->gpio_config[i] & 0x02 ? "" : "!",
  1472. data->gpio_config[i] & 0x01 ? "OUT" : "IN",
  1473. i);
  1474. }
  1475. if (data->config3 & CFG3_GPIO16_ENABLE) {
  1476. dev_dbg(&client->dev, "\t%sGP%s16\n",
  1477. data->gpio_config[16] & 0x02 ? "" : "!",
  1478. data->gpio_config[16] & 0x01 ? "OUT" : "IN");
  1479. } else {
  1480. /* GPIO16 is THERM */
  1481. dev_dbg(&client->dev, "\tTHERM\n");
  1482. }
  1483. }
  1484. static void adm1026_fixup_gpio(struct i2c_client *client)
  1485. {
  1486. struct adm1026_data *data = i2c_get_clientdata(client);
  1487. int i;
  1488. int value;
  1489. /* Make the changes requested. */
  1490. /*
  1491. * We may need to unlock/stop monitoring or soft-reset the
  1492. * chip before we can make changes. This hasn't been
  1493. * tested much. FIXME
  1494. */
  1495. /* Make outputs */
  1496. for (i = 0; i <= 16; ++i) {
  1497. if (gpio_output[i] >= 0 && gpio_output[i] <= 16)
  1498. data->gpio_config[gpio_output[i]] |= 0x01;
  1499. /* if GPIO0-7 is output, it isn't a FAN tach */
  1500. if (gpio_output[i] >= 0 && gpio_output[i] <= 7)
  1501. data->config2 |= 1 << gpio_output[i];
  1502. }
  1503. /* Input overrides output */
  1504. for (i = 0; i <= 16; ++i) {
  1505. if (gpio_input[i] >= 0 && gpio_input[i] <= 16)
  1506. data->gpio_config[gpio_input[i]] &= ~0x01;
  1507. /* if GPIO0-7 is input, it isn't a FAN tach */
  1508. if (gpio_input[i] >= 0 && gpio_input[i] <= 7)
  1509. data->config2 |= 1 << gpio_input[i];
  1510. }
  1511. /* Inverted */
  1512. for (i = 0; i <= 16; ++i) {
  1513. if (gpio_inverted[i] >= 0 && gpio_inverted[i] <= 16)
  1514. data->gpio_config[gpio_inverted[i]] &= ~0x02;
  1515. }
  1516. /* Normal overrides inverted */
  1517. for (i = 0; i <= 16; ++i) {
  1518. if (gpio_normal[i] >= 0 && gpio_normal[i] <= 16)
  1519. data->gpio_config[gpio_normal[i]] |= 0x02;
  1520. }
  1521. /* Fan overrides input and output */
  1522. for (i = 0; i <= 7; ++i) {
  1523. if (gpio_fan[i] >= 0 && gpio_fan[i] <= 7)
  1524. data->config2 &= ~(1 << gpio_fan[i]);
  1525. }
  1526. /* Write new configs to registers */
  1527. adm1026_write_value(client, ADM1026_REG_CONFIG2, data->config2);
  1528. data->config3 = (data->config3 & 0x3f)
  1529. | ((data->gpio_config[16] & 0x03) << 6);
  1530. adm1026_write_value(client, ADM1026_REG_CONFIG3, data->config3);
  1531. for (i = 15, value = 0; i >= 0; --i) {
  1532. value <<= 2;
  1533. value |= data->gpio_config[i] & 0x03;
  1534. if ((i & 0x03) == 0) {
  1535. adm1026_write_value(client,
  1536. ADM1026_REG_GPIO_CFG_0_3 + i/4,
  1537. value);
  1538. value = 0;
  1539. }
  1540. }
  1541. /* Print the new config */
  1542. adm1026_print_gpio(client);
  1543. }
  1544. static void adm1026_init_client(struct i2c_client *client)
  1545. {
  1546. int value, i;
  1547. struct adm1026_data *data = i2c_get_clientdata(client);
  1548. dev_dbg(&client->dev, "Initializing device\n");
  1549. /* Read chip config */
  1550. data->config1 = adm1026_read_value(client, ADM1026_REG_CONFIG1);
  1551. data->config2 = adm1026_read_value(client, ADM1026_REG_CONFIG2);
  1552. data->config3 = adm1026_read_value(client, ADM1026_REG_CONFIG3);
  1553. /* Inform user of chip config */
  1554. dev_dbg(&client->dev, "ADM1026_REG_CONFIG1 is: 0x%02x\n",
  1555. data->config1);
  1556. if ((data->config1 & CFG1_MONITOR) == 0) {
  1557. dev_dbg(&client->dev,
  1558. "Monitoring not currently enabled.\n");
  1559. }
  1560. if (data->config1 & CFG1_INT_ENABLE) {
  1561. dev_dbg(&client->dev,
  1562. "SMBALERT interrupts are enabled.\n");
  1563. }
  1564. if (data->config1 & CFG1_AIN8_9) {
  1565. dev_dbg(&client->dev,
  1566. "in8 and in9 enabled. temp3 disabled.\n");
  1567. } else {
  1568. dev_dbg(&client->dev,
  1569. "temp3 enabled. in8 and in9 disabled.\n");
  1570. }
  1571. if (data->config1 & CFG1_THERM_HOT) {
  1572. dev_dbg(&client->dev,
  1573. "Automatic THERM, PWM, and temp limits enabled.\n");
  1574. }
  1575. if (data->config3 & CFG3_GPIO16_ENABLE) {
  1576. dev_dbg(&client->dev,
  1577. "GPIO16 enabled. THERM pin disabled.\n");
  1578. } else {
  1579. dev_dbg(&client->dev,
  1580. "THERM pin enabled. GPIO16 disabled.\n");
  1581. }
  1582. if (data->config3 & CFG3_VREF_250)
  1583. dev_dbg(&client->dev, "Vref is 2.50 Volts.\n");
  1584. else
  1585. dev_dbg(&client->dev, "Vref is 1.82 Volts.\n");
  1586. /* Read and pick apart the existing GPIO configuration */
  1587. value = 0;
  1588. for (i = 0; i <= 15; ++i) {
  1589. if ((i & 0x03) == 0) {
  1590. value = adm1026_read_value(client,
  1591. ADM1026_REG_GPIO_CFG_0_3 + i / 4);
  1592. }
  1593. data->gpio_config[i] = value & 0x03;
  1594. value >>= 2;
  1595. }
  1596. data->gpio_config[16] = (data->config3 >> 6) & 0x03;
  1597. /* ... and then print it */
  1598. adm1026_print_gpio(client);
  1599. /*
  1600. * If the user asks us to reprogram the GPIO config, then
  1601. * do it now.
  1602. */
  1603. if (gpio_input[0] != -1 || gpio_output[0] != -1
  1604. || gpio_inverted[0] != -1 || gpio_normal[0] != -1
  1605. || gpio_fan[0] != -1) {
  1606. adm1026_fixup_gpio(client);
  1607. }
  1608. /*
  1609. * WE INTENTIONALLY make no changes to the limits,
  1610. * offsets, pwms, fans and zones. If they were
  1611. * configured, we don't want to mess with them.
  1612. * If they weren't, the default is 100% PWM, no
  1613. * control and will suffice until 'sensors -s'
  1614. * can be run by the user. We DO set the default
  1615. * value for pwm1.auto_pwm_min to its maximum
  1616. * so that enabling automatic pwm fan control
  1617. * without first setting a value for pwm1.auto_pwm_min
  1618. * will not result in potentially dangerous fan speed decrease.
  1619. */
  1620. data->pwm1.auto_pwm_min = 255;
  1621. /* Start monitoring */
  1622. value = adm1026_read_value(client, ADM1026_REG_CONFIG1);
  1623. /* Set MONITOR, clear interrupt acknowledge and s/w reset */
  1624. value = (value | CFG1_MONITOR) & (~CFG1_INT_CLEAR & ~CFG1_RESET);
  1625. dev_dbg(&client->dev, "Setting CONFIG to: 0x%02x\n", value);
  1626. data->config1 = value;
  1627. adm1026_write_value(client, ADM1026_REG_CONFIG1, value);
  1628. /* initialize fan_div[] to hardware defaults */
  1629. value = adm1026_read_value(client, ADM1026_REG_FAN_DIV_0_3) |
  1630. (adm1026_read_value(client, ADM1026_REG_FAN_DIV_4_7) << 8);
  1631. for (i = 0; i <= 7; ++i) {
  1632. data->fan_div[i] = DIV_FROM_REG(value & 0x03);
  1633. value >>= 2;
  1634. }
  1635. }
  1636. static int adm1026_probe(struct i2c_client *client)
  1637. {
  1638. struct device *dev = &client->dev;
  1639. struct device *hwmon_dev;
  1640. struct adm1026_data *data;
  1641. data = devm_kzalloc(dev, sizeof(struct adm1026_data), GFP_KERNEL);
  1642. if (!data)
  1643. return -ENOMEM;
  1644. i2c_set_clientdata(client, data);
  1645. data->client = client;
  1646. mutex_init(&data->update_lock);
  1647. /* Set the VRM version */
  1648. data->vrm = vid_which_vrm();
  1649. /* Initialize the ADM1026 chip */
  1650. adm1026_init_client(client);
  1651. /* sysfs hooks */
  1652. data->groups[0] = &adm1026_group;
  1653. if (data->config1 & CFG1_AIN8_9)
  1654. data->groups[1] = &adm1026_group_in8_9;
  1655. else
  1656. data->groups[1] = &adm1026_group_temp3;
  1657. hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name,
  1658. data, data->groups);
  1659. return PTR_ERR_OR_ZERO(hwmon_dev);
  1660. }
  1661. static const struct i2c_device_id adm1026_id[] = {
  1662. { "adm1026", 0 },
  1663. { }
  1664. };
  1665. MODULE_DEVICE_TABLE(i2c, adm1026_id);
  1666. static struct i2c_driver adm1026_driver = {
  1667. .class = I2C_CLASS_HWMON,
  1668. .driver = {
  1669. .name = "adm1026",
  1670. },
  1671. .probe_new = adm1026_probe,
  1672. .id_table = adm1026_id,
  1673. .detect = adm1026_detect,
  1674. .address_list = normal_i2c,
  1675. };
  1676. module_i2c_driver(adm1026_driver);
  1677. MODULE_LICENSE("GPL");
  1678. MODULE_AUTHOR("Philip Pokorny <[email protected]>, "
  1679. "Justin Thiessen <[email protected]>");
  1680. MODULE_DESCRIPTION("ADM1026 driver");