@@ -89,18 +89,19 @@ struct sh_rtc {
89
89
unsigned long regsize ;
90
90
struct resource * res ;
91
91
int alarm_irq ;
92
- int periodic_irq ;
93
- int carry_irq ;
94
92
struct clk * clk ;
95
93
struct rtc_device * rtc_dev ;
96
94
spinlock_t lock ;
97
95
unsigned long capabilities ; /* See asm/rtc.h for cap bits */
98
96
};
99
97
100
- static int __sh_rtc_alarm ( struct sh_rtc * rtc )
98
+ static irqreturn_t sh_rtc_alarm ( int irq , void * dev_id )
101
99
{
100
+ struct sh_rtc * rtc = dev_id ;
102
101
unsigned int tmp , pending ;
103
102
103
+ spin_lock (& rtc -> lock );
104
+
104
105
tmp = readb (rtc -> regbase + RCR1 );
105
106
pending = tmp & RCR1_AF ;
106
107
tmp &= ~(RCR1_AF | RCR1_AIE );
@@ -109,31 +110,9 @@ static int __sh_rtc_alarm(struct sh_rtc *rtc)
109
110
if (pending )
110
111
rtc_update_irq (rtc -> rtc_dev , 1 , RTC_AF | RTC_IRQF );
111
112
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 );
134
113
spin_unlock (& rtc -> lock );
135
114
136
- return IRQ_RETVAL (ret );
115
+ return IRQ_RETVAL (pending );
137
116
}
138
117
139
118
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)
364
343
365
344
spin_lock_init (& rtc -> lock );
366
345
367
- /* get periodic/carry/alarm irqs */
368
346
ret = platform_get_irq (pdev , 0 );
369
347
if (unlikely (ret <= 0 )) {
370
348
dev_err (& pdev -> dev , "No IRQ resource\n" );
371
349
return - ENOENT ;
372
350
}
373
351
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 )
377
353
rtc -> alarm_irq = platform_get_irq (pdev , 2 );
378
- } else {
354
+ else
379
355
rtc -> alarm_irq = ret ;
380
- rtc -> periodic_irq = platform_get_irq (pdev , 1 );
381
- rtc -> carry_irq = platform_get_irq (pdev , 2 );
382
- }
383
356
384
357
res = platform_get_resource (pdev , IORESOURCE_IO , 0 );
385
358
if (!res )
@@ -442,25 +415,11 @@ static int __init sh_rtc_probe(struct platform_device *pdev)
442
415
}
443
416
#endif
444
417
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 ;
464
423
}
465
424
466
425
platform_set_drvdata (pdev , rtc );
@@ -503,30 +462,22 @@ static void __exit sh_rtc_remove(struct platform_device *pdev)
503
462
clk_disable (rtc -> clk );
504
463
}
505
464
506
- static void sh_rtc_set_irq_wake (struct device * dev , int enabled )
465
+ static int __maybe_unused sh_rtc_suspend (struct device * dev )
507
466
{
508
467
struct sh_rtc * rtc = dev_get_drvdata (dev );
509
468
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
- {
520
469
if (device_may_wakeup (dev ))
521
- sh_rtc_set_irq_wake ( dev , 1 );
470
+ irq_set_irq_wake ( rtc -> alarm_irq , 1 );
522
471
523
472
return 0 ;
524
473
}
525
474
526
475
static int __maybe_unused sh_rtc_resume (struct device * dev )
527
476
{
477
+ struct sh_rtc * rtc = dev_get_drvdata (dev );
478
+
528
479
if (device_may_wakeup (dev ))
529
- sh_rtc_set_irq_wake ( dev , 0 );
480
+ irq_set_irq_wake ( rtc -> alarm_irq , 0 );
530
481
531
482
return 0 ;
532
483
}
0 commit comments