max1363.c 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707
  1. /*
  2. * iio/adc/max1363.c
  3. * Copyright (C) 2008-2010 Jonathan Cameron
  4. *
  5. * based on linux/drivers/i2c/chips/max123x
  6. * Copyright (C) 2002-2004 Stefan Eletzhofer
  7. *
  8. * based on linux/drivers/acron/char/pcf8583.c
  9. * Copyright (C) 2000 Russell King
  10. *
  11. * This program is free software; you can redistribute it and/or modify
  12. * it under the terms of the GNU General Public License version 2 as
  13. * published by the Free Software Foundation.
  14. *
  15. * max1363.c
  16. *
  17. * Partial support for max1363 and similar chips.
  18. *
  19. * Not currently implemented.
  20. *
  21. * - Control of internal reference.
  22. */
  23. #include <linux/interrupt.h>
  24. #include <linux/device.h>
  25. #include <linux/kernel.h>
  26. #include <linux/sysfs.h>
  27. #include <linux/list.h>
  28. #include <linux/i2c.h>
  29. #include <linux/regulator/consumer.h>
  30. #include <linux/slab.h>
  31. #include <linux/err.h>
  32. #include <linux/module.h>
  33. #include <linux/iio/iio.h>
  34. #include <linux/iio/sysfs.h>
  35. #include <linux/iio/events.h>
  36. #include <linux/iio/buffer.h>
  37. #include <linux/iio/driver.h>
  38. #include <linux/iio/kfifo_buf.h>
  39. #include <linux/iio/trigger_consumer.h>
  40. #include <linux/iio/triggered_buffer.h>
  41. #define MAX1363_SETUP_BYTE(a) ((a) | 0x80)
  42. /* There is a fair bit more defined here than currently
  43. * used, but the intention is to support everything these
  44. * chips do in the long run */
  45. /* see data sheets */
  46. /* max1363 and max1236, max1237, max1238, max1239 */
  47. #define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_VDD 0x00
  48. #define MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF 0x20
  49. #define MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT 0x40
  50. #define MAX1363_SETUP_AIN3_IS_REF_REF_IS_INT 0x60
  51. #define MAX1363_SETUP_POWER_UP_INT_REF 0x10
  52. #define MAX1363_SETUP_POWER_DOWN_INT_REF 0x00
  53. /* think about including max11600 etc - more settings */
  54. #define MAX1363_SETUP_EXT_CLOCK 0x08
  55. #define MAX1363_SETUP_INT_CLOCK 0x00
  56. #define MAX1363_SETUP_UNIPOLAR 0x00
  57. #define MAX1363_SETUP_BIPOLAR 0x04
  58. #define MAX1363_SETUP_RESET 0x00
  59. #define MAX1363_SETUP_NORESET 0x02
  60. /* max1363 only - though don't care on others.
  61. * For now monitor modes are not implemented as the relevant
  62. * line is not connected on my test board.
  63. * The definitions are here as I intend to add this soon.
  64. */
  65. #define MAX1363_SETUP_MONITOR_SETUP 0x01
  66. /* Specific to the max1363 */
  67. #define MAX1363_MON_RESET_CHAN(a) (1 << ((a) + 4))
  68. #define MAX1363_MON_INT_ENABLE 0x01
  69. /* defined for readability reasons */
  70. /* All chips */
  71. #define MAX1363_CONFIG_BYTE(a) ((a))
  72. #define MAX1363_CONFIG_SE 0x01
  73. #define MAX1363_CONFIG_DE 0x00
  74. #define MAX1363_CONFIG_SCAN_TO_CS 0x00
  75. #define MAX1363_CONFIG_SCAN_SINGLE_8 0x20
  76. #define MAX1363_CONFIG_SCAN_MONITOR_MODE 0x40
  77. #define MAX1363_CONFIG_SCAN_SINGLE_1 0x60
  78. /* max123{6-9} only */
  79. #define MAX1236_SCAN_MID_TO_CHANNEL 0x40
  80. /* max1363 only - merely part of channel selects or don't care for others */
  81. #define MAX1363_CONFIG_EN_MON_MODE_READ 0x18
  82. #define MAX1363_CHANNEL_SEL(a) ((a) << 1)
  83. /* max1363 strictly 0x06 - but doesn't matter */
  84. #define MAX1363_CHANNEL_SEL_MASK 0x1E
  85. #define MAX1363_SCAN_MASK 0x60
  86. #define MAX1363_SE_DE_MASK 0x01
  87. #define MAX1363_MAX_CHANNELS 25
  88. /**
  89. * struct max1363_mode - scan mode information
  90. * @conf: The corresponding value of the configuration register
  91. * @modemask: Bit mask corresponding to channels enabled in this mode
  92. */
  93. struct max1363_mode {
  94. int8_t conf;
  95. DECLARE_BITMAP(modemask, MAX1363_MAX_CHANNELS);
  96. };
  97. /* This must be maintained along side the max1363_mode_table in max1363_core */
  98. enum max1363_modes {
  99. /* Single read of a single channel */
  100. _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
  101. /* Differential single read */
  102. d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
  103. d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
  104. /* Scan to channel and mid to channel where overlapping */
  105. s0to1, s0to2, s2to3, s0to3, s0to4, s0to5, s0to6,
  106. s6to7, s0to7, s6to8, s0to8, s6to9,
  107. s0to9, s6to10, s0to10, s6to11, s0to11,
  108. /* Differential scan to channel and mid to channel where overlapping */
  109. d0m1to2m3, d0m1to4m5, d0m1to6m7, d6m7to8m9,
  110. d0m1to8m9, d6m7to10m11, d0m1to10m11, d1m0to3m2,
  111. d1m0to5m4, d1m0to7m6, d7m6to9m8, d1m0to9m8,
  112. d7m6to11m10, d1m0to11m10,
  113. };
  114. /**
  115. * struct max1363_chip_info - chip specifc information
  116. * @info: iio core function callbacks structure
  117. * @channels: channel specification
  118. * @num_channels: number of channels
  119. * @mode_list: array of available scan modes
  120. * @default_mode: the scan mode in which the chip starts up
  121. * @int_vref_mv: the internal reference voltage
  122. * @num_modes: number of modes
  123. * @bits: accuracy of the adc in bits
  124. */
  125. struct max1363_chip_info {
  126. const struct iio_info *info;
  127. const struct iio_chan_spec *channels;
  128. int num_channels;
  129. const enum max1363_modes *mode_list;
  130. enum max1363_modes default_mode;
  131. u16 int_vref_mv;
  132. u8 num_modes;
  133. u8 bits;
  134. };
  135. /**
  136. * struct max1363_state - driver instance specific data
  137. * @client: i2c_client
  138. * @setupbyte: cache of current device setup byte
  139. * @configbyte: cache of current device config byte
  140. * @chip_info: chip model specific constants, available modes, etc.
  141. * @current_mode: the scan mode of this chip
  142. * @requestedmask: a valid requested set of channels
  143. * @reg: supply regulator
  144. * @monitor_on: whether monitor mode is enabled
  145. * @monitor_speed: parameter corresponding to device monitor speed setting
  146. * @mask_high: bitmask for enabled high thresholds
  147. * @mask_low: bitmask for enabled low thresholds
  148. * @thresh_high: high threshold values
  149. * @thresh_low: low threshold values
  150. * @vref: Reference voltage regulator
  151. * @vref_uv: Actual (external or internal) reference voltage
  152. * @send: function used to send data to the chip
  153. * @recv: function used to receive data from the chip
  154. */
  155. struct max1363_state {
  156. struct i2c_client *client;
  157. u8 setupbyte;
  158. u8 configbyte;
  159. const struct max1363_chip_info *chip_info;
  160. const struct max1363_mode *current_mode;
  161. u32 requestedmask;
  162. struct regulator *reg;
  163. /* Using monitor modes and buffer at the same time is
  164. currently not supported */
  165. bool monitor_on;
  166. unsigned int monitor_speed:3;
  167. u8 mask_high;
  168. u8 mask_low;
  169. /* 4x unipolar first then the fours bipolar ones */
  170. s16 thresh_high[8];
  171. s16 thresh_low[8];
  172. struct regulator *vref;
  173. u32 vref_uv;
  174. int (*send)(const struct i2c_client *client,
  175. const char *buf, int count);
  176. int (*recv)(const struct i2c_client *client,
  177. char *buf, int count);
  178. };
  179. #define MAX1363_MODE_SINGLE(_num, _mask) { \
  180. .conf = MAX1363_CHANNEL_SEL(_num) \
  181. | MAX1363_CONFIG_SCAN_SINGLE_1 \
  182. | MAX1363_CONFIG_SE, \
  183. .modemask[0] = _mask, \
  184. }
  185. #define MAX1363_MODE_SCAN_TO_CHANNEL(_num, _mask) { \
  186. .conf = MAX1363_CHANNEL_SEL(_num) \
  187. | MAX1363_CONFIG_SCAN_TO_CS \
  188. | MAX1363_CONFIG_SE, \
  189. .modemask[0] = _mask, \
  190. }
  191. /* note not available for max1363 hence naming */
  192. #define MAX1236_MODE_SCAN_MID_TO_CHANNEL(_mid, _num, _mask) { \
  193. .conf = MAX1363_CHANNEL_SEL(_num) \
  194. | MAX1236_SCAN_MID_TO_CHANNEL \
  195. | MAX1363_CONFIG_SE, \
  196. .modemask[0] = _mask \
  197. }
  198. #define MAX1363_MODE_DIFF_SINGLE(_nump, _numm, _mask) { \
  199. .conf = MAX1363_CHANNEL_SEL(_nump) \
  200. | MAX1363_CONFIG_SCAN_SINGLE_1 \
  201. | MAX1363_CONFIG_DE, \
  202. .modemask[0] = _mask \
  203. }
  204. /* Can't think how to automate naming so specify for now */
  205. #define MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(_num, _numvals, _mask) { \
  206. .conf = MAX1363_CHANNEL_SEL(_num) \
  207. | MAX1363_CONFIG_SCAN_TO_CS \
  208. | MAX1363_CONFIG_DE, \
  209. .modemask[0] = _mask \
  210. }
  211. /* note only available for max1363 hence naming */
  212. #define MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(_num, _numvals, _mask) { \
  213. .conf = MAX1363_CHANNEL_SEL(_num) \
  214. | MAX1236_SCAN_MID_TO_CHANNEL \
  215. | MAX1363_CONFIG_SE, \
  216. .modemask[0] = _mask \
  217. }
  218. static const struct max1363_mode max1363_mode_table[] = {
  219. /* All of the single channel options first */
  220. MAX1363_MODE_SINGLE(0, 1 << 0),
  221. MAX1363_MODE_SINGLE(1, 1 << 1),
  222. MAX1363_MODE_SINGLE(2, 1 << 2),
  223. MAX1363_MODE_SINGLE(3, 1 << 3),
  224. MAX1363_MODE_SINGLE(4, 1 << 4),
  225. MAX1363_MODE_SINGLE(5, 1 << 5),
  226. MAX1363_MODE_SINGLE(6, 1 << 6),
  227. MAX1363_MODE_SINGLE(7, 1 << 7),
  228. MAX1363_MODE_SINGLE(8, 1 << 8),
  229. MAX1363_MODE_SINGLE(9, 1 << 9),
  230. MAX1363_MODE_SINGLE(10, 1 << 10),
  231. MAX1363_MODE_SINGLE(11, 1 << 11),
  232. MAX1363_MODE_DIFF_SINGLE(0, 1, 1 << 12),
  233. MAX1363_MODE_DIFF_SINGLE(2, 3, 1 << 13),
  234. MAX1363_MODE_DIFF_SINGLE(4, 5, 1 << 14),
  235. MAX1363_MODE_DIFF_SINGLE(6, 7, 1 << 15),
  236. MAX1363_MODE_DIFF_SINGLE(8, 9, 1 << 16),
  237. MAX1363_MODE_DIFF_SINGLE(10, 11, 1 << 17),
  238. MAX1363_MODE_DIFF_SINGLE(1, 0, 1 << 18),
  239. MAX1363_MODE_DIFF_SINGLE(3, 2, 1 << 19),
  240. MAX1363_MODE_DIFF_SINGLE(5, 4, 1 << 20),
  241. MAX1363_MODE_DIFF_SINGLE(7, 6, 1 << 21),
  242. MAX1363_MODE_DIFF_SINGLE(9, 8, 1 << 22),
  243. MAX1363_MODE_DIFF_SINGLE(11, 10, 1 << 23),
  244. /* The multichannel scans next */
  245. MAX1363_MODE_SCAN_TO_CHANNEL(1, 0x003),
  246. MAX1363_MODE_SCAN_TO_CHANNEL(2, 0x007),
  247. MAX1236_MODE_SCAN_MID_TO_CHANNEL(2, 3, 0x00C),
  248. MAX1363_MODE_SCAN_TO_CHANNEL(3, 0x00F),
  249. MAX1363_MODE_SCAN_TO_CHANNEL(4, 0x01F),
  250. MAX1363_MODE_SCAN_TO_CHANNEL(5, 0x03F),
  251. MAX1363_MODE_SCAN_TO_CHANNEL(6, 0x07F),
  252. MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 7, 0x0C0),
  253. MAX1363_MODE_SCAN_TO_CHANNEL(7, 0x0FF),
  254. MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 8, 0x1C0),
  255. MAX1363_MODE_SCAN_TO_CHANNEL(8, 0x1FF),
  256. MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 9, 0x3C0),
  257. MAX1363_MODE_SCAN_TO_CHANNEL(9, 0x3FF),
  258. MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 10, 0x7C0),
  259. MAX1363_MODE_SCAN_TO_CHANNEL(10, 0x7FF),
  260. MAX1236_MODE_SCAN_MID_TO_CHANNEL(6, 11, 0xFC0),
  261. MAX1363_MODE_SCAN_TO_CHANNEL(11, 0xFFF),
  262. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(2, 2, 0x003000),
  263. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(4, 3, 0x007000),
  264. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(6, 4, 0x00F000),
  265. MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(8, 2, 0x018000),
  266. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(8, 5, 0x01F000),
  267. MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(10, 3, 0x038000),
  268. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(10, 6, 0x3F000),
  269. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(3, 2, 0x0C0000),
  270. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(5, 3, 0x1C0000),
  271. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(7, 4, 0x3C0000),
  272. MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(9, 2, 0x600000),
  273. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(9, 5, 0x7C0000),
  274. MAX1236_MODE_DIFF_SCAN_MID_TO_CHANNEL(11, 3, 0xE00000),
  275. MAX1363_MODE_DIFF_SCAN_TO_CHANNEL(11, 6, 0xFC0000),
  276. };
  277. static const struct max1363_mode
  278. *max1363_match_mode(const unsigned long *mask,
  279. const struct max1363_chip_info *ci)
  280. {
  281. int i;
  282. if (mask)
  283. for (i = 0; i < ci->num_modes; i++)
  284. if (bitmap_subset(mask,
  285. max1363_mode_table[ci->mode_list[i]].
  286. modemask,
  287. MAX1363_MAX_CHANNELS))
  288. return &max1363_mode_table[ci->mode_list[i]];
  289. return NULL;
  290. }
  291. static int max1363_smbus_send(const struct i2c_client *client, const char *buf,
  292. int count)
  293. {
  294. int i, err;
  295. for (i = err = 0; err == 0 && i < count; ++i)
  296. err = i2c_smbus_write_byte(client, buf[i]);
  297. return err ? err : count;
  298. }
  299. static int max1363_smbus_recv(const struct i2c_client *client, char *buf,
  300. int count)
  301. {
  302. int i, ret;
  303. for (i = 0; i < count; ++i) {
  304. ret = i2c_smbus_read_byte(client);
  305. if (ret < 0)
  306. return ret;
  307. buf[i] = ret;
  308. }
  309. return count;
  310. }
  311. static int max1363_write_basic_config(struct max1363_state *st)
  312. {
  313. u8 tx_buf[2] = { st->setupbyte, st->configbyte };
  314. return st->send(st->client, tx_buf, 2);
  315. }
  316. static int max1363_set_scan_mode(struct max1363_state *st)
  317. {
  318. st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
  319. | MAX1363_SCAN_MASK
  320. | MAX1363_SE_DE_MASK);
  321. st->configbyte |= st->current_mode->conf;
  322. return max1363_write_basic_config(st);
  323. }
  324. static int max1363_read_single_chan(struct iio_dev *indio_dev,
  325. struct iio_chan_spec const *chan,
  326. int *val,
  327. long m)
  328. {
  329. int ret = 0;
  330. s32 data;
  331. u8 rxbuf[2];
  332. struct max1363_state *st = iio_priv(indio_dev);
  333. struct i2c_client *client = st->client;
  334. mutex_lock(&indio_dev->mlock);
  335. /*
  336. * If monitor mode is enabled, the method for reading a single
  337. * channel will have to be rather different and has not yet
  338. * been implemented.
  339. *
  340. * Also, cannot read directly if buffered capture enabled.
  341. */
  342. if (st->monitor_on || iio_buffer_enabled(indio_dev)) {
  343. ret = -EBUSY;
  344. goto error_ret;
  345. }
  346. /* Check to see if current scan mode is correct */
  347. if (st->current_mode != &max1363_mode_table[chan->address]) {
  348. /* Update scan mode if needed */
  349. st->current_mode = &max1363_mode_table[chan->address];
  350. ret = max1363_set_scan_mode(st);
  351. if (ret < 0)
  352. goto error_ret;
  353. }
  354. if (st->chip_info->bits != 8) {
  355. /* Get reading */
  356. data = st->recv(client, rxbuf, 2);
  357. if (data < 0) {
  358. ret = data;
  359. goto error_ret;
  360. }
  361. data = (rxbuf[1] | rxbuf[0] << 8) &
  362. ((1 << st->chip_info->bits) - 1);
  363. } else {
  364. /* Get reading */
  365. data = st->recv(client, rxbuf, 1);
  366. if (data < 0) {
  367. ret = data;
  368. goto error_ret;
  369. }
  370. data = rxbuf[0];
  371. }
  372. *val = data;
  373. error_ret:
  374. mutex_unlock(&indio_dev->mlock);
  375. return ret;
  376. }
  377. static int max1363_read_raw(struct iio_dev *indio_dev,
  378. struct iio_chan_spec const *chan,
  379. int *val,
  380. int *val2,
  381. long m)
  382. {
  383. struct max1363_state *st = iio_priv(indio_dev);
  384. int ret;
  385. switch (m) {
  386. case IIO_CHAN_INFO_RAW:
  387. ret = max1363_read_single_chan(indio_dev, chan, val, m);
  388. if (ret < 0)
  389. return ret;
  390. return IIO_VAL_INT;
  391. case IIO_CHAN_INFO_SCALE:
  392. *val = st->vref_uv / 1000;
  393. *val2 = st->chip_info->bits;
  394. return IIO_VAL_FRACTIONAL_LOG2;
  395. default:
  396. return -EINVAL;
  397. }
  398. return 0;
  399. }
  400. /* Applies to max1363 */
  401. static const enum max1363_modes max1363_mode_list[] = {
  402. _s0, _s1, _s2, _s3,
  403. s0to1, s0to2, s0to3,
  404. d0m1, d2m3, d1m0, d3m2,
  405. d0m1to2m3, d1m0to3m2,
  406. };
  407. static const struct iio_event_spec max1363_events[] = {
  408. {
  409. .type = IIO_EV_TYPE_THRESH,
  410. .dir = IIO_EV_DIR_RISING,
  411. .mask_separate = BIT(IIO_EV_INFO_VALUE) |
  412. BIT(IIO_EV_INFO_ENABLE),
  413. }, {
  414. .type = IIO_EV_TYPE_THRESH,
  415. .dir = IIO_EV_DIR_FALLING,
  416. .mask_separate = BIT(IIO_EV_INFO_VALUE) |
  417. BIT(IIO_EV_INFO_ENABLE),
  418. },
  419. };
  420. #define MAX1363_CHAN_U(num, addr, si, bits, ev_spec, num_ev_spec) \
  421. { \
  422. .type = IIO_VOLTAGE, \
  423. .indexed = 1, \
  424. .channel = num, \
  425. .address = addr, \
  426. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
  427. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
  428. .datasheet_name = "AIN"#num, \
  429. .scan_type = { \
  430. .sign = 'u', \
  431. .realbits = bits, \
  432. .storagebits = (bits > 8) ? 16 : 8, \
  433. .endianness = IIO_BE, \
  434. }, \
  435. .scan_index = si, \
  436. .event_spec = ev_spec, \
  437. .num_event_specs = num_ev_spec, \
  438. }
  439. /* bipolar channel */
  440. #define MAX1363_CHAN_B(num, num2, addr, si, bits, ev_spec, num_ev_spec) \
  441. { \
  442. .type = IIO_VOLTAGE, \
  443. .differential = 1, \
  444. .indexed = 1, \
  445. .channel = num, \
  446. .channel2 = num2, \
  447. .address = addr, \
  448. .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
  449. .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
  450. .datasheet_name = "AIN"#num"-AIN"#num2, \
  451. .scan_type = { \
  452. .sign = 's', \
  453. .realbits = bits, \
  454. .storagebits = (bits > 8) ? 16 : 8, \
  455. .endianness = IIO_BE, \
  456. }, \
  457. .scan_index = si, \
  458. .event_spec = ev_spec, \
  459. .num_event_specs = num_ev_spec, \
  460. }
  461. #define MAX1363_4X_CHANS(bits, ev_spec, num_ev_spec) { \
  462. MAX1363_CHAN_U(0, _s0, 0, bits, ev_spec, num_ev_spec), \
  463. MAX1363_CHAN_U(1, _s1, 1, bits, ev_spec, num_ev_spec), \
  464. MAX1363_CHAN_U(2, _s2, 2, bits, ev_spec, num_ev_spec), \
  465. MAX1363_CHAN_U(3, _s3, 3, bits, ev_spec, num_ev_spec), \
  466. MAX1363_CHAN_B(0, 1, d0m1, 4, bits, ev_spec, num_ev_spec), \
  467. MAX1363_CHAN_B(2, 3, d2m3, 5, bits, ev_spec, num_ev_spec), \
  468. MAX1363_CHAN_B(1, 0, d1m0, 6, bits, ev_spec, num_ev_spec), \
  469. MAX1363_CHAN_B(3, 2, d3m2, 7, bits, ev_spec, num_ev_spec), \
  470. IIO_CHAN_SOFT_TIMESTAMP(8) \
  471. }
  472. static const struct iio_chan_spec max1036_channels[] =
  473. MAX1363_4X_CHANS(8, NULL, 0);
  474. static const struct iio_chan_spec max1136_channels[] =
  475. MAX1363_4X_CHANS(10, NULL, 0);
  476. static const struct iio_chan_spec max1236_channels[] =
  477. MAX1363_4X_CHANS(12, NULL, 0);
  478. static const struct iio_chan_spec max1361_channels[] =
  479. MAX1363_4X_CHANS(10, max1363_events, ARRAY_SIZE(max1363_events));
  480. static const struct iio_chan_spec max1363_channels[] =
  481. MAX1363_4X_CHANS(12, max1363_events, ARRAY_SIZE(max1363_events));
  482. /* Applies to max1236, max1237 */
  483. static const enum max1363_modes max1236_mode_list[] = {
  484. _s0, _s1, _s2, _s3,
  485. s0to1, s0to2, s0to3,
  486. d0m1, d2m3, d1m0, d3m2,
  487. d0m1to2m3, d1m0to3m2,
  488. s2to3,
  489. };
  490. /* Applies to max1238, max1239 */
  491. static const enum max1363_modes max1238_mode_list[] = {
  492. _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7, _s8, _s9, _s10, _s11,
  493. s0to1, s0to2, s0to3, s0to4, s0to5, s0to6,
  494. s0to7, s0to8, s0to9, s0to10, s0to11,
  495. d0m1, d2m3, d4m5, d6m7, d8m9, d10m11,
  496. d1m0, d3m2, d5m4, d7m6, d9m8, d11m10,
  497. d0m1to2m3, d0m1to4m5, d0m1to6m7, d0m1to8m9, d0m1to10m11,
  498. d1m0to3m2, d1m0to5m4, d1m0to7m6, d1m0to9m8, d1m0to11m10,
  499. s6to7, s6to8, s6to9, s6to10, s6to11,
  500. d6m7to8m9, d6m7to10m11, d7m6to9m8, d7m6to11m10,
  501. };
  502. #define MAX1363_12X_CHANS(bits) { \
  503. MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
  504. MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
  505. MAX1363_CHAN_U(2, _s2, 2, bits, NULL, 0), \
  506. MAX1363_CHAN_U(3, _s3, 3, bits, NULL, 0), \
  507. MAX1363_CHAN_U(4, _s4, 4, bits, NULL, 0), \
  508. MAX1363_CHAN_U(5, _s5, 5, bits, NULL, 0), \
  509. MAX1363_CHAN_U(6, _s6, 6, bits, NULL, 0), \
  510. MAX1363_CHAN_U(7, _s7, 7, bits, NULL, 0), \
  511. MAX1363_CHAN_U(8, _s8, 8, bits, NULL, 0), \
  512. MAX1363_CHAN_U(9, _s9, 9, bits, NULL, 0), \
  513. MAX1363_CHAN_U(10, _s10, 10, bits, NULL, 0), \
  514. MAX1363_CHAN_U(11, _s11, 11, bits, NULL, 0), \
  515. MAX1363_CHAN_B(0, 1, d0m1, 12, bits, NULL, 0), \
  516. MAX1363_CHAN_B(2, 3, d2m3, 13, bits, NULL, 0), \
  517. MAX1363_CHAN_B(4, 5, d4m5, 14, bits, NULL, 0), \
  518. MAX1363_CHAN_B(6, 7, d6m7, 15, bits, NULL, 0), \
  519. MAX1363_CHAN_B(8, 9, d8m9, 16, bits, NULL, 0), \
  520. MAX1363_CHAN_B(10, 11, d10m11, 17, bits, NULL, 0), \
  521. MAX1363_CHAN_B(1, 0, d1m0, 18, bits, NULL, 0), \
  522. MAX1363_CHAN_B(3, 2, d3m2, 19, bits, NULL, 0), \
  523. MAX1363_CHAN_B(5, 4, d5m4, 20, bits, NULL, 0), \
  524. MAX1363_CHAN_B(7, 6, d7m6, 21, bits, NULL, 0), \
  525. MAX1363_CHAN_B(9, 8, d9m8, 22, bits, NULL, 0), \
  526. MAX1363_CHAN_B(11, 10, d11m10, 23, bits, NULL, 0), \
  527. IIO_CHAN_SOFT_TIMESTAMP(24) \
  528. }
  529. static const struct iio_chan_spec max1038_channels[] = MAX1363_12X_CHANS(8);
  530. static const struct iio_chan_spec max1138_channels[] = MAX1363_12X_CHANS(10);
  531. static const struct iio_chan_spec max1238_channels[] = MAX1363_12X_CHANS(12);
  532. static const enum max1363_modes max11607_mode_list[] = {
  533. _s0, _s1, _s2, _s3,
  534. s0to1, s0to2, s0to3,
  535. s2to3,
  536. d0m1, d2m3, d1m0, d3m2,
  537. d0m1to2m3, d1m0to3m2,
  538. };
  539. static const enum max1363_modes max11608_mode_list[] = {
  540. _s0, _s1, _s2, _s3, _s4, _s5, _s6, _s7,
  541. s0to1, s0to2, s0to3, s0to4, s0to5, s0to6, s0to7,
  542. s6to7,
  543. d0m1, d2m3, d4m5, d6m7,
  544. d1m0, d3m2, d5m4, d7m6,
  545. d0m1to2m3, d0m1to4m5, d0m1to6m7,
  546. d1m0to3m2, d1m0to5m4, d1m0to7m6,
  547. };
  548. #define MAX1363_8X_CHANS(bits) { \
  549. MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
  550. MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
  551. MAX1363_CHAN_U(2, _s2, 2, bits, NULL, 0), \
  552. MAX1363_CHAN_U(3, _s3, 3, bits, NULL, 0), \
  553. MAX1363_CHAN_U(4, _s4, 4, bits, NULL, 0), \
  554. MAX1363_CHAN_U(5, _s5, 5, bits, NULL, 0), \
  555. MAX1363_CHAN_U(6, _s6, 6, bits, NULL, 0), \
  556. MAX1363_CHAN_U(7, _s7, 7, bits, NULL, 0), \
  557. MAX1363_CHAN_B(0, 1, d0m1, 8, bits, NULL, 0), \
  558. MAX1363_CHAN_B(2, 3, d2m3, 9, bits, NULL, 0), \
  559. MAX1363_CHAN_B(4, 5, d4m5, 10, bits, NULL, 0), \
  560. MAX1363_CHAN_B(6, 7, d6m7, 11, bits, NULL, 0), \
  561. MAX1363_CHAN_B(1, 0, d1m0, 12, bits, NULL, 0), \
  562. MAX1363_CHAN_B(3, 2, d3m2, 13, bits, NULL, 0), \
  563. MAX1363_CHAN_B(5, 4, d5m4, 14, bits, NULL, 0), \
  564. MAX1363_CHAN_B(7, 6, d7m6, 15, bits, NULL, 0), \
  565. IIO_CHAN_SOFT_TIMESTAMP(16) \
  566. }
  567. static const struct iio_chan_spec max11602_channels[] = MAX1363_8X_CHANS(8);
  568. static const struct iio_chan_spec max11608_channels[] = MAX1363_8X_CHANS(10);
  569. static const struct iio_chan_spec max11614_channels[] = MAX1363_8X_CHANS(12);
  570. static const enum max1363_modes max11644_mode_list[] = {
  571. _s0, _s1, s0to1, d0m1, d1m0,
  572. };
  573. #define MAX1363_2X_CHANS(bits) { \
  574. MAX1363_CHAN_U(0, _s0, 0, bits, NULL, 0), \
  575. MAX1363_CHAN_U(1, _s1, 1, bits, NULL, 0), \
  576. MAX1363_CHAN_B(0, 1, d0m1, 2, bits, NULL, 0), \
  577. MAX1363_CHAN_B(1, 0, d1m0, 3, bits, NULL, 0), \
  578. IIO_CHAN_SOFT_TIMESTAMP(4) \
  579. }
  580. static const struct iio_chan_spec max11646_channels[] = MAX1363_2X_CHANS(10);
  581. static const struct iio_chan_spec max11644_channels[] = MAX1363_2X_CHANS(12);
  582. enum { max1361,
  583. max1362,
  584. max1363,
  585. max1364,
  586. max1036,
  587. max1037,
  588. max1038,
  589. max1039,
  590. max1136,
  591. max1137,
  592. max1138,
  593. max1139,
  594. max1236,
  595. max1237,
  596. max1238,
  597. max1239,
  598. max11600,
  599. max11601,
  600. max11602,
  601. max11603,
  602. max11604,
  603. max11605,
  604. max11606,
  605. max11607,
  606. max11608,
  607. max11609,
  608. max11610,
  609. max11611,
  610. max11612,
  611. max11613,
  612. max11614,
  613. max11615,
  614. max11616,
  615. max11617,
  616. max11644,
  617. max11645,
  618. max11646,
  619. max11647
  620. };
  621. static const int max1363_monitor_speeds[] = { 133000, 665000, 33300, 16600,
  622. 8300, 4200, 2000, 1000 };
  623. static ssize_t max1363_monitor_show_freq(struct device *dev,
  624. struct device_attribute *attr,
  625. char *buf)
  626. {
  627. struct max1363_state *st = iio_priv(dev_to_iio_dev(dev));
  628. return sprintf(buf, "%d\n", max1363_monitor_speeds[st->monitor_speed]);
  629. }
  630. static ssize_t max1363_monitor_store_freq(struct device *dev,
  631. struct device_attribute *attr,
  632. const char *buf,
  633. size_t len)
  634. {
  635. struct iio_dev *indio_dev = dev_to_iio_dev(dev);
  636. struct max1363_state *st = iio_priv(indio_dev);
  637. int i, ret;
  638. unsigned long val;
  639. bool found = false;
  640. ret = kstrtoul(buf, 10, &val);
  641. if (ret)
  642. return -EINVAL;
  643. for (i = 0; i < ARRAY_SIZE(max1363_monitor_speeds); i++)
  644. if (val == max1363_monitor_speeds[i]) {
  645. found = true;
  646. break;
  647. }
  648. if (!found)
  649. return -EINVAL;
  650. mutex_lock(&indio_dev->mlock);
  651. st->monitor_speed = i;
  652. mutex_unlock(&indio_dev->mlock);
  653. return 0;
  654. }
  655. static IIO_DEV_ATTR_SAMP_FREQ(S_IRUGO | S_IWUSR,
  656. max1363_monitor_show_freq,
  657. max1363_monitor_store_freq);
  658. static IIO_CONST_ATTR(sampling_frequency_available,
  659. "133000 665000 33300 16600 8300 4200 2000 1000");
  660. static int max1363_read_thresh(struct iio_dev *indio_dev,
  661. const struct iio_chan_spec *chan, enum iio_event_type type,
  662. enum iio_event_direction dir, enum iio_event_info info, int *val,
  663. int *val2)
  664. {
  665. struct max1363_state *st = iio_priv(indio_dev);
  666. if (dir == IIO_EV_DIR_FALLING)
  667. *val = st->thresh_low[chan->channel];
  668. else
  669. *val = st->thresh_high[chan->channel];
  670. return IIO_VAL_INT;
  671. }
  672. static int max1363_write_thresh(struct iio_dev *indio_dev,
  673. const struct iio_chan_spec *chan, enum iio_event_type type,
  674. enum iio_event_direction dir, enum iio_event_info info, int val,
  675. int val2)
  676. {
  677. struct max1363_state *st = iio_priv(indio_dev);
  678. /* make it handle signed correctly as well */
  679. switch (st->chip_info->bits) {
  680. case 10:
  681. if (val > 0x3FF)
  682. return -EINVAL;
  683. break;
  684. case 12:
  685. if (val > 0xFFF)
  686. return -EINVAL;
  687. break;
  688. }
  689. switch (dir) {
  690. case IIO_EV_DIR_FALLING:
  691. st->thresh_low[chan->channel] = val;
  692. break;
  693. case IIO_EV_DIR_RISING:
  694. st->thresh_high[chan->channel] = val;
  695. break;
  696. default:
  697. return -EINVAL;
  698. }
  699. return 0;
  700. }
  701. static const u64 max1363_event_codes[] = {
  702. IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 0,
  703. IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
  704. IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
  705. IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
  706. IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
  707. IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
  708. IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
  709. IIO_EV_TYPE_THRESH, IIO_EV_DIR_FALLING),
  710. IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 0,
  711. IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
  712. IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 1,
  713. IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
  714. IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 2,
  715. IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
  716. IIO_UNMOD_EVENT_CODE(IIO_VOLTAGE, 3,
  717. IIO_EV_TYPE_THRESH, IIO_EV_DIR_RISING),
  718. };
  719. static irqreturn_t max1363_event_handler(int irq, void *private)
  720. {
  721. struct iio_dev *indio_dev = private;
  722. struct max1363_state *st = iio_priv(indio_dev);
  723. s64 timestamp = iio_get_time_ns();
  724. unsigned long mask, loc;
  725. u8 rx;
  726. u8 tx[2] = { st->setupbyte,
  727. MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0 };
  728. st->recv(st->client, &rx, 1);
  729. mask = rx;
  730. for_each_set_bit(loc, &mask, 8)
  731. iio_push_event(indio_dev, max1363_event_codes[loc], timestamp);
  732. st->send(st->client, tx, 2);
  733. return IRQ_HANDLED;
  734. }
  735. static int max1363_read_event_config(struct iio_dev *indio_dev,
  736. const struct iio_chan_spec *chan, enum iio_event_type type,
  737. enum iio_event_direction dir)
  738. {
  739. struct max1363_state *st = iio_priv(indio_dev);
  740. int val;
  741. int number = chan->channel;
  742. mutex_lock(&indio_dev->mlock);
  743. if (dir == IIO_EV_DIR_FALLING)
  744. val = (1 << number) & st->mask_low;
  745. else
  746. val = (1 << number) & st->mask_high;
  747. mutex_unlock(&indio_dev->mlock);
  748. return val;
  749. }
  750. static int max1363_monitor_mode_update(struct max1363_state *st, int enabled)
  751. {
  752. u8 *tx_buf;
  753. int ret, i = 3, j;
  754. unsigned long numelements;
  755. int len;
  756. const long *modemask;
  757. if (!enabled) {
  758. /* transition to buffered capture is not currently supported */
  759. st->setupbyte &= ~MAX1363_SETUP_MONITOR_SETUP;
  760. st->configbyte &= ~MAX1363_SCAN_MASK;
  761. st->monitor_on = false;
  762. return max1363_write_basic_config(st);
  763. }
  764. /* Ensure we are in the relevant mode */
  765. st->setupbyte |= MAX1363_SETUP_MONITOR_SETUP;
  766. st->configbyte &= ~(MAX1363_CHANNEL_SEL_MASK
  767. | MAX1363_SCAN_MASK
  768. | MAX1363_SE_DE_MASK);
  769. st->configbyte |= MAX1363_CONFIG_SCAN_MONITOR_MODE;
  770. if ((st->mask_low | st->mask_high) & 0x0F) {
  771. st->configbyte |= max1363_mode_table[s0to3].conf;
  772. modemask = max1363_mode_table[s0to3].modemask;
  773. } else if ((st->mask_low | st->mask_high) & 0x30) {
  774. st->configbyte |= max1363_mode_table[d0m1to2m3].conf;
  775. modemask = max1363_mode_table[d0m1to2m3].modemask;
  776. } else {
  777. st->configbyte |= max1363_mode_table[d1m0to3m2].conf;
  778. modemask = max1363_mode_table[d1m0to3m2].modemask;
  779. }
  780. numelements = bitmap_weight(modemask, MAX1363_MAX_CHANNELS);
  781. len = 3 * numelements + 3;
  782. tx_buf = kmalloc(len, GFP_KERNEL);
  783. if (!tx_buf) {
  784. ret = -ENOMEM;
  785. goto error_ret;
  786. }
  787. tx_buf[0] = st->configbyte;
  788. tx_buf[1] = st->setupbyte;
  789. tx_buf[2] = (st->monitor_speed << 1);
  790. /*
  791. * So we need to do yet another bit of nefarious scan mode
  792. * setup to match what we need.
  793. */
  794. for (j = 0; j < 8; j++)
  795. if (test_bit(j, modemask)) {
  796. /* Establish the mode is in the scan */
  797. if (st->mask_low & (1 << j)) {
  798. tx_buf[i] = (st->thresh_low[j] >> 4) & 0xFF;
  799. tx_buf[i + 1] = (st->thresh_low[j] << 4) & 0xF0;
  800. } else if (j < 4) {
  801. tx_buf[i] = 0;
  802. tx_buf[i + 1] = 0;
  803. } else {
  804. tx_buf[i] = 0x80;
  805. tx_buf[i + 1] = 0;
  806. }
  807. if (st->mask_high & (1 << j)) {
  808. tx_buf[i + 1] |=
  809. (st->thresh_high[j] >> 8) & 0x0F;
  810. tx_buf[i + 2] = st->thresh_high[j] & 0xFF;
  811. } else if (j < 4) {
  812. tx_buf[i + 1] |= 0x0F;
  813. tx_buf[i + 2] = 0xFF;
  814. } else {
  815. tx_buf[i + 1] |= 0x07;
  816. tx_buf[i + 2] = 0xFF;
  817. }
  818. i += 3;
  819. }
  820. ret = st->send(st->client, tx_buf, len);
  821. if (ret < 0)
  822. goto error_ret;
  823. if (ret != len) {
  824. ret = -EIO;
  825. goto error_ret;
  826. }
  827. /*
  828. * Now that we hopefully have sensible thresholds in place it is
  829. * time to turn the interrupts on.
  830. * It is unclear from the data sheet if this should be necessary
  831. * (i.e. whether monitor mode setup is atomic) but it appears to
  832. * be in practice.
  833. */
  834. tx_buf[0] = st->setupbyte;
  835. tx_buf[1] = MAX1363_MON_INT_ENABLE | (st->monitor_speed << 1) | 0xF0;
  836. ret = st->send(st->client, tx_buf, 2);
  837. if (ret < 0)
  838. goto error_ret;
  839. if (ret != 2) {
  840. ret = -EIO;
  841. goto error_ret;
  842. }
  843. ret = 0;
  844. st->monitor_on = true;
  845. error_ret:
  846. kfree(tx_buf);
  847. return ret;
  848. }
  849. /*
  850. * To keep this manageable we always use one of 3 scan modes.
  851. * Scan 0...3, 0-1,2-3 and 1-0,3-2
  852. */
  853. static inline int __max1363_check_event_mask(int thismask, int checkmask)
  854. {
  855. int ret = 0;
  856. /* Is it unipolar */
  857. if (thismask < 4) {
  858. if (checkmask & ~0x0F) {
  859. ret = -EBUSY;
  860. goto error_ret;
  861. }
  862. } else if (thismask < 6) {
  863. if (checkmask & ~0x30) {
  864. ret = -EBUSY;
  865. goto error_ret;
  866. }
  867. } else if (checkmask & ~0xC0)
  868. ret = -EBUSY;
  869. error_ret:
  870. return ret;
  871. }
  872. static int max1363_write_event_config(struct iio_dev *indio_dev,
  873. const struct iio_chan_spec *chan, enum iio_event_type type,
  874. enum iio_event_direction dir, int state)
  875. {
  876. int ret = 0;
  877. struct max1363_state *st = iio_priv(indio_dev);
  878. u16 unifiedmask;
  879. int number = chan->channel;
  880. mutex_lock(&indio_dev->mlock);
  881. unifiedmask = st->mask_low | st->mask_high;
  882. if (dir == IIO_EV_DIR_FALLING) {
  883. if (state == 0)
  884. st->mask_low &= ~(1 << number);
  885. else {
  886. ret = __max1363_check_event_mask((1 << number),
  887. unifiedmask);
  888. if (ret)
  889. goto error_ret;
  890. st->mask_low |= (1 << number);
  891. }
  892. } else {
  893. if (state == 0)
  894. st->mask_high &= ~(1 << number);
  895. else {
  896. ret = __max1363_check_event_mask((1 << number),
  897. unifiedmask);
  898. if (ret)
  899. goto error_ret;
  900. st->mask_high |= (1 << number);
  901. }
  902. }
  903. max1363_monitor_mode_update(st, !!(st->mask_high | st->mask_low));
  904. error_ret:
  905. mutex_unlock(&indio_dev->mlock);
  906. return ret;
  907. }
  908. /*
  909. * As with scan_elements, only certain sets of these can
  910. * be combined.
  911. */
  912. static struct attribute *max1363_event_attributes[] = {
  913. &iio_dev_attr_sampling_frequency.dev_attr.attr,
  914. &iio_const_attr_sampling_frequency_available.dev_attr.attr,
  915. NULL,
  916. };
  917. static struct attribute_group max1363_event_attribute_group = {
  918. .attrs = max1363_event_attributes,
  919. .name = "events",
  920. };
  921. static int max1363_update_scan_mode(struct iio_dev *indio_dev,
  922. const unsigned long *scan_mask)
  923. {
  924. struct max1363_state *st = iio_priv(indio_dev);
  925. /*
  926. * Need to figure out the current mode based upon the requested
  927. * scan mask in iio_dev
  928. */
  929. st->current_mode = max1363_match_mode(scan_mask, st->chip_info);
  930. if (!st->current_mode)
  931. return -EINVAL;
  932. max1363_set_scan_mode(st);
  933. return 0;
  934. }
  935. static const struct iio_info max1238_info = {
  936. .read_raw = &max1363_read_raw,
  937. .driver_module = THIS_MODULE,
  938. .update_scan_mode = &max1363_update_scan_mode,
  939. };
  940. static const struct iio_info max1363_info = {
  941. .read_event_value_new = &max1363_read_thresh,
  942. .write_event_value_new = &max1363_write_thresh,
  943. .read_event_config_new = &max1363_read_event_config,
  944. .write_event_config_new = &max1363_write_event_config,
  945. .read_raw = &max1363_read_raw,
  946. .update_scan_mode = &max1363_update_scan_mode,
  947. .driver_module = THIS_MODULE,
  948. .event_attrs = &max1363_event_attribute_group,
  949. };
  950. /* max1363 and max1368 tested - rest from data sheet */
  951. static const struct max1363_chip_info max1363_chip_info_tbl[] = {
  952. [max1361] = {
  953. .bits = 10,
  954. .int_vref_mv = 2048,
  955. .mode_list = max1363_mode_list,
  956. .num_modes = ARRAY_SIZE(max1363_mode_list),
  957. .default_mode = s0to3,
  958. .channels = max1361_channels,
  959. .num_channels = ARRAY_SIZE(max1361_channels),
  960. .info = &max1363_info,
  961. },
  962. [max1362] = {
  963. .bits = 10,
  964. .int_vref_mv = 4096,
  965. .mode_list = max1363_mode_list,
  966. .num_modes = ARRAY_SIZE(max1363_mode_list),
  967. .default_mode = s0to3,
  968. .channels = max1361_channels,
  969. .num_channels = ARRAY_SIZE(max1361_channels),
  970. .info = &max1363_info,
  971. },
  972. [max1363] = {
  973. .bits = 12,
  974. .int_vref_mv = 2048,
  975. .mode_list = max1363_mode_list,
  976. .num_modes = ARRAY_SIZE(max1363_mode_list),
  977. .default_mode = s0to3,
  978. .channels = max1363_channels,
  979. .num_channels = ARRAY_SIZE(max1363_channels),
  980. .info = &max1363_info,
  981. },
  982. [max1364] = {
  983. .bits = 12,
  984. .int_vref_mv = 4096,
  985. .mode_list = max1363_mode_list,
  986. .num_modes = ARRAY_SIZE(max1363_mode_list),
  987. .default_mode = s0to3,
  988. .channels = max1363_channels,
  989. .num_channels = ARRAY_SIZE(max1363_channels),
  990. .info = &max1363_info,
  991. },
  992. [max1036] = {
  993. .bits = 8,
  994. .int_vref_mv = 4096,
  995. .mode_list = max1236_mode_list,
  996. .num_modes = ARRAY_SIZE(max1236_mode_list),
  997. .default_mode = s0to3,
  998. .info = &max1238_info,
  999. .channels = max1036_channels,
  1000. .num_channels = ARRAY_SIZE(max1036_channels),
  1001. },
  1002. [max1037] = {
  1003. .bits = 8,
  1004. .int_vref_mv = 2048,
  1005. .mode_list = max1236_mode_list,
  1006. .num_modes = ARRAY_SIZE(max1236_mode_list),
  1007. .default_mode = s0to3,
  1008. .info = &max1238_info,
  1009. .channels = max1036_channels,
  1010. .num_channels = ARRAY_SIZE(max1036_channels),
  1011. },
  1012. [max1038] = {
  1013. .bits = 8,
  1014. .int_vref_mv = 4096,
  1015. .mode_list = max1238_mode_list,
  1016. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1017. .default_mode = s0to11,
  1018. .info = &max1238_info,
  1019. .channels = max1038_channels,
  1020. .num_channels = ARRAY_SIZE(max1038_channels),
  1021. },
  1022. [max1039] = {
  1023. .bits = 8,
  1024. .int_vref_mv = 2048,
  1025. .mode_list = max1238_mode_list,
  1026. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1027. .default_mode = s0to11,
  1028. .info = &max1238_info,
  1029. .channels = max1038_channels,
  1030. .num_channels = ARRAY_SIZE(max1038_channels),
  1031. },
  1032. [max1136] = {
  1033. .bits = 10,
  1034. .int_vref_mv = 4096,
  1035. .mode_list = max1236_mode_list,
  1036. .num_modes = ARRAY_SIZE(max1236_mode_list),
  1037. .default_mode = s0to3,
  1038. .info = &max1238_info,
  1039. .channels = max1136_channels,
  1040. .num_channels = ARRAY_SIZE(max1136_channels),
  1041. },
  1042. [max1137] = {
  1043. .bits = 10,
  1044. .int_vref_mv = 2048,
  1045. .mode_list = max1236_mode_list,
  1046. .num_modes = ARRAY_SIZE(max1236_mode_list),
  1047. .default_mode = s0to3,
  1048. .info = &max1238_info,
  1049. .channels = max1136_channels,
  1050. .num_channels = ARRAY_SIZE(max1136_channels),
  1051. },
  1052. [max1138] = {
  1053. .bits = 10,
  1054. .int_vref_mv = 4096,
  1055. .mode_list = max1238_mode_list,
  1056. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1057. .default_mode = s0to11,
  1058. .info = &max1238_info,
  1059. .channels = max1138_channels,
  1060. .num_channels = ARRAY_SIZE(max1138_channels),
  1061. },
  1062. [max1139] = {
  1063. .bits = 10,
  1064. .int_vref_mv = 2048,
  1065. .mode_list = max1238_mode_list,
  1066. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1067. .default_mode = s0to11,
  1068. .info = &max1238_info,
  1069. .channels = max1138_channels,
  1070. .num_channels = ARRAY_SIZE(max1138_channels),
  1071. },
  1072. [max1236] = {
  1073. .bits = 12,
  1074. .int_vref_mv = 4096,
  1075. .mode_list = max1236_mode_list,
  1076. .num_modes = ARRAY_SIZE(max1236_mode_list),
  1077. .default_mode = s0to3,
  1078. .info = &max1238_info,
  1079. .channels = max1236_channels,
  1080. .num_channels = ARRAY_SIZE(max1236_channels),
  1081. },
  1082. [max1237] = {
  1083. .bits = 12,
  1084. .int_vref_mv = 2048,
  1085. .mode_list = max1236_mode_list,
  1086. .num_modes = ARRAY_SIZE(max1236_mode_list),
  1087. .default_mode = s0to3,
  1088. .info = &max1238_info,
  1089. .channels = max1236_channels,
  1090. .num_channels = ARRAY_SIZE(max1236_channels),
  1091. },
  1092. [max1238] = {
  1093. .bits = 12,
  1094. .int_vref_mv = 4096,
  1095. .mode_list = max1238_mode_list,
  1096. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1097. .default_mode = s0to11,
  1098. .info = &max1238_info,
  1099. .channels = max1238_channels,
  1100. .num_channels = ARRAY_SIZE(max1238_channels),
  1101. },
  1102. [max1239] = {
  1103. .bits = 12,
  1104. .int_vref_mv = 2048,
  1105. .mode_list = max1238_mode_list,
  1106. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1107. .default_mode = s0to11,
  1108. .info = &max1238_info,
  1109. .channels = max1238_channels,
  1110. .num_channels = ARRAY_SIZE(max1238_channels),
  1111. },
  1112. [max11600] = {
  1113. .bits = 8,
  1114. .int_vref_mv = 4096,
  1115. .mode_list = max11607_mode_list,
  1116. .num_modes = ARRAY_SIZE(max11607_mode_list),
  1117. .default_mode = s0to3,
  1118. .info = &max1238_info,
  1119. .channels = max1036_channels,
  1120. .num_channels = ARRAY_SIZE(max1036_channels),
  1121. },
  1122. [max11601] = {
  1123. .bits = 8,
  1124. .int_vref_mv = 2048,
  1125. .mode_list = max11607_mode_list,
  1126. .num_modes = ARRAY_SIZE(max11607_mode_list),
  1127. .default_mode = s0to3,
  1128. .info = &max1238_info,
  1129. .channels = max1036_channels,
  1130. .num_channels = ARRAY_SIZE(max1036_channels),
  1131. },
  1132. [max11602] = {
  1133. .bits = 8,
  1134. .int_vref_mv = 4096,
  1135. .mode_list = max11608_mode_list,
  1136. .num_modes = ARRAY_SIZE(max11608_mode_list),
  1137. .default_mode = s0to7,
  1138. .info = &max1238_info,
  1139. .channels = max11602_channels,
  1140. .num_channels = ARRAY_SIZE(max11602_channels),
  1141. },
  1142. [max11603] = {
  1143. .bits = 8,
  1144. .int_vref_mv = 2048,
  1145. .mode_list = max11608_mode_list,
  1146. .num_modes = ARRAY_SIZE(max11608_mode_list),
  1147. .default_mode = s0to7,
  1148. .info = &max1238_info,
  1149. .channels = max11602_channels,
  1150. .num_channels = ARRAY_SIZE(max11602_channels),
  1151. },
  1152. [max11604] = {
  1153. .bits = 8,
  1154. .int_vref_mv = 4098,
  1155. .mode_list = max1238_mode_list,
  1156. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1157. .default_mode = s0to11,
  1158. .info = &max1238_info,
  1159. .channels = max1238_channels,
  1160. .num_channels = ARRAY_SIZE(max1238_channels),
  1161. },
  1162. [max11605] = {
  1163. .bits = 8,
  1164. .int_vref_mv = 2048,
  1165. .mode_list = max1238_mode_list,
  1166. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1167. .default_mode = s0to11,
  1168. .info = &max1238_info,
  1169. .channels = max1238_channels,
  1170. .num_channels = ARRAY_SIZE(max1238_channels),
  1171. },
  1172. [max11606] = {
  1173. .bits = 10,
  1174. .int_vref_mv = 4096,
  1175. .mode_list = max11607_mode_list,
  1176. .num_modes = ARRAY_SIZE(max11607_mode_list),
  1177. .default_mode = s0to3,
  1178. .info = &max1238_info,
  1179. .channels = max1136_channels,
  1180. .num_channels = ARRAY_SIZE(max1136_channels),
  1181. },
  1182. [max11607] = {
  1183. .bits = 10,
  1184. .int_vref_mv = 2048,
  1185. .mode_list = max11607_mode_list,
  1186. .num_modes = ARRAY_SIZE(max11607_mode_list),
  1187. .default_mode = s0to3,
  1188. .info = &max1238_info,
  1189. .channels = max1136_channels,
  1190. .num_channels = ARRAY_SIZE(max1136_channels),
  1191. },
  1192. [max11608] = {
  1193. .bits = 10,
  1194. .int_vref_mv = 4096,
  1195. .mode_list = max11608_mode_list,
  1196. .num_modes = ARRAY_SIZE(max11608_mode_list),
  1197. .default_mode = s0to7,
  1198. .info = &max1238_info,
  1199. .channels = max11608_channels,
  1200. .num_channels = ARRAY_SIZE(max11608_channels),
  1201. },
  1202. [max11609] = {
  1203. .bits = 10,
  1204. .int_vref_mv = 2048,
  1205. .mode_list = max11608_mode_list,
  1206. .num_modes = ARRAY_SIZE(max11608_mode_list),
  1207. .default_mode = s0to7,
  1208. .info = &max1238_info,
  1209. .channels = max11608_channels,
  1210. .num_channels = ARRAY_SIZE(max11608_channels),
  1211. },
  1212. [max11610] = {
  1213. .bits = 10,
  1214. .int_vref_mv = 4098,
  1215. .mode_list = max1238_mode_list,
  1216. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1217. .default_mode = s0to11,
  1218. .info = &max1238_info,
  1219. .channels = max1238_channels,
  1220. .num_channels = ARRAY_SIZE(max1238_channels),
  1221. },
  1222. [max11611] = {
  1223. .bits = 10,
  1224. .int_vref_mv = 2048,
  1225. .mode_list = max1238_mode_list,
  1226. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1227. .default_mode = s0to11,
  1228. .info = &max1238_info,
  1229. .channels = max1238_channels,
  1230. .num_channels = ARRAY_SIZE(max1238_channels),
  1231. },
  1232. [max11612] = {
  1233. .bits = 12,
  1234. .int_vref_mv = 4096,
  1235. .mode_list = max11607_mode_list,
  1236. .num_modes = ARRAY_SIZE(max11607_mode_list),
  1237. .default_mode = s0to3,
  1238. .info = &max1238_info,
  1239. .channels = max1363_channels,
  1240. .num_channels = ARRAY_SIZE(max1363_channels),
  1241. },
  1242. [max11613] = {
  1243. .bits = 12,
  1244. .int_vref_mv = 2048,
  1245. .mode_list = max11607_mode_list,
  1246. .num_modes = ARRAY_SIZE(max11607_mode_list),
  1247. .default_mode = s0to3,
  1248. .info = &max1238_info,
  1249. .channels = max1363_channels,
  1250. .num_channels = ARRAY_SIZE(max1363_channels),
  1251. },
  1252. [max11614] = {
  1253. .bits = 12,
  1254. .int_vref_mv = 4096,
  1255. .mode_list = max11608_mode_list,
  1256. .num_modes = ARRAY_SIZE(max11608_mode_list),
  1257. .default_mode = s0to7,
  1258. .info = &max1238_info,
  1259. .channels = max11614_channels,
  1260. .num_channels = ARRAY_SIZE(max11614_channels),
  1261. },
  1262. [max11615] = {
  1263. .bits = 12,
  1264. .int_vref_mv = 2048,
  1265. .mode_list = max11608_mode_list,
  1266. .num_modes = ARRAY_SIZE(max11608_mode_list),
  1267. .default_mode = s0to7,
  1268. .info = &max1238_info,
  1269. .channels = max11614_channels,
  1270. .num_channels = ARRAY_SIZE(max11614_channels),
  1271. },
  1272. [max11616] = {
  1273. .bits = 12,
  1274. .int_vref_mv = 4098,
  1275. .mode_list = max1238_mode_list,
  1276. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1277. .default_mode = s0to11,
  1278. .info = &max1238_info,
  1279. .channels = max1238_channels,
  1280. .num_channels = ARRAY_SIZE(max1238_channels),
  1281. },
  1282. [max11617] = {
  1283. .bits = 12,
  1284. .int_vref_mv = 2048,
  1285. .mode_list = max1238_mode_list,
  1286. .num_modes = ARRAY_SIZE(max1238_mode_list),
  1287. .default_mode = s0to11,
  1288. .info = &max1238_info,
  1289. .channels = max1238_channels,
  1290. .num_channels = ARRAY_SIZE(max1238_channels),
  1291. },
  1292. [max11644] = {
  1293. .bits = 12,
  1294. .int_vref_mv = 2048,
  1295. .mode_list = max11644_mode_list,
  1296. .num_modes = ARRAY_SIZE(max11644_mode_list),
  1297. .default_mode = s0to1,
  1298. .info = &max1238_info,
  1299. .channels = max11644_channels,
  1300. .num_channels = ARRAY_SIZE(max11644_channels),
  1301. },
  1302. [max11645] = {
  1303. .bits = 12,
  1304. .int_vref_mv = 4096,
  1305. .mode_list = max11644_mode_list,
  1306. .num_modes = ARRAY_SIZE(max11644_mode_list),
  1307. .default_mode = s0to1,
  1308. .info = &max1238_info,
  1309. .channels = max11644_channels,
  1310. .num_channels = ARRAY_SIZE(max11644_channels),
  1311. },
  1312. [max11646] = {
  1313. .bits = 10,
  1314. .int_vref_mv = 2048,
  1315. .mode_list = max11644_mode_list,
  1316. .num_modes = ARRAY_SIZE(max11644_mode_list),
  1317. .default_mode = s0to1,
  1318. .info = &max1238_info,
  1319. .channels = max11646_channels,
  1320. .num_channels = ARRAY_SIZE(max11646_channels),
  1321. },
  1322. [max11647] = {
  1323. .bits = 10,
  1324. .int_vref_mv = 4096,
  1325. .mode_list = max11644_mode_list,
  1326. .num_modes = ARRAY_SIZE(max11644_mode_list),
  1327. .default_mode = s0to1,
  1328. .info = &max1238_info,
  1329. .channels = max11646_channels,
  1330. .num_channels = ARRAY_SIZE(max11646_channels),
  1331. },
  1332. };
  1333. static int max1363_initial_setup(struct max1363_state *st)
  1334. {
  1335. st->setupbyte = MAX1363_SETUP_INT_CLOCK
  1336. | MAX1363_SETUP_UNIPOLAR
  1337. | MAX1363_SETUP_NORESET;
  1338. if (st->vref)
  1339. st->setupbyte |= MAX1363_SETUP_AIN3_IS_REF_EXT_TO_REF;
  1340. else
  1341. st->setupbyte |= MAX1363_SETUP_POWER_UP_INT_REF
  1342. | MAX1363_SETUP_AIN3_IS_AIN3_REF_IS_INT;
  1343. /* Set scan mode writes the config anyway so wait until then */
  1344. st->setupbyte = MAX1363_SETUP_BYTE(st->setupbyte);
  1345. st->current_mode = &max1363_mode_table[st->chip_info->default_mode];
  1346. st->configbyte = MAX1363_CONFIG_BYTE(st->configbyte);
  1347. return max1363_set_scan_mode(st);
  1348. }
  1349. static int max1363_alloc_scan_masks(struct iio_dev *indio_dev)
  1350. {
  1351. struct max1363_state *st = iio_priv(indio_dev);
  1352. unsigned long *masks;
  1353. int i;
  1354. masks = devm_kzalloc(&indio_dev->dev,
  1355. BITS_TO_LONGS(MAX1363_MAX_CHANNELS) * sizeof(long) *
  1356. (st->chip_info->num_modes + 1), GFP_KERNEL);
  1357. if (!masks)
  1358. return -ENOMEM;
  1359. for (i = 0; i < st->chip_info->num_modes; i++)
  1360. bitmap_copy(masks + BITS_TO_LONGS(MAX1363_MAX_CHANNELS)*i,
  1361. max1363_mode_table[st->chip_info->mode_list[i]]
  1362. .modemask, MAX1363_MAX_CHANNELS);
  1363. indio_dev->available_scan_masks = masks;
  1364. return 0;
  1365. }
  1366. static irqreturn_t max1363_trigger_handler(int irq, void *p)
  1367. {
  1368. struct iio_poll_func *pf = p;
  1369. struct iio_dev *indio_dev = pf->indio_dev;
  1370. struct max1363_state *st = iio_priv(indio_dev);
  1371. __u8 *rxbuf;
  1372. int b_sent;
  1373. size_t d_size;
  1374. unsigned long numvals = bitmap_weight(st->current_mode->modemask,
  1375. MAX1363_MAX_CHANNELS);
  1376. /* Ensure the timestamp is 8 byte aligned */
  1377. if (st->chip_info->bits != 8)
  1378. d_size = numvals*2;
  1379. else
  1380. d_size = numvals;
  1381. if (indio_dev->scan_timestamp) {
  1382. d_size += sizeof(s64);
  1383. if (d_size % sizeof(s64))
  1384. d_size += sizeof(s64) - (d_size % sizeof(s64));
  1385. }
  1386. /* Monitor mode prevents reading. Whilst not currently implemented
  1387. * might as well have this test in here in the meantime as it does
  1388. * no harm.
  1389. */
  1390. if (numvals == 0)
  1391. goto done;
  1392. rxbuf = kmalloc(d_size, GFP_KERNEL);
  1393. if (rxbuf == NULL)
  1394. goto done;
  1395. if (st->chip_info->bits != 8)
  1396. b_sent = st->recv(st->client, rxbuf, numvals * 2);
  1397. else
  1398. b_sent = st->recv(st->client, rxbuf, numvals);
  1399. if (b_sent < 0)
  1400. goto done_free;
  1401. iio_push_to_buffers_with_timestamp(indio_dev, rxbuf, iio_get_time_ns());
  1402. done_free:
  1403. kfree(rxbuf);
  1404. done:
  1405. iio_trigger_notify_done(indio_dev->trig);
  1406. return IRQ_HANDLED;
  1407. }
  1408. static int max1363_probe(struct i2c_client *client,
  1409. const struct i2c_device_id *id)
  1410. {
  1411. int ret;
  1412. struct max1363_state *st;
  1413. struct iio_dev *indio_dev;
  1414. struct regulator *vref;
  1415. indio_dev = devm_iio_device_alloc(&client->dev,
  1416. sizeof(struct max1363_state));
  1417. if (!indio_dev)
  1418. return -ENOMEM;
  1419. indio_dev->dev.of_node = client->dev.of_node;
  1420. ret = iio_map_array_register(indio_dev, client->dev.platform_data);
  1421. if (ret < 0)
  1422. return ret;
  1423. st = iio_priv(indio_dev);
  1424. st->reg = devm_regulator_get(&client->dev, "vcc");
  1425. if (IS_ERR(st->reg)) {
  1426. ret = PTR_ERR(st->reg);
  1427. goto error_unregister_map;
  1428. }
  1429. ret = regulator_enable(st->reg);
  1430. if (ret)
  1431. goto error_unregister_map;
  1432. /* this is only used for device removal purposes */
  1433. i2c_set_clientdata(client, indio_dev);
  1434. st->chip_info = &max1363_chip_info_tbl[id->driver_data];
  1435. st->client = client;
  1436. st->vref_uv = st->chip_info->int_vref_mv * 1000;
  1437. vref = devm_regulator_get(&client->dev, "vref");
  1438. if (!IS_ERR(vref)) {
  1439. int vref_uv;
  1440. ret = regulator_enable(vref);
  1441. if (ret)
  1442. goto error_disable_reg;
  1443. st->vref = vref;
  1444. vref_uv = regulator_get_voltage(vref);
  1445. if (vref_uv <= 0) {
  1446. ret = -EINVAL;
  1447. goto error_disable_reg;
  1448. }
  1449. st->vref_uv = vref_uv;
  1450. }
  1451. if (i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
  1452. st->send = i2c_master_send;
  1453. st->recv = i2c_master_recv;
  1454. } else if (i2c_check_functionality(client->adapter, I2C_FUNC_SMBUS_BYTE)
  1455. && st->chip_info->bits == 8) {
  1456. st->send = max1363_smbus_send;
  1457. st->recv = max1363_smbus_recv;
  1458. } else {
  1459. ret = -EOPNOTSUPP;
  1460. goto error_disable_reg;
  1461. }
  1462. ret = max1363_alloc_scan_masks(indio_dev);
  1463. if (ret)
  1464. goto error_disable_reg;
  1465. /* Establish that the iio_dev is a child of the i2c device */
  1466. indio_dev->dev.parent = &client->dev;
  1467. indio_dev->name = id->name;
  1468. indio_dev->channels = st->chip_info->channels;
  1469. indio_dev->num_channels = st->chip_info->num_channels;
  1470. indio_dev->info = st->chip_info->info;
  1471. indio_dev->modes = INDIO_DIRECT_MODE;
  1472. ret = max1363_initial_setup(st);
  1473. if (ret < 0)
  1474. goto error_disable_reg;
  1475. ret = iio_triggered_buffer_setup(indio_dev, NULL,
  1476. &max1363_trigger_handler, NULL);
  1477. if (ret)
  1478. goto error_disable_reg;
  1479. if (client->irq) {
  1480. ret = devm_request_threaded_irq(&client->dev, st->client->irq,
  1481. NULL,
  1482. &max1363_event_handler,
  1483. IRQF_TRIGGER_RISING | IRQF_ONESHOT,
  1484. "max1363_event",
  1485. indio_dev);
  1486. if (ret)
  1487. goto error_uninit_buffer;
  1488. }
  1489. ret = iio_device_register(indio_dev);
  1490. if (ret < 0)
  1491. goto error_uninit_buffer;
  1492. return 0;
  1493. error_uninit_buffer:
  1494. iio_triggered_buffer_cleanup(indio_dev);
  1495. error_disable_reg:
  1496. if (st->vref)
  1497. regulator_disable(st->vref);
  1498. regulator_disable(st->reg);
  1499. error_unregister_map:
  1500. iio_map_array_unregister(indio_dev);
  1501. return ret;
  1502. }
  1503. static int max1363_remove(struct i2c_client *client)
  1504. {
  1505. struct iio_dev *indio_dev = i2c_get_clientdata(client);
  1506. struct max1363_state *st = iio_priv(indio_dev);
  1507. iio_device_unregister(indio_dev);
  1508. iio_triggered_buffer_cleanup(indio_dev);
  1509. if (st->vref)
  1510. regulator_disable(st->vref);
  1511. regulator_disable(st->reg);
  1512. iio_map_array_unregister(indio_dev);
  1513. return 0;
  1514. }
  1515. static const struct i2c_device_id max1363_id[] = {
  1516. { "max1361", max1361 },
  1517. { "max1362", max1362 },
  1518. { "max1363", max1363 },
  1519. { "max1364", max1364 },
  1520. { "max1036", max1036 },
  1521. { "max1037", max1037 },
  1522. { "max1038", max1038 },
  1523. { "max1039", max1039 },
  1524. { "max1136", max1136 },
  1525. { "max1137", max1137 },
  1526. { "max1138", max1138 },
  1527. { "max1139", max1139 },
  1528. { "max1236", max1236 },
  1529. { "max1237", max1237 },
  1530. { "max1238", max1238 },
  1531. { "max1239", max1239 },
  1532. { "max11600", max11600 },
  1533. { "max11601", max11601 },
  1534. { "max11602", max11602 },
  1535. { "max11603", max11603 },
  1536. { "max11604", max11604 },
  1537. { "max11605", max11605 },
  1538. { "max11606", max11606 },
  1539. { "max11607", max11607 },
  1540. { "max11608", max11608 },
  1541. { "max11609", max11609 },
  1542. { "max11610", max11610 },
  1543. { "max11611", max11611 },
  1544. { "max11612", max11612 },
  1545. { "max11613", max11613 },
  1546. { "max11614", max11614 },
  1547. { "max11615", max11615 },
  1548. { "max11616", max11616 },
  1549. { "max11617", max11617 },
  1550. {}
  1551. };
  1552. MODULE_DEVICE_TABLE(i2c, max1363_id);
  1553. static struct i2c_driver max1363_driver = {
  1554. .driver = {
  1555. .name = "max1363",
  1556. },
  1557. .probe = max1363_probe,
  1558. .remove = max1363_remove,
  1559. .id_table = max1363_id,
  1560. };
  1561. module_i2c_driver(max1363_driver);
  1562. MODULE_AUTHOR("Jonathan Cameron <jic23@kernel.org>");
  1563. MODULE_DESCRIPTION("Maxim 1363 ADC");
  1564. MODULE_LICENSE("GPL v2");