xref: /openbmc/linux/drivers/mfd/sec-irq.c (revision f736d2c0)
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