regmap-irq.c 32 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210
  1. // SPDX-License-Identifier: GPL-2.0
  2. //
  3. // regmap based irq_chip
  4. //
  5. // Copyright 2011 Wolfson Microelectronics plc
  6. //
  7. // Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
  8. #include <linux/array_size.h>
  9. #include <linux/device.h>
  10. #include <linux/export.h>
  11. #include <linux/interrupt.h>
  12. #include <linux/irq.h>
  13. #include <linux/irqdomain.h>
  14. #include <linux/overflow.h>
  15. #include <linux/pm_runtime.h>
  16. #include <linux/regmap.h>
  17. #include <linux/slab.h>
  18. #include "internal.h"
  19. struct regmap_irq_chip_data {
  20. struct mutex lock;
  21. struct lock_class_key lock_key;
  22. struct irq_chip irq_chip;
  23. struct regmap *map;
  24. const struct regmap_irq_chip *chip;
  25. int irq_base;
  26. struct irq_domain *domain;
  27. int irq;
  28. int wake_count;
  29. void *status_reg_buf;
  30. unsigned int *main_status_buf;
  31. unsigned int *status_buf;
  32. unsigned int *prev_status_buf;
  33. unsigned int *mask_buf;
  34. unsigned int *mask_buf_def;
  35. unsigned int *wake_buf;
  36. unsigned int *type_buf;
  37. unsigned int *type_buf_def;
  38. unsigned int **config_buf;
  39. unsigned int irq_reg_stride;
  40. unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *data,
  41. unsigned int base, int index);
  42. unsigned int clear_status:1;
  43. };
  44. static inline const
  45. struct regmap_irq *irq_to_regmap_irq(struct regmap_irq_chip_data *data,
  46. int irq)
  47. {
  48. return &data->chip->irqs[irq];
  49. }
  50. static bool regmap_irq_can_bulk_read_status(struct regmap_irq_chip_data *data)
  51. {
  52. struct regmap *map = data->map;
  53. /*
  54. * While possible that a user-defined ->get_irq_reg() callback might
  55. * be linear enough to support bulk reads, most of the time it won't.
  56. * Therefore only allow them if the default callback is being used.
  57. */
  58. return data->irq_reg_stride == 1 && map->reg_stride == 1 &&
  59. data->get_irq_reg == regmap_irq_get_irq_reg_linear &&
  60. !map->use_single_read;
  61. }
  62. static void regmap_irq_lock(struct irq_data *data)
  63. {
  64. struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
  65. mutex_lock(&d->lock);
  66. }
  67. static void regmap_irq_sync_unlock(struct irq_data *data)
  68. {
  69. struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
  70. struct regmap *map = d->map;
  71. int i, j, ret;
  72. u32 reg;
  73. u32 val;
  74. if (d->chip->runtime_pm) {
  75. ret = pm_runtime_get_sync(map->dev);
  76. if (ret < 0)
  77. dev_err(map->dev, "IRQ sync failed to resume: %d\n",
  78. ret);
  79. }
  80. if (d->clear_status) {
  81. for (i = 0; i < d->chip->num_regs; i++) {
  82. reg = d->get_irq_reg(d, d->chip->status_base, i);
  83. ret = regmap_read(map, reg, &val);
  84. if (ret)
  85. dev_err(d->map->dev,
  86. "Failed to clear the interrupt status bits\n");
  87. }
  88. d->clear_status = false;
  89. }
  90. /*
  91. * If there's been a change in the mask write it back to the
  92. * hardware. We rely on the use of the regmap core cache to
  93. * suppress pointless writes.
  94. */
  95. for (i = 0; i < d->chip->num_regs; i++) {
  96. if (d->chip->handle_mask_sync)
  97. d->chip->handle_mask_sync(i, d->mask_buf_def[i],
  98. d->mask_buf[i],
  99. d->chip->irq_drv_data);
  100. if (d->chip->mask_base && !d->chip->handle_mask_sync) {
  101. reg = d->get_irq_reg(d, d->chip->mask_base, i);
  102. ret = regmap_update_bits(d->map, reg,
  103. d->mask_buf_def[i],
  104. d->mask_buf[i]);
  105. if (ret)
  106. dev_err(d->map->dev, "Failed to sync masks in %x\n", reg);
  107. }
  108. if (d->chip->unmask_base && !d->chip->handle_mask_sync) {
  109. reg = d->get_irq_reg(d, d->chip->unmask_base, i);
  110. ret = regmap_update_bits(d->map, reg,
  111. d->mask_buf_def[i], ~d->mask_buf[i]);
  112. if (ret)
  113. dev_err(d->map->dev, "Failed to sync masks in %x\n",
  114. reg);
  115. }
  116. reg = d->get_irq_reg(d, d->chip->wake_base, i);
  117. if (d->wake_buf) {
  118. if (d->chip->wake_invert)
  119. ret = regmap_update_bits(d->map, reg,
  120. d->mask_buf_def[i],
  121. ~d->wake_buf[i]);
  122. else
  123. ret = regmap_update_bits(d->map, reg,
  124. d->mask_buf_def[i],
  125. d->wake_buf[i]);
  126. if (ret != 0)
  127. dev_err(d->map->dev,
  128. "Failed to sync wakes in %x: %d\n",
  129. reg, ret);
  130. }
  131. if (!d->chip->init_ack_masked)
  132. continue;
  133. /*
  134. * Ack all the masked interrupts unconditionally,
  135. * OR if there is masked interrupt which hasn't been Acked,
  136. * it'll be ignored in irq handler, then may introduce irq storm
  137. */
  138. if (d->mask_buf[i] && (d->chip->ack_base || d->chip->use_ack)) {
  139. reg = d->get_irq_reg(d, d->chip->ack_base, i);
  140. /* some chips ack by write 0 */
  141. if (d->chip->ack_invert)
  142. ret = regmap_write(map, reg, ~d->mask_buf[i]);
  143. else
  144. ret = regmap_write(map, reg, d->mask_buf[i]);
  145. if (d->chip->clear_ack) {
  146. if (d->chip->ack_invert && !ret)
  147. ret = regmap_write(map, reg, UINT_MAX);
  148. else if (!ret)
  149. ret = regmap_write(map, reg, 0);
  150. }
  151. if (ret != 0)
  152. dev_err(d->map->dev, "Failed to ack 0x%x: %d\n",
  153. reg, ret);
  154. }
  155. }
  156. for (i = 0; i < d->chip->num_config_bases; i++) {
  157. for (j = 0; j < d->chip->num_config_regs; j++) {
  158. reg = d->get_irq_reg(d, d->chip->config_base[i], j);
  159. ret = regmap_write(map, reg, d->config_buf[i][j]);
  160. if (ret)
  161. dev_err(d->map->dev,
  162. "Failed to write config %x: %d\n",
  163. reg, ret);
  164. }
  165. }
  166. if (d->chip->runtime_pm)
  167. pm_runtime_put(map->dev);
  168. /* If we've changed our wakeup count propagate it to the parent */
  169. if (d->wake_count < 0)
  170. for (i = d->wake_count; i < 0; i++)
  171. disable_irq_wake(d->irq);
  172. else if (d->wake_count > 0)
  173. for (i = 0; i < d->wake_count; i++)
  174. enable_irq_wake(d->irq);
  175. d->wake_count = 0;
  176. mutex_unlock(&d->lock);
  177. }
  178. static void regmap_irq_enable(struct irq_data *data)
  179. {
  180. struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
  181. struct regmap *map = d->map;
  182. const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
  183. unsigned int reg = irq_data->reg_offset / map->reg_stride;
  184. unsigned int mask;
  185. /*
  186. * The type_in_mask flag means that the underlying hardware uses
  187. * separate mask bits for each interrupt trigger type, but we want
  188. * to have a single logical interrupt with a configurable type.
  189. *
  190. * If the interrupt we're enabling defines any supported types
  191. * then instead of using the regular mask bits for this interrupt,
  192. * use the value previously written to the type buffer at the
  193. * corresponding offset in regmap_irq_set_type().
  194. */
  195. if (d->chip->type_in_mask && irq_data->type.types_supported)
  196. mask = d->type_buf[reg] & irq_data->mask;
  197. else
  198. mask = irq_data->mask;
  199. if (d->chip->clear_on_unmask)
  200. d->clear_status = true;
  201. d->mask_buf[reg] &= ~mask;
  202. }
  203. static void regmap_irq_disable(struct irq_data *data)
  204. {
  205. struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
  206. struct regmap *map = d->map;
  207. const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
  208. d->mask_buf[irq_data->reg_offset / map->reg_stride] |= irq_data->mask;
  209. }
  210. static int regmap_irq_set_type(struct irq_data *data, unsigned int type)
  211. {
  212. struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
  213. struct regmap *map = d->map;
  214. const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
  215. int reg, ret;
  216. const struct regmap_irq_type *t = &irq_data->type;
  217. if ((t->types_supported & type) != type)
  218. return 0;
  219. reg = t->type_reg_offset / map->reg_stride;
  220. if (d->chip->type_in_mask) {
  221. ret = regmap_irq_set_type_config_simple(&d->type_buf, type,
  222. irq_data, reg, d->chip->irq_drv_data);
  223. if (ret)
  224. return ret;
  225. }
  226. if (d->chip->set_type_config) {
  227. ret = d->chip->set_type_config(d->config_buf, type, irq_data,
  228. reg, d->chip->irq_drv_data);
  229. if (ret)
  230. return ret;
  231. }
  232. return 0;
  233. }
  234. static int regmap_irq_set_wake(struct irq_data *data, unsigned int on)
  235. {
  236. struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
  237. struct regmap *map = d->map;
  238. const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);
  239. if (on) {
  240. if (d->wake_buf)
  241. d->wake_buf[irq_data->reg_offset / map->reg_stride]
  242. &= ~irq_data->mask;
  243. d->wake_count++;
  244. } else {
  245. if (d->wake_buf)
  246. d->wake_buf[irq_data->reg_offset / map->reg_stride]
  247. |= irq_data->mask;
  248. d->wake_count--;
  249. }
  250. return 0;
  251. }
  252. static const struct irq_chip regmap_irq_chip = {
  253. .irq_bus_lock = regmap_irq_lock,
  254. .irq_bus_sync_unlock = regmap_irq_sync_unlock,
  255. .irq_disable = regmap_irq_disable,
  256. .irq_enable = regmap_irq_enable,
  257. .irq_set_type = regmap_irq_set_type,
  258. .irq_set_wake = regmap_irq_set_wake,
  259. };
  260. static inline int read_sub_irq_data(struct regmap_irq_chip_data *data,
  261. unsigned int b)
  262. {
  263. const struct regmap_irq_chip *chip = data->chip;
  264. const struct regmap_irq_sub_irq_map *subreg;
  265. struct regmap *map = data->map;
  266. unsigned int reg;
  267. int i, ret = 0;
  268. if (!chip->sub_reg_offsets) {
  269. reg = data->get_irq_reg(data, chip->status_base, b);
  270. ret = regmap_read(map, reg, &data->status_buf[b]);
  271. } else {
  272. /*
  273. * Note we can't use ->get_irq_reg() here because the offsets
  274. * in 'subreg' are *not* interchangeable with indices.
  275. */
  276. subreg = &chip->sub_reg_offsets[b];
  277. for (i = 0; i < subreg->num_regs; i++) {
  278. unsigned int offset = subreg->offset[i];
  279. unsigned int index = offset / map->reg_stride;
  280. ret = regmap_read(map, chip->status_base + offset,
  281. &data->status_buf[index]);
  282. if (ret)
  283. break;
  284. }
  285. }
  286. return ret;
  287. }
  288. static int read_irq_data(struct regmap_irq_chip_data *data)
  289. {
  290. const struct regmap_irq_chip *chip = data->chip;
  291. struct regmap *map = data->map;
  292. int ret, i;
  293. u32 reg;
  294. /*
  295. * Read only registers with active IRQs if the chip has 'main status
  296. * register'. Else read in the statuses, using a single bulk read if
  297. * possible in order to reduce the I/O overheads.
  298. */
  299. if (chip->no_status) {
  300. /* no status register so default to all active */
  301. memset32(data->status_buf, GENMASK(31, 0), chip->num_regs);
  302. } else if (chip->num_main_regs) {
  303. unsigned int max_main_bits;
  304. max_main_bits = (chip->num_main_status_bits) ?
  305. chip->num_main_status_bits : chip->num_regs;
  306. /* Clear the status buf as we don't read all status regs */
  307. memset32(data->status_buf, 0, chip->num_regs);
  308. /* We could support bulk read for main status registers
  309. * but I don't expect to see devices with really many main
  310. * status registers so let's only support single reads for the
  311. * sake of simplicity. and add bulk reads only if needed
  312. */
  313. for (i = 0; i < chip->num_main_regs; i++) {
  314. reg = data->get_irq_reg(data, chip->main_status, i);
  315. ret = regmap_read(map, reg, &data->main_status_buf[i]);
  316. if (ret) {
  317. dev_err(map->dev, "Failed to read IRQ status %d\n", ret);
  318. return ret;
  319. }
  320. }
  321. /* Read sub registers with active IRQs */
  322. for (i = 0; i < chip->num_main_regs; i++) {
  323. unsigned int b;
  324. const unsigned long mreg = data->main_status_buf[i];
  325. for_each_set_bit(b, &mreg, map->format.val_bytes * 8) {
  326. if (i * map->format.val_bytes * 8 + b >
  327. max_main_bits)
  328. break;
  329. ret = read_sub_irq_data(data, b);
  330. if (ret != 0) {
  331. dev_err(map->dev, "Failed to read IRQ status %d\n", ret);
  332. return ret;
  333. }
  334. }
  335. }
  336. } else if (regmap_irq_can_bulk_read_status(data)) {
  337. u8 *buf8 = data->status_reg_buf;
  338. u16 *buf16 = data->status_reg_buf;
  339. u32 *buf32 = data->status_reg_buf;
  340. BUG_ON(!data->status_reg_buf);
  341. ret = regmap_bulk_read(map, chip->status_base,
  342. data->status_reg_buf,
  343. chip->num_regs);
  344. if (ret != 0) {
  345. dev_err(map->dev, "Failed to read IRQ status: %d\n", ret);
  346. return ret;
  347. }
  348. for (i = 0; i < data->chip->num_regs; i++) {
  349. switch (map->format.val_bytes) {
  350. case 1:
  351. data->status_buf[i] = buf8[i];
  352. break;
  353. case 2:
  354. data->status_buf[i] = buf16[i];
  355. break;
  356. case 4:
  357. data->status_buf[i] = buf32[i];
  358. break;
  359. default:
  360. BUG();
  361. return -EIO;
  362. }
  363. }
  364. } else {
  365. for (i = 0; i < data->chip->num_regs; i++) {
  366. unsigned int reg = data->get_irq_reg(data,
  367. data->chip->status_base, i);
  368. ret = regmap_read(map, reg, &data->status_buf[i]);
  369. if (ret != 0) {
  370. dev_err(map->dev, "Failed to read IRQ status: %d\n", ret);
  371. return ret;
  372. }
  373. }
  374. }
  375. if (chip->status_invert)
  376. for (i = 0; i < data->chip->num_regs; i++)
  377. data->status_buf[i] = ~data->status_buf[i];
  378. return 0;
  379. }
  380. static irqreturn_t regmap_irq_thread(int irq, void *d)
  381. {
  382. struct regmap_irq_chip_data *data = d;
  383. const struct regmap_irq_chip *chip = data->chip;
  384. struct regmap *map = data->map;
  385. int ret, i;
  386. bool handled = false;
  387. u32 reg;
  388. if (chip->handle_pre_irq)
  389. chip->handle_pre_irq(chip->irq_drv_data);
  390. if (chip->runtime_pm) {
  391. ret = pm_runtime_get_sync(map->dev);
  392. if (ret < 0) {
  393. dev_err(map->dev, "IRQ thread failed to resume: %d\n", ret);
  394. goto exit;
  395. }
  396. }
  397. ret = read_irq_data(data);
  398. if (ret < 0)
  399. goto exit;
  400. if (chip->status_is_level) {
  401. for (i = 0; i < data->chip->num_regs; i++) {
  402. unsigned int val = data->status_buf[i];
  403. data->status_buf[i] ^= data->prev_status_buf[i];
  404. data->prev_status_buf[i] = val;
  405. }
  406. }
  407. /*
  408. * Ignore masked IRQs and ack if we need to; we ack early so
  409. * there is no race between handling and acknowledging the
  410. * interrupt. We assume that typically few of the interrupts
  411. * will fire simultaneously so don't worry about overhead from
  412. * doing a write per register.
  413. */
  414. for (i = 0; i < data->chip->num_regs; i++) {
  415. data->status_buf[i] &= ~data->mask_buf[i];
  416. if (data->status_buf[i] && (chip->ack_base || chip->use_ack)) {
  417. reg = data->get_irq_reg(data, data->chip->ack_base, i);
  418. if (chip->ack_invert)
  419. ret = regmap_write(map, reg,
  420. ~data->status_buf[i]);
  421. else
  422. ret = regmap_write(map, reg,
  423. data->status_buf[i]);
  424. if (chip->clear_ack) {
  425. if (chip->ack_invert && !ret)
  426. ret = regmap_write(map, reg, UINT_MAX);
  427. else if (!ret)
  428. ret = regmap_write(map, reg, 0);
  429. }
  430. if (ret != 0)
  431. dev_err(map->dev, "Failed to ack 0x%x: %d\n",
  432. reg, ret);
  433. }
  434. }
  435. for (i = 0; i < chip->num_irqs; i++) {
  436. if (data->status_buf[chip->irqs[i].reg_offset /
  437. map->reg_stride] & chip->irqs[i].mask) {
  438. handle_nested_irq(irq_find_mapping(data->domain, i));
  439. handled = true;
  440. }
  441. }
  442. exit:
  443. if (chip->handle_post_irq)
  444. chip->handle_post_irq(chip->irq_drv_data);
  445. if (chip->runtime_pm)
  446. pm_runtime_put(map->dev);
  447. if (handled)
  448. return IRQ_HANDLED;
  449. else
  450. return IRQ_NONE;
  451. }
  452. static struct lock_class_key regmap_irq_lock_class;
  453. static struct lock_class_key regmap_irq_request_class;
  454. static int regmap_irq_map(struct irq_domain *h, unsigned int virq,
  455. irq_hw_number_t hw)
  456. {
  457. struct regmap_irq_chip_data *data = h->host_data;
  458. irq_set_chip_data(virq, data);
  459. irq_set_lockdep_class(virq, &regmap_irq_lock_class, &regmap_irq_request_class);
  460. irq_set_chip(virq, &data->irq_chip);
  461. irq_set_nested_thread(virq, 1);
  462. irq_set_parent(virq, data->irq);
  463. irq_set_noprobe(virq);
  464. return 0;
  465. }
  466. static const struct irq_domain_ops regmap_domain_ops = {
  467. .map = regmap_irq_map,
  468. .xlate = irq_domain_xlate_onetwocell,
  469. };
  470. /**
  471. * regmap_irq_get_irq_reg_linear() - Linear IRQ register mapping callback.
  472. * @data: Data for the &struct regmap_irq_chip
  473. * @base: Base register
  474. * @index: Register index
  475. *
  476. * Returns the register address corresponding to the given @base and @index
  477. * by the formula ``base + index * regmap_stride * irq_reg_stride``.
  478. */
  479. unsigned int regmap_irq_get_irq_reg_linear(struct regmap_irq_chip_data *data,
  480. unsigned int base, int index)
  481. {
  482. struct regmap *map = data->map;
  483. return base + index * map->reg_stride * data->irq_reg_stride;
  484. }
  485. EXPORT_SYMBOL_GPL(regmap_irq_get_irq_reg_linear);
  486. /**
  487. * regmap_irq_set_type_config_simple() - Simple IRQ type configuration callback.
  488. * @buf: Buffer containing configuration register values, this is a 2D array of
  489. * `num_config_bases` rows, each of `num_config_regs` elements.
  490. * @type: The requested IRQ type.
  491. * @irq_data: The IRQ being configured.
  492. * @idx: Index of the irq's config registers within each array `buf[i]`
  493. * @irq_drv_data: Driver specific IRQ data
  494. *
  495. * This is a &struct regmap_irq_chip->set_type_config callback suitable for
  496. * chips with one config register. Register values are updated according to
  497. * the &struct regmap_irq_type data associated with an IRQ.
  498. */
  499. int regmap_irq_set_type_config_simple(unsigned int **buf, unsigned int type,
  500. const struct regmap_irq *irq_data,
  501. int idx, void *irq_drv_data)
  502. {
  503. const struct regmap_irq_type *t = &irq_data->type;
  504. if (t->type_reg_mask)
  505. buf[0][idx] &= ~t->type_reg_mask;
  506. else
  507. buf[0][idx] &= ~(t->type_falling_val |
  508. t->type_rising_val |
  509. t->type_level_low_val |
  510. t->type_level_high_val);
  511. switch (type) {
  512. case IRQ_TYPE_EDGE_FALLING:
  513. buf[0][idx] |= t->type_falling_val;
  514. break;
  515. case IRQ_TYPE_EDGE_RISING:
  516. buf[0][idx] |= t->type_rising_val;
  517. break;
  518. case IRQ_TYPE_EDGE_BOTH:
  519. buf[0][idx] |= (t->type_falling_val |
  520. t->type_rising_val);
  521. break;
  522. case IRQ_TYPE_LEVEL_HIGH:
  523. buf[0][idx] |= t->type_level_high_val;
  524. break;
  525. case IRQ_TYPE_LEVEL_LOW:
  526. buf[0][idx] |= t->type_level_low_val;
  527. break;
  528. default:
  529. return -EINVAL;
  530. }
  531. return 0;
  532. }
  533. EXPORT_SYMBOL_GPL(regmap_irq_set_type_config_simple);
  534. static int regmap_irq_create_domain(struct fwnode_handle *fwnode, int irq_base,
  535. const struct regmap_irq_chip *chip,
  536. struct regmap_irq_chip_data *d)
  537. {
  538. struct irq_domain_info info = {
  539. .fwnode = fwnode,
  540. .size = chip->num_irqs,
  541. .hwirq_max = chip->num_irqs,
  542. .virq_base = irq_base,
  543. .ops = &regmap_domain_ops,
  544. .host_data = d,
  545. .name_suffix = chip->domain_suffix,
  546. };
  547. d->domain = irq_domain_instantiate(&info);
  548. if (IS_ERR(d->domain)) {
  549. dev_err(d->map->dev, "Failed to create IRQ domain\n");
  550. return PTR_ERR(d->domain);
  551. }
  552. return 0;
  553. }
  554. /**
  555. * regmap_add_irq_chip_fwnode() - Use standard regmap IRQ controller handling
  556. *
  557. * @fwnode: The firmware node where the IRQ domain should be added to.
  558. * @map: The regmap for the device.
  559. * @irq: The IRQ the device uses to signal interrupts.
  560. * @irq_flags: The IRQF_ flags to use for the primary interrupt.
  561. * @irq_base: Allocate at specific IRQ number if irq_base > 0.
  562. * @chip: Configuration for the interrupt controller.
  563. * @data: Runtime data structure for the controller, allocated on success.
  564. *
  565. * Returns 0 on success or an errno on failure.
  566. *
  567. * In order for this to be efficient the chip really should use a
  568. * register cache. The chip driver is responsible for restoring the
  569. * register values used by the IRQ controller over suspend and resume.
  570. */
  571. int regmap_add_irq_chip_fwnode(struct fwnode_handle *fwnode,
  572. struct regmap *map, int irq,
  573. int irq_flags, int irq_base,
  574. const struct regmap_irq_chip *chip,
  575. struct regmap_irq_chip_data **data)
  576. {
  577. struct regmap_irq_chip_data *d;
  578. int i;
  579. int ret = -ENOMEM;
  580. u32 reg;
  581. if (chip->num_regs <= 0)
  582. return -EINVAL;
  583. if (chip->clear_on_unmask && (chip->ack_base || chip->use_ack))
  584. return -EINVAL;
  585. if (chip->mask_base && chip->unmask_base && !chip->mask_unmask_non_inverted)
  586. return -EINVAL;
  587. for (i = 0; i < chip->num_irqs; i++) {
  588. if (chip->irqs[i].reg_offset % map->reg_stride)
  589. return -EINVAL;
  590. if (chip->irqs[i].reg_offset / map->reg_stride >=
  591. chip->num_regs)
  592. return -EINVAL;
  593. }
  594. if (irq_base) {
  595. irq_base = irq_alloc_descs(irq_base, 0, chip->num_irqs, 0);
  596. if (irq_base < 0) {
  597. dev_warn(map->dev, "Failed to allocate IRQs: %d\n",
  598. irq_base);
  599. return irq_base;
  600. }
  601. }
  602. d = kzalloc_obj(*d);
  603. if (!d)
  604. return -ENOMEM;
  605. if (chip->num_main_regs) {
  606. d->main_status_buf = kcalloc(chip->num_main_regs,
  607. sizeof(*d->main_status_buf),
  608. GFP_KERNEL);
  609. if (!d->main_status_buf)
  610. goto err_alloc;
  611. }
  612. d->status_buf = kcalloc(chip->num_regs, sizeof(*d->status_buf),
  613. GFP_KERNEL);
  614. if (!d->status_buf)
  615. goto err_alloc;
  616. if (chip->status_is_level) {
  617. d->prev_status_buf = kcalloc(chip->num_regs, sizeof(*d->prev_status_buf),
  618. GFP_KERNEL);
  619. if (!d->prev_status_buf)
  620. goto err_alloc;
  621. }
  622. d->mask_buf = kcalloc(chip->num_regs, sizeof(*d->mask_buf),
  623. GFP_KERNEL);
  624. if (!d->mask_buf)
  625. goto err_alloc;
  626. d->mask_buf_def = kcalloc(chip->num_regs, sizeof(*d->mask_buf_def),
  627. GFP_KERNEL);
  628. if (!d->mask_buf_def)
  629. goto err_alloc;
  630. if (chip->wake_base) {
  631. d->wake_buf = kcalloc(chip->num_regs, sizeof(*d->wake_buf),
  632. GFP_KERNEL);
  633. if (!d->wake_buf)
  634. goto err_alloc;
  635. }
  636. if (chip->type_in_mask) {
  637. d->type_buf_def = kcalloc(chip->num_regs,
  638. sizeof(*d->type_buf_def), GFP_KERNEL);
  639. if (!d->type_buf_def)
  640. goto err_alloc;
  641. d->type_buf = kcalloc(chip->num_regs, sizeof(*d->type_buf), GFP_KERNEL);
  642. if (!d->type_buf)
  643. goto err_alloc;
  644. }
  645. if (chip->num_config_bases && chip->num_config_regs) {
  646. /*
  647. * Create config_buf[num_config_bases][num_config_regs]
  648. */
  649. d->config_buf = kcalloc(chip->num_config_bases,
  650. sizeof(*d->config_buf), GFP_KERNEL);
  651. if (!d->config_buf)
  652. goto err_alloc;
  653. for (i = 0; i < chip->num_config_bases; i++) {
  654. d->config_buf[i] = kcalloc(chip->num_config_regs,
  655. sizeof(**d->config_buf),
  656. GFP_KERNEL);
  657. if (!d->config_buf[i])
  658. goto err_alloc;
  659. }
  660. }
  661. d->irq_chip = regmap_irq_chip;
  662. d->irq_chip.name = chip->name;
  663. d->irq = irq;
  664. d->map = map;
  665. d->chip = chip;
  666. d->irq_base = irq_base;
  667. if (chip->irq_reg_stride)
  668. d->irq_reg_stride = chip->irq_reg_stride;
  669. else
  670. d->irq_reg_stride = 1;
  671. if (chip->get_irq_reg)
  672. d->get_irq_reg = chip->get_irq_reg;
  673. else
  674. d->get_irq_reg = regmap_irq_get_irq_reg_linear;
  675. if (regmap_irq_can_bulk_read_status(d)) {
  676. d->status_reg_buf = kmalloc_array(chip->num_regs,
  677. map->format.val_bytes,
  678. GFP_KERNEL);
  679. if (!d->status_reg_buf)
  680. goto err_alloc;
  681. }
  682. /*
  683. * If one regmap-irq is the parent of another then we'll try
  684. * to lock the child with the parent locked, use an explicit
  685. * lock_key so lockdep can figure out what's going on.
  686. */
  687. lockdep_register_key(&d->lock_key);
  688. mutex_init_with_key(&d->lock, &d->lock_key);
  689. for (i = 0; i < chip->num_irqs; i++)
  690. d->mask_buf_def[chip->irqs[i].reg_offset / map->reg_stride]
  691. |= chip->irqs[i].mask;
  692. /* Mask all the interrupts by default */
  693. for (i = 0; i < chip->num_regs; i++) {
  694. d->mask_buf[i] = d->mask_buf_def[i];
  695. if (chip->handle_mask_sync) {
  696. ret = chip->handle_mask_sync(i, d->mask_buf_def[i],
  697. d->mask_buf[i],
  698. chip->irq_drv_data);
  699. if (ret)
  700. goto err_mutex;
  701. }
  702. if (chip->mask_base && !chip->handle_mask_sync) {
  703. reg = d->get_irq_reg(d, chip->mask_base, i);
  704. ret = regmap_update_bits(d->map, reg,
  705. d->mask_buf_def[i],
  706. d->mask_buf[i]);
  707. if (ret) {
  708. dev_err(map->dev, "Failed to set masks in 0x%x: %d\n",
  709. reg, ret);
  710. goto err_mutex;
  711. }
  712. }
  713. if (chip->unmask_base && !chip->handle_mask_sync) {
  714. reg = d->get_irq_reg(d, chip->unmask_base, i);
  715. ret = regmap_update_bits(d->map, reg,
  716. d->mask_buf_def[i], ~d->mask_buf[i]);
  717. if (ret) {
  718. dev_err(map->dev, "Failed to set masks in 0x%x: %d\n",
  719. reg, ret);
  720. goto err_mutex;
  721. }
  722. }
  723. if (!chip->init_ack_masked)
  724. continue;
  725. /* Ack masked but set interrupts */
  726. if (d->chip->no_status) {
  727. /* no status register so default to all active */
  728. d->status_buf[i] = UINT_MAX;
  729. } else {
  730. reg = d->get_irq_reg(d, d->chip->status_base, i);
  731. ret = regmap_read(map, reg, &d->status_buf[i]);
  732. if (ret != 0) {
  733. dev_err(map->dev, "Failed to read IRQ status: %d\n",
  734. ret);
  735. goto err_mutex;
  736. }
  737. }
  738. if (chip->status_invert)
  739. d->status_buf[i] = ~d->status_buf[i];
  740. if (d->status_buf[i] && (chip->ack_base || chip->use_ack)) {
  741. reg = d->get_irq_reg(d, d->chip->ack_base, i);
  742. if (chip->ack_invert)
  743. ret = regmap_write(map, reg,
  744. ~(d->status_buf[i] & d->mask_buf[i]));
  745. else
  746. ret = regmap_write(map, reg,
  747. d->status_buf[i] & d->mask_buf[i]);
  748. if (chip->clear_ack) {
  749. if (chip->ack_invert && !ret)
  750. ret = regmap_write(map, reg, UINT_MAX);
  751. else if (!ret)
  752. ret = regmap_write(map, reg, 0);
  753. }
  754. if (ret != 0) {
  755. dev_err(map->dev, "Failed to ack 0x%x: %d\n",
  756. reg, ret);
  757. goto err_mutex;
  758. }
  759. }
  760. }
  761. /* Wake is disabled by default */
  762. if (d->wake_buf) {
  763. for (i = 0; i < chip->num_regs; i++) {
  764. d->wake_buf[i] = d->mask_buf_def[i];
  765. reg = d->get_irq_reg(d, d->chip->wake_base, i);
  766. if (chip->wake_invert)
  767. ret = regmap_update_bits(d->map, reg,
  768. d->mask_buf_def[i],
  769. 0);
  770. else
  771. ret = regmap_update_bits(d->map, reg,
  772. d->mask_buf_def[i],
  773. d->wake_buf[i]);
  774. if (ret != 0) {
  775. dev_err(map->dev, "Failed to set masks in 0x%x: %d\n",
  776. reg, ret);
  777. goto err_mutex;
  778. }
  779. }
  780. }
  781. /* Store current levels */
  782. if (chip->status_is_level) {
  783. ret = read_irq_data(d);
  784. if (ret < 0)
  785. goto err_mutex;
  786. memcpy(d->prev_status_buf, d->status_buf,
  787. array_size(d->chip->num_regs, sizeof(d->prev_status_buf[0])));
  788. }
  789. ret = regmap_irq_create_domain(fwnode, irq_base, chip, d);
  790. if (ret)
  791. goto err_mutex;
  792. ret = request_threaded_irq(irq, NULL, regmap_irq_thread,
  793. irq_flags | IRQF_ONESHOT,
  794. chip->name, d);
  795. if (ret != 0) {
  796. dev_err(map->dev, "Failed to request IRQ %d for %s: %d\n",
  797. irq, chip->name, ret);
  798. goto err_domain;
  799. }
  800. *data = d;
  801. return 0;
  802. err_domain:
  803. /* Should really dispose of the domain but... */
  804. err_mutex:
  805. mutex_destroy(&d->lock);
  806. lockdep_unregister_key(&d->lock_key);
  807. err_alloc:
  808. kfree(d->type_buf);
  809. kfree(d->type_buf_def);
  810. kfree(d->wake_buf);
  811. kfree(d->mask_buf_def);
  812. kfree(d->mask_buf);
  813. kfree(d->main_status_buf);
  814. kfree(d->status_buf);
  815. kfree(d->prev_status_buf);
  816. kfree(d->status_reg_buf);
  817. if (d->config_buf) {
  818. for (i = 0; i < chip->num_config_bases; i++)
  819. kfree(d->config_buf[i]);
  820. kfree(d->config_buf);
  821. }
  822. kfree(d);
  823. return ret;
  824. }
  825. EXPORT_SYMBOL_GPL(regmap_add_irq_chip_fwnode);
  826. /**
  827. * regmap_add_irq_chip() - Use standard regmap IRQ controller handling
  828. *
  829. * @map: The regmap for the device.
  830. * @irq: The IRQ the device uses to signal interrupts.
  831. * @irq_flags: The IRQF_ flags to use for the primary interrupt.
  832. * @irq_base: Allocate at specific IRQ number if irq_base > 0.
  833. * @chip: Configuration for the interrupt controller.
  834. * @data: Runtime data structure for the controller, allocated on success.
  835. *
  836. * Returns 0 on success or an errno on failure.
  837. *
  838. * This is the same as regmap_add_irq_chip_fwnode, except that the firmware
  839. * node of the regmap is used.
  840. */
  841. int regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags,
  842. int irq_base, const struct regmap_irq_chip *chip,
  843. struct regmap_irq_chip_data **data)
  844. {
  845. return regmap_add_irq_chip_fwnode(dev_fwnode(map->dev), map, irq,
  846. irq_flags, irq_base, chip, data);
  847. }
  848. EXPORT_SYMBOL_GPL(regmap_add_irq_chip);
  849. /**
  850. * regmap_del_irq_chip() - Stop interrupt handling for a regmap IRQ chip
  851. *
  852. * @irq: Primary IRQ for the device
  853. * @d: &regmap_irq_chip_data allocated by regmap_add_irq_chip()
  854. *
  855. * This function also disposes of all mapped IRQs on the chip.
  856. */
  857. void regmap_del_irq_chip(int irq, struct regmap_irq_chip_data *d)
  858. {
  859. unsigned int virq;
  860. int i, hwirq;
  861. if (!d)
  862. return;
  863. free_irq(irq, d);
  864. /* Dispose all virtual irq from irq domain before removing it */
  865. for (hwirq = 0; hwirq < d->chip->num_irqs; hwirq++) {
  866. /* Ignore hwirq if holes in the IRQ list */
  867. if (!d->chip->irqs[hwirq].mask)
  868. continue;
  869. /*
  870. * Find the virtual irq of hwirq on chip and if it is
  871. * there then dispose it
  872. */
  873. virq = irq_find_mapping(d->domain, hwirq);
  874. if (virq)
  875. irq_dispose_mapping(virq);
  876. }
  877. irq_domain_remove(d->domain);
  878. kfree(d->type_buf);
  879. kfree(d->type_buf_def);
  880. kfree(d->wake_buf);
  881. kfree(d->mask_buf_def);
  882. kfree(d->mask_buf);
  883. kfree(d->main_status_buf);
  884. kfree(d->status_reg_buf);
  885. kfree(d->status_buf);
  886. kfree(d->prev_status_buf);
  887. if (d->config_buf) {
  888. for (i = 0; i < d->chip->num_config_bases; i++)
  889. kfree(d->config_buf[i]);
  890. kfree(d->config_buf);
  891. }
  892. mutex_destroy(&d->lock);
  893. lockdep_unregister_key(&d->lock_key);
  894. kfree(d);
  895. }
  896. EXPORT_SYMBOL_GPL(regmap_del_irq_chip);
  897. static void devm_regmap_irq_chip_release(struct device *dev, void *res)
  898. {
  899. struct regmap_irq_chip_data *d = *(struct regmap_irq_chip_data **)res;
  900. regmap_del_irq_chip(d->irq, d);
  901. }
  902. static int devm_regmap_irq_chip_match(struct device *dev, void *res, void *data)
  903. {
  904. struct regmap_irq_chip_data **r = res;
  905. if (!r || !*r) {
  906. WARN_ON(!r || !*r);
  907. return 0;
  908. }
  909. return *r == data;
  910. }
  911. /**
  912. * devm_regmap_add_irq_chip_fwnode() - Resource managed regmap_add_irq_chip_fwnode()
  913. *
  914. * @dev: The device pointer on which irq_chip belongs to.
  915. * @fwnode: The firmware node where the IRQ domain should be added to.
  916. * @map: The regmap for the device.
  917. * @irq: The IRQ the device uses to signal interrupts
  918. * @irq_flags: The IRQF_ flags to use for the primary interrupt.
  919. * @irq_base: Allocate at specific IRQ number if irq_base > 0.
  920. * @chip: Configuration for the interrupt controller.
  921. * @data: Runtime data structure for the controller, allocated on success
  922. *
  923. * Returns 0 on success or an errno on failure.
  924. *
  925. * The &regmap_irq_chip_data will be automatically released when the device is
  926. * unbound.
  927. */
  928. int devm_regmap_add_irq_chip_fwnode(struct device *dev,
  929. struct fwnode_handle *fwnode,
  930. struct regmap *map, int irq,
  931. int irq_flags, int irq_base,
  932. const struct regmap_irq_chip *chip,
  933. struct regmap_irq_chip_data **data)
  934. {
  935. struct regmap_irq_chip_data **ptr, *d;
  936. int ret;
  937. ptr = devres_alloc(devm_regmap_irq_chip_release, sizeof(*ptr),
  938. GFP_KERNEL);
  939. if (!ptr)
  940. return -ENOMEM;
  941. ret = regmap_add_irq_chip_fwnode(fwnode, map, irq, irq_flags, irq_base,
  942. chip, &d);
  943. if (ret < 0) {
  944. devres_free(ptr);
  945. return ret;
  946. }
  947. *ptr = d;
  948. devres_add(dev, ptr);
  949. *data = d;
  950. return 0;
  951. }
  952. EXPORT_SYMBOL_GPL(devm_regmap_add_irq_chip_fwnode);
  953. /**
  954. * devm_regmap_add_irq_chip() - Resource managed regmap_add_irq_chip()
  955. *
  956. * @dev: The device pointer on which irq_chip belongs to.
  957. * @map: The regmap for the device.
  958. * @irq: The IRQ the device uses to signal interrupts
  959. * @irq_flags: The IRQF_ flags to use for the primary interrupt.
  960. * @irq_base: Allocate at specific IRQ number if irq_base > 0.
  961. * @chip: Configuration for the interrupt controller.
  962. * @data: Runtime data structure for the controller, allocated on success
  963. *
  964. * Returns 0 on success or an errno on failure.
  965. *
  966. * The &regmap_irq_chip_data will be automatically released when the device is
  967. * unbound.
  968. */
  969. int devm_regmap_add_irq_chip(struct device *dev, struct regmap *map, int irq,
  970. int irq_flags, int irq_base,
  971. const struct regmap_irq_chip *chip,
  972. struct regmap_irq_chip_data **data)
  973. {
  974. return devm_regmap_add_irq_chip_fwnode(dev, dev_fwnode(map->dev), map,
  975. irq, irq_flags, irq_base, chip,
  976. data);
  977. }
  978. EXPORT_SYMBOL_GPL(devm_regmap_add_irq_chip);
  979. /**
  980. * devm_regmap_del_irq_chip() - Resource managed regmap_del_irq_chip()
  981. *
  982. * @dev: Device for which the resource was allocated.
  983. * @irq: Primary IRQ for the device.
  984. * @data: &regmap_irq_chip_data allocated by regmap_add_irq_chip().
  985. *
  986. * A resource managed version of regmap_del_irq_chip().
  987. */
  988. void devm_regmap_del_irq_chip(struct device *dev, int irq,
  989. struct regmap_irq_chip_data *data)
  990. {
  991. int rc;
  992. WARN_ON(irq != data->irq);
  993. rc = devres_release(dev, devm_regmap_irq_chip_release,
  994. devm_regmap_irq_chip_match, data);
  995. if (rc != 0)
  996. WARN_ON(rc);
  997. }
  998. EXPORT_SYMBOL_GPL(devm_regmap_del_irq_chip);
  999. /**
  1000. * regmap_irq_chip_get_base() - Retrieve interrupt base for a regmap IRQ chip
  1001. *
  1002. * @data: regmap irq controller to operate on.
  1003. *
  1004. * Useful for drivers to request their own IRQs.
  1005. */
  1006. int regmap_irq_chip_get_base(struct regmap_irq_chip_data *data)
  1007. {
  1008. WARN_ON(!data->irq_base);
  1009. return data->irq_base;
  1010. }
  1011. EXPORT_SYMBOL_GPL(regmap_irq_chip_get_base);
  1012. /**
  1013. * regmap_irq_get_virq() - Map an interrupt on a chip to a virtual IRQ
  1014. *
  1015. * @data: regmap irq controller to operate on.
  1016. * @irq: index of the interrupt requested in the chip IRQs.
  1017. *
  1018. * Useful for drivers to request their own IRQs.
  1019. */
  1020. int regmap_irq_get_virq(struct regmap_irq_chip_data *data, int irq)
  1021. {
  1022. /* Handle holes in the IRQ list */
  1023. if (!data->chip->irqs[irq].mask)
  1024. return -EINVAL;
  1025. return irq_create_mapping(data->domain, irq);
  1026. }
  1027. EXPORT_SYMBOL_GPL(regmap_irq_get_virq);
  1028. /**
  1029. * regmap_irq_get_domain() - Retrieve the irq_domain for the chip
  1030. *
  1031. * @data: regmap_irq controller to operate on.
  1032. *
  1033. * Useful for drivers to request their own IRQs and for integration
  1034. * with subsystems. For ease of integration NULL is accepted as a
  1035. * domain, allowing devices to just call this even if no domain is
  1036. * allocated.
  1037. */
  1038. struct irq_domain *regmap_irq_get_domain(struct regmap_irq_chip_data *data)
  1039. {
  1040. if (data)
  1041. return data->domain;
  1042. else
  1043. return NULL;
  1044. }
  1045. EXPORT_SYMBOL_GPL(regmap_irq_get_domain);