139b27ad9SKrzysztof Kozlowski // SPDX-License-Identifier: GPL-2.0+
239b27ad9SKrzysztof Kozlowski //
339b27ad9SKrzysztof Kozlowski // Copyright (c) 2011-2014 Samsung Electronics Co., Ltd
439b27ad9SKrzysztof Kozlowski // http://www.samsung.com
566c9fbb9SSangbeom Kim
666c9fbb9SSangbeom Kim #include <linux/device.h>
766c9fbb9SSangbeom Kim #include <linux/interrupt.h>
866c9fbb9SSangbeom Kim #include <linux/irq.h>
9eef0594aSKrzysztof Kozlowski #include <linux/module.h>
106445b84aSSangbeom Kim #include <linux/regmap.h>
116445b84aSSangbeom Kim
1254227bcfSSangbeom Kim #include <linux/mfd/samsung/core.h>
1354227bcfSSangbeom Kim #include <linux/mfd/samsung/irq.h>
146445b84aSSangbeom Kim #include <linux/mfd/samsung/s2mps11.h>
15dc691966SKrzysztof Kozlowski #include <linux/mfd/samsung/s2mps14.h>
1654e8827dSChanwoo Choi #include <linux/mfd/samsung/s2mpu02.h>
1754227bcfSSangbeom Kim #include <linux/mfd/samsung/s5m8767.h>
1866c9fbb9SSangbeom Kim
19a30fffb0SKrzysztof Kozlowski static const struct regmap_irq s2mps11_irqs[] = {
206445b84aSSangbeom Kim [S2MPS11_IRQ_PWRONF] = {
215e393a22SInderpal Singh .reg_offset = 0,
226445b84aSSangbeom Kim .mask = S2MPS11_IRQ_PWRONF_MASK,
236445b84aSSangbeom Kim },
246445b84aSSangbeom Kim [S2MPS11_IRQ_PWRONR] = {
255e393a22SInderpal Singh .reg_offset = 0,
266445b84aSSangbeom Kim .mask = S2MPS11_IRQ_PWRONR_MASK,
276445b84aSSangbeom Kim },
286445b84aSSangbeom Kim [S2MPS11_IRQ_JIGONBF] = {
295e393a22SInderpal Singh .reg_offset = 0,
306445b84aSSangbeom Kim .mask = S2MPS11_IRQ_JIGONBF_MASK,
316445b84aSSangbeom Kim },
326445b84aSSangbeom Kim [S2MPS11_IRQ_JIGONBR] = {
335e393a22SInderpal Singh .reg_offset = 0,
346445b84aSSangbeom Kim .mask = S2MPS11_IRQ_JIGONBR_MASK,
356445b84aSSangbeom Kim },
366445b84aSSangbeom Kim [S2MPS11_IRQ_ACOKBF] = {
375e393a22SInderpal Singh .reg_offset = 0,
386445b84aSSangbeom Kim .mask = S2MPS11_IRQ_ACOKBF_MASK,
396445b84aSSangbeom Kim },
406445b84aSSangbeom Kim [S2MPS11_IRQ_ACOKBR] = {
415e393a22SInderpal Singh .reg_offset = 0,
426445b84aSSangbeom Kim .mask = S2MPS11_IRQ_ACOKBR_MASK,
436445b84aSSangbeom Kim },
446445b84aSSangbeom Kim [S2MPS11_IRQ_PWRON1S] = {
455e393a22SInderpal Singh .reg_offset = 0,
466445b84aSSangbeom Kim .mask = S2MPS11_IRQ_PWRON1S_MASK,
476445b84aSSangbeom Kim },
486445b84aSSangbeom Kim [S2MPS11_IRQ_MRB] = {
495e393a22SInderpal Singh .reg_offset = 0,
506445b84aSSangbeom Kim .mask = S2MPS11_IRQ_MRB_MASK,
516445b84aSSangbeom Kim },
526445b84aSSangbeom Kim [S2MPS11_IRQ_RTC60S] = {
535e393a22SInderpal Singh .reg_offset = 1,
546445b84aSSangbeom Kim .mask = S2MPS11_IRQ_RTC60S_MASK,
556445b84aSSangbeom Kim },
566445b84aSSangbeom Kim [S2MPS11_IRQ_RTCA1] = {
575e393a22SInderpal Singh .reg_offset = 1,
586445b84aSSangbeom Kim .mask = S2MPS11_IRQ_RTCA1_MASK,
596445b84aSSangbeom Kim },
60e554a99eSKrzysztof Kozlowski [S2MPS11_IRQ_RTCA0] = {
61e554a99eSKrzysztof Kozlowski .reg_offset = 1,
62e554a99eSKrzysztof Kozlowski .mask = S2MPS11_IRQ_RTCA0_MASK,
63e554a99eSKrzysztof Kozlowski },
646445b84aSSangbeom Kim [S2MPS11_IRQ_SMPL] = {
655e393a22SInderpal Singh .reg_offset = 1,
666445b84aSSangbeom Kim .mask = S2MPS11_IRQ_SMPL_MASK,
676445b84aSSangbeom Kim },
686445b84aSSangbeom Kim [S2MPS11_IRQ_RTC1S] = {
695e393a22SInderpal Singh .reg_offset = 1,
706445b84aSSangbeom Kim .mask = S2MPS11_IRQ_RTC1S_MASK,
716445b84aSSangbeom Kim },
726445b84aSSangbeom Kim [S2MPS11_IRQ_WTSR] = {
735e393a22SInderpal Singh .reg_offset = 1,
746445b84aSSangbeom Kim .mask = S2MPS11_IRQ_WTSR_MASK,
756445b84aSSangbeom Kim },
766445b84aSSangbeom Kim [S2MPS11_IRQ_INT120C] = {
775e393a22SInderpal Singh .reg_offset = 2,
786445b84aSSangbeom Kim .mask = S2MPS11_IRQ_INT120C_MASK,
796445b84aSSangbeom Kim },
806445b84aSSangbeom Kim [S2MPS11_IRQ_INT140C] = {
815e393a22SInderpal Singh .reg_offset = 2,
826445b84aSSangbeom Kim .mask = S2MPS11_IRQ_INT140C_MASK,
836445b84aSSangbeom Kim },
8466c9fbb9SSangbeom Kim };
8566c9fbb9SSangbeom Kim
86dc691966SKrzysztof Kozlowski static const struct regmap_irq s2mps14_irqs[] = {
87dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_PWRONF] = {
88dc691966SKrzysztof Kozlowski .reg_offset = 0,
89dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_PWRONF_MASK,
90dc691966SKrzysztof Kozlowski },
91dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_PWRONR] = {
92dc691966SKrzysztof Kozlowski .reg_offset = 0,
93dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_PWRONR_MASK,
94dc691966SKrzysztof Kozlowski },
95dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_JIGONBF] = {
96dc691966SKrzysztof Kozlowski .reg_offset = 0,
97dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_JIGONBF_MASK,
98dc691966SKrzysztof Kozlowski },
99dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_JIGONBR] = {
100dc691966SKrzysztof Kozlowski .reg_offset = 0,
101dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_JIGONBR_MASK,
102dc691966SKrzysztof Kozlowski },
103dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_ACOKBF] = {
104dc691966SKrzysztof Kozlowski .reg_offset = 0,
105dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_ACOKBF_MASK,
106dc691966SKrzysztof Kozlowski },
107dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_ACOKBR] = {
108dc691966SKrzysztof Kozlowski .reg_offset = 0,
109dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_ACOKBR_MASK,
110dc691966SKrzysztof Kozlowski },
111dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_PWRON1S] = {
112dc691966SKrzysztof Kozlowski .reg_offset = 0,
113dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_PWRON1S_MASK,
114dc691966SKrzysztof Kozlowski },
115dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_MRB] = {
116dc691966SKrzysztof Kozlowski .reg_offset = 0,
117dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_MRB_MASK,
118dc691966SKrzysztof Kozlowski },
119dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_RTC60S] = {
120dc691966SKrzysztof Kozlowski .reg_offset = 1,
121dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_RTC60S_MASK,
122dc691966SKrzysztof Kozlowski },
123dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_RTCA1] = {
124dc691966SKrzysztof Kozlowski .reg_offset = 1,
125dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_RTCA1_MASK,
126dc691966SKrzysztof Kozlowski },
127dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_RTCA0] = {
128dc691966SKrzysztof Kozlowski .reg_offset = 1,
129dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_RTCA0_MASK,
130dc691966SKrzysztof Kozlowski },
131dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_SMPL] = {
132dc691966SKrzysztof Kozlowski .reg_offset = 1,
133dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_SMPL_MASK,
134dc691966SKrzysztof Kozlowski },
135dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_RTC1S] = {
136dc691966SKrzysztof Kozlowski .reg_offset = 1,
137dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_RTC1S_MASK,
138dc691966SKrzysztof Kozlowski },
139dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_WTSR] = {
140dc691966SKrzysztof Kozlowski .reg_offset = 1,
141dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_WTSR_MASK,
142dc691966SKrzysztof Kozlowski },
143dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_INT120C] = {
144dc691966SKrzysztof Kozlowski .reg_offset = 2,
145dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_INT120C_MASK,
146dc691966SKrzysztof Kozlowski },
147dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_INT140C] = {
148dc691966SKrzysztof Kozlowski .reg_offset = 2,
149dc691966SKrzysztof Kozlowski .mask = S2MPS11_IRQ_INT140C_MASK,
150dc691966SKrzysztof Kozlowski },
151dc691966SKrzysztof Kozlowski [S2MPS14_IRQ_TSD] = {
152dc691966SKrzysztof Kozlowski .reg_offset = 2,
153dc691966SKrzysztof Kozlowski .mask = S2MPS14_IRQ_TSD_MASK,
154dc691966SKrzysztof Kozlowski },
155dc691966SKrzysztof Kozlowski };
1566445b84aSSangbeom Kim
15754e8827dSChanwoo Choi static const struct regmap_irq s2mpu02_irqs[] = {
15854e8827dSChanwoo Choi [S2MPU02_IRQ_PWRONF] = {
15954e8827dSChanwoo Choi .reg_offset = 0,
16054e8827dSChanwoo Choi .mask = S2MPS11_IRQ_PWRONF_MASK,
16154e8827dSChanwoo Choi },
16254e8827dSChanwoo Choi [S2MPU02_IRQ_PWRONR] = {
16354e8827dSChanwoo Choi .reg_offset = 0,
16454e8827dSChanwoo Choi .mask = S2MPS11_IRQ_PWRONR_MASK,
16554e8827dSChanwoo Choi },
16654e8827dSChanwoo Choi [S2MPU02_IRQ_JIGONBF] = {
16754e8827dSChanwoo Choi .reg_offset = 0,
16854e8827dSChanwoo Choi .mask = S2MPS11_IRQ_JIGONBF_MASK,
16954e8827dSChanwoo Choi },
17054e8827dSChanwoo Choi [S2MPU02_IRQ_JIGONBR] = {
17154e8827dSChanwoo Choi .reg_offset = 0,
17254e8827dSChanwoo Choi .mask = S2MPS11_IRQ_JIGONBR_MASK,
17354e8827dSChanwoo Choi },
17454e8827dSChanwoo Choi [S2MPU02_IRQ_ACOKBF] = {
17554e8827dSChanwoo Choi .reg_offset = 0,
17654e8827dSChanwoo Choi .mask = S2MPS11_IRQ_ACOKBF_MASK,
17754e8827dSChanwoo Choi },
17854e8827dSChanwoo Choi [S2MPU02_IRQ_ACOKBR] = {
17954e8827dSChanwoo Choi .reg_offset = 0,
18054e8827dSChanwoo Choi .mask = S2MPS11_IRQ_ACOKBR_MASK,
18154e8827dSChanwoo Choi },
18254e8827dSChanwoo Choi [S2MPU02_IRQ_PWRON1S] = {
18354e8827dSChanwoo Choi .reg_offset = 0,
18454e8827dSChanwoo Choi .mask = S2MPS11_IRQ_PWRON1S_MASK,
18554e8827dSChanwoo Choi },
18654e8827dSChanwoo Choi [S2MPU02_IRQ_MRB] = {
18754e8827dSChanwoo Choi .reg_offset = 0,
18854e8827dSChanwoo Choi .mask = S2MPS11_IRQ_MRB_MASK,
18954e8827dSChanwoo Choi },
19054e8827dSChanwoo Choi [S2MPU02_IRQ_RTC60S] = {
19154e8827dSChanwoo Choi .reg_offset = 1,
19254e8827dSChanwoo Choi .mask = S2MPS11_IRQ_RTC60S_MASK,
19354e8827dSChanwoo Choi },
19454e8827dSChanwoo Choi [S2MPU02_IRQ_RTCA1] = {
19554e8827dSChanwoo Choi .reg_offset = 1,
19654e8827dSChanwoo Choi .mask = S2MPS11_IRQ_RTCA1_MASK,
19754e8827dSChanwoo Choi },
19854e8827dSChanwoo Choi [S2MPU02_IRQ_RTCA0] = {
19954e8827dSChanwoo Choi .reg_offset = 1,
20054e8827dSChanwoo Choi .mask = S2MPS11_IRQ_RTCA0_MASK,
20154e8827dSChanwoo Choi },
20254e8827dSChanwoo Choi [S2MPU02_IRQ_SMPL] = {
20354e8827dSChanwoo Choi .reg_offset = 1,
20454e8827dSChanwoo Choi .mask = S2MPS11_IRQ_SMPL_MASK,
20554e8827dSChanwoo Choi },
20654e8827dSChanwoo Choi [S2MPU02_IRQ_RTC1S] = {
20754e8827dSChanwoo Choi .reg_offset = 1,
20854e8827dSChanwoo Choi .mask = S2MPS11_IRQ_RTC1S_MASK,
20954e8827dSChanwoo Choi },
21054e8827dSChanwoo Choi [S2MPU02_IRQ_WTSR] = {
21154e8827dSChanwoo Choi .reg_offset = 1,
21254e8827dSChanwoo Choi .mask = S2MPS11_IRQ_WTSR_MASK,
21354e8827dSChanwoo Choi },
21454e8827dSChanwoo Choi [S2MPU02_IRQ_INT120C] = {
21554e8827dSChanwoo Choi .reg_offset = 2,
21654e8827dSChanwoo Choi .mask = S2MPS11_IRQ_INT120C_MASK,
21754e8827dSChanwoo Choi },
21854e8827dSChanwoo Choi [S2MPU02_IRQ_INT140C] = {
21954e8827dSChanwoo Choi .reg_offset = 2,
22054e8827dSChanwoo Choi .mask = S2MPS11_IRQ_INT140C_MASK,
22154e8827dSChanwoo Choi },
22254e8827dSChanwoo Choi [S2MPU02_IRQ_TSD] = {
22354e8827dSChanwoo Choi .reg_offset = 2,
22454e8827dSChanwoo Choi .mask = S2MPS14_IRQ_TSD_MASK,
22554e8827dSChanwoo Choi },
22654e8827dSChanwoo Choi };
22754e8827dSChanwoo Choi
228a30fffb0SKrzysztof Kozlowski static const struct regmap_irq s5m8767_irqs[] = {
22966c9fbb9SSangbeom Kim [S5M8767_IRQ_PWRR] = {
2305e393a22SInderpal Singh .reg_offset = 0,
23166c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_PWRR_MASK,
23266c9fbb9SSangbeom Kim },
23366c9fbb9SSangbeom Kim [S5M8767_IRQ_PWRF] = {
2345e393a22SInderpal Singh .reg_offset = 0,
23566c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_PWRF_MASK,
23666c9fbb9SSangbeom Kim },
23766c9fbb9SSangbeom Kim [S5M8767_IRQ_PWR1S] = {
2385e393a22SInderpal Singh .reg_offset = 0,
23966c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_PWR1S_MASK,
24066c9fbb9SSangbeom Kim },
24166c9fbb9SSangbeom Kim [S5M8767_IRQ_JIGR] = {
2425e393a22SInderpal Singh .reg_offset = 0,
24366c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_JIGR_MASK,
24466c9fbb9SSangbeom Kim },
24566c9fbb9SSangbeom Kim [S5M8767_IRQ_JIGF] = {
2465e393a22SInderpal Singh .reg_offset = 0,
24766c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_JIGF_MASK,
24866c9fbb9SSangbeom Kim },
24966c9fbb9SSangbeom Kim [S5M8767_IRQ_LOWBAT2] = {
2505e393a22SInderpal Singh .reg_offset = 0,
25166c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_LOWBAT2_MASK,
25266c9fbb9SSangbeom Kim },
25366c9fbb9SSangbeom Kim [S5M8767_IRQ_LOWBAT1] = {
2545e393a22SInderpal Singh .reg_offset = 0,
25566c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_LOWBAT1_MASK,
25666c9fbb9SSangbeom Kim },
25766c9fbb9SSangbeom Kim [S5M8767_IRQ_MRB] = {
2585e393a22SInderpal Singh .reg_offset = 1,
25966c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_MRB_MASK,
26066c9fbb9SSangbeom Kim },
26166c9fbb9SSangbeom Kim [S5M8767_IRQ_DVSOK2] = {
2625e393a22SInderpal Singh .reg_offset = 1,
26366c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_DVSOK2_MASK,
26466c9fbb9SSangbeom Kim },
26566c9fbb9SSangbeom Kim [S5M8767_IRQ_DVSOK3] = {
2665e393a22SInderpal Singh .reg_offset = 1,
26766c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_DVSOK3_MASK,
26866c9fbb9SSangbeom Kim },
26966c9fbb9SSangbeom Kim [S5M8767_IRQ_DVSOK4] = {
2705e393a22SInderpal Singh .reg_offset = 1,
27166c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_DVSOK4_MASK,
27266c9fbb9SSangbeom Kim },
27366c9fbb9SSangbeom Kim [S5M8767_IRQ_RTC60S] = {
2745e393a22SInderpal Singh .reg_offset = 2,
27566c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_RTC60S_MASK,
27666c9fbb9SSangbeom Kim },
27766c9fbb9SSangbeom Kim [S5M8767_IRQ_RTCA1] = {
2785e393a22SInderpal Singh .reg_offset = 2,
27966c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_RTCA1_MASK,
28066c9fbb9SSangbeom Kim },
28166c9fbb9SSangbeom Kim [S5M8767_IRQ_RTCA2] = {
2825e393a22SInderpal Singh .reg_offset = 2,
28366c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_RTCA2_MASK,
28466c9fbb9SSangbeom Kim },
28566c9fbb9SSangbeom Kim [S5M8767_IRQ_SMPL] = {
2865e393a22SInderpal Singh .reg_offset = 2,
28766c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_SMPL_MASK,
28866c9fbb9SSangbeom Kim },
28966c9fbb9SSangbeom Kim [S5M8767_IRQ_RTC1S] = {
2905e393a22SInderpal Singh .reg_offset = 2,
29166c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_RTC1S_MASK,
29266c9fbb9SSangbeom Kim },
29366c9fbb9SSangbeom Kim [S5M8767_IRQ_WTSR] = {
2945e393a22SInderpal Singh .reg_offset = 2,
29566c9fbb9SSangbeom Kim .mask = S5M8767_IRQ_WTSR_MASK,
29666c9fbb9SSangbeom Kim },
29766c9fbb9SSangbeom Kim };
29866c9fbb9SSangbeom Kim
299a30fffb0SKrzysztof Kozlowski static const struct regmap_irq_chip s2mps11_irq_chip = {
3006445b84aSSangbeom Kim .name = "s2mps11",
3016445b84aSSangbeom Kim .irqs = s2mps11_irqs,
3026445b84aSSangbeom Kim .num_irqs = ARRAY_SIZE(s2mps11_irqs),
3036445b84aSSangbeom Kim .num_regs = 3,
3046445b84aSSangbeom Kim .status_base = S2MPS11_REG_INT1,
3056445b84aSSangbeom Kim .mask_base = S2MPS11_REG_INT1M,
3066445b84aSSangbeom Kim .ack_base = S2MPS11_REG_INT1,
3076445b84aSSangbeom Kim };
30866c9fbb9SSangbeom Kim
3093bc2ee91SChanwoo Choi #define S2MPS1X_IRQ_CHIP_COMMON_DATA \
3103bc2ee91SChanwoo Choi .irqs = s2mps14_irqs, \
3113bc2ee91SChanwoo Choi .num_irqs = ARRAY_SIZE(s2mps14_irqs), \
3123bc2ee91SChanwoo Choi .num_regs = 3, \
3133bc2ee91SChanwoo Choi .status_base = S2MPS14_REG_INT1, \
3143bc2ee91SChanwoo Choi .mask_base = S2MPS14_REG_INT1M, \
3153bc2ee91SChanwoo Choi .ack_base = S2MPS14_REG_INT1 \
3163bc2ee91SChanwoo Choi
3173bc2ee91SChanwoo Choi static const struct regmap_irq_chip s2mps13_irq_chip = {
3183bc2ee91SChanwoo Choi .name = "s2mps13",
3193bc2ee91SChanwoo Choi S2MPS1X_IRQ_CHIP_COMMON_DATA,
3203bc2ee91SChanwoo Choi };
3213bc2ee91SChanwoo Choi
322dc691966SKrzysztof Kozlowski static const struct regmap_irq_chip s2mps14_irq_chip = {
323dc691966SKrzysztof Kozlowski .name = "s2mps14",
3243bc2ee91SChanwoo Choi S2MPS1X_IRQ_CHIP_COMMON_DATA,
325dc691966SKrzysztof Kozlowski };
326dc691966SKrzysztof Kozlowski
3279e4808d2SThomas Abraham static const struct regmap_irq_chip s2mps15_irq_chip = {
3289e4808d2SThomas Abraham .name = "s2mps15",
3299e4808d2SThomas Abraham S2MPS1X_IRQ_CHIP_COMMON_DATA,
3309e4808d2SThomas Abraham };
3319e4808d2SThomas Abraham
33254e8827dSChanwoo Choi static const struct regmap_irq_chip s2mpu02_irq_chip = {
33354e8827dSChanwoo Choi .name = "s2mpu02",
33454e8827dSChanwoo Choi .irqs = s2mpu02_irqs,
33554e8827dSChanwoo Choi .num_irqs = ARRAY_SIZE(s2mpu02_irqs),
33654e8827dSChanwoo Choi .num_regs = 3,
33754e8827dSChanwoo Choi .status_base = S2MPU02_REG_INT1,
33854e8827dSChanwoo Choi .mask_base = S2MPU02_REG_INT1M,
33954e8827dSChanwoo Choi .ack_base = S2MPU02_REG_INT1,
34054e8827dSChanwoo Choi };
34154e8827dSChanwoo Choi
342a30fffb0SKrzysztof Kozlowski static const struct regmap_irq_chip s5m8767_irq_chip = {
34366c9fbb9SSangbeom Kim .name = "s5m8767",
3446445b84aSSangbeom Kim .irqs = s5m8767_irqs,
3456445b84aSSangbeom Kim .num_irqs = ARRAY_SIZE(s5m8767_irqs),
3466445b84aSSangbeom Kim .num_regs = 3,
3476445b84aSSangbeom Kim .status_base = S5M8767_REG_INT1,
3486445b84aSSangbeom Kim .mask_base = S5M8767_REG_INT1M,
3496445b84aSSangbeom Kim .ack_base = S5M8767_REG_INT1,
35066c9fbb9SSangbeom Kim };
35166c9fbb9SSangbeom Kim
sec_irq_init(struct sec_pmic_dev * sec_pmic)35263063bfbSSangbeom Kim int sec_irq_init(struct sec_pmic_dev *sec_pmic)
35366c9fbb9SSangbeom Kim {
35466c9fbb9SSangbeom Kim int ret = 0;
35563063bfbSSangbeom Kim int type = sec_pmic->device_type;
35654e8827dSChanwoo Choi const struct regmap_irq_chip *sec_irq_chip;
35766c9fbb9SSangbeom Kim
35863063bfbSSangbeom Kim if (!sec_pmic->irq) {
35963063bfbSSangbeom Kim dev_warn(sec_pmic->dev,
36066c9fbb9SSangbeom Kim "No interrupt specified, no interrupts\n");
36166c9fbb9SSangbeom Kim return 0;
36266c9fbb9SSangbeom Kim }
36366c9fbb9SSangbeom Kim
36466c9fbb9SSangbeom Kim switch (type) {
36566c9fbb9SSangbeom Kim case S5M8767X:
36654e8827dSChanwoo Choi sec_irq_chip = &s5m8767_irq_chip;
3676445b84aSSangbeom Kim break;
368ec85d4a1SStuart Menefy case S2MPA01:
369ec85d4a1SStuart Menefy sec_irq_chip = &s2mps14_irq_chip;
370ec85d4a1SStuart Menefy break;
3716445b84aSSangbeom Kim case S2MPS11X:
37254e8827dSChanwoo Choi sec_irq_chip = &s2mps11_irq_chip;
37366c9fbb9SSangbeom Kim break;
3743bc2ee91SChanwoo Choi case S2MPS13X:
3753bc2ee91SChanwoo Choi sec_irq_chip = &s2mps13_irq_chip;
3763bc2ee91SChanwoo Choi break;
377dc691966SKrzysztof Kozlowski case S2MPS14X:
37854e8827dSChanwoo Choi sec_irq_chip = &s2mps14_irq_chip;
37954e8827dSChanwoo Choi break;
3809e4808d2SThomas Abraham case S2MPS15X:
3819e4808d2SThomas Abraham sec_irq_chip = &s2mps15_irq_chip;
3829e4808d2SThomas Abraham break;
38354e8827dSChanwoo Choi case S2MPU02:
38454e8827dSChanwoo Choi sec_irq_chip = &s2mpu02_irq_chip;
385dc691966SKrzysztof Kozlowski break;
38666c9fbb9SSangbeom Kim default:
3879549b5ffSKrzysztof Kozlowski dev_err(sec_pmic->dev, "Unknown device type %lu\n",
3886445b84aSSangbeom Kim sec_pmic->device_type);
38966c9fbb9SSangbeom Kim return -EINVAL;
39066c9fbb9SSangbeom Kim }
39166c9fbb9SSangbeom Kim
3923dc6f4aaSLaxman Dewangan ret = devm_regmap_add_irq_chip(sec_pmic->dev, sec_pmic->regmap_pmic,
393*6854a105SKrzysztof Kozlowski sec_pmic->irq, IRQF_ONESHOT,
394c1d3ab31SKrzysztof Kozlowski 0, sec_irq_chip, &sec_pmic->irq_data);
3956445b84aSSangbeom Kim if (ret != 0) {
3966445b84aSSangbeom Kim dev_err(sec_pmic->dev, "Failed to register IRQ chip: %d\n", ret);
39766c9fbb9SSangbeom Kim return ret;
39866c9fbb9SSangbeom Kim }
39966c9fbb9SSangbeom Kim
400e554a99eSKrzysztof Kozlowski /*
401e554a99eSKrzysztof Kozlowski * The rtc-s5m driver requests S2MPS14_IRQ_RTCA0 also for S2MPS11
402e554a99eSKrzysztof Kozlowski * so the interrupt number must be consistent.
403e554a99eSKrzysztof Kozlowski */
404e554a99eSKrzysztof Kozlowski BUILD_BUG_ON(((enum s2mps14_irq)S2MPS11_IRQ_RTCA0) != S2MPS14_IRQ_RTCA0);
405e554a99eSKrzysztof Kozlowski
40666c9fbb9SSangbeom Kim return 0;
40766c9fbb9SSangbeom Kim }
408eef0594aSKrzysztof Kozlowski EXPORT_SYMBOL_GPL(sec_irq_init);
409eef0594aSKrzysztof Kozlowski
410eef0594aSKrzysztof Kozlowski MODULE_AUTHOR("Sangbeom Kim <sbkim73@samsung.com>");
411eef0594aSKrzysztof Kozlowski MODULE_AUTHOR("Chanwoo Choi <cw00.choi@samsung.com>");
412eef0594aSKrzysztof Kozlowski MODULE_AUTHOR("Krzysztof Kozlowski <krzk@kernel.org>");
413eef0594aSKrzysztof Kozlowski MODULE_DESCRIPTION("Interrupt support for the S5M MFD");
414eef0594aSKrzysztof Kozlowski MODULE_LICENSE("GPL");
415