adm1026.c 59 KB

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