diff options
author | Krzysztof Kozlowski <k.kozlowski@samsung.com> | 2014-02-28 05:41:44 -0500 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2014-03-18 06:50:09 -0400 |
commit | dc6919663f7a02d02cc08d605a1f68d6cefe0042 (patch) | |
tree | f114b7cbbb668615d3aa747421da5da9bb5d00e8 /drivers/mfd/sec-irq.c | |
parent | 677620952a0fd1b1618bed57c1ebd94bf3c710f3 (diff) |
mfd: sec: Add support for S2MPS14
Add support for S2MPS14 PMIC device to the MFD sec-core driver.
The S2MPS14 is similar to S2MPS11 but it has fewer regulators, two
clocks instead of three and a little different registers layout.
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Diffstat (limited to 'drivers/mfd/sec-irq.c')
-rw-r--r-- | drivers/mfd/sec-irq.c | 89 |
1 files changed, 88 insertions, 1 deletions
diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c index e403c293b437..64e7913aadc6 100644 --- a/drivers/mfd/sec-irq.c +++ b/drivers/mfd/sec-irq.c | |||
@@ -1,7 +1,7 @@ | |||
1 | /* | 1 | /* |
2 | * sec-irq.c | 2 | * sec-irq.c |
3 | * | 3 | * |
4 | * Copyright (c) 2011 Samsung Electronics Co., Ltd | 4 | * Copyright (c) 2011-2014 Samsung Electronics Co., Ltd |
5 | * http://www.samsung.com | 5 | * http://www.samsung.com |
6 | * | 6 | * |
7 | * This program is free software; you can redistribute it and/or modify it | 7 | * This program is free software; you can redistribute it and/or modify it |
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/mfd/samsung/core.h> | 19 | #include <linux/mfd/samsung/core.h> |
20 | #include <linux/mfd/samsung/irq.h> | 20 | #include <linux/mfd/samsung/irq.h> |
21 | #include <linux/mfd/samsung/s2mps11.h> | 21 | #include <linux/mfd/samsung/s2mps11.h> |
22 | #include <linux/mfd/samsung/s2mps14.h> | ||
22 | #include <linux/mfd/samsung/s5m8763.h> | 23 | #include <linux/mfd/samsung/s5m8763.h> |
23 | #include <linux/mfd/samsung/s5m8767.h> | 24 | #include <linux/mfd/samsung/s5m8767.h> |
24 | 25 | ||
@@ -89,6 +90,76 @@ static const struct regmap_irq s2mps11_irqs[] = { | |||
89 | }, | 90 | }, |
90 | }; | 91 | }; |
91 | 92 | ||
93 | static const struct regmap_irq s2mps14_irqs[] = { | ||
94 | [S2MPS14_IRQ_PWRONF] = { | ||
95 | .reg_offset = 0, | ||
96 | .mask = S2MPS11_IRQ_PWRONF_MASK, | ||
97 | }, | ||
98 | [S2MPS14_IRQ_PWRONR] = { | ||
99 | .reg_offset = 0, | ||
100 | .mask = S2MPS11_IRQ_PWRONR_MASK, | ||
101 | }, | ||
102 | [S2MPS14_IRQ_JIGONBF] = { | ||
103 | .reg_offset = 0, | ||
104 | .mask = S2MPS11_IRQ_JIGONBF_MASK, | ||
105 | }, | ||
106 | [S2MPS14_IRQ_JIGONBR] = { | ||
107 | .reg_offset = 0, | ||
108 | .mask = S2MPS11_IRQ_JIGONBR_MASK, | ||
109 | }, | ||
110 | [S2MPS14_IRQ_ACOKBF] = { | ||
111 | .reg_offset = 0, | ||
112 | .mask = S2MPS11_IRQ_ACOKBF_MASK, | ||
113 | }, | ||
114 | [S2MPS14_IRQ_ACOKBR] = { | ||
115 | .reg_offset = 0, | ||
116 | .mask = S2MPS11_IRQ_ACOKBR_MASK, | ||
117 | }, | ||
118 | [S2MPS14_IRQ_PWRON1S] = { | ||
119 | .reg_offset = 0, | ||
120 | .mask = S2MPS11_IRQ_PWRON1S_MASK, | ||
121 | }, | ||
122 | [S2MPS14_IRQ_MRB] = { | ||
123 | .reg_offset = 0, | ||
124 | .mask = S2MPS11_IRQ_MRB_MASK, | ||
125 | }, | ||
126 | [S2MPS14_IRQ_RTC60S] = { | ||
127 | .reg_offset = 1, | ||
128 | .mask = S2MPS11_IRQ_RTC60S_MASK, | ||
129 | }, | ||
130 | [S2MPS14_IRQ_RTCA1] = { | ||
131 | .reg_offset = 1, | ||
132 | .mask = S2MPS11_IRQ_RTCA1_MASK, | ||
133 | }, | ||
134 | [S2MPS14_IRQ_RTCA0] = { | ||
135 | .reg_offset = 1, | ||
136 | .mask = S2MPS11_IRQ_RTCA0_MASK, | ||
137 | }, | ||
138 | [S2MPS14_IRQ_SMPL] = { | ||
139 | .reg_offset = 1, | ||
140 | .mask = S2MPS11_IRQ_SMPL_MASK, | ||
141 | }, | ||
142 | [S2MPS14_IRQ_RTC1S] = { | ||
143 | .reg_offset = 1, | ||
144 | .mask = S2MPS11_IRQ_RTC1S_MASK, | ||
145 | }, | ||
146 | [S2MPS14_IRQ_WTSR] = { | ||
147 | .reg_offset = 1, | ||
148 | .mask = S2MPS11_IRQ_WTSR_MASK, | ||
149 | }, | ||
150 | [S2MPS14_IRQ_INT120C] = { | ||
151 | .reg_offset = 2, | ||
152 | .mask = S2MPS11_IRQ_INT120C_MASK, | ||
153 | }, | ||
154 | [S2MPS14_IRQ_INT140C] = { | ||
155 | .reg_offset = 2, | ||
156 | .mask = S2MPS11_IRQ_INT140C_MASK, | ||
157 | }, | ||
158 | [S2MPS14_IRQ_TSD] = { | ||
159 | .reg_offset = 2, | ||
160 | .mask = S2MPS14_IRQ_TSD_MASK, | ||
161 | }, | ||
162 | }; | ||
92 | 163 | ||
93 | static const struct regmap_irq s5m8767_irqs[] = { | 164 | static const struct regmap_irq s5m8767_irqs[] = { |
94 | [S5M8767_IRQ_PWRR] = { | 165 | [S5M8767_IRQ_PWRR] = { |
@@ -246,6 +317,16 @@ static const struct regmap_irq_chip s2mps11_irq_chip = { | |||
246 | .ack_base = S2MPS11_REG_INT1, | 317 | .ack_base = S2MPS11_REG_INT1, |
247 | }; | 318 | }; |
248 | 319 | ||
320 | static const struct regmap_irq_chip s2mps14_irq_chip = { | ||
321 | .name = "s2mps14", | ||
322 | .irqs = s2mps14_irqs, | ||
323 | .num_irqs = ARRAY_SIZE(s2mps14_irqs), | ||
324 | .num_regs = 3, | ||
325 | .status_base = S2MPS14_REG_INT1, | ||
326 | .mask_base = S2MPS14_REG_INT1M, | ||
327 | .ack_base = S2MPS14_REG_INT1, | ||
328 | }; | ||
329 | |||
249 | static const struct regmap_irq_chip s5m8767_irq_chip = { | 330 | static const struct regmap_irq_chip s5m8767_irq_chip = { |
250 | .name = "s5m8767", | 331 | .name = "s5m8767", |
251 | .irqs = s5m8767_irqs, | 332 | .irqs = s5m8767_irqs, |
@@ -297,6 +378,12 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic) | |||
297 | sec_pmic->irq_base, &s2mps11_irq_chip, | 378 | sec_pmic->irq_base, &s2mps11_irq_chip, |
298 | &sec_pmic->irq_data); | 379 | &sec_pmic->irq_data); |
299 | break; | 380 | break; |
381 | case S2MPS14X: | ||
382 | ret = regmap_add_irq_chip(sec_pmic->regmap_pmic, sec_pmic->irq, | ||
383 | IRQF_TRIGGER_FALLING | IRQF_ONESHOT, | ||
384 | sec_pmic->irq_base, &s2mps14_irq_chip, | ||
385 | &sec_pmic->irq_data); | ||
386 | break; | ||
300 | default: | 387 | default: |
301 | dev_err(sec_pmic->dev, "Unknown device type %d\n", | 388 | dev_err(sec_pmic->dev, "Unknown device type %d\n", |
302 | sec_pmic->device_type); | 389 | sec_pmic->device_type); |