@@ -161,19 +161,22 @@ static int __init moxart_timer_init(struct device_node *node)
161
161
timer -> base = of_iomap (node , 0 );
162
162
if (!timer -> base ) {
163
163
pr_err ("%s: of_iomap failed\n" , node -> full_name );
164
- return - ENXIO ;
164
+ ret = - ENXIO ;
165
+ goto out_free ;
165
166
}
166
167
167
168
irq = irq_of_parse_and_map (node , 0 );
168
169
if (irq <= 0 ) {
169
170
pr_err ("%s: irq_of_parse_and_map failed\n" , node -> full_name );
170
- return - EINVAL ;
171
+ ret = - EINVAL ;
172
+ goto out_unmap ;
171
173
}
172
174
173
175
clk = of_clk_get (node , 0 );
174
176
if (IS_ERR (clk )) {
175
177
pr_err ("%s: of_clk_get failed\n" , node -> full_name );
176
- return PTR_ERR (clk );
178
+ ret = PTR_ERR (clk );
179
+ goto out_unmap ;
177
180
}
178
181
179
182
pclk = clk_get_rate (clk );
@@ -186,7 +189,8 @@ static int __init moxart_timer_init(struct device_node *node)
186
189
timer -> t1_disable_val = ASPEED_TIMER1_DISABLE ;
187
190
} else {
188
191
pr_err ("%s: unknown platform\n" , node -> full_name );
189
- return - EINVAL ;
192
+ ret = - EINVAL ;
193
+ goto out_unmap ;
190
194
}
191
195
192
196
timer -> count_per_tick = DIV_ROUND_CLOSEST (pclk , HZ );
@@ -208,14 +212,14 @@ static int __init moxart_timer_init(struct device_node *node)
208
212
clocksource_mmio_readl_down );
209
213
if (ret ) {
210
214
pr_err ("%s: clocksource_mmio_init failed\n" , node -> full_name );
211
- return ret ;
215
+ goto out_unmap ;
212
216
}
213
217
214
218
ret = request_irq (irq , moxart_timer_interrupt , IRQF_TIMER ,
215
219
node -> name , & timer -> clkevt );
216
220
if (ret ) {
217
221
pr_err ("%s: setup_irq failed\n" , node -> full_name );
218
- return ret ;
222
+ goto out_unmap ;
219
223
}
220
224
221
225
/* Clear match registers */
@@ -241,6 +245,12 @@ static int __init moxart_timer_init(struct device_node *node)
241
245
clockevents_config_and_register (& timer -> clkevt , pclk , 0x4 , 0xfffffffe );
242
246
243
247
return 0 ;
248
+
249
+ out_unmap :
250
+ iounmap (timer -> base );
251
+ out_free :
252
+ kfree (timer );
253
+ return ret ;
244
254
}
245
255
CLOCKSOURCE_OF_DECLARE (moxart , "moxa,moxart-timer" , moxart_timer_init );
246
256
CLOCKSOURCE_OF_DECLARE (aspeed , "aspeed,ast2400-timer" , moxart_timer_init );
0 commit comments