diff options
author | Tomasz Figa <t.figa@samsung.com> | 2013-06-24 08:39:52 -0400 |
---|---|---|
committer | Samuel Ortiz <sameo@linux.intel.com> | 2013-06-30 17:29:44 -0400 |
commit | 443c6ae253e96db9a5800a28d7c61131e81c2dee (patch) | |
tree | c9df532a7f81a8799fe52f6845504b275803e58e /drivers/rtc | |
parent | b5c46787df1f28b0a24499e275491ba9a505c8ec (diff) |
mfd: max8998: Add irq domain support
This patch adds irq domain support for max8998 interrupts.
To keep both non-DT and DT worlds happy, simple domain is used, which is
linear when no explicit IRQ base is specified and legacy, with static
mapping, otherwise.
Signed-off-by: Tomasz Figa <t.figa@samsung.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'drivers/rtc')
-rw-r--r-- | drivers/rtc/rtc-max8998.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/rtc/rtc-max8998.c b/drivers/rtc/rtc-max8998.c index d5af7baa48b5..46f23014759b 100644 --- a/drivers/rtc/rtc-max8998.c +++ b/drivers/rtc/rtc-max8998.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/i2c.h> | 16 | #include <linux/i2c.h> |
17 | #include <linux/slab.h> | 17 | #include <linux/slab.h> |
18 | #include <linux/bcd.h> | 18 | #include <linux/bcd.h> |
19 | #include <linux/irqdomain.h> | ||
19 | #include <linux/rtc.h> | 20 | #include <linux/rtc.h> |
20 | #include <linux/platform_device.h> | 21 | #include <linux/platform_device.h> |
21 | #include <linux/mfd/max8998.h> | 22 | #include <linux/mfd/max8998.h> |
@@ -264,7 +265,6 @@ static int max8998_rtc_probe(struct platform_device *pdev) | |||
264 | info->dev = &pdev->dev; | 265 | info->dev = &pdev->dev; |
265 | info->max8998 = max8998; | 266 | info->max8998 = max8998; |
266 | info->rtc = max8998->rtc; | 267 | info->rtc = max8998->rtc; |
267 | info->irq = max8998->irq_base + MAX8998_IRQ_ALARM0; | ||
268 | 268 | ||
269 | platform_set_drvdata(pdev, info); | 269 | platform_set_drvdata(pdev, info); |
270 | 270 | ||
@@ -277,6 +277,15 @@ static int max8998_rtc_probe(struct platform_device *pdev) | |||
277 | goto out_rtc; | 277 | goto out_rtc; |
278 | } | 278 | } |
279 | 279 | ||
280 | if (!max8998->irq_domain) | ||
281 | goto no_irq; | ||
282 | |||
283 | info->irq = irq_create_mapping(max8998->irq_domain, MAX8998_IRQ_ALARM0); | ||
284 | if (!info->irq) { | ||
285 | dev_warn(&pdev->dev, "Failed to map alarm IRQ\n"); | ||
286 | goto no_irq; | ||
287 | } | ||
288 | |||
280 | ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, | 289 | ret = devm_request_threaded_irq(&pdev->dev, info->irq, NULL, |
281 | max8998_rtc_alarm_irq, 0, "rtc-alarm0", info); | 290 | max8998_rtc_alarm_irq, 0, "rtc-alarm0", info); |
282 | 291 | ||
@@ -284,6 +293,7 @@ static int max8998_rtc_probe(struct platform_device *pdev) | |||
284 | dev_err(&pdev->dev, "Failed to request alarm IRQ: %d: %d\n", | 293 | dev_err(&pdev->dev, "Failed to request alarm IRQ: %d: %d\n", |
285 | info->irq, ret); | 294 | info->irq, ret); |
286 | 295 | ||
296 | no_irq: | ||
287 | dev_info(&pdev->dev, "RTC CHIP NAME: %s\n", pdev->id_entry->name); | 297 | dev_info(&pdev->dev, "RTC CHIP NAME: %s\n", pdev->id_entry->name); |
288 | if (pdata && pdata->rtc_delay) { | 298 | if (pdata && pdata->rtc_delay) { |
289 | info->lp3974_bug_workaround = true; | 299 | info->lp3974_bug_workaround = true; |