lm90.c 86 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * lm90.c - Part of lm_sensors, Linux kernel modules for hardware
  4. * monitoring
  5. * Copyright (C) 2003-2010 Jean Delvare <[email protected]>
  6. *
  7. * Based on the lm83 driver. The LM90 is a sensor chip made by National
  8. * Semiconductor. It reports up to two temperatures (its own plus up to
  9. * one external one) with a 0.125 deg resolution (1 deg for local
  10. * temperature) and a 3-4 deg accuracy.
  11. *
  12. * This driver also supports the LM89 and LM99, two other sensor chips
  13. * made by National Semiconductor. Both have an increased remote
  14. * temperature measurement accuracy (1 degree), and the LM99
  15. * additionally shifts remote temperatures (measured and limits) by 16
  16. * degrees, which allows for higher temperatures measurement.
  17. * Note that there is no way to differentiate between both chips.
  18. * When device is auto-detected, the driver will assume an LM99.
  19. *
  20. * This driver also supports the LM86, another sensor chip made by
  21. * National Semiconductor. It is exactly similar to the LM90 except it
  22. * has a higher accuracy.
  23. *
  24. * This driver also supports the ADM1032, a sensor chip made by Analog
  25. * Devices. That chip is similar to the LM90, with a few differences
  26. * that are not handled by this driver. Among others, it has a higher
  27. * accuracy than the LM90, much like the LM86 does.
  28. *
  29. * This driver also supports the MAX6657, MAX6658 and MAX6659 sensor
  30. * chips made by Maxim. These chips are similar to the LM86.
  31. * Note that there is no easy way to differentiate between the three
  32. * variants. We use the device address to detect MAX6659, which will result
  33. * in a detection as max6657 if it is on address 0x4c. The extra address
  34. * and features of the MAX6659 are only supported if the chip is configured
  35. * explicitly as max6659, or if its address is not 0x4c.
  36. * These chips lack the remote temperature offset feature.
  37. *
  38. * This driver also supports the MAX6654 chip made by Maxim. This chip can be
  39. * at 9 different addresses, similar to MAX6680/MAX6681. The MAX6654 is similar
  40. * to MAX6657/MAX6658/MAX6659, but does not support critical temperature
  41. * limits. Extended range is available by setting the configuration register
  42. * accordingly, and is done during initialization. Extended precision is only
  43. * available at conversion rates of 1 Hz and slower. Note that extended
  44. * precision is not enabled by default, as this driver initializes all chips
  45. * to 2 Hz by design. The driver also supports MAX6690, which is practically
  46. * identical to MAX6654.
  47. *
  48. * This driver also supports the MAX6646, MAX6647, MAX6648, MAX6649 and
  49. * MAX6692 chips made by Maxim. These are again similar to the LM86,
  50. * but they use unsigned temperature values and can report temperatures
  51. * from 0 to 145 degrees.
  52. *
  53. * This driver also supports the MAX6680 and MAX6681, two other sensor
  54. * chips made by Maxim. These are quite similar to the other Maxim
  55. * chips. The MAX6680 and MAX6681 only differ in the pinout so they can
  56. * be treated identically.
  57. *
  58. * This driver also supports the MAX6695 and MAX6696, two other sensor
  59. * chips made by Maxim. These are also quite similar to other Maxim
  60. * chips, but support three temperature sensors instead of two. MAX6695
  61. * and MAX6696 only differ in the pinout so they can be treated identically.
  62. *
  63. * This driver also supports ADT7461 and ADT7461A from Analog Devices as well as
  64. * NCT1008 from ON Semiconductor. The chips are supported in both compatibility
  65. * and extended mode. They are mostly compatible with LM90 except for a data
  66. * format difference for the temperature value registers.
  67. *
  68. * This driver also supports ADT7481, ADT7482, and ADT7483 from Analog Devices
  69. * / ON Semiconductor. The chips are similar to ADT7461 but support two external
  70. * temperature sensors.
  71. *
  72. * This driver also supports NCT72, NCT214, and NCT218 from ON Semiconductor.
  73. * The chips are similar to ADT7461/ADT7461A but have full PEC support
  74. * (undocumented).
  75. *
  76. * This driver also supports the SA56004 from Philips. This device is
  77. * pin-compatible with the LM86, the ED/EDP parts are also address-compatible.
  78. *
  79. * This driver also supports the G781 from GMT. This device is compatible
  80. * with the ADM1032.
  81. *
  82. * This driver also supports TMP451 and TMP461 from Texas Instruments.
  83. * Those devices are supported in both compatibility and extended mode.
  84. * They are mostly compatible with ADT7461 except for local temperature
  85. * low byte register and max conversion rate.
  86. *
  87. * This driver also supports MAX1617 and various clones such as G767
  88. * and NE1617. Such clones will be detected as MAX1617.
  89. *
  90. * This driver also supports NE1618 from Philips. It is similar to NE1617
  91. * but supports 11 bit external temperature values.
  92. *
  93. * Since the LM90 was the first chipset supported by this driver, most
  94. * comments will refer to this chipset, but are actually general and
  95. * concern all supported chipsets, unless mentioned otherwise.
  96. */
  97. #include <linux/bits.h>
  98. #include <linux/device.h>
  99. #include <linux/err.h>
  100. #include <linux/i2c.h>
  101. #include <linux/init.h>
  102. #include <linux/interrupt.h>
  103. #include <linux/jiffies.h>
  104. #include <linux/hwmon.h>
  105. #include <linux/module.h>
  106. #include <linux/mutex.h>
  107. #include <linux/of_device.h>
  108. #include <linux/regulator/consumer.h>
  109. #include <linux/slab.h>
  110. #include <linux/workqueue.h>
  111. /* The maximum number of channels currently supported */
  112. #define MAX_CHANNELS 3
  113. /*
  114. * Addresses to scan
  115. * Address is fully defined internally and cannot be changed except for
  116. * MAX6659, MAX6680 and MAX6681.
  117. * LM86, LM89, LM90, LM99, ADM1032, ADM1032-1, ADT7461, ADT7461A, MAX6649,
  118. * MAX6657, MAX6658, NCT1008 and W83L771 have address 0x4c.
  119. * ADM1032-2, ADT7461-2, ADT7461A-2, LM89-1, LM99-1, MAX6646, and NCT1008D
  120. * have address 0x4d.
  121. * MAX6647 has address 0x4e.
  122. * MAX6659 can have address 0x4c, 0x4d or 0x4e.
  123. * MAX6654, MAX6680, and MAX6681 can have address 0x18, 0x19, 0x1a, 0x29,
  124. * 0x2a, 0x2b, 0x4c, 0x4d or 0x4e.
  125. * SA56004 can have address 0x48 through 0x4F.
  126. */
  127. static const unsigned short normal_i2c[] = {
  128. 0x18, 0x19, 0x1a, 0x29, 0x2a, 0x2b, 0x48, 0x49, 0x4a, 0x4b, 0x4c,
  129. 0x4d, 0x4e, 0x4f, I2C_CLIENT_END };
  130. enum chips { adm1023, adm1032, adt7461, adt7461a, adt7481,
  131. g781, lm84, lm90, lm99,
  132. max1617, max6642, max6646, max6648, max6654, max6657, max6659, max6680, max6696,
  133. nct210, nct72, ne1618, sa56004, tmp451, tmp461, w83l771,
  134. };
  135. /*
  136. * The LM90 registers
  137. */
  138. #define LM90_REG_MAN_ID 0xFE
  139. #define LM90_REG_CHIP_ID 0xFF
  140. #define LM90_REG_CONFIG1 0x03
  141. #define LM90_REG_CONFIG2 0xBF
  142. #define LM90_REG_CONVRATE 0x04
  143. #define LM90_REG_STATUS 0x02
  144. #define LM90_REG_LOCAL_TEMP 0x00
  145. #define LM90_REG_LOCAL_HIGH 0x05
  146. #define LM90_REG_LOCAL_LOW 0x06
  147. #define LM90_REG_LOCAL_CRIT 0x20
  148. #define LM90_REG_REMOTE_TEMPH 0x01
  149. #define LM90_REG_REMOTE_TEMPL 0x10
  150. #define LM90_REG_REMOTE_OFFSH 0x11
  151. #define LM90_REG_REMOTE_OFFSL 0x12
  152. #define LM90_REG_REMOTE_HIGHH 0x07
  153. #define LM90_REG_REMOTE_HIGHL 0x13
  154. #define LM90_REG_REMOTE_LOWH 0x08
  155. #define LM90_REG_REMOTE_LOWL 0x14
  156. #define LM90_REG_REMOTE_CRIT 0x19
  157. #define LM90_REG_TCRIT_HYST 0x21
  158. /* MAX6646/6647/6649/6654/6657/6658/6659/6695/6696 registers */
  159. #define MAX6657_REG_LOCAL_TEMPL 0x11
  160. #define MAX6696_REG_STATUS2 0x12
  161. #define MAX6659_REG_REMOTE_EMERG 0x16
  162. #define MAX6659_REG_LOCAL_EMERG 0x17
  163. /* SA56004 registers */
  164. #define SA56004_REG_LOCAL_TEMPL 0x22
  165. #define LM90_MAX_CONVRATE_MS 16000 /* Maximum conversion rate in ms */
  166. /* TMP451/TMP461 registers */
  167. #define TMP451_REG_LOCAL_TEMPL 0x15
  168. #define TMP451_REG_CONALERT 0x22
  169. #define TMP461_REG_CHEN 0x16
  170. #define TMP461_REG_DFC 0x24
  171. /* ADT7481 registers */
  172. #define ADT7481_REG_STATUS2 0x23
  173. #define ADT7481_REG_CONFIG2 0x24
  174. #define ADT7481_REG_MAN_ID 0x3e
  175. #define ADT7481_REG_CHIP_ID 0x3d
  176. /* Device features */
  177. #define LM90_HAVE_EXTENDED_TEMP BIT(0) /* extended temperature support */
  178. #define LM90_HAVE_OFFSET BIT(1) /* temperature offset register */
  179. #define LM90_HAVE_UNSIGNED_TEMP BIT(2) /* temperatures are unsigned */
  180. #define LM90_HAVE_REM_LIMIT_EXT BIT(3) /* extended remote limit */
  181. #define LM90_HAVE_EMERGENCY BIT(4) /* 3rd upper (emergency) limit */
  182. #define LM90_HAVE_EMERGENCY_ALARM BIT(5)/* emergency alarm */
  183. #define LM90_HAVE_TEMP3 BIT(6) /* 3rd temperature sensor */
  184. #define LM90_HAVE_BROKEN_ALERT BIT(7) /* Broken alert */
  185. #define LM90_PAUSE_FOR_CONFIG BIT(8) /* Pause conversion for config */
  186. #define LM90_HAVE_CRIT BIT(9) /* Chip supports CRIT/OVERT register */
  187. #define LM90_HAVE_CRIT_ALRM_SWP BIT(10) /* critical alarm bits swapped */
  188. #define LM90_HAVE_PEC BIT(11) /* Chip supports PEC */
  189. #define LM90_HAVE_PARTIAL_PEC BIT(12) /* Partial PEC support (adm1032)*/
  190. #define LM90_HAVE_ALARMS BIT(13) /* Create 'alarms' attribute */
  191. #define LM90_HAVE_EXT_UNSIGNED BIT(14) /* extended unsigned temperature*/
  192. #define LM90_HAVE_LOW BIT(15) /* low limits */
  193. #define LM90_HAVE_CONVRATE BIT(16) /* conversion rate */
  194. #define LM90_HAVE_REMOTE_EXT BIT(17) /* extended remote temperature */
  195. #define LM90_HAVE_FAULTQUEUE BIT(18) /* configurable samples count */
  196. /* LM90 status */
  197. #define LM90_STATUS_LTHRM BIT(0) /* local THERM limit tripped */
  198. #define LM90_STATUS_RTHRM BIT(1) /* remote THERM limit tripped */
  199. #define LM90_STATUS_ROPEN BIT(2) /* remote is an open circuit */
  200. #define LM90_STATUS_RLOW BIT(3) /* remote low temp limit tripped */
  201. #define LM90_STATUS_RHIGH BIT(4) /* remote high temp limit tripped */
  202. #define LM90_STATUS_LLOW BIT(5) /* local low temp limit tripped */
  203. #define LM90_STATUS_LHIGH BIT(6) /* local high temp limit tripped */
  204. #define LM90_STATUS_BUSY BIT(7) /* conversion is ongoing */
  205. /* MAX6695/6696 and ADT7481 2nd status register */
  206. #define MAX6696_STATUS2_R2THRM BIT(1) /* remote2 THERM limit tripped */
  207. #define MAX6696_STATUS2_R2OPEN BIT(2) /* remote2 is an open circuit */
  208. #define MAX6696_STATUS2_R2LOW BIT(3) /* remote2 low temp limit tripped */
  209. #define MAX6696_STATUS2_R2HIGH BIT(4) /* remote2 high temp limit tripped */
  210. #define MAX6696_STATUS2_ROT2 BIT(5) /* remote emergency limit tripped */
  211. #define MAX6696_STATUS2_R2OT2 BIT(6) /* remote2 emergency limit tripped */
  212. #define MAX6696_STATUS2_LOT2 BIT(7) /* local emergency limit tripped */
  213. /*
  214. * Driver data (common to all clients)
  215. */
  216. static const struct i2c_device_id lm90_id[] = {
  217. { "adm1020", max1617 },
  218. { "adm1021", max1617 },
  219. { "adm1023", adm1023 },
  220. { "adm1032", adm1032 },
  221. { "adt7421", adt7461a },
  222. { "adt7461", adt7461 },
  223. { "adt7461a", adt7461a },
  224. { "adt7481", adt7481 },
  225. { "adt7482", adt7481 },
  226. { "adt7483a", adt7481 },
  227. { "g781", g781 },
  228. { "gl523sm", max1617 },
  229. { "lm84", lm84 },
  230. { "lm86", lm90 },
  231. { "lm89", lm90 },
  232. { "lm90", lm90 },
  233. { "lm99", lm99 },
  234. { "max1617", max1617 },
  235. { "max6642", max6642 },
  236. { "max6646", max6646 },
  237. { "max6647", max6646 },
  238. { "max6648", max6648 },
  239. { "max6649", max6646 },
  240. { "max6654", max6654 },
  241. { "max6657", max6657 },
  242. { "max6658", max6657 },
  243. { "max6659", max6659 },
  244. { "max6680", max6680 },
  245. { "max6681", max6680 },
  246. { "max6690", max6654 },
  247. { "max6692", max6648 },
  248. { "max6695", max6696 },
  249. { "max6696", max6696 },
  250. { "mc1066", max1617 },
  251. { "nct1008", adt7461a },
  252. { "nct210", nct210 },
  253. { "nct214", nct72 },
  254. { "nct218", nct72 },
  255. { "nct72", nct72 },
  256. { "ne1618", ne1618 },
  257. { "w83l771", w83l771 },
  258. { "sa56004", sa56004 },
  259. { "thmc10", max1617 },
  260. { "tmp451", tmp451 },
  261. { "tmp461", tmp461 },
  262. { }
  263. };
  264. MODULE_DEVICE_TABLE(i2c, lm90_id);
  265. static const struct of_device_id __maybe_unused lm90_of_match[] = {
  266. {
  267. .compatible = "adi,adm1032",
  268. .data = (void *)adm1032
  269. },
  270. {
  271. .compatible = "adi,adt7461",
  272. .data = (void *)adt7461
  273. },
  274. {
  275. .compatible = "adi,adt7461a",
  276. .data = (void *)adt7461a
  277. },
  278. {
  279. .compatible = "adi,adt7481",
  280. .data = (void *)adt7481
  281. },
  282. {
  283. .compatible = "gmt,g781",
  284. .data = (void *)g781
  285. },
  286. {
  287. .compatible = "national,lm90",
  288. .data = (void *)lm90
  289. },
  290. {
  291. .compatible = "national,lm86",
  292. .data = (void *)lm90
  293. },
  294. {
  295. .compatible = "national,lm89",
  296. .data = (void *)lm90
  297. },
  298. {
  299. .compatible = "national,lm99",
  300. .data = (void *)lm99
  301. },
  302. {
  303. .compatible = "dallas,max6646",
  304. .data = (void *)max6646
  305. },
  306. {
  307. .compatible = "dallas,max6647",
  308. .data = (void *)max6646
  309. },
  310. {
  311. .compatible = "dallas,max6649",
  312. .data = (void *)max6646
  313. },
  314. {
  315. .compatible = "dallas,max6654",
  316. .data = (void *)max6654
  317. },
  318. {
  319. .compatible = "dallas,max6657",
  320. .data = (void *)max6657
  321. },
  322. {
  323. .compatible = "dallas,max6658",
  324. .data = (void *)max6657
  325. },
  326. {
  327. .compatible = "dallas,max6659",
  328. .data = (void *)max6659
  329. },
  330. {
  331. .compatible = "dallas,max6680",
  332. .data = (void *)max6680
  333. },
  334. {
  335. .compatible = "dallas,max6681",
  336. .data = (void *)max6680
  337. },
  338. {
  339. .compatible = "dallas,max6695",
  340. .data = (void *)max6696
  341. },
  342. {
  343. .compatible = "dallas,max6696",
  344. .data = (void *)max6696
  345. },
  346. {
  347. .compatible = "onnn,nct1008",
  348. .data = (void *)adt7461a
  349. },
  350. {
  351. .compatible = "onnn,nct214",
  352. .data = (void *)nct72
  353. },
  354. {
  355. .compatible = "onnn,nct218",
  356. .data = (void *)nct72
  357. },
  358. {
  359. .compatible = "onnn,nct72",
  360. .data = (void *)nct72
  361. },
  362. {
  363. .compatible = "winbond,w83l771",
  364. .data = (void *)w83l771
  365. },
  366. {
  367. .compatible = "nxp,sa56004",
  368. .data = (void *)sa56004
  369. },
  370. {
  371. .compatible = "ti,tmp451",
  372. .data = (void *)tmp451
  373. },
  374. {
  375. .compatible = "ti,tmp461",
  376. .data = (void *)tmp461
  377. },
  378. { },
  379. };
  380. MODULE_DEVICE_TABLE(of, lm90_of_match);
  381. /*
  382. * chip type specific parameters
  383. */
  384. struct lm90_params {
  385. u32 flags; /* Capabilities */
  386. u16 alert_alarms; /* Which alarm bits trigger ALERT# */
  387. /* Upper 8 bits for max6695/96 */
  388. u8 max_convrate; /* Maximum conversion rate register value */
  389. u8 resolution; /* 16-bit resolution (default 11 bit) */
  390. u8 reg_status2; /* 2nd status register (optional) */
  391. u8 reg_local_ext; /* Extended local temp register (optional) */
  392. u8 faultqueue_mask; /* fault queue bit mask */
  393. u8 faultqueue_depth; /* fault queue depth if mask is used */
  394. };
  395. static const struct lm90_params lm90_params[] = {
  396. [adm1023] = {
  397. .flags = LM90_HAVE_ALARMS | LM90_HAVE_OFFSET | LM90_HAVE_BROKEN_ALERT
  398. | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  399. | LM90_HAVE_REMOTE_EXT,
  400. .alert_alarms = 0x7c,
  401. .resolution = 8,
  402. .max_convrate = 7,
  403. },
  404. [adm1032] = {
  405. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  406. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_CRIT
  407. | LM90_HAVE_PARTIAL_PEC | LM90_HAVE_ALARMS
  408. | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
  409. | LM90_HAVE_FAULTQUEUE,
  410. .alert_alarms = 0x7c,
  411. .max_convrate = 10,
  412. },
  413. [adt7461] = {
  414. /*
  415. * Standard temperature range is supposed to be unsigned,
  416. * but that does not match reality. Negative temperatures
  417. * are always reported.
  418. */
  419. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  420. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
  421. | LM90_HAVE_CRIT | LM90_HAVE_PARTIAL_PEC
  422. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  423. | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
  424. .alert_alarms = 0x7c,
  425. .max_convrate = 10,
  426. .resolution = 10,
  427. },
  428. [adt7461a] = {
  429. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  430. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
  431. | LM90_HAVE_CRIT | LM90_HAVE_PEC | LM90_HAVE_ALARMS
  432. | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
  433. | LM90_HAVE_FAULTQUEUE,
  434. .alert_alarms = 0x7c,
  435. .max_convrate = 10,
  436. },
  437. [adt7481] = {
  438. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  439. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
  440. | LM90_HAVE_UNSIGNED_TEMP | LM90_HAVE_PEC
  441. | LM90_HAVE_TEMP3 | LM90_HAVE_CRIT | LM90_HAVE_LOW
  442. | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
  443. | LM90_HAVE_FAULTQUEUE,
  444. .alert_alarms = 0x1c7c,
  445. .max_convrate = 11,
  446. .resolution = 10,
  447. .reg_status2 = ADT7481_REG_STATUS2,
  448. },
  449. [g781] = {
  450. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  451. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_CRIT
  452. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  453. | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
  454. .alert_alarms = 0x7c,
  455. .max_convrate = 7,
  456. },
  457. [lm84] = {
  458. .flags = LM90_HAVE_ALARMS,
  459. .resolution = 8,
  460. },
  461. [lm90] = {
  462. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  463. | LM90_HAVE_CRIT | LM90_HAVE_ALARMS | LM90_HAVE_LOW
  464. | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
  465. | LM90_HAVE_FAULTQUEUE,
  466. .alert_alarms = 0x7b,
  467. .max_convrate = 9,
  468. .faultqueue_mask = BIT(0),
  469. .faultqueue_depth = 3,
  470. },
  471. [lm99] = {
  472. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  473. | LM90_HAVE_CRIT | LM90_HAVE_ALARMS | LM90_HAVE_LOW
  474. | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
  475. | LM90_HAVE_FAULTQUEUE,
  476. .alert_alarms = 0x7b,
  477. .max_convrate = 9,
  478. .faultqueue_mask = BIT(0),
  479. .faultqueue_depth = 3,
  480. },
  481. [max1617] = {
  482. .flags = LM90_HAVE_CONVRATE | LM90_HAVE_BROKEN_ALERT |
  483. LM90_HAVE_LOW | LM90_HAVE_ALARMS,
  484. .alert_alarms = 0x78,
  485. .resolution = 8,
  486. .max_convrate = 7,
  487. },
  488. [max6642] = {
  489. .flags = LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXT_UNSIGNED
  490. | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
  491. .alert_alarms = 0x50,
  492. .resolution = 10,
  493. .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
  494. .faultqueue_mask = BIT(4),
  495. .faultqueue_depth = 2,
  496. },
  497. [max6646] = {
  498. .flags = LM90_HAVE_CRIT | LM90_HAVE_BROKEN_ALERT
  499. | LM90_HAVE_EXT_UNSIGNED | LM90_HAVE_ALARMS | LM90_HAVE_LOW
  500. | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT,
  501. .alert_alarms = 0x7c,
  502. .max_convrate = 6,
  503. .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
  504. },
  505. [max6648] = {
  506. .flags = LM90_HAVE_UNSIGNED_TEMP | LM90_HAVE_CRIT
  507. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_LOW
  508. | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT,
  509. .alert_alarms = 0x7c,
  510. .max_convrate = 6,
  511. .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
  512. },
  513. [max6654] = {
  514. .flags = LM90_HAVE_BROKEN_ALERT | LM90_HAVE_ALARMS | LM90_HAVE_LOW
  515. | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT,
  516. .alert_alarms = 0x7c,
  517. .max_convrate = 7,
  518. .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
  519. },
  520. [max6657] = {
  521. .flags = LM90_PAUSE_FOR_CONFIG | LM90_HAVE_CRIT
  522. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  523. | LM90_HAVE_REMOTE_EXT,
  524. .alert_alarms = 0x7c,
  525. .max_convrate = 8,
  526. .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
  527. },
  528. [max6659] = {
  529. .flags = LM90_HAVE_EMERGENCY | LM90_HAVE_CRIT
  530. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  531. | LM90_HAVE_REMOTE_EXT,
  532. .alert_alarms = 0x7c,
  533. .max_convrate = 8,
  534. .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
  535. },
  536. [max6680] = {
  537. /*
  538. * Apparent temperatures of 128 degrees C or higher are reported
  539. * and treated as negative temperatures (meaning min_alarm will
  540. * be set).
  541. */
  542. .flags = LM90_HAVE_OFFSET | LM90_HAVE_CRIT
  543. | LM90_HAVE_CRIT_ALRM_SWP | LM90_HAVE_BROKEN_ALERT
  544. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  545. | LM90_HAVE_REMOTE_EXT,
  546. .alert_alarms = 0x7c,
  547. .max_convrate = 7,
  548. },
  549. [max6696] = {
  550. .flags = LM90_HAVE_EMERGENCY
  551. | LM90_HAVE_EMERGENCY_ALARM | LM90_HAVE_TEMP3 | LM90_HAVE_CRIT
  552. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  553. | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
  554. .alert_alarms = 0x1c7c,
  555. .max_convrate = 6,
  556. .reg_status2 = MAX6696_REG_STATUS2,
  557. .reg_local_ext = MAX6657_REG_LOCAL_TEMPL,
  558. .faultqueue_mask = BIT(5),
  559. .faultqueue_depth = 4,
  560. },
  561. [nct72] = {
  562. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  563. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP
  564. | LM90_HAVE_CRIT | LM90_HAVE_PEC | LM90_HAVE_UNSIGNED_TEMP
  565. | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT
  566. | LM90_HAVE_FAULTQUEUE,
  567. .alert_alarms = 0x7c,
  568. .max_convrate = 10,
  569. .resolution = 10,
  570. },
  571. [nct210] = {
  572. .flags = LM90_HAVE_ALARMS | LM90_HAVE_BROKEN_ALERT
  573. | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  574. | LM90_HAVE_REMOTE_EXT,
  575. .alert_alarms = 0x7c,
  576. .resolution = 11,
  577. .max_convrate = 7,
  578. },
  579. [ne1618] = {
  580. .flags = LM90_PAUSE_FOR_CONFIG | LM90_HAVE_BROKEN_ALERT
  581. | LM90_HAVE_LOW | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT,
  582. .alert_alarms = 0x7c,
  583. .resolution = 11,
  584. .max_convrate = 7,
  585. },
  586. [w83l771] = {
  587. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_CRIT
  588. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  589. | LM90_HAVE_REMOTE_EXT,
  590. .alert_alarms = 0x7c,
  591. .max_convrate = 8,
  592. },
  593. [sa56004] = {
  594. /*
  595. * Apparent temperatures of 128 degrees C or higher are reported
  596. * and treated as negative temperatures (meaning min_alarm will
  597. * be set).
  598. */
  599. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT | LM90_HAVE_CRIT
  600. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  601. | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
  602. .alert_alarms = 0x7b,
  603. .max_convrate = 9,
  604. .reg_local_ext = SA56004_REG_LOCAL_TEMPL,
  605. .faultqueue_mask = BIT(0),
  606. .faultqueue_depth = 3,
  607. },
  608. [tmp451] = {
  609. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  610. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP | LM90_HAVE_CRIT
  611. | LM90_HAVE_UNSIGNED_TEMP | LM90_HAVE_ALARMS | LM90_HAVE_LOW
  612. | LM90_HAVE_CONVRATE | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
  613. .alert_alarms = 0x7c,
  614. .max_convrate = 9,
  615. .resolution = 12,
  616. .reg_local_ext = TMP451_REG_LOCAL_TEMPL,
  617. },
  618. [tmp461] = {
  619. .flags = LM90_HAVE_OFFSET | LM90_HAVE_REM_LIMIT_EXT
  620. | LM90_HAVE_BROKEN_ALERT | LM90_HAVE_EXTENDED_TEMP | LM90_HAVE_CRIT
  621. | LM90_HAVE_ALARMS | LM90_HAVE_LOW | LM90_HAVE_CONVRATE
  622. | LM90_HAVE_REMOTE_EXT | LM90_HAVE_FAULTQUEUE,
  623. .alert_alarms = 0x7c,
  624. .max_convrate = 9,
  625. .resolution = 12,
  626. .reg_local_ext = TMP451_REG_LOCAL_TEMPL,
  627. },
  628. };
  629. /*
  630. * temperature register index
  631. */
  632. enum lm90_temp_reg_index {
  633. LOCAL_LOW = 0,
  634. LOCAL_HIGH,
  635. LOCAL_CRIT,
  636. REMOTE_CRIT,
  637. LOCAL_EMERG, /* max6659 and max6695/96 */
  638. REMOTE_EMERG, /* max6659 and max6695/96 */
  639. REMOTE2_CRIT, /* max6695/96 only */
  640. REMOTE2_EMERG, /* max6695/96 only */
  641. REMOTE_TEMP,
  642. REMOTE_LOW,
  643. REMOTE_HIGH,
  644. REMOTE_OFFSET, /* except max6646, max6657/58/59, and max6695/96 */
  645. LOCAL_TEMP,
  646. REMOTE2_TEMP, /* max6695/96 only */
  647. REMOTE2_LOW, /* max6695/96 only */
  648. REMOTE2_HIGH, /* max6695/96 only */
  649. REMOTE2_OFFSET,
  650. TEMP_REG_NUM
  651. };
  652. /*
  653. * Client data (each client gets its own)
  654. */
  655. struct lm90_data {
  656. struct i2c_client *client;
  657. struct device *hwmon_dev;
  658. u32 chip_config[2];
  659. u32 channel_config[MAX_CHANNELS + 1];
  660. const char *channel_label[MAX_CHANNELS];
  661. struct hwmon_channel_info chip_info;
  662. struct hwmon_channel_info temp_info;
  663. const struct hwmon_channel_info *info[3];
  664. struct hwmon_chip_info chip;
  665. struct mutex update_lock;
  666. struct delayed_work alert_work;
  667. struct work_struct report_work;
  668. bool valid; /* true if register values are valid */
  669. bool alarms_valid; /* true if status register values are valid */
  670. unsigned long last_updated; /* in jiffies */
  671. unsigned long alarms_updated; /* in jiffies */
  672. int kind;
  673. u32 flags;
  674. unsigned int update_interval; /* in milliseconds */
  675. u8 config; /* Current configuration register value */
  676. u8 config_orig; /* Original configuration register value */
  677. u8 convrate_orig; /* Original conversion rate register value */
  678. u8 resolution; /* temperature resolution in bit */
  679. u16 alert_alarms; /* Which alarm bits trigger ALERT# */
  680. /* Upper 8 bits for max6695/96 */
  681. u8 max_convrate; /* Maximum conversion rate */
  682. u8 reg_status2; /* 2nd status register (optional) */
  683. u8 reg_local_ext; /* local extension register offset */
  684. u8 reg_remote_ext; /* remote temperature low byte */
  685. u8 faultqueue_mask; /* fault queue mask */
  686. u8 faultqueue_depth; /* fault queue mask */
  687. /* registers values */
  688. u16 temp[TEMP_REG_NUM];
  689. u8 temp_hyst;
  690. u8 conalert;
  691. u16 reported_alarms; /* alarms reported as sysfs/udev events */
  692. u16 current_alarms; /* current alarms, reported by chip */
  693. u16 alarms; /* alarms not yet reported to user */
  694. };
  695. /*
  696. * Support functions
  697. */
  698. /*
  699. * If the chip supports PEC but not on write byte transactions, we need
  700. * to explicitly ask for a transaction without PEC.
  701. */
  702. static inline s32 lm90_write_no_pec(struct i2c_client *client, u8 value)
  703. {
  704. return i2c_smbus_xfer(client->adapter, client->addr,
  705. client->flags & ~I2C_CLIENT_PEC,
  706. I2C_SMBUS_WRITE, value, I2C_SMBUS_BYTE, NULL);
  707. }
  708. /*
  709. * It is assumed that client->update_lock is held (unless we are in
  710. * detection or initialization steps). This matters when PEC is enabled
  711. * for chips with partial PEC support, because we don't want the address
  712. * pointer to change between the write byte and the read byte transactions.
  713. */
  714. static int lm90_read_reg(struct i2c_client *client, u8 reg)
  715. {
  716. struct lm90_data *data = i2c_get_clientdata(client);
  717. bool partial_pec = (client->flags & I2C_CLIENT_PEC) &&
  718. (data->flags & LM90_HAVE_PARTIAL_PEC);
  719. int err;
  720. if (partial_pec) {
  721. err = lm90_write_no_pec(client, reg);
  722. if (err)
  723. return err;
  724. return i2c_smbus_read_byte(client);
  725. }
  726. return i2c_smbus_read_byte_data(client, reg);
  727. }
  728. /*
  729. * Return register write address
  730. *
  731. * The write address for registers 0x03 .. 0x08 is the read address plus 6.
  732. * For other registers the write address matches the read address.
  733. */
  734. static u8 lm90_write_reg_addr(u8 reg)
  735. {
  736. if (reg >= LM90_REG_CONFIG1 && reg <= LM90_REG_REMOTE_LOWH)
  737. return reg + 6;
  738. return reg;
  739. }
  740. /*
  741. * Write into LM90 register.
  742. * Convert register address to write address if needed, then execute the
  743. * operation.
  744. */
  745. static int lm90_write_reg(struct i2c_client *client, u8 reg, u8 val)
  746. {
  747. return i2c_smbus_write_byte_data(client, lm90_write_reg_addr(reg), val);
  748. }
  749. /*
  750. * Write into 16-bit LM90 register.
  751. * Convert register addresses to write address if needed, then execute the
  752. * operation.
  753. */
  754. static int lm90_write16(struct i2c_client *client, u8 regh, u8 regl, u16 val)
  755. {
  756. int ret;
  757. ret = lm90_write_reg(client, regh, val >> 8);
  758. if (ret < 0 || !regl)
  759. return ret;
  760. return lm90_write_reg(client, regl, val & 0xff);
  761. }
  762. static int lm90_read16(struct i2c_client *client, u8 regh, u8 regl,
  763. bool is_volatile)
  764. {
  765. int oldh, newh, l;
  766. oldh = lm90_read_reg(client, regh);
  767. if (oldh < 0)
  768. return oldh;
  769. if (!regl)
  770. return oldh << 8;
  771. l = lm90_read_reg(client, regl);
  772. if (l < 0)
  773. return l;
  774. if (!is_volatile)
  775. return (oldh << 8) | l;
  776. /*
  777. * For volatile registers we have to use a trick.
  778. * We have to read two registers to have the sensor temperature,
  779. * but we have to beware a conversion could occur between the
  780. * readings. The datasheet says we should either use
  781. * the one-shot conversion register, which we don't want to do
  782. * (disables hardware monitoring) or monitor the busy bit, which is
  783. * impossible (we can't read the values and monitor that bit at the
  784. * exact same time). So the solution used here is to read the high
  785. * the high byte again. If the new high byte matches the old one,
  786. * then we have a valid reading. Otherwise we have to read the low
  787. * byte again, and now we believe we have a correct reading.
  788. */
  789. newh = lm90_read_reg(client, regh);
  790. if (newh < 0)
  791. return newh;
  792. if (oldh != newh) {
  793. l = lm90_read_reg(client, regl);
  794. if (l < 0)
  795. return l;
  796. }
  797. return (newh << 8) | l;
  798. }
  799. static int lm90_update_confreg(struct lm90_data *data, u8 config)
  800. {
  801. if (data->config != config) {
  802. int err;
  803. err = lm90_write_reg(data->client, LM90_REG_CONFIG1, config);
  804. if (err)
  805. return err;
  806. data->config = config;
  807. }
  808. return 0;
  809. }
  810. /*
  811. * client->update_lock must be held when calling this function (unless we are
  812. * in detection or initialization steps), and while a remote channel other
  813. * than channel 0 is selected. Also, calling code must make sure to re-select
  814. * external channel 0 before releasing the lock. This is necessary because
  815. * various registers have different meanings as a result of selecting a
  816. * non-default remote channel.
  817. */
  818. static int lm90_select_remote_channel(struct lm90_data *data, bool second)
  819. {
  820. u8 config = data->config & ~0x08;
  821. if (second)
  822. config |= 0x08;
  823. return lm90_update_confreg(data, config);
  824. }
  825. static int lm90_write_convrate(struct lm90_data *data, int val)
  826. {
  827. u8 config = data->config;
  828. int err;
  829. /* Save config and pause conversion */
  830. if (data->flags & LM90_PAUSE_FOR_CONFIG) {
  831. err = lm90_update_confreg(data, config | 0x40);
  832. if (err < 0)
  833. return err;
  834. }
  835. /* Set conv rate */
  836. err = lm90_write_reg(data->client, LM90_REG_CONVRATE, val);
  837. /* Revert change to config */
  838. lm90_update_confreg(data, config);
  839. return err;
  840. }
  841. /*
  842. * Set conversion rate.
  843. * client->update_lock must be held when calling this function (unless we are
  844. * in detection or initialization steps).
  845. */
  846. static int lm90_set_convrate(struct i2c_client *client, struct lm90_data *data,
  847. unsigned int interval)
  848. {
  849. unsigned int update_interval;
  850. int i, err;
  851. /* Shift calculations to avoid rounding errors */
  852. interval <<= 6;
  853. /* find the nearest update rate */
  854. for (i = 0, update_interval = LM90_MAX_CONVRATE_MS << 6;
  855. i < data->max_convrate; i++, update_interval >>= 1)
  856. if (interval >= update_interval * 3 / 4)
  857. break;
  858. err = lm90_write_convrate(data, i);
  859. data->update_interval = DIV_ROUND_CLOSEST(update_interval, 64);
  860. return err;
  861. }
  862. static int lm90_set_faultqueue(struct i2c_client *client,
  863. struct lm90_data *data, int val)
  864. {
  865. int err;
  866. if (data->faultqueue_mask) {
  867. err = lm90_update_confreg(data, val <= data->faultqueue_depth / 2 ?
  868. data->config & ~data->faultqueue_mask :
  869. data->config | data->faultqueue_mask);
  870. } else {
  871. static const u8 values[4] = {0, 2, 6, 0x0e};
  872. data->conalert = (data->conalert & 0xf1) | values[val - 1];
  873. err = lm90_write_reg(data->client, TMP451_REG_CONALERT,
  874. data->conalert);
  875. }
  876. return err;
  877. }
  878. static int lm90_update_limits(struct device *dev)
  879. {
  880. struct lm90_data *data = dev_get_drvdata(dev);
  881. struct i2c_client *client = data->client;
  882. int val;
  883. if (data->flags & LM90_HAVE_CRIT) {
  884. val = lm90_read_reg(client, LM90_REG_LOCAL_CRIT);
  885. if (val < 0)
  886. return val;
  887. data->temp[LOCAL_CRIT] = val << 8;
  888. val = lm90_read_reg(client, LM90_REG_REMOTE_CRIT);
  889. if (val < 0)
  890. return val;
  891. data->temp[REMOTE_CRIT] = val << 8;
  892. val = lm90_read_reg(client, LM90_REG_TCRIT_HYST);
  893. if (val < 0)
  894. return val;
  895. data->temp_hyst = val;
  896. }
  897. if ((data->flags & LM90_HAVE_FAULTQUEUE) && !data->faultqueue_mask) {
  898. val = lm90_read_reg(client, TMP451_REG_CONALERT);
  899. if (val < 0)
  900. return val;
  901. data->conalert = val;
  902. }
  903. val = lm90_read16(client, LM90_REG_REMOTE_LOWH,
  904. (data->flags & LM90_HAVE_REM_LIMIT_EXT) ? LM90_REG_REMOTE_LOWL : 0,
  905. false);
  906. if (val < 0)
  907. return val;
  908. data->temp[REMOTE_LOW] = val;
  909. val = lm90_read16(client, LM90_REG_REMOTE_HIGHH,
  910. (data->flags & LM90_HAVE_REM_LIMIT_EXT) ? LM90_REG_REMOTE_HIGHL : 0,
  911. false);
  912. if (val < 0)
  913. return val;
  914. data->temp[REMOTE_HIGH] = val;
  915. if (data->flags & LM90_HAVE_OFFSET) {
  916. val = lm90_read16(client, LM90_REG_REMOTE_OFFSH,
  917. LM90_REG_REMOTE_OFFSL, false);
  918. if (val < 0)
  919. return val;
  920. data->temp[REMOTE_OFFSET] = val;
  921. }
  922. if (data->flags & LM90_HAVE_EMERGENCY) {
  923. val = lm90_read_reg(client, MAX6659_REG_LOCAL_EMERG);
  924. if (val < 0)
  925. return val;
  926. data->temp[LOCAL_EMERG] = val << 8;
  927. val = lm90_read_reg(client, MAX6659_REG_REMOTE_EMERG);
  928. if (val < 0)
  929. return val;
  930. data->temp[REMOTE_EMERG] = val << 8;
  931. }
  932. if (data->flags & LM90_HAVE_TEMP3) {
  933. val = lm90_select_remote_channel(data, true);
  934. if (val < 0)
  935. return val;
  936. val = lm90_read_reg(client, LM90_REG_REMOTE_CRIT);
  937. if (val < 0)
  938. return val;
  939. data->temp[REMOTE2_CRIT] = val << 8;
  940. if (data->flags & LM90_HAVE_EMERGENCY) {
  941. val = lm90_read_reg(client, MAX6659_REG_REMOTE_EMERG);
  942. if (val < 0)
  943. return val;
  944. data->temp[REMOTE2_EMERG] = val << 8;
  945. }
  946. val = lm90_read_reg(client, LM90_REG_REMOTE_LOWH);
  947. if (val < 0)
  948. return val;
  949. data->temp[REMOTE2_LOW] = val << 8;
  950. val = lm90_read_reg(client, LM90_REG_REMOTE_HIGHH);
  951. if (val < 0)
  952. return val;
  953. data->temp[REMOTE2_HIGH] = val << 8;
  954. if (data->flags & LM90_HAVE_OFFSET) {
  955. val = lm90_read16(client, LM90_REG_REMOTE_OFFSH,
  956. LM90_REG_REMOTE_OFFSL, false);
  957. if (val < 0)
  958. return val;
  959. data->temp[REMOTE2_OFFSET] = val;
  960. }
  961. lm90_select_remote_channel(data, false);
  962. }
  963. return 0;
  964. }
  965. static void lm90_report_alarms(struct work_struct *work)
  966. {
  967. struct lm90_data *data = container_of(work, struct lm90_data, report_work);
  968. u16 cleared_alarms, new_alarms, current_alarms;
  969. struct device *hwmon_dev = data->hwmon_dev;
  970. struct device *dev = &data->client->dev;
  971. int st, st2;
  972. current_alarms = data->current_alarms;
  973. cleared_alarms = data->reported_alarms & ~current_alarms;
  974. new_alarms = current_alarms & ~data->reported_alarms;
  975. if (!cleared_alarms && !new_alarms)
  976. return;
  977. st = new_alarms & 0xff;
  978. st2 = new_alarms >> 8;
  979. if ((st & (LM90_STATUS_LLOW | LM90_STATUS_LHIGH | LM90_STATUS_LTHRM)) ||
  980. (st2 & MAX6696_STATUS2_LOT2))
  981. dev_dbg(dev, "temp%d out of range, please check!\n", 1);
  982. if ((st & (LM90_STATUS_RLOW | LM90_STATUS_RHIGH | LM90_STATUS_RTHRM)) ||
  983. (st2 & MAX6696_STATUS2_ROT2))
  984. dev_dbg(dev, "temp%d out of range, please check!\n", 2);
  985. if (st & LM90_STATUS_ROPEN)
  986. dev_dbg(dev, "temp%d diode open, please check!\n", 2);
  987. if (st2 & (MAX6696_STATUS2_R2LOW | MAX6696_STATUS2_R2HIGH |
  988. MAX6696_STATUS2_R2THRM | MAX6696_STATUS2_R2OT2))
  989. dev_dbg(dev, "temp%d out of range, please check!\n", 3);
  990. if (st2 & MAX6696_STATUS2_R2OPEN)
  991. dev_dbg(dev, "temp%d diode open, please check!\n", 3);
  992. st |= cleared_alarms & 0xff;
  993. st2 |= cleared_alarms >> 8;
  994. if (st & LM90_STATUS_LLOW)
  995. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_min_alarm, 0);
  996. if (st & LM90_STATUS_RLOW)
  997. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_min_alarm, 1);
  998. if (st2 & MAX6696_STATUS2_R2LOW)
  999. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_min_alarm, 2);
  1000. if (st & LM90_STATUS_LHIGH)
  1001. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_max_alarm, 0);
  1002. if (st & LM90_STATUS_RHIGH)
  1003. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_max_alarm, 1);
  1004. if (st2 & MAX6696_STATUS2_R2HIGH)
  1005. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_max_alarm, 2);
  1006. if (st & LM90_STATUS_LTHRM)
  1007. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_crit_alarm, 0);
  1008. if (st & LM90_STATUS_RTHRM)
  1009. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_crit_alarm, 1);
  1010. if (st2 & MAX6696_STATUS2_R2THRM)
  1011. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_crit_alarm, 2);
  1012. if (st2 & MAX6696_STATUS2_LOT2)
  1013. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_emergency_alarm, 0);
  1014. if (st2 & MAX6696_STATUS2_ROT2)
  1015. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_emergency_alarm, 1);
  1016. if (st2 & MAX6696_STATUS2_R2OT2)
  1017. hwmon_notify_event(hwmon_dev, hwmon_temp, hwmon_temp_emergency_alarm, 2);
  1018. data->reported_alarms = current_alarms;
  1019. }
  1020. static int lm90_update_alarms_locked(struct lm90_data *data, bool force)
  1021. {
  1022. if (force || !data->alarms_valid ||
  1023. time_after(jiffies, data->alarms_updated + msecs_to_jiffies(data->update_interval))) {
  1024. struct i2c_client *client = data->client;
  1025. bool check_enable;
  1026. u16 alarms;
  1027. int val;
  1028. data->alarms_valid = false;
  1029. val = lm90_read_reg(client, LM90_REG_STATUS);
  1030. if (val < 0)
  1031. return val;
  1032. alarms = val & ~LM90_STATUS_BUSY;
  1033. if (data->reg_status2) {
  1034. val = lm90_read_reg(client, data->reg_status2);
  1035. if (val < 0)
  1036. return val;
  1037. alarms |= val << 8;
  1038. }
  1039. /*
  1040. * If the update is forced (called from interrupt or alert
  1041. * handler) and alarm data is valid, the alarms may have been
  1042. * updated after the last update interval, and the status
  1043. * register may still be cleared. Only add additional alarms
  1044. * in this case. Alarms will be cleared later if appropriate.
  1045. */
  1046. if (force && data->alarms_valid)
  1047. data->current_alarms |= alarms;
  1048. else
  1049. data->current_alarms = alarms;
  1050. data->alarms |= alarms;
  1051. check_enable = (client->irq || !(data->config_orig & 0x80)) &&
  1052. (data->config & 0x80);
  1053. if (force || check_enable)
  1054. schedule_work(&data->report_work);
  1055. /*
  1056. * Re-enable ALERT# output if it was originally enabled, relevant
  1057. * alarms are all clear, and alerts are currently disabled.
  1058. * Otherwise (re)schedule worker if needed.
  1059. */
  1060. if (check_enable) {
  1061. if (!(data->current_alarms & data->alert_alarms)) {
  1062. dev_dbg(&client->dev, "Re-enabling ALERT#\n");
  1063. lm90_update_confreg(data, data->config & ~0x80);
  1064. /*
  1065. * We may have been called from the update handler.
  1066. * If so, the worker, if scheduled, is no longer
  1067. * needed. Cancel it. Don't synchronize because
  1068. * it may already be running.
  1069. */
  1070. cancel_delayed_work(&data->alert_work);
  1071. } else {
  1072. schedule_delayed_work(&data->alert_work,
  1073. max_t(int, HZ, msecs_to_jiffies(data->update_interval)));
  1074. }
  1075. }
  1076. data->alarms_updated = jiffies;
  1077. data->alarms_valid = true;
  1078. }
  1079. return 0;
  1080. }
  1081. static int lm90_update_alarms(struct lm90_data *data, bool force)
  1082. {
  1083. int err;
  1084. mutex_lock(&data->update_lock);
  1085. err = lm90_update_alarms_locked(data, force);
  1086. mutex_unlock(&data->update_lock);
  1087. return err;
  1088. }
  1089. static void lm90_alert_work(struct work_struct *__work)
  1090. {
  1091. struct delayed_work *delayed_work = container_of(__work, struct delayed_work, work);
  1092. struct lm90_data *data = container_of(delayed_work, struct lm90_data, alert_work);
  1093. /* Nothing to do if alerts are enabled */
  1094. if (!(data->config & 0x80))
  1095. return;
  1096. lm90_update_alarms(data, true);
  1097. }
  1098. static int lm90_update_device(struct device *dev)
  1099. {
  1100. struct lm90_data *data = dev_get_drvdata(dev);
  1101. struct i2c_client *client = data->client;
  1102. unsigned long next_update;
  1103. int val;
  1104. if (!data->valid) {
  1105. val = lm90_update_limits(dev);
  1106. if (val < 0)
  1107. return val;
  1108. }
  1109. next_update = data->last_updated +
  1110. msecs_to_jiffies(data->update_interval);
  1111. if (time_after(jiffies, next_update) || !data->valid) {
  1112. dev_dbg(&client->dev, "Updating lm90 data.\n");
  1113. data->valid = false;
  1114. val = lm90_read_reg(client, LM90_REG_LOCAL_LOW);
  1115. if (val < 0)
  1116. return val;
  1117. data->temp[LOCAL_LOW] = val << 8;
  1118. val = lm90_read_reg(client, LM90_REG_LOCAL_HIGH);
  1119. if (val < 0)
  1120. return val;
  1121. data->temp[LOCAL_HIGH] = val << 8;
  1122. val = lm90_read16(client, LM90_REG_LOCAL_TEMP,
  1123. data->reg_local_ext, true);
  1124. if (val < 0)
  1125. return val;
  1126. data->temp[LOCAL_TEMP] = val;
  1127. val = lm90_read16(client, LM90_REG_REMOTE_TEMPH,
  1128. data->reg_remote_ext, true);
  1129. if (val < 0)
  1130. return val;
  1131. data->temp[REMOTE_TEMP] = val;
  1132. if (data->flags & LM90_HAVE_TEMP3) {
  1133. val = lm90_select_remote_channel(data, true);
  1134. if (val < 0)
  1135. return val;
  1136. val = lm90_read16(client, LM90_REG_REMOTE_TEMPH,
  1137. data->reg_remote_ext, true);
  1138. if (val < 0) {
  1139. lm90_select_remote_channel(data, false);
  1140. return val;
  1141. }
  1142. data->temp[REMOTE2_TEMP] = val;
  1143. lm90_select_remote_channel(data, false);
  1144. }
  1145. val = lm90_update_alarms_locked(data, false);
  1146. if (val < 0)
  1147. return val;
  1148. data->last_updated = jiffies;
  1149. data->valid = true;
  1150. }
  1151. return 0;
  1152. }
  1153. /* pec used for devices with PEC support */
  1154. static ssize_t pec_show(struct device *dev, struct device_attribute *dummy,
  1155. char *buf)
  1156. {
  1157. struct i2c_client *client = to_i2c_client(dev);
  1158. return sprintf(buf, "%d\n", !!(client->flags & I2C_CLIENT_PEC));
  1159. }
  1160. static ssize_t pec_store(struct device *dev, struct device_attribute *dummy,
  1161. const char *buf, size_t count)
  1162. {
  1163. struct i2c_client *client = to_i2c_client(dev);
  1164. long val;
  1165. int err;
  1166. err = kstrtol(buf, 10, &val);
  1167. if (err < 0)
  1168. return err;
  1169. switch (val) {
  1170. case 0:
  1171. client->flags &= ~I2C_CLIENT_PEC;
  1172. break;
  1173. case 1:
  1174. client->flags |= I2C_CLIENT_PEC;
  1175. break;
  1176. default:
  1177. return -EINVAL;
  1178. }
  1179. return count;
  1180. }
  1181. static DEVICE_ATTR_RW(pec);
  1182. static int lm90_temp_get_resolution(struct lm90_data *data, int index)
  1183. {
  1184. switch (index) {
  1185. case REMOTE_TEMP:
  1186. if (data->reg_remote_ext)
  1187. return data->resolution;
  1188. return 8;
  1189. case REMOTE_OFFSET:
  1190. case REMOTE2_OFFSET:
  1191. case REMOTE2_TEMP:
  1192. return data->resolution;
  1193. case LOCAL_TEMP:
  1194. if (data->reg_local_ext)
  1195. return data->resolution;
  1196. return 8;
  1197. case REMOTE_LOW:
  1198. case REMOTE_HIGH:
  1199. case REMOTE2_LOW:
  1200. case REMOTE2_HIGH:
  1201. if (data->flags & LM90_HAVE_REM_LIMIT_EXT)
  1202. return data->resolution;
  1203. return 8;
  1204. default:
  1205. return 8;
  1206. }
  1207. }
  1208. static int lm90_temp_from_reg(u32 flags, u16 regval, u8 resolution)
  1209. {
  1210. int val;
  1211. if (flags & LM90_HAVE_EXTENDED_TEMP)
  1212. val = regval - 0x4000;
  1213. else if (flags & (LM90_HAVE_UNSIGNED_TEMP | LM90_HAVE_EXT_UNSIGNED))
  1214. val = regval;
  1215. else
  1216. val = (s16)regval;
  1217. return ((val >> (16 - resolution)) * 1000) >> (resolution - 8);
  1218. }
  1219. static int lm90_get_temp(struct lm90_data *data, int index, int channel)
  1220. {
  1221. int temp = lm90_temp_from_reg(data->flags, data->temp[index],
  1222. lm90_temp_get_resolution(data, index));
  1223. /* +16 degrees offset for remote temperature on LM99 */
  1224. if (data->kind == lm99 && channel)
  1225. temp += 16000;
  1226. return temp;
  1227. }
  1228. static u16 lm90_temp_to_reg(u32 flags, long val, u8 resolution)
  1229. {
  1230. int fraction = resolution > 8 ?
  1231. 1000 - DIV_ROUND_CLOSEST(1000, BIT(resolution - 8)) : 0;
  1232. if (flags & LM90_HAVE_EXTENDED_TEMP) {
  1233. val = clamp_val(val, -64000, 191000 + fraction);
  1234. val += 64000;
  1235. } else if (flags & LM90_HAVE_EXT_UNSIGNED) {
  1236. val = clamp_val(val, 0, 255000 + fraction);
  1237. } else if (flags & LM90_HAVE_UNSIGNED_TEMP) {
  1238. val = clamp_val(val, 0, 127000 + fraction);
  1239. } else {
  1240. val = clamp_val(val, -128000, 127000 + fraction);
  1241. }
  1242. return DIV_ROUND_CLOSEST(val << (resolution - 8), 1000) << (16 - resolution);
  1243. }
  1244. static int lm90_set_temp(struct lm90_data *data, int index, int channel, long val)
  1245. {
  1246. static const u8 regs[] = {
  1247. [LOCAL_LOW] = LM90_REG_LOCAL_LOW,
  1248. [LOCAL_HIGH] = LM90_REG_LOCAL_HIGH,
  1249. [LOCAL_CRIT] = LM90_REG_LOCAL_CRIT,
  1250. [REMOTE_CRIT] = LM90_REG_REMOTE_CRIT,
  1251. [LOCAL_EMERG] = MAX6659_REG_LOCAL_EMERG,
  1252. [REMOTE_EMERG] = MAX6659_REG_REMOTE_EMERG,
  1253. [REMOTE2_CRIT] = LM90_REG_REMOTE_CRIT,
  1254. [REMOTE2_EMERG] = MAX6659_REG_REMOTE_EMERG,
  1255. [REMOTE_LOW] = LM90_REG_REMOTE_LOWH,
  1256. [REMOTE_HIGH] = LM90_REG_REMOTE_HIGHH,
  1257. [REMOTE2_LOW] = LM90_REG_REMOTE_LOWH,
  1258. [REMOTE2_HIGH] = LM90_REG_REMOTE_HIGHH,
  1259. };
  1260. struct i2c_client *client = data->client;
  1261. u8 regh = regs[index];
  1262. u8 regl = 0;
  1263. int err;
  1264. if (channel && (data->flags & LM90_HAVE_REM_LIMIT_EXT)) {
  1265. if (index == REMOTE_LOW || index == REMOTE2_LOW)
  1266. regl = LM90_REG_REMOTE_LOWL;
  1267. else if (index == REMOTE_HIGH || index == REMOTE2_HIGH)
  1268. regl = LM90_REG_REMOTE_HIGHL;
  1269. }
  1270. /* +16 degrees offset for remote temperature on LM99 */
  1271. if (data->kind == lm99 && channel) {
  1272. /* prevent integer underflow */
  1273. val = max(val, -128000l);
  1274. val -= 16000;
  1275. }
  1276. data->temp[index] = lm90_temp_to_reg(data->flags, val,
  1277. lm90_temp_get_resolution(data, index));
  1278. if (channel > 1)
  1279. lm90_select_remote_channel(data, true);
  1280. err = lm90_write16(client, regh, regl, data->temp[index]);
  1281. if (channel > 1)
  1282. lm90_select_remote_channel(data, false);
  1283. return err;
  1284. }
  1285. static int lm90_get_temphyst(struct lm90_data *data, int index, int channel)
  1286. {
  1287. int temp = lm90_get_temp(data, index, channel);
  1288. return temp - data->temp_hyst * 1000;
  1289. }
  1290. static int lm90_set_temphyst(struct lm90_data *data, long val)
  1291. {
  1292. int temp = lm90_get_temp(data, LOCAL_CRIT, 0);
  1293. /* prevent integer overflow/underflow */
  1294. val = clamp_val(val, -128000l, 255000l);
  1295. data->temp_hyst = clamp_val(DIV_ROUND_CLOSEST(temp - val, 1000), 0, 31);
  1296. return lm90_write_reg(data->client, LM90_REG_TCRIT_HYST, data->temp_hyst);
  1297. }
  1298. static int lm90_get_temp_offset(struct lm90_data *data, int index)
  1299. {
  1300. int res = lm90_temp_get_resolution(data, index);
  1301. return lm90_temp_from_reg(0, data->temp[index], res);
  1302. }
  1303. static int lm90_set_temp_offset(struct lm90_data *data, int index, int channel, long val)
  1304. {
  1305. int err;
  1306. val = lm90_temp_to_reg(0, val, lm90_temp_get_resolution(data, index));
  1307. /* For ADT7481 we can use the same registers for remote channel 1 and 2 */
  1308. if (channel > 1)
  1309. lm90_select_remote_channel(data, true);
  1310. err = lm90_write16(data->client, LM90_REG_REMOTE_OFFSH, LM90_REG_REMOTE_OFFSL, val);
  1311. if (channel > 1)
  1312. lm90_select_remote_channel(data, false);
  1313. if (err)
  1314. return err;
  1315. data->temp[index] = val;
  1316. return 0;
  1317. }
  1318. static const u8 lm90_temp_index[MAX_CHANNELS] = {
  1319. LOCAL_TEMP, REMOTE_TEMP, REMOTE2_TEMP
  1320. };
  1321. static const u8 lm90_temp_min_index[MAX_CHANNELS] = {
  1322. LOCAL_LOW, REMOTE_LOW, REMOTE2_LOW
  1323. };
  1324. static const u8 lm90_temp_max_index[MAX_CHANNELS] = {
  1325. LOCAL_HIGH, REMOTE_HIGH, REMOTE2_HIGH
  1326. };
  1327. static const u8 lm90_temp_crit_index[MAX_CHANNELS] = {
  1328. LOCAL_CRIT, REMOTE_CRIT, REMOTE2_CRIT
  1329. };
  1330. static const u8 lm90_temp_emerg_index[MAX_CHANNELS] = {
  1331. LOCAL_EMERG, REMOTE_EMERG, REMOTE2_EMERG
  1332. };
  1333. static const s8 lm90_temp_offset_index[MAX_CHANNELS] = {
  1334. -1, REMOTE_OFFSET, REMOTE2_OFFSET
  1335. };
  1336. static const u16 lm90_min_alarm_bits[MAX_CHANNELS] = { BIT(5), BIT(3), BIT(11) };
  1337. static const u16 lm90_max_alarm_bits[MAX_CHANNELS] = { BIT(6), BIT(4), BIT(12) };
  1338. static const u16 lm90_crit_alarm_bits[MAX_CHANNELS] = { BIT(0), BIT(1), BIT(9) };
  1339. static const u16 lm90_crit_alarm_bits_swapped[MAX_CHANNELS] = { BIT(1), BIT(0), BIT(9) };
  1340. static const u16 lm90_emergency_alarm_bits[MAX_CHANNELS] = { BIT(15), BIT(13), BIT(14) };
  1341. static const u16 lm90_fault_bits[MAX_CHANNELS] = { BIT(0), BIT(2), BIT(10) };
  1342. static int lm90_temp_read(struct device *dev, u32 attr, int channel, long *val)
  1343. {
  1344. struct lm90_data *data = dev_get_drvdata(dev);
  1345. int err;
  1346. u16 bit;
  1347. mutex_lock(&data->update_lock);
  1348. err = lm90_update_device(dev);
  1349. mutex_unlock(&data->update_lock);
  1350. if (err)
  1351. return err;
  1352. switch (attr) {
  1353. case hwmon_temp_input:
  1354. *val = lm90_get_temp(data, lm90_temp_index[channel], channel);
  1355. break;
  1356. case hwmon_temp_min_alarm:
  1357. case hwmon_temp_max_alarm:
  1358. case hwmon_temp_crit_alarm:
  1359. case hwmon_temp_emergency_alarm:
  1360. case hwmon_temp_fault:
  1361. switch (attr) {
  1362. case hwmon_temp_min_alarm:
  1363. bit = lm90_min_alarm_bits[channel];
  1364. break;
  1365. case hwmon_temp_max_alarm:
  1366. bit = lm90_max_alarm_bits[channel];
  1367. break;
  1368. case hwmon_temp_crit_alarm:
  1369. if (data->flags & LM90_HAVE_CRIT_ALRM_SWP)
  1370. bit = lm90_crit_alarm_bits_swapped[channel];
  1371. else
  1372. bit = lm90_crit_alarm_bits[channel];
  1373. break;
  1374. case hwmon_temp_emergency_alarm:
  1375. bit = lm90_emergency_alarm_bits[channel];
  1376. break;
  1377. case hwmon_temp_fault:
  1378. bit = lm90_fault_bits[channel];
  1379. break;
  1380. }
  1381. *val = !!(data->alarms & bit);
  1382. data->alarms &= ~bit;
  1383. data->alarms |= data->current_alarms;
  1384. break;
  1385. case hwmon_temp_min:
  1386. *val = lm90_get_temp(data, lm90_temp_min_index[channel], channel);
  1387. break;
  1388. case hwmon_temp_max:
  1389. *val = lm90_get_temp(data, lm90_temp_max_index[channel], channel);
  1390. break;
  1391. case hwmon_temp_crit:
  1392. *val = lm90_get_temp(data, lm90_temp_crit_index[channel], channel);
  1393. break;
  1394. case hwmon_temp_crit_hyst:
  1395. *val = lm90_get_temphyst(data, lm90_temp_crit_index[channel], channel);
  1396. break;
  1397. case hwmon_temp_emergency:
  1398. *val = lm90_get_temp(data, lm90_temp_emerg_index[channel], channel);
  1399. break;
  1400. case hwmon_temp_emergency_hyst:
  1401. *val = lm90_get_temphyst(data, lm90_temp_emerg_index[channel], channel);
  1402. break;
  1403. case hwmon_temp_offset:
  1404. *val = lm90_get_temp_offset(data, lm90_temp_offset_index[channel]);
  1405. break;
  1406. default:
  1407. return -EOPNOTSUPP;
  1408. }
  1409. return 0;
  1410. }
  1411. static int lm90_temp_write(struct device *dev, u32 attr, int channel, long val)
  1412. {
  1413. struct lm90_data *data = dev_get_drvdata(dev);
  1414. int err;
  1415. mutex_lock(&data->update_lock);
  1416. err = lm90_update_device(dev);
  1417. if (err)
  1418. goto error;
  1419. switch (attr) {
  1420. case hwmon_temp_min:
  1421. err = lm90_set_temp(data, lm90_temp_min_index[channel],
  1422. channel, val);
  1423. break;
  1424. case hwmon_temp_max:
  1425. err = lm90_set_temp(data, lm90_temp_max_index[channel],
  1426. channel, val);
  1427. break;
  1428. case hwmon_temp_crit:
  1429. err = lm90_set_temp(data, lm90_temp_crit_index[channel],
  1430. channel, val);
  1431. break;
  1432. case hwmon_temp_crit_hyst:
  1433. err = lm90_set_temphyst(data, val);
  1434. break;
  1435. case hwmon_temp_emergency:
  1436. err = lm90_set_temp(data, lm90_temp_emerg_index[channel],
  1437. channel, val);
  1438. break;
  1439. case hwmon_temp_offset:
  1440. err = lm90_set_temp_offset(data, lm90_temp_offset_index[channel],
  1441. channel, val);
  1442. break;
  1443. default:
  1444. err = -EOPNOTSUPP;
  1445. break;
  1446. }
  1447. error:
  1448. mutex_unlock(&data->update_lock);
  1449. return err;
  1450. }
  1451. static umode_t lm90_temp_is_visible(const void *data, u32 attr, int channel)
  1452. {
  1453. switch (attr) {
  1454. case hwmon_temp_input:
  1455. case hwmon_temp_min_alarm:
  1456. case hwmon_temp_max_alarm:
  1457. case hwmon_temp_crit_alarm:
  1458. case hwmon_temp_emergency_alarm:
  1459. case hwmon_temp_emergency_hyst:
  1460. case hwmon_temp_fault:
  1461. case hwmon_temp_label:
  1462. return 0444;
  1463. case hwmon_temp_min:
  1464. case hwmon_temp_max:
  1465. case hwmon_temp_crit:
  1466. case hwmon_temp_emergency:
  1467. case hwmon_temp_offset:
  1468. return 0644;
  1469. case hwmon_temp_crit_hyst:
  1470. if (channel == 0)
  1471. return 0644;
  1472. return 0444;
  1473. default:
  1474. return 0;
  1475. }
  1476. }
  1477. static int lm90_chip_read(struct device *dev, u32 attr, int channel, long *val)
  1478. {
  1479. struct lm90_data *data = dev_get_drvdata(dev);
  1480. int err;
  1481. mutex_lock(&data->update_lock);
  1482. err = lm90_update_device(dev);
  1483. mutex_unlock(&data->update_lock);
  1484. if (err)
  1485. return err;
  1486. switch (attr) {
  1487. case hwmon_chip_update_interval:
  1488. *val = data->update_interval;
  1489. break;
  1490. case hwmon_chip_alarms:
  1491. *val = data->alarms;
  1492. break;
  1493. case hwmon_chip_temp_samples:
  1494. if (data->faultqueue_mask) {
  1495. *val = (data->config & data->faultqueue_mask) ?
  1496. data->faultqueue_depth : 1;
  1497. } else {
  1498. switch (data->conalert & 0x0e) {
  1499. case 0x0:
  1500. default:
  1501. *val = 1;
  1502. break;
  1503. case 0x2:
  1504. *val = 2;
  1505. break;
  1506. case 0x6:
  1507. *val = 3;
  1508. break;
  1509. case 0xe:
  1510. *val = 4;
  1511. break;
  1512. }
  1513. }
  1514. break;
  1515. default:
  1516. return -EOPNOTSUPP;
  1517. }
  1518. return 0;
  1519. }
  1520. static int lm90_chip_write(struct device *dev, u32 attr, int channel, long val)
  1521. {
  1522. struct lm90_data *data = dev_get_drvdata(dev);
  1523. struct i2c_client *client = data->client;
  1524. int err;
  1525. mutex_lock(&data->update_lock);
  1526. err = lm90_update_device(dev);
  1527. if (err)
  1528. goto error;
  1529. switch (attr) {
  1530. case hwmon_chip_update_interval:
  1531. err = lm90_set_convrate(client, data,
  1532. clamp_val(val, 0, 100000));
  1533. break;
  1534. case hwmon_chip_temp_samples:
  1535. err = lm90_set_faultqueue(client, data, clamp_val(val, 1, 4));
  1536. break;
  1537. default:
  1538. err = -EOPNOTSUPP;
  1539. break;
  1540. }
  1541. error:
  1542. mutex_unlock(&data->update_lock);
  1543. return err;
  1544. }
  1545. static umode_t lm90_chip_is_visible(const void *data, u32 attr, int channel)
  1546. {
  1547. switch (attr) {
  1548. case hwmon_chip_update_interval:
  1549. case hwmon_chip_temp_samples:
  1550. return 0644;
  1551. case hwmon_chip_alarms:
  1552. return 0444;
  1553. default:
  1554. return 0;
  1555. }
  1556. }
  1557. static int lm90_read(struct device *dev, enum hwmon_sensor_types type,
  1558. u32 attr, int channel, long *val)
  1559. {
  1560. switch (type) {
  1561. case hwmon_chip:
  1562. return lm90_chip_read(dev, attr, channel, val);
  1563. case hwmon_temp:
  1564. return lm90_temp_read(dev, attr, channel, val);
  1565. default:
  1566. return -EOPNOTSUPP;
  1567. }
  1568. }
  1569. static int lm90_read_string(struct device *dev, enum hwmon_sensor_types type,
  1570. u32 attr, int channel, const char **str)
  1571. {
  1572. struct lm90_data *data = dev_get_drvdata(dev);
  1573. *str = data->channel_label[channel];
  1574. return 0;
  1575. }
  1576. static int lm90_write(struct device *dev, enum hwmon_sensor_types type,
  1577. u32 attr, int channel, long val)
  1578. {
  1579. switch (type) {
  1580. case hwmon_chip:
  1581. return lm90_chip_write(dev, attr, channel, val);
  1582. case hwmon_temp:
  1583. return lm90_temp_write(dev, attr, channel, val);
  1584. default:
  1585. return -EOPNOTSUPP;
  1586. }
  1587. }
  1588. static umode_t lm90_is_visible(const void *data, enum hwmon_sensor_types type,
  1589. u32 attr, int channel)
  1590. {
  1591. switch (type) {
  1592. case hwmon_chip:
  1593. return lm90_chip_is_visible(data, attr, channel);
  1594. case hwmon_temp:
  1595. return lm90_temp_is_visible(data, attr, channel);
  1596. default:
  1597. return 0;
  1598. }
  1599. }
  1600. static const char *lm90_detect_lm84(struct i2c_client *client)
  1601. {
  1602. static const u8 regs[] = {
  1603. LM90_REG_STATUS, LM90_REG_LOCAL_TEMP, LM90_REG_LOCAL_HIGH,
  1604. LM90_REG_REMOTE_TEMPH, LM90_REG_REMOTE_HIGHH
  1605. };
  1606. int status = i2c_smbus_read_byte_data(client, LM90_REG_STATUS);
  1607. int reg1, reg2, reg3, reg4;
  1608. bool nonzero = false;
  1609. u8 ff = 0xff;
  1610. int i;
  1611. if (status < 0 || (status & 0xab))
  1612. return NULL;
  1613. /*
  1614. * For LM84, undefined registers return the most recent value.
  1615. * Repeat several times, each time checking against a different
  1616. * (presumably) existing register.
  1617. */
  1618. for (i = 0; i < ARRAY_SIZE(regs); i++) {
  1619. reg1 = i2c_smbus_read_byte_data(client, regs[i]);
  1620. reg2 = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_TEMPL);
  1621. reg3 = i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_LOW);
  1622. reg4 = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWH);
  1623. if (reg1 < 0)
  1624. return NULL;
  1625. /* If any register has a different value, this is not an LM84 */
  1626. if (reg2 != reg1 || reg3 != reg1 || reg4 != reg1)
  1627. return NULL;
  1628. nonzero |= reg1 || reg2 || reg3 || reg4;
  1629. ff &= reg1;
  1630. }
  1631. /*
  1632. * If all registers always returned 0 or 0xff, all bets are off,
  1633. * and we can not make any predictions about the chip type.
  1634. */
  1635. return nonzero && ff != 0xff ? "lm84" : NULL;
  1636. }
  1637. static const char *lm90_detect_max1617(struct i2c_client *client, int config1)
  1638. {
  1639. int status = i2c_smbus_read_byte_data(client, LM90_REG_STATUS);
  1640. int llo, rlo, lhi, rhi;
  1641. if (status < 0 || (status & 0x03))
  1642. return NULL;
  1643. if (config1 & 0x3f)
  1644. return NULL;
  1645. /*
  1646. * Fail if unsupported registers return anything but 0xff.
  1647. * The calling code already checked man_id and chip_id.
  1648. * A byte read operation repeats the most recent read operation
  1649. * and should also return 0xff.
  1650. */
  1651. if (i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_TEMPL) != 0xff ||
  1652. i2c_smbus_read_byte_data(client, MAX6657_REG_LOCAL_TEMPL) != 0xff ||
  1653. i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWL) != 0xff ||
  1654. i2c_smbus_read_byte(client) != 0xff)
  1655. return NULL;
  1656. llo = i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_LOW);
  1657. rlo = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWH);
  1658. lhi = i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_HIGH);
  1659. rhi = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_HIGHH);
  1660. if (llo < 0 || rlo < 0)
  1661. return NULL;
  1662. /*
  1663. * A byte read operation repeats the most recent read and should
  1664. * return the same value.
  1665. */
  1666. if (i2c_smbus_read_byte(client) != rhi)
  1667. return NULL;
  1668. /*
  1669. * The following two checks are marginal since the checked values
  1670. * are strictly speaking valid.
  1671. */
  1672. /* fail for negative high limits; this also catches read errors */
  1673. if ((s8)lhi < 0 || (s8)rhi < 0)
  1674. return NULL;
  1675. /* fail if low limits are larger than or equal to high limits */
  1676. if ((s8)llo >= lhi || (s8)rlo >= rhi)
  1677. return NULL;
  1678. if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_WORD_DATA)) {
  1679. /*
  1680. * Word read operations return 0xff in second byte
  1681. */
  1682. if (i2c_smbus_read_word_data(client, LM90_REG_REMOTE_TEMPL) !=
  1683. 0xffff)
  1684. return NULL;
  1685. if (i2c_smbus_read_word_data(client, LM90_REG_CONFIG1) !=
  1686. (config1 | 0xff00))
  1687. return NULL;
  1688. if (i2c_smbus_read_word_data(client, LM90_REG_LOCAL_HIGH) !=
  1689. (lhi | 0xff00))
  1690. return NULL;
  1691. }
  1692. return "max1617";
  1693. }
  1694. static const char *lm90_detect_national(struct i2c_client *client, int chip_id,
  1695. int config1, int convrate)
  1696. {
  1697. int config2 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG2);
  1698. int address = client->addr;
  1699. const char *name = NULL;
  1700. if (config2 < 0)
  1701. return NULL;
  1702. if ((config1 & 0x2a) || (config2 & 0xf8) || convrate > 0x09)
  1703. return NULL;
  1704. if (address != 0x4c && address != 0x4d)
  1705. return NULL;
  1706. switch (chip_id & 0xf0) {
  1707. case 0x10: /* LM86 */
  1708. if (address == 0x4c)
  1709. name = "lm86";
  1710. break;
  1711. case 0x20: /* LM90 */
  1712. if (address == 0x4c)
  1713. name = "lm90";
  1714. break;
  1715. case 0x30: /* LM89/LM99 */
  1716. name = "lm99"; /* detect LM89 as LM99 */
  1717. break;
  1718. default:
  1719. break;
  1720. }
  1721. return name;
  1722. }
  1723. static const char *lm90_detect_on(struct i2c_client *client, int chip_id, int config1,
  1724. int convrate)
  1725. {
  1726. int address = client->addr;
  1727. const char *name = NULL;
  1728. switch (chip_id) {
  1729. case 0xca: /* NCT218 */
  1730. if ((address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
  1731. convrate <= 0x0a)
  1732. name = "nct218";
  1733. break;
  1734. default:
  1735. break;
  1736. }
  1737. return name;
  1738. }
  1739. static const char *lm90_detect_analog(struct i2c_client *client, bool common_address,
  1740. int chip_id, int config1, int convrate)
  1741. {
  1742. int status = i2c_smbus_read_byte_data(client, LM90_REG_STATUS);
  1743. int config2 = i2c_smbus_read_byte_data(client, ADT7481_REG_CONFIG2);
  1744. int man_id2 = i2c_smbus_read_byte_data(client, ADT7481_REG_MAN_ID);
  1745. int chip_id2 = i2c_smbus_read_byte_data(client, ADT7481_REG_CHIP_ID);
  1746. int address = client->addr;
  1747. const char *name = NULL;
  1748. if (status < 0 || config2 < 0 || man_id2 < 0 || chip_id2 < 0)
  1749. return NULL;
  1750. /*
  1751. * The following chips should be detected by this function. Known
  1752. * register values are listed. Registers 0x3d .. 0x3e are undocumented
  1753. * for most of the chips, yet appear to return a well defined value.
  1754. * Register 0xff is undocumented for some of the chips. Register 0x3f
  1755. * is undocumented for all chips, but also returns a well defined value.
  1756. * Values are as reported from real chips unless mentioned otherwise.
  1757. * The code below checks values for registers 0x3d, 0x3e, and 0xff,
  1758. * but not for register 0x3f.
  1759. *
  1760. * Chip Register
  1761. * 3d 3e 3f fe ff Notes
  1762. * ----------------------------------------------------------
  1763. * adm1020 00 00 00 41 39
  1764. * adm1021 00 00 00 41 03
  1765. * adm1021a 00 00 00 41 3c
  1766. * adm1023 00 00 00 41 3c same as adm1021a
  1767. * adm1032 00 00 00 41 42
  1768. *
  1769. * adt7421 21 41 04 41 04
  1770. * adt7461 00 00 00 41 51
  1771. * adt7461a 61 41 05 41 57
  1772. * adt7481 81 41 02 41 62
  1773. * adt7482 - - - 41 65 datasheet
  1774. * 82 41 05 41 75 real chip
  1775. * adt7483 83 41 04 41 94
  1776. *
  1777. * nct72 61 41 07 41 55
  1778. * nct210 00 00 00 41 3f
  1779. * nct214 61 41 08 41 5a
  1780. * nct1008 - - - 41 57 datasheet rev. 3
  1781. * 61 41 06 41 54 real chip
  1782. *
  1783. * nvt210 - - - 41 - datasheet
  1784. * nvt211 - - - 41 - datasheet
  1785. */
  1786. switch (chip_id) {
  1787. case 0x00 ... 0x03: /* ADM1021 */
  1788. case 0x05 ... 0x0f:
  1789. if (man_id2 == 0x00 && chip_id2 == 0x00 && common_address &&
  1790. !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
  1791. name = "adm1021";
  1792. break;
  1793. case 0x04: /* ADT7421 (undocumented) */
  1794. if (man_id2 == 0x41 && chip_id2 == 0x21 &&
  1795. (address == 0x4c || address == 0x4d) &&
  1796. (config1 & 0x0b) == 0x08 && convrate <= 0x0a)
  1797. name = "adt7421";
  1798. break;
  1799. case 0x30 ... 0x38: /* ADM1021A, ADM1023 */
  1800. case 0x3a ... 0x3e:
  1801. /*
  1802. * ADM1021A and compatible chips will be mis-detected as
  1803. * ADM1023. Chips labeled 'ADM1021A' and 'ADM1023' were both
  1804. * found to have a Chip ID of 0x3c.
  1805. * ADM1021A does not officially support low byte registers
  1806. * (0x12 .. 0x14), but a chip labeled ADM1021A does support it.
  1807. * Official support for the temperature offset high byte
  1808. * register (0x11) was added to revision F of the ADM1021A
  1809. * datasheet.
  1810. * It is currently unknown if there is a means to distinguish
  1811. * ADM1021A from ADM1023, and/or if revisions of ADM1021A exist
  1812. * which differ in functionality from ADM1023.
  1813. */
  1814. if (man_id2 == 0x00 && chip_id2 == 0x00 && common_address &&
  1815. !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
  1816. name = "adm1023";
  1817. break;
  1818. case 0x39: /* ADM1020 (undocumented) */
  1819. if (man_id2 == 0x00 && chip_id2 == 0x00 &&
  1820. (address == 0x4c || address == 0x4d || address == 0x4e) &&
  1821. !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
  1822. name = "adm1020";
  1823. break;
  1824. case 0x3f: /* NCT210 */
  1825. if (man_id2 == 0x00 && chip_id2 == 0x00 && common_address &&
  1826. !(status & 0x03) && !(config1 & 0x3f) && !(convrate & 0xf8))
  1827. name = "nct210";
  1828. break;
  1829. case 0x40 ... 0x4f: /* ADM1032 */
  1830. if (man_id2 == 0x00 && chip_id2 == 0x00 &&
  1831. (address == 0x4c || address == 0x4d) && !(config1 & 0x3f) &&
  1832. convrate <= 0x0a)
  1833. name = "adm1032";
  1834. break;
  1835. case 0x51: /* ADT7461 */
  1836. if (man_id2 == 0x00 && chip_id2 == 0x00 &&
  1837. (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
  1838. convrate <= 0x0a)
  1839. name = "adt7461";
  1840. break;
  1841. case 0x54: /* NCT1008 */
  1842. if (man_id2 == 0x41 && chip_id2 == 0x61 &&
  1843. (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
  1844. convrate <= 0x0a)
  1845. name = "nct1008";
  1846. break;
  1847. case 0x55: /* NCT72 */
  1848. if (man_id2 == 0x41 && chip_id2 == 0x61 &&
  1849. (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
  1850. convrate <= 0x0a)
  1851. name = "nct72";
  1852. break;
  1853. case 0x57: /* ADT7461A, NCT1008 (datasheet rev. 3) */
  1854. if (man_id2 == 0x41 && chip_id2 == 0x61 &&
  1855. (address == 0x4c || address == 0x4d) && !(config1 & 0x1b) &&
  1856. convrate <= 0x0a)
  1857. name = "adt7461a";
  1858. break;
  1859. case 0x5a: /* NCT214 */
  1860. if (man_id2 == 0x41 && chip_id2 == 0x61 &&
  1861. common_address && !(config1 & 0x1b) && convrate <= 0x0a)
  1862. name = "nct214";
  1863. break;
  1864. case 0x62: /* ADT7481, undocumented */
  1865. if (man_id2 == 0x41 && chip_id2 == 0x81 &&
  1866. (address == 0x4b || address == 0x4c) && !(config1 & 0x10) &&
  1867. !(config2 & 0x7f) && (convrate & 0x0f) <= 0x0b) {
  1868. name = "adt7481";
  1869. }
  1870. break;
  1871. case 0x65: /* ADT7482, datasheet */
  1872. case 0x75: /* ADT7482, real chip */
  1873. if (man_id2 == 0x41 && chip_id2 == 0x82 &&
  1874. address == 0x4c && !(config1 & 0x10) && !(config2 & 0x7f) &&
  1875. convrate <= 0x0a)
  1876. name = "adt7482";
  1877. break;
  1878. case 0x94: /* ADT7483 */
  1879. if (man_id2 == 0x41 && chip_id2 == 0x83 &&
  1880. common_address &&
  1881. ((address >= 0x18 && address <= 0x1a) ||
  1882. (address >= 0x29 && address <= 0x2b) ||
  1883. (address >= 0x4c && address <= 0x4e)) &&
  1884. !(config1 & 0x10) && !(config2 & 0x7f) && convrate <= 0x0a)
  1885. name = "adt7483a";
  1886. break;
  1887. default:
  1888. break;
  1889. }
  1890. return name;
  1891. }
  1892. static const char *lm90_detect_maxim(struct i2c_client *client, bool common_address,
  1893. int chip_id, int config1, int convrate)
  1894. {
  1895. int man_id, emerg, emerg2, status2;
  1896. int address = client->addr;
  1897. const char *name = NULL;
  1898. switch (chip_id) {
  1899. case 0x01:
  1900. if (!common_address)
  1901. break;
  1902. /*
  1903. * We read MAX6659_REG_REMOTE_EMERG twice, and re-read
  1904. * LM90_REG_MAN_ID in between. If MAX6659_REG_REMOTE_EMERG
  1905. * exists, both readings will reflect the same value. Otherwise,
  1906. * the readings will be different.
  1907. */
  1908. emerg = i2c_smbus_read_byte_data(client,
  1909. MAX6659_REG_REMOTE_EMERG);
  1910. man_id = i2c_smbus_read_byte_data(client,
  1911. LM90_REG_MAN_ID);
  1912. emerg2 = i2c_smbus_read_byte_data(client,
  1913. MAX6659_REG_REMOTE_EMERG);
  1914. status2 = i2c_smbus_read_byte_data(client,
  1915. MAX6696_REG_STATUS2);
  1916. if (emerg < 0 || man_id < 0 || emerg2 < 0 || status2 < 0)
  1917. return NULL;
  1918. /*
  1919. * Even though MAX6695 and MAX6696 do not have a chip ID
  1920. * register, reading it returns 0x01. Bit 4 of the config1
  1921. * register is unused and should return zero when read. Bit 0 of
  1922. * the status2 register is unused and should return zero when
  1923. * read.
  1924. *
  1925. * MAX6695 and MAX6696 have an additional set of temperature
  1926. * limit registers. We can detect those chips by checking if
  1927. * one of those registers exists.
  1928. */
  1929. if (!(config1 & 0x10) && !(status2 & 0x01) && emerg == emerg2 &&
  1930. convrate <= 0x07)
  1931. name = "max6696";
  1932. /*
  1933. * The chip_id register of the MAX6680 and MAX6681 holds the
  1934. * revision of the chip. The lowest bit of the config1 register
  1935. * is unused and should return zero when read, so should the
  1936. * second to last bit of config1 (software reset). Register
  1937. * address 0x12 (LM90_REG_REMOTE_OFFSL) exists for this chip and
  1938. * should differ from emerg2, and emerg2 should match man_id
  1939. * since it does not exist.
  1940. */
  1941. else if (!(config1 & 0x03) && convrate <= 0x07 &&
  1942. emerg2 == man_id && emerg2 != status2)
  1943. name = "max6680";
  1944. /*
  1945. * MAX1617A does not have any extended registers (register
  1946. * address 0x10 or higher) except for manufacturer and
  1947. * device ID registers. Unlike other chips of this series,
  1948. * unsupported registers were observed to return a fixed value
  1949. * of 0x01.
  1950. * Note: Multiple chips with different markings labeled as
  1951. * "MAX1617" (no "A") were observed to report manufacturer ID
  1952. * 0x4d and device ID 0x01. It is unknown if other variants of
  1953. * MAX1617/MAX617A with different behavior exist. The detection
  1954. * code below works for those chips.
  1955. */
  1956. else if (!(config1 & 0x03f) && convrate <= 0x07 &&
  1957. emerg == 0x01 && emerg2 == 0x01 && status2 == 0x01)
  1958. name = "max1617";
  1959. break;
  1960. case 0x08:
  1961. /*
  1962. * The chip_id of the MAX6654 holds the revision of the chip.
  1963. * The lowest 3 bits of the config1 register are unused and
  1964. * should return zero when read.
  1965. */
  1966. if (common_address && !(config1 & 0x07) && convrate <= 0x07)
  1967. name = "max6654";
  1968. break;
  1969. case 0x09:
  1970. /*
  1971. * The chip_id of the MAX6690 holds the revision of the chip.
  1972. * The lowest 3 bits of the config1 register are unused and
  1973. * should return zero when read.
  1974. * Note that MAX6654 and MAX6690 are practically the same chips.
  1975. * The only diference is the rated accuracy. Rev. 1 of the
  1976. * MAX6690 datasheet lists a chip ID of 0x08, and a chip labeled
  1977. * MAX6654 was observed to have a chip ID of 0x09.
  1978. */
  1979. if (common_address && !(config1 & 0x07) && convrate <= 0x07)
  1980. name = "max6690";
  1981. break;
  1982. case 0x4d:
  1983. /*
  1984. * MAX6642, MAX6657, MAX6658 and MAX6659 do NOT have a chip_id
  1985. * register. Reading from that address will return the last
  1986. * read value, which in our case is those of the man_id
  1987. * register, or 0x4d.
  1988. * MAX6642 does not have a conversion rate register, nor low
  1989. * limit registers. Reading from those registers returns the
  1990. * last read value.
  1991. *
  1992. * For MAX6657, MAX6658 and MAX6659, the config1 register lacks
  1993. * a low nibble, so the value will be those of the previous
  1994. * read, so in our case again those of the man_id register.
  1995. * MAX6659 has a third set of upper temperature limit registers.
  1996. * Those registers also return values on MAX6657 and MAX6658,
  1997. * thus the only way to detect MAX6659 is by its address.
  1998. * For this reason it will be mis-detected as MAX6657 if its
  1999. * address is 0x4c.
  2000. */
  2001. if (address >= 0x48 && address <= 0x4f && config1 == convrate &&
  2002. !(config1 & 0x0f)) {
  2003. int regval;
  2004. /*
  2005. * We know that this is not a MAX6657/58/59 because its
  2006. * configuration register has the wrong value and it does
  2007. * not appear to have a conversion rate register.
  2008. */
  2009. /* re-read manufacturer ID to have a good baseline */
  2010. if (i2c_smbus_read_byte_data(client, LM90_REG_MAN_ID) != 0x4d)
  2011. break;
  2012. /* check various non-existing registers */
  2013. if (i2c_smbus_read_byte_data(client, LM90_REG_CONVRATE) != 0x4d ||
  2014. i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_LOW) != 0x4d ||
  2015. i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWH) != 0x4d)
  2016. break;
  2017. /* check for unused status register bits */
  2018. regval = i2c_smbus_read_byte_data(client, LM90_REG_STATUS);
  2019. if (regval < 0 || (regval & 0x2b))
  2020. break;
  2021. /* re-check unsupported registers */
  2022. if (i2c_smbus_read_byte_data(client, LM90_REG_CONVRATE) != regval ||
  2023. i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_LOW) != regval ||
  2024. i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_LOWH) != regval)
  2025. break;
  2026. name = "max6642";
  2027. } else if ((address == 0x4c || address == 0x4d || address == 0x4e) &&
  2028. (config1 & 0x1f) == 0x0d && convrate <= 0x09) {
  2029. if (address == 0x4c)
  2030. name = "max6657";
  2031. else
  2032. name = "max6659";
  2033. }
  2034. break;
  2035. case 0x59:
  2036. /*
  2037. * The chip_id register of the MAX6646/6647/6649 holds the
  2038. * revision of the chip. The lowest 6 bits of the config1
  2039. * register are unused and should return zero when read.
  2040. * The I2C address of MAX6648/6692 is fixed at 0x4c.
  2041. * MAX6646 is at address 0x4d, MAX6647 is at address 0x4e,
  2042. * and MAX6649 is at address 0x4c. A slight difference between
  2043. * the two sets of chips is that the remote temperature register
  2044. * reports different values if the DXP pin is open or shorted.
  2045. * We can use that information to help distinguish between the
  2046. * chips. MAX6648 will be mis-detected as MAX6649 if the remote
  2047. * diode is connected, but there isn't really anything we can
  2048. * do about that.
  2049. */
  2050. if (!(config1 & 0x3f) && convrate <= 0x07) {
  2051. int temp;
  2052. switch (address) {
  2053. case 0x4c:
  2054. /*
  2055. * MAX6649 reports an external temperature
  2056. * value of 0xff if DXP is open or shorted.
  2057. * MAX6648 reports 0x80 in that case.
  2058. */
  2059. temp = i2c_smbus_read_byte_data(client,
  2060. LM90_REG_REMOTE_TEMPH);
  2061. if (temp == 0x80)
  2062. name = "max6648";
  2063. else
  2064. name = "max6649";
  2065. break;
  2066. case 0x4d:
  2067. name = "max6646";
  2068. break;
  2069. case 0x4e:
  2070. name = "max6647";
  2071. break;
  2072. default:
  2073. break;
  2074. }
  2075. }
  2076. break;
  2077. default:
  2078. break;
  2079. }
  2080. return name;
  2081. }
  2082. static const char *lm90_detect_nuvoton(struct i2c_client *client, int chip_id,
  2083. int config1, int convrate)
  2084. {
  2085. int config2 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG2);
  2086. int address = client->addr;
  2087. const char *name = NULL;
  2088. if (config2 < 0)
  2089. return NULL;
  2090. if (address == 0x4c && !(config1 & 0x2a) && !(config2 & 0xf8)) {
  2091. if (chip_id == 0x01 && convrate <= 0x09) {
  2092. /* W83L771W/G */
  2093. name = "w83l771";
  2094. } else if ((chip_id & 0xfe) == 0x10 && convrate <= 0x08) {
  2095. /* W83L771AWG/ASG */
  2096. name = "w83l771";
  2097. }
  2098. }
  2099. return name;
  2100. }
  2101. static const char *lm90_detect_nxp(struct i2c_client *client, bool common_address,
  2102. int chip_id, int config1, int convrate)
  2103. {
  2104. int address = client->addr;
  2105. const char *name = NULL;
  2106. int config2;
  2107. switch (chip_id) {
  2108. case 0x00:
  2109. config2 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG2);
  2110. if (config2 < 0)
  2111. return NULL;
  2112. if (address >= 0x48 && address <= 0x4f &&
  2113. !(config1 & 0x2a) && !(config2 & 0xfe) && convrate <= 0x09)
  2114. name = "sa56004";
  2115. break;
  2116. case 0x80:
  2117. if (common_address && !(config1 & 0x3f) && convrate <= 0x07)
  2118. name = "ne1618";
  2119. break;
  2120. default:
  2121. break;
  2122. }
  2123. return name;
  2124. }
  2125. static const char *lm90_detect_gmt(struct i2c_client *client, int chip_id,
  2126. int config1, int convrate)
  2127. {
  2128. int address = client->addr;
  2129. /*
  2130. * According to the datasheet, G781 is supposed to be at I2C Address
  2131. * 0x4c and have a chip ID of 0x01. G781-1 is supposed to be at I2C
  2132. * address 0x4d and have a chip ID of 0x03. However, when support
  2133. * for G781 was added, chips at 0x4c and 0x4d were found to have a
  2134. * chip ID of 0x01. A G781-1 at I2C address 0x4d was now found with
  2135. * chip ID 0x03.
  2136. * To avoid detection failures, accept chip ID 0x01 and 0x03 at both
  2137. * addresses.
  2138. * G784 reports manufacturer ID 0x47 and chip ID 0x01. A public
  2139. * datasheet is not available. Extensive testing suggests that
  2140. * the chip appears to be fully compatible with G781.
  2141. * Available register dumps show that G751 also reports manufacturer
  2142. * ID 0x47 and chip ID 0x01 even though that chip does not officially
  2143. * support those registers. This makes chip detection somewhat
  2144. * vulnerable. To improve detection quality, read the offset low byte
  2145. * and alert fault queue registers and verify that only expected bits
  2146. * are set.
  2147. */
  2148. if ((chip_id == 0x01 || chip_id == 0x03) &&
  2149. (address == 0x4c || address == 0x4d) &&
  2150. !(config1 & 0x3f) && convrate <= 0x08) {
  2151. int reg;
  2152. reg = i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_OFFSL);
  2153. if (reg < 0 || reg & 0x1f)
  2154. return NULL;
  2155. reg = i2c_smbus_read_byte_data(client, TMP451_REG_CONALERT);
  2156. if (reg < 0 || reg & 0xf1)
  2157. return NULL;
  2158. return "g781";
  2159. }
  2160. return NULL;
  2161. }
  2162. static const char *lm90_detect_ti49(struct i2c_client *client, bool common_address,
  2163. int chip_id, int config1, int convrate)
  2164. {
  2165. if (common_address && chip_id == 0x00 && !(config1 & 0x3f) && !(convrate & 0xf8)) {
  2166. /* THMC10: Unsupported registers return 0xff */
  2167. if (i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_TEMPL) == 0xff &&
  2168. i2c_smbus_read_byte_data(client, LM90_REG_REMOTE_CRIT) == 0xff)
  2169. return "thmc10";
  2170. }
  2171. return NULL;
  2172. }
  2173. static const char *lm90_detect_ti(struct i2c_client *client, int chip_id,
  2174. int config1, int convrate)
  2175. {
  2176. int address = client->addr;
  2177. const char *name = NULL;
  2178. if (chip_id == 0x00 && !(config1 & 0x1b) && convrate <= 0x09) {
  2179. int local_ext, conalert, chen, dfc;
  2180. local_ext = i2c_smbus_read_byte_data(client,
  2181. TMP451_REG_LOCAL_TEMPL);
  2182. conalert = i2c_smbus_read_byte_data(client,
  2183. TMP451_REG_CONALERT);
  2184. chen = i2c_smbus_read_byte_data(client, TMP461_REG_CHEN);
  2185. dfc = i2c_smbus_read_byte_data(client, TMP461_REG_DFC);
  2186. if (!(local_ext & 0x0f) && (conalert & 0xf1) == 0x01 &&
  2187. (chen & 0xfc) == 0x00 && (dfc & 0xfc) == 0x00) {
  2188. if (address == 0x4c && !(chen & 0x03))
  2189. name = "tmp451";
  2190. else if (address >= 0x48 && address <= 0x4f)
  2191. name = "tmp461";
  2192. }
  2193. }
  2194. return name;
  2195. }
  2196. /* Return 0 if detection is successful, -ENODEV otherwise */
  2197. static int lm90_detect(struct i2c_client *client, struct i2c_board_info *info)
  2198. {
  2199. struct i2c_adapter *adapter = client->adapter;
  2200. int man_id, chip_id, config1, convrate, lhigh;
  2201. const char *name = NULL;
  2202. int address = client->addr;
  2203. bool common_address =
  2204. (address >= 0x18 && address <= 0x1a) ||
  2205. (address >= 0x29 && address <= 0x2b) ||
  2206. (address >= 0x4c && address <= 0x4e);
  2207. if (!i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE_DATA))
  2208. return -ENODEV;
  2209. /*
  2210. * Get well defined register value for chips with neither man_id nor
  2211. * chip_id registers.
  2212. */
  2213. lhigh = i2c_smbus_read_byte_data(client, LM90_REG_LOCAL_HIGH);
  2214. /* detection and identification */
  2215. man_id = i2c_smbus_read_byte_data(client, LM90_REG_MAN_ID);
  2216. chip_id = i2c_smbus_read_byte_data(client, LM90_REG_CHIP_ID);
  2217. config1 = i2c_smbus_read_byte_data(client, LM90_REG_CONFIG1);
  2218. convrate = i2c_smbus_read_byte_data(client, LM90_REG_CONVRATE);
  2219. if (man_id < 0 || chip_id < 0 || config1 < 0 || convrate < 0 || lhigh < 0)
  2220. return -ENODEV;
  2221. /* Bail out immediately if all register report the same value */
  2222. if (lhigh == man_id && lhigh == chip_id && lhigh == config1 && lhigh == convrate)
  2223. return -ENODEV;
  2224. /*
  2225. * If reading man_id and chip_id both return the same value as lhigh,
  2226. * the chip may not support those registers and return the most recent read
  2227. * value. Check again with a different register and handle accordingly.
  2228. */
  2229. if (man_id == lhigh && chip_id == lhigh) {
  2230. convrate = i2c_smbus_read_byte_data(client, LM90_REG_CONVRATE);
  2231. man_id = i2c_smbus_read_byte_data(client, LM90_REG_MAN_ID);
  2232. chip_id = i2c_smbus_read_byte_data(client, LM90_REG_CHIP_ID);
  2233. if (convrate < 0 || man_id < 0 || chip_id < 0)
  2234. return -ENODEV;
  2235. if (man_id == convrate && chip_id == convrate)
  2236. man_id = -1;
  2237. }
  2238. switch (man_id) {
  2239. case -1: /* Chip does not support man_id / chip_id */
  2240. if (common_address && !convrate && !(config1 & 0x7f))
  2241. name = lm90_detect_lm84(client);
  2242. break;
  2243. case 0x01: /* National Semiconductor */
  2244. name = lm90_detect_national(client, chip_id, config1, convrate);
  2245. break;
  2246. case 0x1a: /* ON */
  2247. name = lm90_detect_on(client, chip_id, config1, convrate);
  2248. break;
  2249. case 0x23: /* Genesys Logic */
  2250. if (common_address && !(config1 & 0x3f) && !(convrate & 0xf8))
  2251. name = "gl523sm";
  2252. break;
  2253. case 0x41: /* Analog Devices */
  2254. name = lm90_detect_analog(client, common_address, chip_id, config1,
  2255. convrate);
  2256. break;
  2257. case 0x47: /* GMT */
  2258. name = lm90_detect_gmt(client, chip_id, config1, convrate);
  2259. break;
  2260. case 0x49: /* TI */
  2261. name = lm90_detect_ti49(client, common_address, chip_id, config1, convrate);
  2262. break;
  2263. case 0x4d: /* Maxim Integrated */
  2264. name = lm90_detect_maxim(client, common_address, chip_id,
  2265. config1, convrate);
  2266. break;
  2267. case 0x54: /* ON MC1066, Microchip TC1068, TCM1617 (originally TelCom) */
  2268. if (common_address && !(config1 & 0x3f) && !(convrate & 0xf8))
  2269. name = "mc1066";
  2270. break;
  2271. case 0x55: /* TI */
  2272. name = lm90_detect_ti(client, chip_id, config1, convrate);
  2273. break;
  2274. case 0x5c: /* Winbond/Nuvoton */
  2275. name = lm90_detect_nuvoton(client, chip_id, config1, convrate);
  2276. break;
  2277. case 0xa1: /* NXP Semiconductor/Philips */
  2278. name = lm90_detect_nxp(client, common_address, chip_id, config1, convrate);
  2279. break;
  2280. case 0xff: /* MAX1617, G767, NE1617 */
  2281. if (common_address && chip_id == 0xff && convrate < 8)
  2282. name = lm90_detect_max1617(client, config1);
  2283. break;
  2284. default:
  2285. break;
  2286. }
  2287. if (!name) { /* identification failed */
  2288. dev_dbg(&adapter->dev,
  2289. "Unsupported chip at 0x%02x (man_id=0x%02X, chip_id=0x%02X)\n",
  2290. client->addr, man_id, chip_id);
  2291. return -ENODEV;
  2292. }
  2293. strscpy(info->type, name, I2C_NAME_SIZE);
  2294. return 0;
  2295. }
  2296. static void lm90_restore_conf(void *_data)
  2297. {
  2298. struct lm90_data *data = _data;
  2299. struct i2c_client *client = data->client;
  2300. cancel_delayed_work_sync(&data->alert_work);
  2301. cancel_work_sync(&data->report_work);
  2302. /* Restore initial configuration */
  2303. if (data->flags & LM90_HAVE_CONVRATE)
  2304. lm90_write_convrate(data, data->convrate_orig);
  2305. lm90_write_reg(client, LM90_REG_CONFIG1, data->config_orig);
  2306. }
  2307. static int lm90_init_client(struct i2c_client *client, struct lm90_data *data)
  2308. {
  2309. struct device_node *np = client->dev.of_node;
  2310. int config, convrate;
  2311. if (data->flags & LM90_HAVE_CONVRATE) {
  2312. convrate = lm90_read_reg(client, LM90_REG_CONVRATE);
  2313. if (convrate < 0)
  2314. return convrate;
  2315. data->convrate_orig = convrate;
  2316. lm90_set_convrate(client, data, 500); /* 500ms; 2Hz conversion rate */
  2317. } else {
  2318. data->update_interval = 500;
  2319. }
  2320. /*
  2321. * Start the conversions.
  2322. */
  2323. config = lm90_read_reg(client, LM90_REG_CONFIG1);
  2324. if (config < 0)
  2325. return config;
  2326. data->config_orig = config;
  2327. data->config = config;
  2328. /* Check Temperature Range Select */
  2329. if (data->flags & LM90_HAVE_EXTENDED_TEMP) {
  2330. if (of_property_read_bool(np, "ti,extended-range-enable"))
  2331. config |= 0x04;
  2332. if (!(config & 0x04))
  2333. data->flags &= ~LM90_HAVE_EXTENDED_TEMP;
  2334. }
  2335. /*
  2336. * Put MAX6680/MAX8881 into extended resolution (bit 0x10,
  2337. * 0.125 degree resolution) and range (0x08, extend range
  2338. * to -64 degree) mode for the remote temperature sensor.
  2339. * Note that expeciments with an actual chip do not show a difference
  2340. * if bit 3 is set or not.
  2341. */
  2342. if (data->kind == max6680)
  2343. config |= 0x18;
  2344. /*
  2345. * Put MAX6654 into extended range (0x20, extend minimum range from
  2346. * 0 degrees to -64 degrees). Note that extended resolution is not
  2347. * possible on the MAX6654 unless conversion rate is set to 1 Hz or
  2348. * slower, which is intentionally not done by default.
  2349. */
  2350. if (data->kind == max6654)
  2351. config |= 0x20;
  2352. /*
  2353. * Select external channel 0 for devices with three sensors
  2354. */
  2355. if (data->flags & LM90_HAVE_TEMP3)
  2356. config &= ~0x08;
  2357. /*
  2358. * Interrupt is enabled by default on reset, but it may be disabled
  2359. * by bootloader, unmask it.
  2360. */
  2361. if (client->irq)
  2362. config &= ~0x80;
  2363. config &= 0xBF; /* run */
  2364. lm90_update_confreg(data, config);
  2365. return devm_add_action_or_reset(&client->dev, lm90_restore_conf, data);
  2366. }
  2367. static bool lm90_is_tripped(struct i2c_client *client)
  2368. {
  2369. struct lm90_data *data = i2c_get_clientdata(client);
  2370. int ret;
  2371. ret = lm90_update_alarms(data, true);
  2372. if (ret < 0)
  2373. return false;
  2374. return !!data->current_alarms;
  2375. }
  2376. static irqreturn_t lm90_irq_thread(int irq, void *dev_id)
  2377. {
  2378. struct i2c_client *client = dev_id;
  2379. if (lm90_is_tripped(client))
  2380. return IRQ_HANDLED;
  2381. else
  2382. return IRQ_NONE;
  2383. }
  2384. static void lm90_remove_pec(void *dev)
  2385. {
  2386. device_remove_file(dev, &dev_attr_pec);
  2387. }
  2388. static void lm90_regulator_disable(void *regulator)
  2389. {
  2390. regulator_disable(regulator);
  2391. }
  2392. static int lm90_probe_channel_from_dt(struct i2c_client *client,
  2393. struct device_node *child,
  2394. struct lm90_data *data)
  2395. {
  2396. u32 id;
  2397. s32 val;
  2398. int err;
  2399. struct device *dev = &client->dev;
  2400. err = of_property_read_u32(child, "reg", &id);
  2401. if (err) {
  2402. dev_err(dev, "missing reg property of %pOFn\n", child);
  2403. return err;
  2404. }
  2405. if (id >= MAX_CHANNELS) {
  2406. dev_err(dev, "invalid reg property value %d in %pOFn\n", id, child);
  2407. return -EINVAL;
  2408. }
  2409. err = of_property_read_string(child, "label", &data->channel_label[id]);
  2410. if (err == -ENODATA || err == -EILSEQ) {
  2411. dev_err(dev, "invalid label property in %pOFn\n", child);
  2412. return err;
  2413. }
  2414. if (data->channel_label[id])
  2415. data->channel_config[id] |= HWMON_T_LABEL;
  2416. err = of_property_read_s32(child, "temperature-offset-millicelsius", &val);
  2417. if (!err) {
  2418. if (id == 0) {
  2419. dev_err(dev, "temperature-offset-millicelsius can't be set for internal channel\n");
  2420. return -EINVAL;
  2421. }
  2422. err = lm90_set_temp_offset(data, lm90_temp_offset_index[id], id, val);
  2423. if (err) {
  2424. dev_err(dev, "can't set temperature offset %d for channel %d (%d)\n",
  2425. val, id, err);
  2426. return err;
  2427. }
  2428. }
  2429. return 0;
  2430. }
  2431. static int lm90_parse_dt_channel_info(struct i2c_client *client,
  2432. struct lm90_data *data)
  2433. {
  2434. int err;
  2435. struct device_node *child;
  2436. struct device *dev = &client->dev;
  2437. const struct device_node *np = dev->of_node;
  2438. for_each_child_of_node(np, child) {
  2439. if (strcmp(child->name, "channel"))
  2440. continue;
  2441. err = lm90_probe_channel_from_dt(client, child, data);
  2442. if (err) {
  2443. of_node_put(child);
  2444. return err;
  2445. }
  2446. }
  2447. return 0;
  2448. }
  2449. static const struct hwmon_ops lm90_ops = {
  2450. .is_visible = lm90_is_visible,
  2451. .read = lm90_read,
  2452. .read_string = lm90_read_string,
  2453. .write = lm90_write,
  2454. };
  2455. static int lm90_probe(struct i2c_client *client)
  2456. {
  2457. struct device *dev = &client->dev;
  2458. struct i2c_adapter *adapter = client->adapter;
  2459. struct hwmon_channel_info *info;
  2460. struct regulator *regulator;
  2461. struct device *hwmon_dev;
  2462. struct lm90_data *data;
  2463. int err;
  2464. regulator = devm_regulator_get(dev, "vcc");
  2465. if (IS_ERR(regulator))
  2466. return PTR_ERR(regulator);
  2467. err = regulator_enable(regulator);
  2468. if (err < 0) {
  2469. dev_err(dev, "Failed to enable regulator: %d\n", err);
  2470. return err;
  2471. }
  2472. err = devm_add_action_or_reset(dev, lm90_regulator_disable, regulator);
  2473. if (err)
  2474. return err;
  2475. data = devm_kzalloc(dev, sizeof(struct lm90_data), GFP_KERNEL);
  2476. if (!data)
  2477. return -ENOMEM;
  2478. data->client = client;
  2479. i2c_set_clientdata(client, data);
  2480. mutex_init(&data->update_lock);
  2481. INIT_DELAYED_WORK(&data->alert_work, lm90_alert_work);
  2482. INIT_WORK(&data->report_work, lm90_report_alarms);
  2483. /* Set the device type */
  2484. if (client->dev.of_node)
  2485. data->kind = (enum chips)of_device_get_match_data(&client->dev);
  2486. else
  2487. data->kind = i2c_match_id(lm90_id, client)->driver_data;
  2488. /*
  2489. * Different devices have different alarm bits triggering the
  2490. * ALERT# output
  2491. */
  2492. data->alert_alarms = lm90_params[data->kind].alert_alarms;
  2493. data->resolution = lm90_params[data->kind].resolution ? : 11;
  2494. /* Set chip capabilities */
  2495. data->flags = lm90_params[data->kind].flags;
  2496. if ((data->flags & (LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC)) &&
  2497. !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_PEC))
  2498. data->flags &= ~(LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC);
  2499. if ((data->flags & LM90_HAVE_PARTIAL_PEC) &&
  2500. !i2c_check_functionality(adapter, I2C_FUNC_SMBUS_BYTE))
  2501. data->flags &= ~LM90_HAVE_PARTIAL_PEC;
  2502. data->chip.ops = &lm90_ops;
  2503. data->chip.info = data->info;
  2504. data->info[0] = &data->chip_info;
  2505. info = &data->chip_info;
  2506. info->type = hwmon_chip;
  2507. info->config = data->chip_config;
  2508. data->chip_config[0] = HWMON_C_REGISTER_TZ;
  2509. if (data->flags & LM90_HAVE_ALARMS)
  2510. data->chip_config[0] |= HWMON_C_ALARMS;
  2511. if (data->flags & LM90_HAVE_CONVRATE)
  2512. data->chip_config[0] |= HWMON_C_UPDATE_INTERVAL;
  2513. if (data->flags & LM90_HAVE_FAULTQUEUE)
  2514. data->chip_config[0] |= HWMON_C_TEMP_SAMPLES;
  2515. data->info[1] = &data->temp_info;
  2516. info = &data->temp_info;
  2517. info->type = hwmon_temp;
  2518. info->config = data->channel_config;
  2519. data->channel_config[0] = HWMON_T_INPUT | HWMON_T_MAX |
  2520. HWMON_T_MAX_ALARM;
  2521. data->channel_config[1] = HWMON_T_INPUT | HWMON_T_MAX |
  2522. HWMON_T_MAX_ALARM | HWMON_T_FAULT;
  2523. if (data->flags & LM90_HAVE_LOW) {
  2524. data->channel_config[0] |= HWMON_T_MIN | HWMON_T_MIN_ALARM;
  2525. data->channel_config[1] |= HWMON_T_MIN | HWMON_T_MIN_ALARM;
  2526. }
  2527. if (data->flags & LM90_HAVE_CRIT) {
  2528. data->channel_config[0] |= HWMON_T_CRIT | HWMON_T_CRIT_ALARM | HWMON_T_CRIT_HYST;
  2529. data->channel_config[1] |= HWMON_T_CRIT | HWMON_T_CRIT_ALARM | HWMON_T_CRIT_HYST;
  2530. }
  2531. if (data->flags & LM90_HAVE_OFFSET)
  2532. data->channel_config[1] |= HWMON_T_OFFSET;
  2533. if (data->flags & LM90_HAVE_EMERGENCY) {
  2534. data->channel_config[0] |= HWMON_T_EMERGENCY |
  2535. HWMON_T_EMERGENCY_HYST;
  2536. data->channel_config[1] |= HWMON_T_EMERGENCY |
  2537. HWMON_T_EMERGENCY_HYST;
  2538. }
  2539. if (data->flags & LM90_HAVE_EMERGENCY_ALARM) {
  2540. data->channel_config[0] |= HWMON_T_EMERGENCY_ALARM;
  2541. data->channel_config[1] |= HWMON_T_EMERGENCY_ALARM;
  2542. }
  2543. if (data->flags & LM90_HAVE_TEMP3) {
  2544. data->channel_config[2] = HWMON_T_INPUT |
  2545. HWMON_T_MIN | HWMON_T_MAX |
  2546. HWMON_T_CRIT | HWMON_T_CRIT_HYST |
  2547. HWMON_T_MIN_ALARM | HWMON_T_MAX_ALARM |
  2548. HWMON_T_CRIT_ALARM | HWMON_T_FAULT;
  2549. if (data->flags & LM90_HAVE_EMERGENCY) {
  2550. data->channel_config[2] |= HWMON_T_EMERGENCY |
  2551. HWMON_T_EMERGENCY_HYST;
  2552. }
  2553. if (data->flags & LM90_HAVE_EMERGENCY_ALARM)
  2554. data->channel_config[2] |= HWMON_T_EMERGENCY_ALARM;
  2555. if (data->flags & LM90_HAVE_OFFSET)
  2556. data->channel_config[2] |= HWMON_T_OFFSET;
  2557. }
  2558. data->faultqueue_mask = lm90_params[data->kind].faultqueue_mask;
  2559. data->faultqueue_depth = lm90_params[data->kind].faultqueue_depth;
  2560. data->reg_local_ext = lm90_params[data->kind].reg_local_ext;
  2561. if (data->flags & LM90_HAVE_REMOTE_EXT)
  2562. data->reg_remote_ext = LM90_REG_REMOTE_TEMPL;
  2563. data->reg_status2 = lm90_params[data->kind].reg_status2;
  2564. /* Set maximum conversion rate */
  2565. data->max_convrate = lm90_params[data->kind].max_convrate;
  2566. /* Parse device-tree channel information */
  2567. if (client->dev.of_node) {
  2568. err = lm90_parse_dt_channel_info(client, data);
  2569. if (err)
  2570. return err;
  2571. }
  2572. /* Initialize the LM90 chip */
  2573. err = lm90_init_client(client, data);
  2574. if (err < 0) {
  2575. dev_err(dev, "Failed to initialize device\n");
  2576. return err;
  2577. }
  2578. /*
  2579. * The 'pec' attribute is attached to the i2c device and thus created
  2580. * separately.
  2581. */
  2582. if (data->flags & (LM90_HAVE_PEC | LM90_HAVE_PARTIAL_PEC)) {
  2583. err = device_create_file(dev, &dev_attr_pec);
  2584. if (err)
  2585. return err;
  2586. err = devm_add_action_or_reset(dev, lm90_remove_pec, dev);
  2587. if (err)
  2588. return err;
  2589. }
  2590. hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name,
  2591. data, &data->chip,
  2592. NULL);
  2593. if (IS_ERR(hwmon_dev))
  2594. return PTR_ERR(hwmon_dev);
  2595. data->hwmon_dev = hwmon_dev;
  2596. if (client->irq) {
  2597. dev_dbg(dev, "IRQ: %d\n", client->irq);
  2598. err = devm_request_threaded_irq(dev, client->irq,
  2599. NULL, lm90_irq_thread,
  2600. IRQF_ONESHOT, "lm90", client);
  2601. if (err < 0) {
  2602. dev_err(dev, "cannot request IRQ %d\n", client->irq);
  2603. return err;
  2604. }
  2605. }
  2606. return 0;
  2607. }
  2608. static void lm90_alert(struct i2c_client *client, enum i2c_alert_protocol type,
  2609. unsigned int flag)
  2610. {
  2611. if (type != I2C_PROTOCOL_SMBUS_ALERT)
  2612. return;
  2613. if (lm90_is_tripped(client)) {
  2614. /*
  2615. * Disable ALERT# output, because these chips don't implement
  2616. * SMBus alert correctly; they should only hold the alert line
  2617. * low briefly.
  2618. */
  2619. struct lm90_data *data = i2c_get_clientdata(client);
  2620. if ((data->flags & LM90_HAVE_BROKEN_ALERT) &&
  2621. (data->current_alarms & data->alert_alarms)) {
  2622. if (!(data->config & 0x80)) {
  2623. dev_dbg(&client->dev, "Disabling ALERT#\n");
  2624. lm90_update_confreg(data, data->config | 0x80);
  2625. }
  2626. schedule_delayed_work(&data->alert_work,
  2627. max_t(int, HZ, msecs_to_jiffies(data->update_interval)));
  2628. }
  2629. } else {
  2630. dev_dbg(&client->dev, "Everything OK\n");
  2631. }
  2632. }
  2633. static int lm90_suspend(struct device *dev)
  2634. {
  2635. struct lm90_data *data = dev_get_drvdata(dev);
  2636. struct i2c_client *client = data->client;
  2637. if (client->irq)
  2638. disable_irq(client->irq);
  2639. return 0;
  2640. }
  2641. static int lm90_resume(struct device *dev)
  2642. {
  2643. struct lm90_data *data = dev_get_drvdata(dev);
  2644. struct i2c_client *client = data->client;
  2645. if (client->irq)
  2646. enable_irq(client->irq);
  2647. return 0;
  2648. }
  2649. static DEFINE_SIMPLE_DEV_PM_OPS(lm90_pm_ops, lm90_suspend, lm90_resume);
  2650. static struct i2c_driver lm90_driver = {
  2651. .class = I2C_CLASS_HWMON,
  2652. .driver = {
  2653. .name = "lm90",
  2654. .of_match_table = of_match_ptr(lm90_of_match),
  2655. .pm = pm_sleep_ptr(&lm90_pm_ops),
  2656. },
  2657. .probe_new = lm90_probe,
  2658. .alert = lm90_alert,
  2659. .id_table = lm90_id,
  2660. .detect = lm90_detect,
  2661. .address_list = normal_i2c,
  2662. };
  2663. module_i2c_driver(lm90_driver);
  2664. MODULE_AUTHOR("Jean Delvare <[email protected]>");
  2665. MODULE_DESCRIPTION("LM90/ADM1032 driver");
  2666. MODULE_LICENSE("GPL");