hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/clocksource/clps711x-timer.c
....@@ -1,12 +1,8 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * Cirrus Logic CLPS711X clocksource driver
34 *
45 * Copyright (C) 2014 Alexander Shiyan <shc_work@mail.ru>
5
- *
6
- * This program is free software; you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation; either version 2 of the License, or
9
- * (at your option) any later version.
106 */
117
128 #include <linux/clk.h>
....@@ -31,16 +27,9 @@
3127 return ~readw(tcd);
3228 }
3329
34
-static int __init _clps711x_clksrc_init(struct clk *clock, void __iomem *base)
30
+static void __init clps711x_clksrc_init(struct clk *clock, void __iomem *base)
3531 {
36
- unsigned long rate;
37
-
38
- if (!base)
39
- return -ENOMEM;
40
- if (IS_ERR(clock))
41
- return PTR_ERR(clock);
42
-
43
- rate = clk_get_rate(clock);
32
+ unsigned long rate = clk_get_rate(clock);
4433
4534 tcd = base;
4635
....@@ -48,8 +37,6 @@
4837 clocksource_mmio_readw_down);
4938
5039 sched_clock_register(clps711x_sched_clock_read, 16, rate);
51
-
52
- return 0;
5340 }
5441
5542 static irqreturn_t clps711x_timer_interrupt(int irq, void *dev_id)
....@@ -66,13 +53,6 @@
6653 {
6754 struct clock_event_device *clkevt;
6855 unsigned long rate;
69
-
70
- if (!irq)
71
- return -EINVAL;
72
- if (!base)
73
- return -ENOMEM;
74
- if (IS_ERR(clock))
75
- return PTR_ERR(clock);
7656
7757 clkevt = kzalloc(sizeof(*clkevt), GFP_KERNEL);
7858 if (!clkevt)
....@@ -93,31 +73,29 @@
9373 "clps711x-timer", clkevt);
9474 }
9575
96
-void __init clps711x_clksrc_init(void __iomem *tc1_base, void __iomem *tc2_base,
97
- unsigned int irq)
98
-{
99
- struct clk *tc1 = clk_get_sys("clps711x-timer.0", NULL);
100
- struct clk *tc2 = clk_get_sys("clps711x-timer.1", NULL);
101
-
102
- BUG_ON(_clps711x_clksrc_init(tc1, tc1_base));
103
- BUG_ON(_clps711x_clkevt_init(tc2, tc2_base, irq));
104
-}
105
-
106
-#ifdef CONFIG_TIMER_OF
10776 static int __init clps711x_timer_init(struct device_node *np)
10877 {
10978 unsigned int irq = irq_of_parse_and_map(np, 0);
11079 struct clk *clock = of_clk_get(np, 0);
11180 void __iomem *base = of_iomap(np, 0);
11281
82
+ if (!base)
83
+ return -ENOMEM;
84
+ if (!irq)
85
+ return -EINVAL;
86
+ if (IS_ERR(clock))
87
+ return PTR_ERR(clock);
88
+
11389 switch (of_alias_get_id(np, "timer")) {
11490 case CLPS711X_CLKSRC_CLOCKSOURCE:
115
- return _clps711x_clksrc_init(clock, base);
91
+ clps711x_clksrc_init(clock, base);
92
+ break;
11693 case CLPS711X_CLKSRC_CLOCKEVENT:
11794 return _clps711x_clkevt_init(clock, base, irq);
11895 default:
11996 return -EINVAL;
12097 }
98
+
99
+ return 0;
121100 }
122101 TIMER_OF_DECLARE(clps711x, "cirrus,ep7209-timer", clps711x_timer_init);
123
-#endif