irq-madera.h 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Interrupt support for Cirrus Logic Madera codecs
  4. *
  5. * Copyright (C) 2016-2018 Cirrus Logic, Inc. and
  6. * Cirrus Logic International Semiconductor Ltd.
  7. */
  8. #ifndef IRQCHIP_MADERA_H
  9. #define IRQCHIP_MADERA_H
  10. #include <linux/interrupt.h>
  11. #include <linux/mfd/madera/core.h>
  12. #define MADERA_IRQ_FLL1_LOCK 0
  13. #define MADERA_IRQ_FLL2_LOCK 1
  14. #define MADERA_IRQ_FLL3_LOCK 2
  15. #define MADERA_IRQ_FLLAO_LOCK 3
  16. #define MADERA_IRQ_CLK_SYS_ERR 4
  17. #define MADERA_IRQ_CLK_ASYNC_ERR 5
  18. #define MADERA_IRQ_CLK_DSP_ERR 6
  19. #define MADERA_IRQ_HPDET 7
  20. #define MADERA_IRQ_MICDET1 8
  21. #define MADERA_IRQ_MICDET2 9
  22. #define MADERA_IRQ_JD1_RISE 10
  23. #define MADERA_IRQ_JD1_FALL 11
  24. #define MADERA_IRQ_JD2_RISE 12
  25. #define MADERA_IRQ_JD2_FALL 13
  26. #define MADERA_IRQ_MICD_CLAMP_RISE 14
  27. #define MADERA_IRQ_MICD_CLAMP_FALL 15
  28. #define MADERA_IRQ_DRC2_SIG_DET 16
  29. #define MADERA_IRQ_DRC1_SIG_DET 17
  30. #define MADERA_IRQ_ASRC1_IN1_LOCK 18
  31. #define MADERA_IRQ_ASRC1_IN2_LOCK 19
  32. #define MADERA_IRQ_ASRC2_IN1_LOCK 20
  33. #define MADERA_IRQ_ASRC2_IN2_LOCK 21
  34. #define MADERA_IRQ_DSP_IRQ1 22
  35. #define MADERA_IRQ_DSP_IRQ2 23
  36. #define MADERA_IRQ_DSP_IRQ3 24
  37. #define MADERA_IRQ_DSP_IRQ4 25
  38. #define MADERA_IRQ_DSP_IRQ5 26
  39. #define MADERA_IRQ_DSP_IRQ6 27
  40. #define MADERA_IRQ_DSP_IRQ7 28
  41. #define MADERA_IRQ_DSP_IRQ8 29
  42. #define MADERA_IRQ_DSP_IRQ9 30
  43. #define MADERA_IRQ_DSP_IRQ10 31
  44. #define MADERA_IRQ_DSP_IRQ11 32
  45. #define MADERA_IRQ_DSP_IRQ12 33
  46. #define MADERA_IRQ_DSP_IRQ13 34
  47. #define MADERA_IRQ_DSP_IRQ14 35
  48. #define MADERA_IRQ_DSP_IRQ15 36
  49. #define MADERA_IRQ_DSP_IRQ16 37
  50. #define MADERA_IRQ_HP1L_SC 38
  51. #define MADERA_IRQ_HP1R_SC 39
  52. #define MADERA_IRQ_HP2L_SC 40
  53. #define MADERA_IRQ_HP2R_SC 41
  54. #define MADERA_IRQ_HP3L_SC 42
  55. #define MADERA_IRQ_HP3R_SC 43
  56. #define MADERA_IRQ_SPKOUTL_SC 44
  57. #define MADERA_IRQ_SPKOUTR_SC 45
  58. #define MADERA_IRQ_HP1L_ENABLE_DONE 46
  59. #define MADERA_IRQ_HP1R_ENABLE_DONE 47
  60. #define MADERA_IRQ_HP2L_ENABLE_DONE 48
  61. #define MADERA_IRQ_HP2R_ENABLE_DONE 49
  62. #define MADERA_IRQ_HP3L_ENABLE_DONE 50
  63. #define MADERA_IRQ_HP3R_ENABLE_DONE 51
  64. #define MADERA_IRQ_SPKOUTL_ENABLE_DONE 52
  65. #define MADERA_IRQ_SPKOUTR_ENABLE_DONE 53
  66. #define MADERA_IRQ_SPK_SHUTDOWN 54
  67. #define MADERA_IRQ_SPK_OVERHEAT 55
  68. #define MADERA_IRQ_SPK_OVERHEAT_WARN 56
  69. #define MADERA_IRQ_GPIO1 57
  70. #define MADERA_IRQ_GPIO2 58
  71. #define MADERA_IRQ_GPIO3 59
  72. #define MADERA_IRQ_GPIO4 60
  73. #define MADERA_IRQ_GPIO5 61
  74. #define MADERA_IRQ_GPIO6 62
  75. #define MADERA_IRQ_GPIO7 63
  76. #define MADERA_IRQ_GPIO8 64
  77. #define MADERA_IRQ_DSP1_BUS_ERR 65
  78. #define MADERA_IRQ_DSP2_BUS_ERR 66
  79. #define MADERA_IRQ_DSP3_BUS_ERR 67
  80. #define MADERA_IRQ_DSP4_BUS_ERR 68
  81. #define MADERA_IRQ_DSP5_BUS_ERR 69
  82. #define MADERA_IRQ_DSP6_BUS_ERR 70
  83. #define MADERA_IRQ_DSP7_BUS_ERR 71
  84. #define MADERA_NUM_IRQ 72
  85. /*
  86. * These wrapper functions are for use by other child drivers of the
  87. * same parent MFD.
  88. */
  89. static inline int madera_get_irq_mapping(struct madera *madera, int irq)
  90. {
  91. if (!madera->irq_dev)
  92. return -ENODEV;
  93. return regmap_irq_get_virq(madera->irq_data, irq);
  94. }
  95. static inline int madera_request_irq(struct madera *madera, int irq,
  96. const char *name,
  97. irq_handler_t handler, void *data)
  98. {
  99. irq = madera_get_irq_mapping(madera, irq);
  100. if (irq < 0)
  101. return irq;
  102. return request_threaded_irq(irq, NULL, handler, IRQF_ONESHOT, name,
  103. data);
  104. }
  105. static inline void madera_free_irq(struct madera *madera, int irq, void *data)
  106. {
  107. irq = madera_get_irq_mapping(madera, irq);
  108. if (irq < 0)
  109. return;
  110. free_irq(irq, data);
  111. }
  112. static inline int madera_set_irq_wake(struct madera *madera, int irq, int on)
  113. {
  114. irq = madera_get_irq_mapping(madera, irq);
  115. if (irq < 0)
  116. return irq;
  117. return irq_set_irq_wake(irq, on);
  118. }
  119. #endif