w83795.c 58 KB

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