Skip to content

Commit 689602e

Browse files
Wolfram Sangalexandrebelloni
authored andcommitted
rtc: sh: simplify irq setup after refactoring
We only need the alarm_irq handler. That means we can remove everything related to periodic_irq and carry_irq. Also, the shared handler can go since we only we need the alarm interrupt in any case. Signed-off-by: Wolfram Sang <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Alexandre Belloni <[email protected]>
1 parent a7e7d96 commit 689602e

File tree

1 file changed

+17
-66
lines changed

1 file changed

+17
-66
lines changed

drivers/rtc/rtc-sh.c

Lines changed: 17 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,19 @@ struct sh_rtc {
8989
unsigned long regsize;
9090
struct resource *res;
9191
int alarm_irq;
92-
int periodic_irq;
93-
int carry_irq;
9492
struct clk *clk;
9593
struct rtc_device *rtc_dev;
9694
spinlock_t lock;
9795
unsigned long capabilities; /* See asm/rtc.h for cap bits */
9896
};
9997

100-
static int __sh_rtc_alarm(struct sh_rtc *rtc)
98+
static irqreturn_t sh_rtc_alarm(int irq, void *dev_id)
10199
{
100+
struct sh_rtc *rtc = dev_id;
102101
unsigned int tmp, pending;
103102

103+
spin_lock(&rtc->lock);
104+
104105
tmp = readb(rtc->regbase + RCR1);
105106
pending = tmp & RCR1_AF;
106107
tmp &= ~(RCR1_AF | RCR1_AIE);
@@ -109,31 +110,9 @@ static int __sh_rtc_alarm(struct sh_rtc *rtc)
109110
if (pending)
110111
rtc_update_irq(rtc->rtc_dev, 1, RTC_AF | RTC_IRQF);
111112

112-
return pending;
113-
}
114-
115-
static irqreturn_t sh_rtc_alarm(int irq, void *dev_id)
116-
{
117-
struct sh_rtc *rtc = dev_id;
118-
int ret;
119-
120-
spin_lock(&rtc->lock);
121-
ret = __sh_rtc_alarm(rtc);
122-
spin_unlock(&rtc->lock);
123-
124-
return IRQ_RETVAL(ret);
125-
}
126-
127-
static irqreturn_t sh_rtc_shared(int irq, void *dev_id)
128-
{
129-
struct sh_rtc *rtc = dev_id;
130-
int ret;
131-
132-
spin_lock(&rtc->lock);
133-
ret = __sh_rtc_alarm(rtc);
134113
spin_unlock(&rtc->lock);
135114

136-
return IRQ_RETVAL(ret);
115+
return IRQ_RETVAL(pending);
137116
}
138117

139118
static inline void sh_rtc_setaie(struct device *dev, unsigned int enable)
@@ -364,22 +343,16 @@ static int __init sh_rtc_probe(struct platform_device *pdev)
364343

365344
spin_lock_init(&rtc->lock);
366345

367-
/* get periodic/carry/alarm irqs */
368346
ret = platform_get_irq(pdev, 0);
369347
if (unlikely(ret <= 0)) {
370348
dev_err(&pdev->dev, "No IRQ resource\n");
371349
return -ENOENT;
372350
}
373351

374-
if (!pdev->dev.of_node) {
375-
rtc->periodic_irq = ret;
376-
rtc->carry_irq = platform_get_irq(pdev, 1);
352+
if (!pdev->dev.of_node)
377353
rtc->alarm_irq = platform_get_irq(pdev, 2);
378-
} else {
354+
else
379355
rtc->alarm_irq = ret;
380-
rtc->periodic_irq = platform_get_irq(pdev, 1);
381-
rtc->carry_irq = platform_get_irq(pdev, 2);
382-
}
383356

384357
res = platform_get_resource(pdev, IORESOURCE_IO, 0);
385358
if (!res)
@@ -442,25 +415,11 @@ static int __init sh_rtc_probe(struct platform_device *pdev)
442415
}
443416
#endif
444417

445-
if (rtc->carry_irq <= 0) {
446-
/* register shared periodic/carry/alarm irq */
447-
ret = devm_request_irq(&pdev->dev, rtc->periodic_irq,
448-
sh_rtc_shared, 0, "sh-rtc", rtc);
449-
if (unlikely(ret)) {
450-
dev_err(&pdev->dev,
451-
"request IRQ failed with %d, IRQ %d\n", ret,
452-
rtc->periodic_irq);
453-
goto err_unmap;
454-
}
455-
} else {
456-
ret = devm_request_irq(&pdev->dev, rtc->alarm_irq,
457-
sh_rtc_alarm, 0, "sh-rtc alarm", rtc);
458-
if (unlikely(ret)) {
459-
dev_err(&pdev->dev,
460-
"request alarm IRQ failed with %d, IRQ %d\n",
461-
ret, rtc->alarm_irq);
462-
goto err_unmap;
463-
}
418+
ret = devm_request_irq(&pdev->dev, rtc->alarm_irq, sh_rtc_alarm, 0, "sh-rtc", rtc);
419+
if (ret) {
420+
dev_err(&pdev->dev, "request alarm IRQ failed with %d, IRQ %d\n",
421+
ret, rtc->alarm_irq);
422+
goto err_unmap;
464423
}
465424

466425
platform_set_drvdata(pdev, rtc);
@@ -503,30 +462,22 @@ static void __exit sh_rtc_remove(struct platform_device *pdev)
503462
clk_disable(rtc->clk);
504463
}
505464

506-
static void sh_rtc_set_irq_wake(struct device *dev, int enabled)
465+
static int __maybe_unused sh_rtc_suspend(struct device *dev)
507466
{
508467
struct sh_rtc *rtc = dev_get_drvdata(dev);
509468

510-
irq_set_irq_wake(rtc->periodic_irq, enabled);
511-
512-
if (rtc->carry_irq > 0) {
513-
irq_set_irq_wake(rtc->carry_irq, enabled);
514-
irq_set_irq_wake(rtc->alarm_irq, enabled);
515-
}
516-
}
517-
518-
static int __maybe_unused sh_rtc_suspend(struct device *dev)
519-
{
520469
if (device_may_wakeup(dev))
521-
sh_rtc_set_irq_wake(dev, 1);
470+
irq_set_irq_wake(rtc->alarm_irq, 1);
522471

523472
return 0;
524473
}
525474

526475
static int __maybe_unused sh_rtc_resume(struct device *dev)
527476
{
477+
struct sh_rtc *rtc = dev_get_drvdata(dev);
478+
528479
if (device_may_wakeup(dev))
529-
sh_rtc_set_irq_wake(dev, 0);
480+
irq_set_irq_wake(rtc->alarm_irq, 0);
530481

531482
return 0;
532483
}

0 commit comments

Comments
 (0)