0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef IRQCHIP_MADERA_H
0010 #define IRQCHIP_MADERA_H
0011
0012 #include <linux/interrupt.h>
0013 #include <linux/mfd/madera/core.h>
0014
0015 #define MADERA_IRQ_FLL1_LOCK 0
0016 #define MADERA_IRQ_FLL2_LOCK 1
0017 #define MADERA_IRQ_FLL3_LOCK 2
0018 #define MADERA_IRQ_FLLAO_LOCK 3
0019 #define MADERA_IRQ_CLK_SYS_ERR 4
0020 #define MADERA_IRQ_CLK_ASYNC_ERR 5
0021 #define MADERA_IRQ_CLK_DSP_ERR 6
0022 #define MADERA_IRQ_HPDET 7
0023 #define MADERA_IRQ_MICDET1 8
0024 #define MADERA_IRQ_MICDET2 9
0025 #define MADERA_IRQ_JD1_RISE 10
0026 #define MADERA_IRQ_JD1_FALL 11
0027 #define MADERA_IRQ_JD2_RISE 12
0028 #define MADERA_IRQ_JD2_FALL 13
0029 #define MADERA_IRQ_MICD_CLAMP_RISE 14
0030 #define MADERA_IRQ_MICD_CLAMP_FALL 15
0031 #define MADERA_IRQ_DRC2_SIG_DET 16
0032 #define MADERA_IRQ_DRC1_SIG_DET 17
0033 #define MADERA_IRQ_ASRC1_IN1_LOCK 18
0034 #define MADERA_IRQ_ASRC1_IN2_LOCK 19
0035 #define MADERA_IRQ_ASRC2_IN1_LOCK 20
0036 #define MADERA_IRQ_ASRC2_IN2_LOCK 21
0037 #define MADERA_IRQ_DSP_IRQ1 22
0038 #define MADERA_IRQ_DSP_IRQ2 23
0039 #define MADERA_IRQ_DSP_IRQ3 24
0040 #define MADERA_IRQ_DSP_IRQ4 25
0041 #define MADERA_IRQ_DSP_IRQ5 26
0042 #define MADERA_IRQ_DSP_IRQ6 27
0043 #define MADERA_IRQ_DSP_IRQ7 28
0044 #define MADERA_IRQ_DSP_IRQ8 29
0045 #define MADERA_IRQ_DSP_IRQ9 30
0046 #define MADERA_IRQ_DSP_IRQ10 31
0047 #define MADERA_IRQ_DSP_IRQ11 32
0048 #define MADERA_IRQ_DSP_IRQ12 33
0049 #define MADERA_IRQ_DSP_IRQ13 34
0050 #define MADERA_IRQ_DSP_IRQ14 35
0051 #define MADERA_IRQ_DSP_IRQ15 36
0052 #define MADERA_IRQ_DSP_IRQ16 37
0053 #define MADERA_IRQ_HP1L_SC 38
0054 #define MADERA_IRQ_HP1R_SC 39
0055 #define MADERA_IRQ_HP2L_SC 40
0056 #define MADERA_IRQ_HP2R_SC 41
0057 #define MADERA_IRQ_HP3L_SC 42
0058 #define MADERA_IRQ_HP3R_SC 43
0059 #define MADERA_IRQ_SPKOUTL_SC 44
0060 #define MADERA_IRQ_SPKOUTR_SC 45
0061 #define MADERA_IRQ_HP1L_ENABLE_DONE 46
0062 #define MADERA_IRQ_HP1R_ENABLE_DONE 47
0063 #define MADERA_IRQ_HP2L_ENABLE_DONE 48
0064 #define MADERA_IRQ_HP2R_ENABLE_DONE 49
0065 #define MADERA_IRQ_HP3L_ENABLE_DONE 50
0066 #define MADERA_IRQ_HP3R_ENABLE_DONE 51
0067 #define MADERA_IRQ_SPKOUTL_ENABLE_DONE 52
0068 #define MADERA_IRQ_SPKOUTR_ENABLE_DONE 53
0069 #define MADERA_IRQ_SPK_SHUTDOWN 54
0070 #define MADERA_IRQ_SPK_OVERHEAT 55
0071 #define MADERA_IRQ_SPK_OVERHEAT_WARN 56
0072 #define MADERA_IRQ_GPIO1 57
0073 #define MADERA_IRQ_GPIO2 58
0074 #define MADERA_IRQ_GPIO3 59
0075 #define MADERA_IRQ_GPIO4 60
0076 #define MADERA_IRQ_GPIO5 61
0077 #define MADERA_IRQ_GPIO6 62
0078 #define MADERA_IRQ_GPIO7 63
0079 #define MADERA_IRQ_GPIO8 64
0080 #define MADERA_IRQ_DSP1_BUS_ERR 65
0081 #define MADERA_IRQ_DSP2_BUS_ERR 66
0082 #define MADERA_IRQ_DSP3_BUS_ERR 67
0083 #define MADERA_IRQ_DSP4_BUS_ERR 68
0084 #define MADERA_IRQ_DSP5_BUS_ERR 69
0085 #define MADERA_IRQ_DSP6_BUS_ERR 70
0086 #define MADERA_IRQ_DSP7_BUS_ERR 71
0087
0088 #define MADERA_NUM_IRQ 72
0089
0090
0091
0092
0093
0094 static inline int madera_get_irq_mapping(struct madera *madera, int irq)
0095 {
0096 if (!madera->irq_dev)
0097 return -ENODEV;
0098
0099 return regmap_irq_get_virq(madera->irq_data, irq);
0100 }
0101
0102 static inline int madera_request_irq(struct madera *madera, int irq,
0103 const char *name,
0104 irq_handler_t handler, void *data)
0105 {
0106 irq = madera_get_irq_mapping(madera, irq);
0107 if (irq < 0)
0108 return irq;
0109
0110 return request_threaded_irq(irq, NULL, handler, IRQF_ONESHOT, name,
0111 data);
0112 }
0113
0114 static inline void madera_free_irq(struct madera *madera, int irq, void *data)
0115 {
0116 irq = madera_get_irq_mapping(madera, irq);
0117 if (irq < 0)
0118 return;
0119
0120 free_irq(irq, data);
0121 }
0122
0123 static inline int madera_set_irq_wake(struct madera *madera, int irq, int on)
0124 {
0125 irq = madera_get_irq_mapping(madera, irq);
0126 if (irq < 0)
0127 return irq;
0128
0129 return irq_set_irq_wake(irq, on);
0130 }
0131
0132 #endif