w83795.c 58 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136
  1. /*
  2. * w83795.c - Linux kernel driver for hardware monitoring
  3. * Copyright (C) 2008 Nuvoton Technology Corp.
  4. * Wei Song
  5. *
  6. * This program is free software; you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation - version 2.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program; if not, write to the Free Software
  17. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
  18. * 02110-1301 USA.
  19. *
  20. * Supports following chips:
  21. *
  22. * Chip #vin #fanin #pwm #temp #dts wchipid vendid i2c ISA
  23. * w83795g 21 14 8 6 8 0x79 0x5ca3 yes no
  24. * w83795adg 18 14 2 6 8 0x79 0x5ca3 yes no
  25. */
  26. #include <linux/kernel.h>
  27. #include <linux/module.h>
  28. #include <linux/init.h>
  29. #include <linux/slab.h>
  30. #include <linux/i2c.h>
  31. #include <linux/hwmon.h>
  32. #include <linux/hwmon-sysfs.h>
  33. #include <linux/err.h>
  34. #include <linux/mutex.h>
  35. #include <linux/delay.h>
  36. /* Addresses to scan */
  37. static unsigned short normal_i2c[] = { 0x2c, 0x2d, 0x2e, 0x2f, I2C_CLIENT_END };
  38. static int reset;
  39. module_param(reset, bool, 0);
  40. MODULE_PARM_DESC(reset, "Set to 1 to reset chip, not recommended");
  41. #define W83795_REG_BANKSEL 0x00
  42. #define W83795_REG_VENDORID 0xfd
  43. #define W83795_REG_CHIPID 0xfe
  44. #define W83795_REG_DEVICEID 0xfb
  45. #define W83795_REG_I2C_ADDR 0xfc
  46. #define W83795_REG_CONFIG 0x01
  47. #define W83795_REG_CONFIG_CONFIG48 0x04
  48. /* Multi-Function Pin Ctrl Registers */
  49. #define W83795_REG_VOLT_CTRL1 0x02
  50. #define W83795_REG_VOLT_CTRL2 0x03
  51. #define W83795_REG_TEMP_CTRL1 0x04
  52. #define W83795_REG_TEMP_CTRL2 0x05
  53. #define W83795_REG_FANIN_CTRL1 0x06
  54. #define W83795_REG_FANIN_CTRL2 0x07
  55. #define W83795_REG_VMIGB_CTRL 0x08
  56. #define TEMP_CTRL_DISABLE 0
  57. #define TEMP_CTRL_TD 1
  58. #define TEMP_CTRL_VSEN 2
  59. #define TEMP_CTRL_TR 3
  60. #define TEMP_CTRL_SHIFT 4
  61. #define TEMP_CTRL_HASIN_SHIFT 5
  62. /* temp mode may effect VSEN17-12 (in20-15) */
  63. static u16 W83795_REG_TEMP_CTRL[][6] = {
  64. /* Disable, TD, VSEN, TR, register shift value, has_in shift num */
  65. {0x00, 0x01, 0x02, 0x03, 0, 17}, /* TR1 */
  66. {0x00, 0x04, 0x08, 0x0C, 2, 18}, /* TR2 */
  67. {0x00, 0x10, 0x20, 0x30, 4, 19}, /* TR3 */
  68. {0x00, 0x40, 0x80, 0xC0, 6, 20}, /* TR4 */
  69. {0x00, 0x00, 0x02, 0x03, 0, 15}, /* TR5 */
  70. {0x00, 0x00, 0x08, 0x0C, 2, 16}, /* TR6 */
  71. };
  72. #define TEMP_READ 0
  73. #define TEMP_CRIT 1
  74. #define TEMP_CRIT_HYST 2
  75. #define TEMP_WARN 3
  76. #define TEMP_WARN_HYST 4
  77. /* only crit and crit_hyst affect real-time alarm status
  78. * current crit crit_hyst warn warn_hyst */
  79. static u16 W83795_REG_TEMP[][5] = {
  80. {0x21, 0x96, 0x97, 0x98, 0x99}, /* TD1/TR1 */
  81. {0x22, 0x9a, 0x9b, 0x9c, 0x9d}, /* TD2/TR2 */
  82. {0x23, 0x9e, 0x9f, 0xa0, 0xa1}, /* TD3/TR3 */
  83. {0x24, 0xa2, 0xa3, 0xa4, 0xa5}, /* TD4/TR4 */
  84. {0x1f, 0xa6, 0xa7, 0xa8, 0xa9}, /* TR5 */
  85. {0x20, 0xaa, 0xab, 0xac, 0xad}, /* TR6 */
  86. };
  87. #define IN_READ 0
  88. #define IN_MAX 1
  89. #define IN_LOW 2
  90. static const u16 W83795_REG_IN[][3] = {
  91. /* Current, HL, LL */
  92. {0x10, 0x70, 0x71}, /* VSEN1 */
  93. {0x11, 0x72, 0x73}, /* VSEN2 */
  94. {0x12, 0x74, 0x75}, /* VSEN3 */
  95. {0x13, 0x76, 0x77}, /* VSEN4 */
  96. {0x14, 0x78, 0x79}, /* VSEN5 */
  97. {0x15, 0x7a, 0x7b}, /* VSEN6 */
  98. {0x16, 0x7c, 0x7d}, /* VSEN7 */
  99. {0x17, 0x7e, 0x7f}, /* VSEN8 */
  100. {0x18, 0x80, 0x81}, /* VSEN9 */
  101. {0x19, 0x82, 0x83}, /* VSEN10 */
  102. {0x1A, 0x84, 0x85}, /* VSEN11 */
  103. {0x1B, 0x86, 0x87}, /* VTT */
  104. {0x1C, 0x88, 0x89}, /* 3VDD */
  105. {0x1D, 0x8a, 0x8b}, /* 3VSB */
  106. {0x1E, 0x8c, 0x8d}, /* VBAT */
  107. {0x1F, 0xa6, 0xa7}, /* VSEN12 */
  108. {0x20, 0xaa, 0xab}, /* VSEN13 */
  109. {0x21, 0x96, 0x97}, /* VSEN14 */
  110. {0x22, 0x9a, 0x9b}, /* VSEN15 */
  111. {0x23, 0x9e, 0x9f}, /* VSEN16 */
  112. {0x24, 0xa2, 0xa3}, /* VSEN17 */
  113. };
  114. #define W83795_REG_VRLSB 0x3C
  115. #define VRLSB_SHIFT 6
  116. static const u8 W83795_REG_IN_HL_LSB[] = {
  117. 0x8e, /* VSEN1-4 */
  118. 0x90, /* VSEN5-8 */
  119. 0x92, /* VSEN9-11 */
  120. 0x94, /* VTT, 3VDD, 3VSB, 3VBAT */
  121. 0xa8, /* VSEN12 */
  122. 0xac, /* VSEN13 */
  123. 0x98, /* VSEN14 */
  124. 0x9c, /* VSEN15 */
  125. 0xa0, /* VSEN16 */
  126. 0xa4, /* VSEN17 */
  127. };
  128. #define IN_LSB_REG(index, type) \
  129. (((type) == 1) ? W83795_REG_IN_HL_LSB[(index)] \
  130. : (W83795_REG_IN_HL_LSB[(index)] + 1))
  131. #define IN_LSB_REG_NUM 10
  132. #define IN_LSB_SHIFT 0
  133. #define IN_LSB_IDX 1
  134. static const u8 IN_LSB_SHIFT_IDX[][2] = {
  135. /* High/Low LSB shift, LSB No. */
  136. {0x00, 0x00}, /* VSEN1 */
  137. {0x02, 0x00}, /* VSEN2 */
  138. {0x04, 0x00}, /* VSEN3 */
  139. {0x06, 0x00}, /* VSEN4 */
  140. {0x00, 0x01}, /* VSEN5 */
  141. {0x02, 0x01}, /* VSEN6 */
  142. {0x04, 0x01}, /* VSEN7 */
  143. {0x06, 0x01}, /* VSEN8 */
  144. {0x00, 0x02}, /* VSEN9 */
  145. {0x02, 0x02}, /* VSEN10 */
  146. {0x04, 0x02}, /* VSEN11 */
  147. {0x00, 0x03}, /* VTT */
  148. {0x02, 0x03}, /* 3VDD */
  149. {0x04, 0x03}, /* 3VSB */
  150. {0x06, 0x03}, /* VBAT */
  151. {0x06, 0x04}, /* VSEN12 */
  152. {0x06, 0x05}, /* VSEN13 */
  153. {0x06, 0x06}, /* VSEN14 */
  154. {0x06, 0x07}, /* VSEN15 */
  155. {0x06, 0x08}, /* VSEN16 */
  156. {0x06, 0x09}, /* VSEN17 */
  157. };
  158. /* 3VDD, 3VSB, VBAT * 0.006 */
  159. #define REST_VLT_BEGIN 12 /* the 13th volt to 15th */
  160. #define REST_VLT_END 14 /* the 13th volt to 15th */
  161. #define W83795_REG_FAN(index) (0x2E + (index))
  162. #define W83795_REG_FAN_MIN_HL(index) (0xB6 + (index))
  163. #define W83795_REG_FAN_MIN_LSB(index) (0xC4 + (index) / 2)
  164. #define W83795_REG_FAN_MIN_LSB_SHIFT(index) \
  165. (((index) % 1) ? 4 : 0)
  166. #define W83795_REG_VID_CTRL 0x6A
  167. #define ALARM_BEEP_REG_NUM 6
  168. #define W83795_REG_ALARM(index) (0x41 + (index))
  169. #define W83795_REG_BEEP(index) (0x50 + (index))
  170. #define W83795_REG_CLR_CHASSIS 0x4D
  171. #define W83795_REG_TEMP_NUM 6
  172. #define W83795_REG_FCMS1 0x201
  173. #define W83795_REG_FCMS2 0x208
  174. #define W83795_REG_TFMR(index) (0x202 + (index))
  175. #define W83795_REG_FOMC 0x20F
  176. #define W83795_REG_FOPFP(index) (0x218 + (index))
  177. #define W83795_REG_TSS(index) (0x209 + (index))
  178. #define PWM_OUTPUT 0
  179. #define PWM_START 1
  180. #define PWM_NONSTOP 2
  181. #define PWM_STOP_TIME 3
  182. #define PWM_DIV 4
  183. #define W83795_REG_PWM(index, nr) \
  184. (((nr) == 0 ? 0x210 : \
  185. (nr) == 1 ? 0x220 : \
  186. (nr) == 2 ? 0x228 : \
  187. (nr) == 3 ? 0x230 : 0x218) + (index))
  188. #define W83795_REG_FOPFP_DIV(index) \
  189. (((index) < 8) ? ((index) + 1) : \
  190. ((index) == 8) ? 12 : \
  191. (16 << ((index) - 9)))
  192. #define W83795_REG_FTSH(index) (0x240 + (index) * 2)
  193. #define W83795_REG_FTSL(index) (0x241 + (index) * 2)
  194. #define W83795_REG_TFTS 0x250
  195. #define TEMP_PWM_TTTI 0
  196. #define TEMP_PWM_CTFS 1
  197. #define TEMP_PWM_HCT 2
  198. #define TEMP_PWM_HOT 3
  199. #define W83795_REG_TTTI(index) (0x260 + (index))
  200. #define W83795_REG_CTFS(index) (0x268 + (index))
  201. #define W83795_REG_HT(index) (0x270 + (index))
  202. #define SF4_TEMP 0
  203. #define SF4_PWM 1
  204. #define W83795_REG_SF4_TEMP(temp_num, index) \
  205. (0x280 + 0x10 * (temp_num) + (index))
  206. #define W83795_REG_SF4_PWM(temp_num, index) \
  207. (0x288 + 0x10 * (temp_num) + (index))
  208. #define W83795_REG_DTSC 0x301
  209. #define W83795_REG_DTSE 0x302
  210. #define W83795_REG_DTS(index) (0x26 + (index))
  211. #define DTS_CRIT 0
  212. #define DTS_CRIT_HYST 1
  213. #define DTS_WARN 2
  214. #define DTS_WARN_HYST 3
  215. #define W83795_REG_DTS_EXT(index) (0xB2 + (index))
  216. #define SETUP_PWM_DEFAULT 0
  217. #define SETUP_PWM_UPTIME 1
  218. #define SETUP_PWM_DOWNTIME 2
  219. #define W83795_REG_SETUP_PWM(index) (0x20C + (index))
  220. static inline u16 in_from_reg(u8 index, u16 val)
  221. {
  222. if ((index >= REST_VLT_BEGIN) && (index <= REST_VLT_END))
  223. return val * 6;
  224. else
  225. return val * 2;
  226. }
  227. static inline u16 in_to_reg(u8 index, u16 val)
  228. {
  229. if ((index >= REST_VLT_BEGIN) && (index <= REST_VLT_END))
  230. return val / 6;
  231. else
  232. return val / 2;
  233. }
  234. static inline unsigned long fan_from_reg(u16 val)
  235. {
  236. if ((val >= 0xff0) || (val == 0))
  237. return 0;
  238. return 1350000UL / val;
  239. }
  240. static inline u16 fan_to_reg(long rpm)
  241. {
  242. if (rpm <= 0)
  243. return 0x0fff;
  244. return SENSORS_LIMIT((1350000 + (rpm >> 1)) / rpm, 1, 0xffe);
  245. }
  246. static inline unsigned long time_from_reg(u8 reg)
  247. {
  248. return reg * 100;
  249. }
  250. static inline u8 time_to_reg(unsigned long val)
  251. {
  252. return SENSORS_LIMIT((val + 50) / 100, 0, 0xff);
  253. }
  254. static inline long temp_from_reg(s8 reg)
  255. {
  256. return reg * 1000;
  257. }
  258. static inline s8 temp_to_reg(long val, s8 min, s8 max)
  259. {
  260. return SENSORS_LIMIT((val < 0 ? -val : val) / 1000, min, max);
  261. }
  262. enum chip_types {w83795g, w83795adg};
  263. struct w83795_data {
  264. struct device *hwmon_dev;
  265. struct mutex update_lock;
  266. unsigned long last_updated; /* In jiffies */
  267. enum chip_types chip_type;
  268. u8 bank;
  269. u32 has_in; /* Enable monitor VIN or not */
  270. u16 in[21][3]; /* Register value, read/high/low */
  271. u8 in_lsb[10][3]; /* LSB Register value, high/low */
  272. u8 has_gain; /* has gain: in17-20 * 8 */
  273. u16 has_fan; /* Enable fan14-1 or not */
  274. u16 fan[14]; /* Register value combine */
  275. u16 fan_min[14]; /* Register value combine */
  276. u8 has_temp; /* Enable monitor temp6-1 or not */
  277. u8 temp[6][5]; /* current, crit, crit_hyst, warn, warn_hyst */
  278. u8 temp_read_vrlsb[6];
  279. u8 temp_mode; /* bit 0: TR mode, bit 1: TD mode */
  280. u8 temp_src[3]; /* Register value */
  281. u8 enable_dts; /* Enable PECI and SB-TSI,
  282. * bit 0: =1 enable, =0 disable,
  283. * bit 1: =1 AMD SB-TSI, =0 Intel PECI */
  284. u8 has_dts; /* Enable monitor DTS temp */
  285. u8 dts[8]; /* Register value */
  286. u8 dts_read_vrlsb[8]; /* Register value */
  287. u8 dts_ext[4]; /* Register value */
  288. u8 has_pwm; /* 795g supports 8 pwm, 795adg only supports 2,
  289. * no config register, only affected by chip
  290. * type */
  291. u8 pwm[8][5]; /* Register value, output, start, non stop, stop
  292. * time, div */
  293. u8 pwm_fcms[2]; /* Register value */
  294. u8 pwm_tfmr[6]; /* Register value */
  295. u8 pwm_fomc; /* Register value */
  296. u16 target_speed[8]; /* Register value, target speed for speed
  297. * cruise */
  298. u8 tol_speed; /* tolerance of target speed */
  299. u8 pwm_temp[6][4]; /* TTTI, CTFS, HCT, HOT */
  300. u8 sf4_reg[6][2][7]; /* 6 temp, temp/dcpwm, 7 registers */
  301. u8 setup_pwm[3]; /* Register value */
  302. u8 alarms[6]; /* Register value */
  303. u8 beeps[6]; /* Register value */
  304. u8 beep_enable;
  305. char valid;
  306. };
  307. /*
  308. * Hardware access
  309. * We assume that nobdody can change the bank outside the driver.
  310. */
  311. /* Must be called with data->update_lock held, except during initialization */
  312. static int w83795_set_bank(struct i2c_client *client, u8 bank)
  313. {
  314. struct w83795_data *data = i2c_get_clientdata(client);
  315. int err;
  316. /* If the same bank is already set, nothing to do */
  317. if ((data->bank & 0x07) == bank)
  318. return 0;
  319. /* Change to new bank, preserve all other bits */
  320. bank |= data->bank & ~0x07;
  321. err = i2c_smbus_write_byte_data(client, W83795_REG_BANKSEL, bank);
  322. if (err < 0) {
  323. dev_err(&client->dev,
  324. "Failed to set bank to %d, err %d\n",
  325. (int)bank, err);
  326. return err;
  327. }
  328. data->bank = bank;
  329. return 0;
  330. }
  331. /* Must be called with data->update_lock held, except during initialization */
  332. static u8 w83795_read(struct i2c_client *client, u16 reg)
  333. {
  334. int err;
  335. err = w83795_set_bank(client, reg >> 8);
  336. if (err < 0)
  337. return 0x00; /* Arbitrary */
  338. err = i2c_smbus_read_byte_data(client, reg & 0xff);
  339. if (err < 0) {
  340. dev_err(&client->dev,
  341. "Failed to read from register 0x%03x, err %d\n",
  342. (int)reg, err);
  343. return 0x00; /* Arbitrary */
  344. }
  345. return err;
  346. }
  347. /* Must be called with data->update_lock held, except during initialization */
  348. static int w83795_write(struct i2c_client *client, u16 reg, u8 value)
  349. {
  350. int err;
  351. err = w83795_set_bank(client, reg >> 8);
  352. if (err < 0)
  353. return err;
  354. err = i2c_smbus_write_byte_data(client, reg & 0xff, value);
  355. if (err < 0)
  356. dev_err(&client->dev,
  357. "Failed to write to register 0x%03x, err %d\n",
  358. (int)reg, err);
  359. return err;
  360. }
  361. static struct w83795_data *w83795_update_device(struct device *dev)
  362. {
  363. struct i2c_client *client = to_i2c_client(dev);
  364. struct w83795_data *data = i2c_get_clientdata(client);
  365. u16 tmp;
  366. int i;
  367. mutex_lock(&data->update_lock);
  368. if (!(time_after(jiffies, data->last_updated + HZ * 2)
  369. || !data->valid))
  370. goto END;
  371. /* Update the voltages value */
  372. for (i = 0; i < ARRAY_SIZE(data->in); i++) {
  373. if (!(data->has_in & (1 << i)))
  374. continue;
  375. tmp = w83795_read(client, W83795_REG_IN[i][IN_READ]) << 2;
  376. tmp |= (w83795_read(client, W83795_REG_VRLSB)
  377. >> VRLSB_SHIFT) & 0x03;
  378. data->in[i][IN_READ] = tmp;
  379. }
  380. /* Update fan */
  381. for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
  382. if (!(data->has_fan & (1 << i)))
  383. continue;
  384. data->fan[i] = w83795_read(client, W83795_REG_FAN(i)) << 4;
  385. data->fan[i] |=
  386. (w83795_read(client, W83795_REG_VRLSB >> 4)) & 0x0F;
  387. }
  388. /* Update temperature */
  389. for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
  390. /* even stop monitor, register still keep value, just read out
  391. * it */
  392. if (!(data->has_temp & (1 << i))) {
  393. data->temp[i][TEMP_READ] = 0;
  394. data->temp_read_vrlsb[i] = 0;
  395. continue;
  396. }
  397. data->temp[i][TEMP_READ] =
  398. w83795_read(client, W83795_REG_TEMP[i][TEMP_READ]);
  399. data->temp_read_vrlsb[i] =
  400. w83795_read(client, W83795_REG_VRLSB);
  401. }
  402. /* Update dts temperature */
  403. if (data->enable_dts != 0) {
  404. for (i = 0; i < ARRAY_SIZE(data->dts); i++) {
  405. if (!(data->has_dts & (1 << i)))
  406. continue;
  407. data->dts[i] =
  408. w83795_read(client, W83795_REG_DTS(i));
  409. data->dts_read_vrlsb[i] =
  410. w83795_read(client, W83795_REG_VRLSB);
  411. }
  412. }
  413. /* Update pwm output */
  414. for (i = 0; i < data->has_pwm; i++) {
  415. data->pwm[i][PWM_OUTPUT] =
  416. w83795_read(client, W83795_REG_PWM(i, PWM_OUTPUT));
  417. }
  418. /* update alarm */
  419. for (i = 0; i < ALARM_BEEP_REG_NUM; i++)
  420. data->alarms[i] = w83795_read(client, W83795_REG_ALARM(i));
  421. data->last_updated = jiffies;
  422. data->valid = 1;
  423. END:
  424. mutex_unlock(&data->update_lock);
  425. return data;
  426. }
  427. /*
  428. * Sysfs attributes
  429. */
  430. #define ALARM_STATUS 0
  431. #define BEEP_ENABLE 1
  432. static ssize_t
  433. show_alarm_beep(struct device *dev, struct device_attribute *attr, char *buf)
  434. {
  435. struct w83795_data *data = w83795_update_device(dev);
  436. struct sensor_device_attribute_2 *sensor_attr =
  437. to_sensor_dev_attr_2(attr);
  438. int nr = sensor_attr->nr;
  439. int index = sensor_attr->index >> 3;
  440. int bit = sensor_attr->index & 0x07;
  441. u8 val;
  442. if (ALARM_STATUS == nr) {
  443. val = (data->alarms[index] >> (bit)) & 1;
  444. } else { /* BEEP_ENABLE */
  445. val = (data->beeps[index] >> (bit)) & 1;
  446. }
  447. return sprintf(buf, "%u\n", val);
  448. }
  449. static ssize_t
  450. store_beep(struct device *dev, struct device_attribute *attr,
  451. const char *buf, size_t count)
  452. {
  453. struct i2c_client *client = to_i2c_client(dev);
  454. struct w83795_data *data = i2c_get_clientdata(client);
  455. struct sensor_device_attribute_2 *sensor_attr =
  456. to_sensor_dev_attr_2(attr);
  457. int index = sensor_attr->index >> 3;
  458. int shift = sensor_attr->index & 0x07;
  459. u8 beep_bit = 1 << shift;
  460. unsigned long val;
  461. if (strict_strtoul(buf, 10, &val) < 0)
  462. return -EINVAL;
  463. if (val != 0 && val != 1)
  464. return -EINVAL;
  465. mutex_lock(&data->update_lock);
  466. data->beeps[index] = w83795_read(client, W83795_REG_BEEP(index));
  467. data->beeps[index] &= ~beep_bit;
  468. data->beeps[index] |= val << shift;
  469. w83795_write(client, W83795_REG_BEEP(index), data->beeps[index]);
  470. mutex_unlock(&data->update_lock);
  471. return count;
  472. }
  473. static ssize_t
  474. show_beep_enable(struct device *dev, struct device_attribute *attr, char *buf)
  475. {
  476. struct i2c_client *client = to_i2c_client(dev);
  477. struct w83795_data *data = i2c_get_clientdata(client);
  478. return sprintf(buf, "%u\n", data->beep_enable);
  479. }
  480. static ssize_t
  481. store_beep_enable(struct device *dev, struct device_attribute *attr,
  482. const char *buf, size_t count)
  483. {
  484. struct i2c_client *client = to_i2c_client(dev);
  485. struct w83795_data *data = i2c_get_clientdata(client);
  486. unsigned long val;
  487. u8 tmp;
  488. if (strict_strtoul(buf, 10, &val) < 0)
  489. return -EINVAL;
  490. if (val != 0 && val != 1)
  491. return -EINVAL;
  492. mutex_lock(&data->update_lock);
  493. data->beep_enable = val;
  494. tmp = w83795_read(client, W83795_REG_BEEP(5));
  495. tmp &= 0x7f;
  496. tmp |= val << 7;
  497. w83795_write(client, W83795_REG_BEEP(5), tmp);
  498. mutex_unlock(&data->update_lock);
  499. return count;
  500. }
  501. /* Write any value to clear chassis alarm */
  502. static ssize_t
  503. store_chassis_clear(struct device *dev,
  504. struct device_attribute *attr, const char *buf,
  505. size_t count)
  506. {
  507. struct i2c_client *client = to_i2c_client(dev);
  508. struct w83795_data *data = i2c_get_clientdata(client);
  509. u8 val;
  510. mutex_lock(&data->update_lock);
  511. val = w83795_read(client, W83795_REG_CLR_CHASSIS);
  512. val |= 0x80;
  513. w83795_write(client, W83795_REG_CLR_CHASSIS, val);
  514. mutex_unlock(&data->update_lock);
  515. return count;
  516. }
  517. #define FAN_INPUT 0
  518. #define FAN_MIN 1
  519. static ssize_t
  520. show_fan(struct device *dev, struct device_attribute *attr, char *buf)
  521. {
  522. struct sensor_device_attribute_2 *sensor_attr =
  523. to_sensor_dev_attr_2(attr);
  524. int nr = sensor_attr->nr;
  525. int index = sensor_attr->index;
  526. struct w83795_data *data = w83795_update_device(dev);
  527. u16 val;
  528. if (FAN_INPUT == nr)
  529. val = data->fan[index] & 0x0fff;
  530. else
  531. val = data->fan_min[index] & 0x0fff;
  532. return sprintf(buf, "%lu\n", fan_from_reg(val));
  533. }
  534. static ssize_t
  535. store_fan_min(struct device *dev, struct device_attribute *attr,
  536. const char *buf, size_t count)
  537. {
  538. struct sensor_device_attribute_2 *sensor_attr =
  539. to_sensor_dev_attr_2(attr);
  540. int index = sensor_attr->index;
  541. struct i2c_client *client = to_i2c_client(dev);
  542. struct w83795_data *data = i2c_get_clientdata(client);
  543. unsigned long val;
  544. if (strict_strtoul(buf, 10, &val))
  545. return -EINVAL;
  546. val = fan_to_reg(val);
  547. mutex_lock(&data->update_lock);
  548. data->fan_min[index] = val;
  549. w83795_write(client, W83795_REG_FAN_MIN_HL(index), (val >> 4) & 0xff);
  550. val &= 0x0f;
  551. if (index % 1) {
  552. val <<= 4;
  553. val |= w83795_read(client, W83795_REG_FAN_MIN_LSB(index))
  554. & 0x0f;
  555. } else {
  556. val |= w83795_read(client, W83795_REG_FAN_MIN_LSB(index))
  557. & 0xf0;
  558. }
  559. w83795_write(client, W83795_REG_FAN_MIN_LSB(index), val & 0xff);
  560. mutex_unlock(&data->update_lock);
  561. return count;
  562. }
  563. static ssize_t
  564. show_pwm(struct device *dev, struct device_attribute *attr, char *buf)
  565. {
  566. struct w83795_data *data = w83795_update_device(dev);
  567. struct sensor_device_attribute_2 *sensor_attr =
  568. to_sensor_dev_attr_2(attr);
  569. int nr = sensor_attr->nr;
  570. int index = sensor_attr->index;
  571. u16 val;
  572. switch (nr) {
  573. case PWM_STOP_TIME:
  574. val = time_from_reg(data->pwm[index][nr]);
  575. break;
  576. case PWM_DIV:
  577. val = W83795_REG_FOPFP_DIV(data->pwm[index][nr] & 0x0f);
  578. break;
  579. default:
  580. val = data->pwm[index][nr];
  581. break;
  582. }
  583. return sprintf(buf, "%u\n", val);
  584. }
  585. static ssize_t
  586. store_pwm(struct device *dev, struct device_attribute *attr,
  587. const char *buf, size_t count)
  588. {
  589. struct i2c_client *client = to_i2c_client(dev);
  590. struct w83795_data *data = i2c_get_clientdata(client);
  591. struct sensor_device_attribute_2 *sensor_attr =
  592. to_sensor_dev_attr_2(attr);
  593. int nr = sensor_attr->nr;
  594. int index = sensor_attr->index;
  595. unsigned long val;
  596. int i;
  597. if (strict_strtoul(buf, 10, &val) < 0)
  598. return -EINVAL;
  599. mutex_lock(&data->update_lock);
  600. switch (nr) {
  601. case PWM_STOP_TIME:
  602. val = time_to_reg(val);
  603. break;
  604. case PWM_DIV:
  605. for (i = 0; i < 16; i++) {
  606. if (W83795_REG_FOPFP_DIV(i) == val) {
  607. val = i;
  608. break;
  609. }
  610. }
  611. if (i >= 16)
  612. goto err_end;
  613. val |= w83795_read(client, W83795_REG_PWM(index, nr)) & 0x80;
  614. break;
  615. default:
  616. val = SENSORS_LIMIT(val, 0, 0xff);
  617. break;
  618. }
  619. w83795_write(client, W83795_REG_PWM(index, nr), val);
  620. data->pwm[index][nr] = val & 0xff;
  621. mutex_unlock(&data->update_lock);
  622. return count;
  623. err_end:
  624. mutex_unlock(&data->update_lock);
  625. return -EINVAL;
  626. }
  627. static ssize_t
  628. show_pwm_enable(struct device *dev, struct device_attribute *attr, char *buf)
  629. {
  630. struct sensor_device_attribute_2 *sensor_attr =
  631. to_sensor_dev_attr_2(attr);
  632. struct i2c_client *client = to_i2c_client(dev);
  633. struct w83795_data *data = i2c_get_clientdata(client);
  634. int index = sensor_attr->index;
  635. u8 tmp;
  636. if (1 == (data->pwm_fcms[0] & (1 << index))) {
  637. tmp = 2;
  638. goto out;
  639. }
  640. for (tmp = 0; tmp < 6; tmp++) {
  641. if (data->pwm_tfmr[tmp] & (1 << index)) {
  642. tmp = 3;
  643. goto out;
  644. }
  645. }
  646. if (data->pwm_fomc & (1 << index))
  647. tmp = 0;
  648. else
  649. tmp = 1;
  650. out:
  651. return sprintf(buf, "%u\n", tmp);
  652. }
  653. static ssize_t
  654. store_pwm_enable(struct device *dev, struct device_attribute *attr,
  655. const char *buf, size_t count)
  656. {
  657. struct i2c_client *client = to_i2c_client(dev);
  658. struct w83795_data *data = i2c_get_clientdata(client);
  659. struct sensor_device_attribute_2 *sensor_attr =
  660. to_sensor_dev_attr_2(attr);
  661. int index = sensor_attr->index;
  662. unsigned long val;
  663. int i;
  664. if (strict_strtoul(buf, 10, &val) < 0)
  665. return -EINVAL;
  666. if (val > 2)
  667. return -EINVAL;
  668. mutex_lock(&data->update_lock);
  669. switch (val) {
  670. case 0:
  671. case 1:
  672. data->pwm_fcms[0] &= ~(1 << index);
  673. w83795_write(client, W83795_REG_FCMS1, data->pwm_fcms[0]);
  674. for (i = 0; i < 6; i++) {
  675. data->pwm_tfmr[i] &= ~(1 << index);
  676. w83795_write(client, W83795_REG_TFMR(i),
  677. data->pwm_tfmr[i]);
  678. }
  679. data->pwm_fomc |= 1 << index;
  680. data->pwm_fomc ^= val << index;
  681. w83795_write(client, W83795_REG_FOMC, data->pwm_fomc);
  682. break;
  683. case 2:
  684. data->pwm_fcms[0] |= (1 << index);
  685. w83795_write(client, W83795_REG_FCMS1, data->pwm_fcms[0]);
  686. break;
  687. }
  688. mutex_unlock(&data->update_lock);
  689. return count;
  690. }
  691. static ssize_t
  692. show_temp_src(struct device *dev, struct device_attribute *attr, char *buf)
  693. {
  694. struct sensor_device_attribute_2 *sensor_attr =
  695. to_sensor_dev_attr_2(attr);
  696. struct i2c_client *client = to_i2c_client(dev);
  697. struct w83795_data *data = i2c_get_clientdata(client);
  698. int index = sensor_attr->index;
  699. u8 val = index / 2;
  700. u8 tmp = data->temp_src[val];
  701. if (index % 1)
  702. val = 4;
  703. else
  704. val = 0;
  705. tmp >>= val;
  706. tmp &= 0x0f;
  707. return sprintf(buf, "%u\n", tmp);
  708. }
  709. static ssize_t
  710. store_temp_src(struct device *dev, struct device_attribute *attr,
  711. const char *buf, size_t count)
  712. {
  713. struct i2c_client *client = to_i2c_client(dev);
  714. struct w83795_data *data = i2c_get_clientdata(client);
  715. struct sensor_device_attribute_2 *sensor_attr =
  716. to_sensor_dev_attr_2(attr);
  717. int index = sensor_attr->index;
  718. unsigned long tmp;
  719. u8 val = index / 2;
  720. if (strict_strtoul(buf, 10, &tmp) < 0)
  721. return -EINVAL;
  722. tmp = SENSORS_LIMIT(tmp, 0, 15);
  723. mutex_lock(&data->update_lock);
  724. if (index % 1) {
  725. tmp <<= 4;
  726. data->temp_src[val] &= 0x0f;
  727. } else {
  728. data->temp_src[val] &= 0xf0;
  729. }
  730. data->temp_src[val] |= tmp;
  731. w83795_write(client, W83795_REG_TSS(val), data->temp_src[val]);
  732. mutex_unlock(&data->update_lock);
  733. return count;
  734. }
  735. #define TEMP_PWM_ENABLE 0
  736. #define TEMP_PWM_FAN_MAP 1
  737. static ssize_t
  738. show_temp_pwm_enable(struct device *dev, struct device_attribute *attr,
  739. char *buf)
  740. {
  741. struct i2c_client *client = to_i2c_client(dev);
  742. struct w83795_data *data = i2c_get_clientdata(client);
  743. struct sensor_device_attribute_2 *sensor_attr =
  744. to_sensor_dev_attr_2(attr);
  745. int nr = sensor_attr->nr;
  746. int index = sensor_attr->index;
  747. u8 tmp = 0xff;
  748. switch (nr) {
  749. case TEMP_PWM_ENABLE:
  750. tmp = (data->pwm_fcms[1] >> index) & 1;
  751. if (tmp)
  752. tmp = 4;
  753. else
  754. tmp = 3;
  755. break;
  756. case TEMP_PWM_FAN_MAP:
  757. tmp = data->pwm_tfmr[index];
  758. break;
  759. }
  760. return sprintf(buf, "%u\n", tmp);
  761. }
  762. static ssize_t
  763. store_temp_pwm_enable(struct device *dev, struct device_attribute *attr,
  764. const char *buf, size_t count)
  765. {
  766. struct i2c_client *client = to_i2c_client(dev);
  767. struct w83795_data *data = i2c_get_clientdata(client);
  768. struct sensor_device_attribute_2 *sensor_attr =
  769. to_sensor_dev_attr_2(attr);
  770. int nr = sensor_attr->nr;
  771. int index = sensor_attr->index;
  772. unsigned long tmp;
  773. if (strict_strtoul(buf, 10, &tmp) < 0)
  774. return -EINVAL;
  775. switch (nr) {
  776. case TEMP_PWM_ENABLE:
  777. if ((tmp != 3) && (tmp != 4))
  778. return -EINVAL;
  779. tmp -= 3;
  780. mutex_lock(&data->update_lock);
  781. data->pwm_fcms[1] &= ~(1 << index);
  782. data->pwm_fcms[1] |= tmp << index;
  783. w83795_write(client, W83795_REG_FCMS2, data->pwm_fcms[1]);
  784. mutex_unlock(&data->update_lock);
  785. break;
  786. case TEMP_PWM_FAN_MAP:
  787. mutex_lock(&data->update_lock);
  788. tmp = SENSORS_LIMIT(tmp, 0, 0xff);
  789. w83795_write(client, W83795_REG_TFMR(index), tmp);
  790. data->pwm_tfmr[index] = tmp;
  791. mutex_unlock(&data->update_lock);
  792. break;
  793. }
  794. return count;
  795. }
  796. #define FANIN_TARGET 0
  797. #define FANIN_TOL 1
  798. static ssize_t
  799. show_fanin(struct device *dev, struct device_attribute *attr, char *buf)
  800. {
  801. struct i2c_client *client = to_i2c_client(dev);
  802. struct w83795_data *data = i2c_get_clientdata(client);
  803. struct sensor_device_attribute_2 *sensor_attr =
  804. to_sensor_dev_attr_2(attr);
  805. int nr = sensor_attr->nr;
  806. int index = sensor_attr->index;
  807. u16 tmp = 0;
  808. switch (nr) {
  809. case FANIN_TARGET:
  810. tmp = fan_from_reg(data->target_speed[index]);
  811. break;
  812. case FANIN_TOL:
  813. tmp = data->tol_speed;
  814. break;
  815. }
  816. return sprintf(buf, "%u\n", tmp);
  817. }
  818. static ssize_t
  819. store_fanin(struct device *dev, struct device_attribute *attr,
  820. const char *buf, size_t count)
  821. {
  822. struct i2c_client *client = to_i2c_client(dev);
  823. struct w83795_data *data = i2c_get_clientdata(client);
  824. struct sensor_device_attribute_2 *sensor_attr =
  825. to_sensor_dev_attr_2(attr);
  826. int nr = sensor_attr->nr;
  827. int index = sensor_attr->index;
  828. unsigned long val;
  829. if (strict_strtoul(buf, 10, &val) < 0)
  830. return -EINVAL;
  831. mutex_lock(&data->update_lock);
  832. switch (nr) {
  833. case FANIN_TARGET:
  834. val = fan_to_reg(SENSORS_LIMIT(val, 0, 0xfff));
  835. w83795_write(client, W83795_REG_FTSH(index), (val >> 4) & 0xff);
  836. w83795_write(client, W83795_REG_FTSL(index), (val << 4) & 0xf0);
  837. data->target_speed[index] = val;
  838. break;
  839. case FANIN_TOL:
  840. val = SENSORS_LIMIT(val, 0, 0x3f);
  841. w83795_write(client, W83795_REG_TFTS, val);
  842. data->tol_speed = val;
  843. break;
  844. }
  845. mutex_unlock(&data->update_lock);
  846. return count;
  847. }
  848. static ssize_t
  849. show_temp_pwm(struct device *dev, struct device_attribute *attr, char *buf)
  850. {
  851. struct i2c_client *client = to_i2c_client(dev);
  852. struct w83795_data *data = i2c_get_clientdata(client);
  853. struct sensor_device_attribute_2 *sensor_attr =
  854. to_sensor_dev_attr_2(attr);
  855. int nr = sensor_attr->nr;
  856. int index = sensor_attr->index;
  857. long tmp = temp_from_reg(data->pwm_temp[index][nr]);
  858. return sprintf(buf, "%ld\n", tmp);
  859. }
  860. static ssize_t
  861. store_temp_pwm(struct device *dev, struct device_attribute *attr,
  862. const char *buf, size_t count)
  863. {
  864. struct i2c_client *client = to_i2c_client(dev);
  865. struct w83795_data *data = i2c_get_clientdata(client);
  866. struct sensor_device_attribute_2 *sensor_attr =
  867. to_sensor_dev_attr_2(attr);
  868. int nr = sensor_attr->nr;
  869. int index = sensor_attr->index;
  870. unsigned long val;
  871. u8 tmp;
  872. if (strict_strtoul(buf, 10, &val) < 0)
  873. return -EINVAL;
  874. val /= 1000;
  875. mutex_lock(&data->update_lock);
  876. switch (nr) {
  877. case TEMP_PWM_TTTI:
  878. val = SENSORS_LIMIT(val, 0, 0x7f);
  879. w83795_write(client, W83795_REG_TTTI(index), val);
  880. break;
  881. case TEMP_PWM_CTFS:
  882. val = SENSORS_LIMIT(val, 0, 0x7f);
  883. w83795_write(client, W83795_REG_CTFS(index), val);
  884. break;
  885. case TEMP_PWM_HCT:
  886. val = SENSORS_LIMIT(val, 0, 0x0f);
  887. tmp = w83795_read(client, W83795_REG_HT(index));
  888. tmp &= 0x0f;
  889. tmp |= (val << 4) & 0xf0;
  890. w83795_write(client, W83795_REG_HT(index), tmp);
  891. break;
  892. case TEMP_PWM_HOT:
  893. val = SENSORS_LIMIT(val, 0, 0x0f);
  894. tmp = w83795_read(client, W83795_REG_HT(index));
  895. tmp &= 0xf0;
  896. tmp |= val & 0x0f;
  897. w83795_write(client, W83795_REG_HT(index), tmp);
  898. break;
  899. }
  900. data->pwm_temp[index][nr] = val;
  901. mutex_unlock(&data->update_lock);
  902. return count;
  903. }
  904. static ssize_t
  905. show_sf4_pwm(struct device *dev, struct device_attribute *attr, char *buf)
  906. {
  907. struct i2c_client *client = to_i2c_client(dev);
  908. struct w83795_data *data = i2c_get_clientdata(client);
  909. struct sensor_device_attribute_2 *sensor_attr =
  910. to_sensor_dev_attr_2(attr);
  911. int nr = sensor_attr->nr;
  912. int index = sensor_attr->index;
  913. return sprintf(buf, "%u\n", data->sf4_reg[index][SF4_PWM][nr]);
  914. }
  915. static ssize_t
  916. store_sf4_pwm(struct device *dev, struct device_attribute *attr,
  917. const char *buf, size_t count)
  918. {
  919. struct i2c_client *client = to_i2c_client(dev);
  920. struct w83795_data *data = i2c_get_clientdata(client);
  921. struct sensor_device_attribute_2 *sensor_attr =
  922. to_sensor_dev_attr_2(attr);
  923. int nr = sensor_attr->nr;
  924. int index = sensor_attr->index;
  925. unsigned long val;
  926. if (strict_strtoul(buf, 10, &val) < 0)
  927. return -EINVAL;
  928. mutex_lock(&data->update_lock);
  929. w83795_write(client, W83795_REG_SF4_PWM(index, nr), val);
  930. data->sf4_reg[index][SF4_PWM][nr] = val;
  931. mutex_unlock(&data->update_lock);
  932. return count;
  933. }
  934. static ssize_t
  935. show_sf4_temp(struct device *dev, struct device_attribute *attr, char *buf)
  936. {
  937. struct i2c_client *client = to_i2c_client(dev);
  938. struct w83795_data *data = i2c_get_clientdata(client);
  939. struct sensor_device_attribute_2 *sensor_attr =
  940. to_sensor_dev_attr_2(attr);
  941. int nr = sensor_attr->nr;
  942. int index = sensor_attr->index;
  943. return sprintf(buf, "%u\n",
  944. (data->sf4_reg[index][SF4_TEMP][nr]) * 1000);
  945. }
  946. static ssize_t
  947. store_sf4_temp(struct device *dev, struct device_attribute *attr,
  948. const char *buf, size_t count)
  949. {
  950. struct i2c_client *client = to_i2c_client(dev);
  951. struct w83795_data *data = i2c_get_clientdata(client);
  952. struct sensor_device_attribute_2 *sensor_attr =
  953. to_sensor_dev_attr_2(attr);
  954. int nr = sensor_attr->nr;
  955. int index = sensor_attr->index;
  956. unsigned long val;
  957. if (strict_strtoul(buf, 10, &val) < 0)
  958. return -EINVAL;
  959. val /= 1000;
  960. mutex_lock(&data->update_lock);
  961. w83795_write(client, W83795_REG_SF4_TEMP(index, nr), val);
  962. data->sf4_reg[index][SF4_TEMP][nr] = val;
  963. mutex_unlock(&data->update_lock);
  964. return count;
  965. }
  966. static ssize_t
  967. show_temp(struct device *dev, struct device_attribute *attr, char *buf)
  968. {
  969. struct sensor_device_attribute_2 *sensor_attr =
  970. to_sensor_dev_attr_2(attr);
  971. int nr = sensor_attr->nr;
  972. int index = sensor_attr->index;
  973. struct w83795_data *data = w83795_update_device(dev);
  974. long temp = temp_from_reg(data->temp[index][nr] & 0x7f);
  975. if (TEMP_READ == nr)
  976. temp += ((data->temp_read_vrlsb[index] >> VRLSB_SHIFT) & 0x03)
  977. * 250;
  978. if (data->temp[index][nr] & 0x80)
  979. temp = -temp;
  980. return sprintf(buf, "%ld\n", temp);
  981. }
  982. static ssize_t
  983. store_temp(struct device *dev, struct device_attribute *attr,
  984. const char *buf, size_t count)
  985. {
  986. struct sensor_device_attribute_2 *sensor_attr =
  987. to_sensor_dev_attr_2(attr);
  988. int nr = sensor_attr->nr;
  989. int index = sensor_attr->index;
  990. struct i2c_client *client = to_i2c_client(dev);
  991. struct w83795_data *data = i2c_get_clientdata(client);
  992. long tmp;
  993. if (strict_strtol(buf, 10, &tmp) < 0)
  994. return -EINVAL;
  995. mutex_lock(&data->update_lock);
  996. data->temp[index][nr] = temp_to_reg(tmp, -128, 127);
  997. w83795_write(client, W83795_REG_TEMP[index][nr], data->temp[index][nr]);
  998. mutex_unlock(&data->update_lock);
  999. return count;
  1000. }
  1001. static ssize_t
  1002. show_dts_mode(struct device *dev, struct device_attribute *attr, char *buf)
  1003. {
  1004. struct i2c_client *client = to_i2c_client(dev);
  1005. struct w83795_data *data = i2c_get_clientdata(client);
  1006. struct sensor_device_attribute_2 *sensor_attr =
  1007. to_sensor_dev_attr_2(attr);
  1008. int index = sensor_attr->index;
  1009. u8 tmp;
  1010. if (data->enable_dts == 0)
  1011. return sprintf(buf, "%d\n", 0);
  1012. if ((data->has_dts >> index) & 0x01) {
  1013. if (data->enable_dts & 2)
  1014. tmp = 5;
  1015. else
  1016. tmp = 6;
  1017. } else {
  1018. tmp = 0;
  1019. }
  1020. return sprintf(buf, "%d\n", tmp);
  1021. }
  1022. static ssize_t
  1023. show_dts(struct device *dev, struct device_attribute *attr, char *buf)
  1024. {
  1025. struct sensor_device_attribute_2 *sensor_attr =
  1026. to_sensor_dev_attr_2(attr);
  1027. int index = sensor_attr->index;
  1028. struct w83795_data *data = w83795_update_device(dev);
  1029. long temp = temp_from_reg(data->dts[index] & 0x7f);
  1030. temp += ((data->dts_read_vrlsb[index] >> VRLSB_SHIFT) & 0x03) * 250;
  1031. if (data->dts[index] & 0x80)
  1032. temp = -temp;
  1033. return sprintf(buf, "%ld\n", temp);
  1034. }
  1035. static ssize_t
  1036. show_dts_ext(struct device *dev, struct device_attribute *attr, char *buf)
  1037. {
  1038. struct sensor_device_attribute_2 *sensor_attr =
  1039. to_sensor_dev_attr_2(attr);
  1040. int nr = sensor_attr->nr;
  1041. struct i2c_client *client = to_i2c_client(dev);
  1042. struct w83795_data *data = i2c_get_clientdata(client);
  1043. long temp = temp_from_reg(data->dts_ext[nr] & 0x7f);
  1044. if (data->dts_ext[nr] & 0x80)
  1045. temp = -temp;
  1046. return sprintf(buf, "%ld\n", temp);
  1047. }
  1048. static ssize_t
  1049. store_dts_ext(struct device *dev, struct device_attribute *attr,
  1050. const char *buf, size_t count)
  1051. {
  1052. struct sensor_device_attribute_2 *sensor_attr =
  1053. to_sensor_dev_attr_2(attr);
  1054. int nr = sensor_attr->nr;
  1055. struct i2c_client *client = to_i2c_client(dev);
  1056. struct w83795_data *data = i2c_get_clientdata(client);
  1057. long tmp;
  1058. if (strict_strtol(buf, 10, &tmp) < 0)
  1059. return -EINVAL;
  1060. mutex_lock(&data->update_lock);
  1061. data->dts_ext[nr] = temp_to_reg(tmp, -128, 127);
  1062. w83795_write(client, W83795_REG_DTS_EXT(nr), data->dts_ext[nr]);
  1063. mutex_unlock(&data->update_lock);
  1064. return count;
  1065. }
  1066. /*
  1067. Type 3: Thermal diode
  1068. Type 4: Thermistor
  1069. Temp5-6, default TR
  1070. Temp1-4, default TD
  1071. */
  1072. static ssize_t
  1073. show_temp_mode(struct device *dev, struct device_attribute *attr, char *buf)
  1074. {
  1075. struct i2c_client *client = to_i2c_client(dev);
  1076. struct w83795_data *data = i2c_get_clientdata(client);
  1077. struct sensor_device_attribute_2 *sensor_attr =
  1078. to_sensor_dev_attr_2(attr);
  1079. int index = sensor_attr->index;
  1080. u8 tmp;
  1081. if (data->has_temp >> index & 0x01) {
  1082. if (data->temp_mode >> index & 0x01)
  1083. tmp = 3;
  1084. else
  1085. tmp = 4;
  1086. } else {
  1087. tmp = 0;
  1088. }
  1089. return sprintf(buf, "%d\n", tmp);
  1090. }
  1091. static ssize_t
  1092. store_temp_mode(struct device *dev, struct device_attribute *attr,
  1093. const char *buf, size_t count)
  1094. {
  1095. struct i2c_client *client = to_i2c_client(dev);
  1096. struct w83795_data *data = i2c_get_clientdata(client);
  1097. struct sensor_device_attribute_2 *sensor_attr =
  1098. to_sensor_dev_attr_2(attr);
  1099. int index = sensor_attr->index;
  1100. unsigned long val;
  1101. u8 tmp;
  1102. u32 mask;
  1103. if (strict_strtoul(buf, 10, &val) < 0)
  1104. return -EINVAL;
  1105. if ((val != 4) && (val != 3))
  1106. return -EINVAL;
  1107. if ((index > 3) && (val == 3))
  1108. return -EINVAL;
  1109. mutex_lock(&data->update_lock);
  1110. if (val == 3) {
  1111. val = TEMP_CTRL_TD;
  1112. data->has_temp |= 1 << index;
  1113. data->temp_mode |= 1 << index;
  1114. } else if (val == 4) {
  1115. val = TEMP_CTRL_TR;
  1116. data->has_temp |= 1 << index;
  1117. tmp = 1 << index;
  1118. data->temp_mode &= ~tmp;
  1119. }
  1120. if (index > 3)
  1121. tmp = w83795_read(client, W83795_REG_TEMP_CTRL1);
  1122. else
  1123. tmp = w83795_read(client, W83795_REG_TEMP_CTRL2);
  1124. mask = 0x03 << W83795_REG_TEMP_CTRL[index][TEMP_CTRL_SHIFT];
  1125. tmp &= ~mask;
  1126. tmp |= W83795_REG_TEMP_CTRL[index][val];
  1127. mask = 1 << W83795_REG_TEMP_CTRL[index][TEMP_CTRL_HASIN_SHIFT];
  1128. data->has_in &= ~mask;
  1129. if (index > 3)
  1130. w83795_write(client, W83795_REG_TEMP_CTRL1, tmp);
  1131. else
  1132. w83795_write(client, W83795_REG_TEMP_CTRL2, tmp);
  1133. mutex_unlock(&data->update_lock);
  1134. return count;
  1135. }
  1136. /* show/store VIN */
  1137. static ssize_t
  1138. show_in(struct device *dev, struct device_attribute *attr, char *buf)
  1139. {
  1140. struct sensor_device_attribute_2 *sensor_attr =
  1141. to_sensor_dev_attr_2(attr);
  1142. int nr = sensor_attr->nr;
  1143. int index = sensor_attr->index;
  1144. struct w83795_data *data = w83795_update_device(dev);
  1145. u16 val = data->in[index][nr];
  1146. u8 lsb_idx;
  1147. switch (nr) {
  1148. case IN_READ:
  1149. /* calculate this value again by sensors as sensors3.conf */
  1150. if ((index >= 17) &&
  1151. ((data->has_gain >> (index - 17)) & 1))
  1152. val *= 8;
  1153. break;
  1154. case IN_MAX:
  1155. case IN_LOW:
  1156. lsb_idx = IN_LSB_SHIFT_IDX[index][IN_LSB_IDX];
  1157. val <<= 2;
  1158. val |= (data->in_lsb[lsb_idx][nr] >>
  1159. IN_LSB_SHIFT_IDX[lsb_idx][IN_LSB_SHIFT]) & 0x03;
  1160. if ((index >= 17) &&
  1161. ((data->has_gain >> (index - 17)) & 1))
  1162. val *= 8;
  1163. break;
  1164. }
  1165. val = in_from_reg(index, val);
  1166. return sprintf(buf, "%d\n", val);
  1167. }
  1168. static ssize_t
  1169. store_in(struct device *dev, struct device_attribute *attr,
  1170. const char *buf, size_t count)
  1171. {
  1172. struct sensor_device_attribute_2 *sensor_attr =
  1173. to_sensor_dev_attr_2(attr);
  1174. int nr = sensor_attr->nr;
  1175. int index = sensor_attr->index;
  1176. struct i2c_client *client = to_i2c_client(dev);
  1177. struct w83795_data *data = i2c_get_clientdata(client);
  1178. unsigned long val;
  1179. u8 tmp;
  1180. u8 lsb_idx;
  1181. if (strict_strtoul(buf, 10, &val) < 0)
  1182. return -EINVAL;
  1183. val = in_to_reg(index, val);
  1184. if ((index >= 17) &&
  1185. ((data->has_gain >> (index - 17)) & 1))
  1186. val /= 8;
  1187. val = SENSORS_LIMIT(val, 0, 0x3FF);
  1188. mutex_lock(&data->update_lock);
  1189. lsb_idx = IN_LSB_SHIFT_IDX[index][IN_LSB_IDX];
  1190. tmp = w83795_read(client, IN_LSB_REG(lsb_idx, nr));
  1191. tmp &= ~(0x03 << IN_LSB_SHIFT_IDX[index][IN_LSB_SHIFT]);
  1192. tmp |= (val & 0x03) << IN_LSB_SHIFT_IDX[index][IN_LSB_SHIFT];
  1193. w83795_write(client, IN_LSB_REG(lsb_idx, nr), tmp);
  1194. data->in_lsb[lsb_idx][nr] = tmp;
  1195. tmp = (val >> 2) & 0xff;
  1196. w83795_write(client, W83795_REG_IN[index][nr], tmp);
  1197. data->in[index][nr] = tmp;
  1198. mutex_unlock(&data->update_lock);
  1199. return count;
  1200. }
  1201. static ssize_t
  1202. show_sf_setup(struct device *dev, struct device_attribute *attr, char *buf)
  1203. {
  1204. struct sensor_device_attribute_2 *sensor_attr =
  1205. to_sensor_dev_attr_2(attr);
  1206. int nr = sensor_attr->nr;
  1207. struct i2c_client *client = to_i2c_client(dev);
  1208. struct w83795_data *data = i2c_get_clientdata(client);
  1209. u16 val = data->setup_pwm[nr];
  1210. switch (nr) {
  1211. case SETUP_PWM_UPTIME:
  1212. case SETUP_PWM_DOWNTIME:
  1213. val = time_from_reg(val);
  1214. break;
  1215. }
  1216. return sprintf(buf, "%d\n", val);
  1217. }
  1218. static ssize_t
  1219. store_sf_setup(struct device *dev, struct device_attribute *attr,
  1220. const char *buf, size_t count)
  1221. {
  1222. struct sensor_device_attribute_2 *sensor_attr =
  1223. to_sensor_dev_attr_2(attr);
  1224. int nr = sensor_attr->nr;
  1225. struct i2c_client *client = to_i2c_client(dev);
  1226. struct w83795_data *data = i2c_get_clientdata(client);
  1227. unsigned long val;
  1228. if (strict_strtoul(buf, 10, &val) < 0)
  1229. return -EINVAL;
  1230. switch (nr) {
  1231. case SETUP_PWM_DEFAULT:
  1232. val = SENSORS_LIMIT(val, 0, 0xff);
  1233. break;
  1234. case SETUP_PWM_UPTIME:
  1235. case SETUP_PWM_DOWNTIME:
  1236. val = time_to_reg(val);
  1237. if (val == 0)
  1238. return -EINVAL;
  1239. break;
  1240. }
  1241. mutex_lock(&data->update_lock);
  1242. data->setup_pwm[nr] = val;
  1243. w83795_write(client, W83795_REG_SETUP_PWM(nr), val);
  1244. mutex_unlock(&data->update_lock);
  1245. return count;
  1246. }
  1247. #define NOT_USED -1
  1248. #define SENSOR_ATTR_IN(index) \
  1249. SENSOR_ATTR_2(in##index##_input, S_IRUGO, show_in, NULL, \
  1250. IN_READ, index), \
  1251. SENSOR_ATTR_2(in##index##_max, S_IRUGO | S_IWUSR, show_in, \
  1252. store_in, IN_MAX, index), \
  1253. SENSOR_ATTR_2(in##index##_min, S_IRUGO | S_IWUSR, show_in, \
  1254. store_in, IN_LOW, index), \
  1255. SENSOR_ATTR_2(in##index##_alarm, S_IRUGO, show_alarm_beep, \
  1256. NULL, ALARM_STATUS, index + ((index > 14) ? 1 : 0)), \
  1257. SENSOR_ATTR_2(in##index##_beep, S_IWUSR | S_IRUGO, \
  1258. show_alarm_beep, store_beep, BEEP_ENABLE, \
  1259. index + ((index > 14) ? 1 : 0))
  1260. #define SENSOR_ATTR_FAN(index) \
  1261. SENSOR_ATTR_2(fan##index##_input, S_IRUGO, show_fan, \
  1262. NULL, FAN_INPUT, index - 1), \
  1263. SENSOR_ATTR_2(fan##index##_min, S_IWUSR | S_IRUGO, \
  1264. show_fan, store_fan_min, FAN_MIN, index - 1), \
  1265. SENSOR_ATTR_2(fan##index##_alarm, S_IRUGO, show_alarm_beep, \
  1266. NULL, ALARM_STATUS, index + 31), \
  1267. SENSOR_ATTR_2(fan##index##_beep, S_IWUSR | S_IRUGO, \
  1268. show_alarm_beep, store_beep, BEEP_ENABLE, index + 31)
  1269. #define SENSOR_ATTR_PWM(index) \
  1270. SENSOR_ATTR_2(pwm##index, S_IWUSR | S_IRUGO, show_pwm, \
  1271. store_pwm, PWM_OUTPUT, index - 1), \
  1272. SENSOR_ATTR_2(pwm##index##_nonstop, S_IWUSR | S_IRUGO, \
  1273. show_pwm, store_pwm, PWM_NONSTOP, index - 1), \
  1274. SENSOR_ATTR_2(pwm##index##_start, S_IWUSR | S_IRUGO, \
  1275. show_pwm, store_pwm, PWM_START, index - 1), \
  1276. SENSOR_ATTR_2(pwm##index##_stop_time, S_IWUSR | S_IRUGO, \
  1277. show_pwm, store_pwm, PWM_STOP_TIME, index - 1), \
  1278. SENSOR_ATTR_2(fan##index##_div, S_IWUSR | S_IRUGO, \
  1279. show_pwm, store_pwm, PWM_DIV, index - 1), \
  1280. SENSOR_ATTR_2(pwm##index##_enable, S_IWUSR | S_IRUGO, \
  1281. show_pwm_enable, store_pwm_enable, NOT_USED, index - 1)
  1282. #define SENSOR_ATTR_FANIN_TARGET(index) \
  1283. SENSOR_ATTR_2(speed_cruise##index##_target, S_IWUSR | S_IRUGO, \
  1284. show_fanin, store_fanin, FANIN_TARGET, index - 1)
  1285. #define SENSOR_ATTR_DTS(index) \
  1286. SENSOR_ATTR_2(temp##index##_type, S_IRUGO , \
  1287. show_dts_mode, NULL, NOT_USED, index - 7), \
  1288. SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_dts, \
  1289. NULL, NOT_USED, index - 7), \
  1290. SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_dts_ext, \
  1291. store_dts_ext, DTS_CRIT, NOT_USED), \
  1292. SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
  1293. show_dts_ext, store_dts_ext, DTS_CRIT_HYST, NOT_USED), \
  1294. SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_dts_ext, \
  1295. store_dts_ext, DTS_WARN, NOT_USED), \
  1296. SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
  1297. show_dts_ext, store_dts_ext, DTS_WARN_HYST, NOT_USED), \
  1298. SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
  1299. show_alarm_beep, NULL, ALARM_STATUS, index + 17), \
  1300. SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
  1301. show_alarm_beep, store_beep, BEEP_ENABLE, index + 17)
  1302. #define SENSOR_ATTR_TEMP(index) \
  1303. SENSOR_ATTR_2(temp##index##_type, S_IRUGO | S_IWUSR, \
  1304. show_temp_mode, store_temp_mode, NOT_USED, index - 1), \
  1305. SENSOR_ATTR_2(temp##index##_input, S_IRUGO, show_temp, \
  1306. NULL, TEMP_READ, index - 1), \
  1307. SENSOR_ATTR_2(temp##index##_max, S_IRUGO | S_IWUSR, show_temp, \
  1308. store_temp, TEMP_CRIT, index - 1), \
  1309. SENSOR_ATTR_2(temp##index##_max_hyst, S_IRUGO | S_IWUSR, \
  1310. show_temp, store_temp, TEMP_CRIT_HYST, index - 1), \
  1311. SENSOR_ATTR_2(temp##index##_warn, S_IRUGO | S_IWUSR, show_temp, \
  1312. store_temp, TEMP_WARN, index - 1), \
  1313. SENSOR_ATTR_2(temp##index##_warn_hyst, S_IRUGO | S_IWUSR, \
  1314. show_temp, store_temp, TEMP_WARN_HYST, index - 1), \
  1315. SENSOR_ATTR_2(temp##index##_alarm, S_IRUGO, \
  1316. show_alarm_beep, NULL, ALARM_STATUS, \
  1317. index + (index > 4 ? 11 : 17)), \
  1318. SENSOR_ATTR_2(temp##index##_beep, S_IWUSR | S_IRUGO, \
  1319. show_alarm_beep, store_beep, BEEP_ENABLE, \
  1320. index + (index > 4 ? 11 : 17)), \
  1321. SENSOR_ATTR_2(temp##index##_source_sel, S_IWUSR | S_IRUGO, \
  1322. show_temp_src, store_temp_src, NOT_USED, index - 1), \
  1323. SENSOR_ATTR_2(temp##index##_pwm_enable, S_IWUSR | S_IRUGO, \
  1324. show_temp_pwm_enable, store_temp_pwm_enable, \
  1325. TEMP_PWM_ENABLE, index - 1), \
  1326. SENSOR_ATTR_2(temp##index##_auto_channels_pwm, S_IWUSR | S_IRUGO, \
  1327. show_temp_pwm_enable, store_temp_pwm_enable, \
  1328. TEMP_PWM_FAN_MAP, index - 1), \
  1329. SENSOR_ATTR_2(thermal_cruise##index, S_IWUSR | S_IRUGO, \
  1330. show_temp_pwm, store_temp_pwm, TEMP_PWM_TTTI, index - 1), \
  1331. SENSOR_ATTR_2(temp##index##_crit, S_IWUSR | S_IRUGO, \
  1332. show_temp_pwm, store_temp_pwm, TEMP_PWM_CTFS, index - 1), \
  1333. SENSOR_ATTR_2(temp##index##_crit_hyst, S_IWUSR | S_IRUGO, \
  1334. show_temp_pwm, store_temp_pwm, TEMP_PWM_HCT, index - 1), \
  1335. SENSOR_ATTR_2(temp##index##_operation_hyst, S_IWUSR | S_IRUGO, \
  1336. show_temp_pwm, store_temp_pwm, TEMP_PWM_HOT, index - 1), \
  1337. SENSOR_ATTR_2(temp##index##_auto_point1_pwm, S_IRUGO | S_IWUSR, \
  1338. show_sf4_pwm, store_sf4_pwm, 0, index - 1), \
  1339. SENSOR_ATTR_2(temp##index##_auto_point2_pwm, S_IRUGO | S_IWUSR, \
  1340. show_sf4_pwm, store_sf4_pwm, 1, index - 1), \
  1341. SENSOR_ATTR_2(temp##index##_auto_point3_pwm, S_IRUGO | S_IWUSR, \
  1342. show_sf4_pwm, store_sf4_pwm, 2, index - 1), \
  1343. SENSOR_ATTR_2(temp##index##_auto_point4_pwm, S_IRUGO | S_IWUSR, \
  1344. show_sf4_pwm, store_sf4_pwm, 3, index - 1), \
  1345. SENSOR_ATTR_2(temp##index##_auto_point5_pwm, S_IRUGO | S_IWUSR, \
  1346. show_sf4_pwm, store_sf4_pwm, 4, index - 1), \
  1347. SENSOR_ATTR_2(temp##index##_auto_point6_pwm, S_IRUGO | S_IWUSR, \
  1348. show_sf4_pwm, store_sf4_pwm, 5, index - 1), \
  1349. SENSOR_ATTR_2(temp##index##_auto_point7_pwm, S_IRUGO | S_IWUSR, \
  1350. show_sf4_pwm, store_sf4_pwm, 6, index - 1), \
  1351. SENSOR_ATTR_2(temp##index##_auto_point1_temp, S_IRUGO | S_IWUSR,\
  1352. show_sf4_temp, store_sf4_temp, 0, index - 1), \
  1353. SENSOR_ATTR_2(temp##index##_auto_point2_temp, S_IRUGO | S_IWUSR,\
  1354. show_sf4_temp, store_sf4_temp, 1, index - 1), \
  1355. SENSOR_ATTR_2(temp##index##_auto_point3_temp, S_IRUGO | S_IWUSR,\
  1356. show_sf4_temp, store_sf4_temp, 2, index - 1), \
  1357. SENSOR_ATTR_2(temp##index##_auto_point4_temp, S_IRUGO | S_IWUSR,\
  1358. show_sf4_temp, store_sf4_temp, 3, index - 1), \
  1359. SENSOR_ATTR_2(temp##index##_auto_point5_temp, S_IRUGO | S_IWUSR,\
  1360. show_sf4_temp, store_sf4_temp, 4, index - 1), \
  1361. SENSOR_ATTR_2(temp##index##_auto_point6_temp, S_IRUGO | S_IWUSR,\
  1362. show_sf4_temp, store_sf4_temp, 5, index - 1), \
  1363. SENSOR_ATTR_2(temp##index##_auto_point7_temp, S_IRUGO | S_IWUSR,\
  1364. show_sf4_temp, store_sf4_temp, 6, index - 1)
  1365. static struct sensor_device_attribute_2 w83795_in[] = {
  1366. SENSOR_ATTR_IN(0),
  1367. SENSOR_ATTR_IN(1),
  1368. SENSOR_ATTR_IN(2),
  1369. SENSOR_ATTR_IN(3),
  1370. SENSOR_ATTR_IN(4),
  1371. SENSOR_ATTR_IN(5),
  1372. SENSOR_ATTR_IN(6),
  1373. SENSOR_ATTR_IN(7),
  1374. SENSOR_ATTR_IN(8),
  1375. SENSOR_ATTR_IN(9),
  1376. SENSOR_ATTR_IN(10),
  1377. SENSOR_ATTR_IN(11),
  1378. SENSOR_ATTR_IN(12),
  1379. SENSOR_ATTR_IN(13),
  1380. SENSOR_ATTR_IN(14),
  1381. SENSOR_ATTR_IN(15),
  1382. SENSOR_ATTR_IN(16),
  1383. SENSOR_ATTR_IN(17),
  1384. SENSOR_ATTR_IN(18),
  1385. SENSOR_ATTR_IN(19),
  1386. SENSOR_ATTR_IN(20),
  1387. };
  1388. static struct sensor_device_attribute_2 w83795_fan[] = {
  1389. SENSOR_ATTR_FAN(1),
  1390. SENSOR_ATTR_FAN(2),
  1391. SENSOR_ATTR_FAN(3),
  1392. SENSOR_ATTR_FAN(4),
  1393. SENSOR_ATTR_FAN(5),
  1394. SENSOR_ATTR_FAN(6),
  1395. SENSOR_ATTR_FAN(7),
  1396. SENSOR_ATTR_FAN(8),
  1397. SENSOR_ATTR_FAN(9),
  1398. SENSOR_ATTR_FAN(10),
  1399. SENSOR_ATTR_FAN(11),
  1400. SENSOR_ATTR_FAN(12),
  1401. SENSOR_ATTR_FAN(13),
  1402. SENSOR_ATTR_FAN(14),
  1403. };
  1404. static struct sensor_device_attribute_2 w83795_temp[] = {
  1405. SENSOR_ATTR_TEMP(1),
  1406. SENSOR_ATTR_TEMP(2),
  1407. SENSOR_ATTR_TEMP(3),
  1408. SENSOR_ATTR_TEMP(4),
  1409. SENSOR_ATTR_TEMP(5),
  1410. SENSOR_ATTR_TEMP(6),
  1411. };
  1412. static struct sensor_device_attribute_2 w83795_dts[] = {
  1413. SENSOR_ATTR_DTS(7),
  1414. SENSOR_ATTR_DTS(8),
  1415. SENSOR_ATTR_DTS(9),
  1416. SENSOR_ATTR_DTS(10),
  1417. SENSOR_ATTR_DTS(11),
  1418. SENSOR_ATTR_DTS(12),
  1419. SENSOR_ATTR_DTS(13),
  1420. SENSOR_ATTR_DTS(14),
  1421. };
  1422. static struct sensor_device_attribute_2 w83795_static[] = {
  1423. SENSOR_ATTR_FANIN_TARGET(1),
  1424. SENSOR_ATTR_FANIN_TARGET(2),
  1425. SENSOR_ATTR_FANIN_TARGET(3),
  1426. SENSOR_ATTR_FANIN_TARGET(4),
  1427. SENSOR_ATTR_FANIN_TARGET(5),
  1428. SENSOR_ATTR_FANIN_TARGET(6),
  1429. SENSOR_ATTR_FANIN_TARGET(7),
  1430. SENSOR_ATTR_FANIN_TARGET(8),
  1431. SENSOR_ATTR_PWM(1),
  1432. SENSOR_ATTR_PWM(2),
  1433. };
  1434. /* all registers existed in 795g than 795adg,
  1435. * like PWM3 - PWM8 */
  1436. static struct sensor_device_attribute_2 w83795_left_reg[] = {
  1437. SENSOR_ATTR_PWM(3),
  1438. SENSOR_ATTR_PWM(4),
  1439. SENSOR_ATTR_PWM(5),
  1440. SENSOR_ATTR_PWM(6),
  1441. SENSOR_ATTR_PWM(7),
  1442. SENSOR_ATTR_PWM(8),
  1443. };
  1444. static struct sensor_device_attribute_2 sda_single_files[] = {
  1445. SENSOR_ATTR_2(chassis, S_IWUSR | S_IRUGO, show_alarm_beep,
  1446. store_chassis_clear, ALARM_STATUS, 46),
  1447. SENSOR_ATTR_2(beep_enable, S_IWUSR | S_IRUGO, show_beep_enable,
  1448. store_beep_enable, NOT_USED, NOT_USED),
  1449. SENSOR_ATTR_2(speed_cruise_tolerance, S_IWUSR | S_IRUGO, show_fanin,
  1450. store_fanin, FANIN_TOL, NOT_USED),
  1451. SENSOR_ATTR_2(pwm_default, S_IWUSR | S_IRUGO, show_sf_setup,
  1452. store_sf_setup, SETUP_PWM_DEFAULT, NOT_USED),
  1453. SENSOR_ATTR_2(pwm_uptime, S_IWUSR | S_IRUGO, show_sf_setup,
  1454. store_sf_setup, SETUP_PWM_UPTIME, NOT_USED),
  1455. SENSOR_ATTR_2(pwm_downtime, S_IWUSR | S_IRUGO, show_sf_setup,
  1456. store_sf_setup, SETUP_PWM_DOWNTIME, NOT_USED),
  1457. };
  1458. /*
  1459. * Driver interface
  1460. */
  1461. static void w83795_init_client(struct i2c_client *client)
  1462. {
  1463. if (reset)
  1464. w83795_write(client, W83795_REG_CONFIG, 0x80);
  1465. /* Start monitoring */
  1466. w83795_write(client, W83795_REG_CONFIG,
  1467. w83795_read(client, W83795_REG_CONFIG) | 0x01);
  1468. }
  1469. /* Return 0 if detection is successful, -ENODEV otherwise */
  1470. static int w83795_detect(struct i2c_client *client,
  1471. struct i2c_board_info *info)
  1472. {
  1473. u8 tmp, bank;
  1474. struct i2c_adapter *adapter = client->adapter;
  1475. unsigned short address = client->addr;
  1476. const char *chip_name;
  1477. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  1478. return -ENODEV;
  1479. bank = i2c_smbus_read_byte_data(client, W83795_REG_BANKSEL);
  1480. tmp = bank & 0x80 ? 0x5c : 0xa3;
  1481. /* Check Nuvoton vendor ID */
  1482. if (tmp != i2c_smbus_read_byte_data(client,
  1483. W83795_REG_VENDORID)) {
  1484. pr_debug("w83795: Detection failed at check "
  1485. "vendor id\n");
  1486. return -ENODEV;
  1487. }
  1488. /* If Nuvoton chip, address of chip and W83795_REG_I2C_ADDR
  1489. should match */
  1490. if ((bank & 0x07) == 0
  1491. && (i2c_smbus_read_byte_data(client, W83795_REG_I2C_ADDR) & 0x7f) !=
  1492. address) {
  1493. pr_debug("w83795: Detection failed at check "
  1494. "i2c addr\n");
  1495. return -ENODEV;
  1496. }
  1497. /* Determine the chip type now */
  1498. if (0x79 != i2c_smbus_read_byte_data(client,
  1499. W83795_REG_CHIPID)) {
  1500. pr_debug("w83795: Detection failed at check "
  1501. "chip id\n");
  1502. return -ENODEV;
  1503. }
  1504. /* Check 795 chip type: 795G or 795ADG
  1505. Usually we don't write to chips during detection, but here we don't
  1506. quite have the choice; hopefully it's OK, we are about to return
  1507. success anyway */
  1508. if ((bank & 0x07) != 0)
  1509. i2c_smbus_write_byte_data(client, W83795_REG_BANKSEL,
  1510. bank & ~0x07);
  1511. if (W83795_REG_CONFIG_CONFIG48 &
  1512. i2c_smbus_read_byte_data(client, W83795_REG_CONFIG)) {
  1513. chip_name = "w83795adg";
  1514. } else {
  1515. chip_name = "w83795g";
  1516. }
  1517. strlcpy(info->type, chip_name, I2C_NAME_SIZE);
  1518. return 0;
  1519. }
  1520. static int w83795_probe(struct i2c_client *client,
  1521. const struct i2c_device_id *id)
  1522. {
  1523. int i;
  1524. u8 tmp;
  1525. struct device *dev = &client->dev;
  1526. struct w83795_data *data;
  1527. int err = 0;
  1528. data = kzalloc(sizeof(struct w83795_data), GFP_KERNEL);
  1529. if (!data) {
  1530. err = -ENOMEM;
  1531. goto exit;
  1532. }
  1533. i2c_set_clientdata(client, data);
  1534. data->chip_type = id->driver_data;
  1535. data->bank = i2c_smbus_read_byte_data(client, W83795_REG_BANKSEL);
  1536. mutex_init(&data->update_lock);
  1537. /* Initialize the chip */
  1538. w83795_init_client(client);
  1539. data->has_in = w83795_read(client, W83795_REG_VOLT_CTRL1);
  1540. data->has_in |= w83795_read(client, W83795_REG_VOLT_CTRL2) << 8;
  1541. /* VSEN11-9 not for 795adg */
  1542. if (data->chip_type == w83795adg)
  1543. data->has_in &= 0xf8ff;
  1544. data->has_fan = w83795_read(client, W83795_REG_FANIN_CTRL1);
  1545. data->has_fan |= w83795_read(client, W83795_REG_FANIN_CTRL2) << 8;
  1546. /* VDSEN12-17 and TR1-6, TD1-4 use same register */
  1547. tmp = w83795_read(client, W83795_REG_TEMP_CTRL1);
  1548. if (tmp & 0x20)
  1549. data->enable_dts = 1;
  1550. else
  1551. data->enable_dts = 0;
  1552. data->has_temp = 0;
  1553. data->temp_mode = 0;
  1554. if (tmp & 0x08) {
  1555. if (tmp & 0x04)
  1556. data->has_temp |= 0x20;
  1557. else
  1558. data->has_in |= 0x10000;
  1559. }
  1560. if (tmp & 0x02) {
  1561. if (tmp & 0x01)
  1562. data->has_temp |= 0x10;
  1563. else
  1564. data->has_in |= 0x8000;
  1565. }
  1566. tmp = w83795_read(client, W83795_REG_TEMP_CTRL2);
  1567. if (tmp & 0x40) {
  1568. data->has_temp |= 0x08;
  1569. if (!(tmp & 0x80))
  1570. data->temp_mode |= 0x08;
  1571. } else if (tmp & 0x80) {
  1572. data->has_in |= 0x100000;
  1573. }
  1574. if (tmp & 0x10) {
  1575. data->has_temp |= 0x04;
  1576. if (!(tmp & 0x20))
  1577. data->temp_mode |= 0x04;
  1578. } else if (tmp & 0x20) {
  1579. data->has_in |= 0x80000;
  1580. }
  1581. if (tmp & 0x04) {
  1582. data->has_temp |= 0x02;
  1583. if (!(tmp & 0x08))
  1584. data->temp_mode |= 0x02;
  1585. } else if (tmp & 0x08) {
  1586. data->has_in |= 0x40000;
  1587. }
  1588. if (tmp & 0x01) {
  1589. data->has_temp |= 0x01;
  1590. if (!(tmp & 0x02))
  1591. data->temp_mode |= 0x01;
  1592. } else if (tmp & 0x02) {
  1593. data->has_in |= 0x20000;
  1594. }
  1595. /* Check DTS enable status */
  1596. if (data->enable_dts == 0) {
  1597. data->has_dts = 0;
  1598. } else {
  1599. if (1 & w83795_read(client, W83795_REG_DTSC))
  1600. data->enable_dts |= 2;
  1601. data->has_dts = w83795_read(client, W83795_REG_DTSE);
  1602. }
  1603. /* First update the voltages measured value and limits */
  1604. for (i = 0; i < ARRAY_SIZE(data->in); i++) {
  1605. if (!(data->has_in & (1 << i)))
  1606. continue;
  1607. data->in[i][IN_MAX] =
  1608. w83795_read(client, W83795_REG_IN[i][IN_MAX]);
  1609. data->in[i][IN_LOW] =
  1610. w83795_read(client, W83795_REG_IN[i][IN_LOW]);
  1611. tmp = w83795_read(client, W83795_REG_IN[i][IN_READ]) << 2;
  1612. tmp |= (w83795_read(client, W83795_REG_VRLSB)
  1613. >> VRLSB_SHIFT) & 0x03;
  1614. data->in[i][IN_READ] = tmp;
  1615. }
  1616. for (i = 0; i < IN_LSB_REG_NUM; i++) {
  1617. data->in_lsb[i][IN_MAX] =
  1618. w83795_read(client, IN_LSB_REG(i, IN_MAX));
  1619. data->in_lsb[i][IN_LOW] =
  1620. w83795_read(client, IN_LSB_REG(i, IN_LOW));
  1621. }
  1622. data->has_gain = w83795_read(client, W83795_REG_VMIGB_CTRL) & 0x0f;
  1623. /* First update fan and limits */
  1624. for (i = 0; i < ARRAY_SIZE(data->fan); i++) {
  1625. if (!(data->has_fan & (1 << i)))
  1626. continue;
  1627. data->fan_min[i] =
  1628. w83795_read(client, W83795_REG_FAN_MIN_HL(i)) << 4;
  1629. data->fan_min[i] |=
  1630. (w83795_read(client, W83795_REG_FAN_MIN_LSB(i) >>
  1631. W83795_REG_FAN_MIN_LSB_SHIFT(i))) & 0x0F;
  1632. data->fan[i] = w83795_read(client, W83795_REG_FAN(i)) << 4;
  1633. data->fan[i] |=
  1634. (w83795_read(client, W83795_REG_VRLSB >> 4)) & 0x0F;
  1635. }
  1636. /* temperature and limits */
  1637. for (i = 0; i < ARRAY_SIZE(data->temp); i++) {
  1638. if (!(data->has_temp & (1 << i)))
  1639. continue;
  1640. data->temp[i][TEMP_CRIT] =
  1641. w83795_read(client, W83795_REG_TEMP[i][TEMP_CRIT]);
  1642. data->temp[i][TEMP_CRIT_HYST] =
  1643. w83795_read(client, W83795_REG_TEMP[i][TEMP_CRIT_HYST]);
  1644. data->temp[i][TEMP_WARN] =
  1645. w83795_read(client, W83795_REG_TEMP[i][TEMP_WARN]);
  1646. data->temp[i][TEMP_WARN_HYST] =
  1647. w83795_read(client, W83795_REG_TEMP[i][TEMP_WARN_HYST]);
  1648. data->temp[i][TEMP_READ] =
  1649. w83795_read(client, W83795_REG_TEMP[i][TEMP_READ]);
  1650. data->temp_read_vrlsb[i] =
  1651. w83795_read(client, W83795_REG_VRLSB);
  1652. }
  1653. /* dts temperature and limits */
  1654. if (data->enable_dts != 0) {
  1655. data->dts_ext[DTS_CRIT] =
  1656. w83795_read(client, W83795_REG_DTS_EXT(DTS_CRIT));
  1657. data->dts_ext[DTS_CRIT_HYST] =
  1658. w83795_read(client, W83795_REG_DTS_EXT(DTS_CRIT_HYST));
  1659. data->dts_ext[DTS_WARN] =
  1660. w83795_read(client, W83795_REG_DTS_EXT(DTS_WARN));
  1661. data->dts_ext[DTS_WARN_HYST] =
  1662. w83795_read(client, W83795_REG_DTS_EXT(DTS_WARN_HYST));
  1663. for (i = 0; i < ARRAY_SIZE(data->dts); i++) {
  1664. if (!(data->has_dts & (1 << i)))
  1665. continue;
  1666. data->dts[i] = w83795_read(client, W83795_REG_DTS(i));
  1667. data->dts_read_vrlsb[i] =
  1668. w83795_read(client, W83795_REG_VRLSB);
  1669. }
  1670. }
  1671. /* First update temp source selction */
  1672. for (i = 0; i < 3; i++)
  1673. data->temp_src[i] = w83795_read(client, W83795_REG_TSS(i));
  1674. /* pwm and smart fan */
  1675. if (data->chip_type == w83795g)
  1676. data->has_pwm = 8;
  1677. else
  1678. data->has_pwm = 2;
  1679. data->pwm_fcms[0] = w83795_read(client, W83795_REG_FCMS1);
  1680. data->pwm_fcms[1] = w83795_read(client, W83795_REG_FCMS2);
  1681. /* w83795adg only support pwm2-0 */
  1682. for (i = 0; i < W83795_REG_TEMP_NUM; i++)
  1683. data->pwm_tfmr[i] = w83795_read(client, W83795_REG_TFMR(i));
  1684. data->pwm_fomc = w83795_read(client, W83795_REG_FOMC);
  1685. for (i = 0; i < data->has_pwm; i++) {
  1686. for (tmp = 0; tmp < 5; tmp++) {
  1687. data->pwm[i][tmp] =
  1688. w83795_read(client, W83795_REG_PWM(i, tmp));
  1689. }
  1690. }
  1691. for (i = 0; i < 8; i++) {
  1692. data->target_speed[i] =
  1693. w83795_read(client, W83795_REG_FTSH(i)) << 4;
  1694. data->target_speed[i] |=
  1695. w83795_read(client, W83795_REG_FTSL(i)) >> 4;
  1696. }
  1697. data->tol_speed = w83795_read(client, W83795_REG_TFTS) & 0x3f;
  1698. for (i = 0; i < W83795_REG_TEMP_NUM; i++) {
  1699. data->pwm_temp[i][TEMP_PWM_TTTI] =
  1700. w83795_read(client, W83795_REG_TTTI(i)) & 0x7f;
  1701. data->pwm_temp[i][TEMP_PWM_CTFS] =
  1702. w83795_read(client, W83795_REG_CTFS(i));
  1703. tmp = w83795_read(client, W83795_REG_HT(i));
  1704. data->pwm_temp[i][TEMP_PWM_HCT] = (tmp >> 4) & 0x0f;
  1705. data->pwm_temp[i][TEMP_PWM_HOT] = tmp & 0x0f;
  1706. }
  1707. for (i = 0; i < W83795_REG_TEMP_NUM; i++) {
  1708. for (tmp = 0; tmp < 7; tmp++) {
  1709. data->sf4_reg[i][SF4_TEMP][tmp] =
  1710. w83795_read(client,
  1711. W83795_REG_SF4_TEMP(i, tmp));
  1712. data->sf4_reg[i][SF4_PWM][tmp] =
  1713. w83795_read(client, W83795_REG_SF4_PWM(i, tmp));
  1714. }
  1715. }
  1716. /* Setup PWM Register */
  1717. for (i = 0; i < 3; i++) {
  1718. data->setup_pwm[i] =
  1719. w83795_read(client, W83795_REG_SETUP_PWM(i));
  1720. }
  1721. /* alarm and beep */
  1722. for (i = 0; i < ALARM_BEEP_REG_NUM; i++) {
  1723. data->alarms[i] = w83795_read(client, W83795_REG_ALARM(i));
  1724. data->beeps[i] = w83795_read(client, W83795_REG_BEEP(i));
  1725. }
  1726. data->beep_enable =
  1727. (w83795_read(client, W83795_REG_BEEP(5)) >> 7) & 0x01;
  1728. /* Register sysfs hooks */
  1729. for (i = 0; i < ARRAY_SIZE(w83795_in); i++) {
  1730. if (!(data->has_in & (1 << (i / 6))))
  1731. continue;
  1732. err = device_create_file(dev, &w83795_in[i].dev_attr);
  1733. if (err)
  1734. goto exit_remove;
  1735. }
  1736. for (i = 0; i < ARRAY_SIZE(w83795_fan); i++) {
  1737. if (!(data->has_fan & (1 << (i / 5))))
  1738. continue;
  1739. err = device_create_file(dev, &w83795_fan[i].dev_attr);
  1740. if (err)
  1741. goto exit_remove;
  1742. }
  1743. for (i = 0; i < ARRAY_SIZE(sda_single_files); i++) {
  1744. err = device_create_file(dev, &sda_single_files[i].dev_attr);
  1745. if (err)
  1746. goto exit_remove;
  1747. }
  1748. for (i = 0; i < ARRAY_SIZE(w83795_temp); i++) {
  1749. if (!(data->has_temp & (1 << (i / 29))))
  1750. continue;
  1751. err = device_create_file(dev, &w83795_temp[i].dev_attr);
  1752. if (err)
  1753. goto exit_remove;
  1754. }
  1755. if (data->enable_dts != 0) {
  1756. for (i = 0; i < ARRAY_SIZE(w83795_dts); i++) {
  1757. if (!(data->has_dts & (1 << (i / 8))))
  1758. continue;
  1759. err = device_create_file(dev, &w83795_dts[i].dev_attr);
  1760. if (err)
  1761. goto exit_remove;
  1762. }
  1763. }
  1764. if (data->chip_type == w83795g) {
  1765. for (i = 0; i < ARRAY_SIZE(w83795_left_reg); i++) {
  1766. err = device_create_file(dev,
  1767. &w83795_left_reg[i].dev_attr);
  1768. if (err)
  1769. goto exit_remove;
  1770. }
  1771. }
  1772. for (i = 0; i < ARRAY_SIZE(w83795_static); i++) {
  1773. err = device_create_file(dev, &w83795_static[i].dev_attr);
  1774. if (err)
  1775. goto exit_remove;
  1776. }
  1777. data->hwmon_dev = hwmon_device_register(dev);
  1778. if (IS_ERR(data->hwmon_dev)) {
  1779. err = PTR_ERR(data->hwmon_dev);
  1780. goto exit_remove;
  1781. }
  1782. return 0;
  1783. /* Unregister sysfs hooks */
  1784. exit_remove:
  1785. for (i = 0; i < ARRAY_SIZE(w83795_in); i++)
  1786. device_remove_file(dev, &w83795_in[i].dev_attr);
  1787. for (i = 0; i < ARRAY_SIZE(w83795_fan); i++)
  1788. device_remove_file(dev, &w83795_fan[i].dev_attr);
  1789. for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
  1790. device_remove_file(dev, &sda_single_files[i].dev_attr);
  1791. if (data->chip_type == w83795g) {
  1792. for (i = 0; i < ARRAY_SIZE(w83795_left_reg); i++)
  1793. device_remove_file(dev, &w83795_left_reg[i].dev_attr);
  1794. }
  1795. for (i = 0; i < ARRAY_SIZE(w83795_temp); i++)
  1796. device_remove_file(dev, &w83795_temp[i].dev_attr);
  1797. for (i = 0; i < ARRAY_SIZE(w83795_dts); i++)
  1798. device_remove_file(dev, &w83795_dts[i].dev_attr);
  1799. for (i = 0; i < ARRAY_SIZE(w83795_static); i++)
  1800. device_remove_file(dev, &w83795_static[i].dev_attr);
  1801. kfree(data);
  1802. exit:
  1803. return err;
  1804. }
  1805. static int w83795_remove(struct i2c_client *client)
  1806. {
  1807. struct w83795_data *data = i2c_get_clientdata(client);
  1808. struct device *dev = &client->dev;
  1809. int i;
  1810. hwmon_device_unregister(data->hwmon_dev);
  1811. for (i = 0; i < ARRAY_SIZE(w83795_in); i++)
  1812. device_remove_file(dev, &w83795_in[i].dev_attr);
  1813. for (i = 0; i < ARRAY_SIZE(w83795_fan); i++)
  1814. device_remove_file(dev, &w83795_fan[i].dev_attr);
  1815. for (i = 0; i < ARRAY_SIZE(sda_single_files); i++)
  1816. device_remove_file(dev, &sda_single_files[i].dev_attr);
  1817. if (data->chip_type == w83795g) {
  1818. for (i = 0; i < ARRAY_SIZE(w83795_left_reg); i++)
  1819. device_remove_file(dev, &w83795_left_reg[i].dev_attr);
  1820. }
  1821. for (i = 0; i < ARRAY_SIZE(w83795_temp); i++)
  1822. device_remove_file(dev, &w83795_temp[i].dev_attr);
  1823. for (i = 0; i < ARRAY_SIZE(w83795_dts); i++)
  1824. device_remove_file(dev, &w83795_dts[i].dev_attr);
  1825. for (i = 0; i < ARRAY_SIZE(w83795_static); i++)
  1826. device_remove_file(dev, &w83795_static[i].dev_attr);
  1827. kfree(data);
  1828. return 0;
  1829. }
  1830. static const struct i2c_device_id w83795_id[] = {
  1831. { "w83795g", w83795g },
  1832. { "w83795adg", w83795adg },
  1833. { }
  1834. };
  1835. MODULE_DEVICE_TABLE(i2c, w83795_id);
  1836. static struct i2c_driver w83795_driver = {
  1837. .driver = {
  1838. .name = "w83795",
  1839. },
  1840. .probe = w83795_probe,
  1841. .remove = w83795_remove,
  1842. .id_table = w83795_id,
  1843. .class = I2C_CLASS_HWMON,
  1844. .detect = w83795_detect,
  1845. .address_list = normal_i2c,
  1846. };
  1847. static int __init sensors_w83795_init(void)
  1848. {
  1849. return i2c_add_driver(&w83795_driver);
  1850. }
  1851. static void __exit sensors_w83795_exit(void)
  1852. {
  1853. i2c_del_driver(&w83795_driver);
  1854. }
  1855. MODULE_AUTHOR("Wei Song");
  1856. MODULE_DESCRIPTION("W83795G/ADG hardware monitoring driver");
  1857. MODULE_LICENSE("GPL");
  1858. module_init(sensors_w83795_init);
  1859. module_exit(sensors_w83795_exit);