@@ -180,26 +180,29 @@ static int __init at91sam926x_pit_dt_init(struct device_node *node)
180
180
data -> base = of_iomap (node , 0 );
181
181
if (!data -> base ) {
182
182
pr_err ("Could not map PIT address\n" );
183
- return - ENXIO ;
183
+ ret = - ENXIO ;
184
+ goto exit ;
184
185
}
185
186
186
187
data -> mck = of_clk_get (node , 0 );
187
188
if (IS_ERR (data -> mck )) {
188
189
pr_err ("Unable to get mck clk\n" );
189
- return PTR_ERR (data -> mck );
190
+ ret = PTR_ERR (data -> mck );
191
+ goto exit ;
190
192
}
191
193
192
194
ret = clk_prepare_enable (data -> mck );
193
195
if (ret ) {
194
196
pr_err ("Unable to enable mck\n" );
195
- return ret ;
197
+ goto exit ;
196
198
}
197
199
198
200
/* Get the interrupts property */
199
201
data -> irq = irq_of_parse_and_map (node , 0 );
200
202
if (!data -> irq ) {
201
203
pr_err ("Unable to get IRQ from DT\n" );
202
- return - EINVAL ;
204
+ ret = - EINVAL ;
205
+ goto exit ;
203
206
}
204
207
205
208
/*
@@ -227,7 +230,7 @@ static int __init at91sam926x_pit_dt_init(struct device_node *node)
227
230
ret = clocksource_register_hz (& data -> clksrc , pit_rate );
228
231
if (ret ) {
229
232
pr_err ("Failed to register clocksource\n" );
230
- return ret ;
233
+ goto exit ;
231
234
}
232
235
233
236
/* Set up irq handler */
@@ -236,7 +239,8 @@ static int __init at91sam926x_pit_dt_init(struct device_node *node)
236
239
"at91_tick" , data );
237
240
if (ret ) {
238
241
pr_err ("Unable to setup IRQ\n" );
239
- return ret ;
242
+ clocksource_unregister (& data -> clksrc );
243
+ goto exit ;
240
244
}
241
245
242
246
/* Set up and register clockevents */
@@ -254,6 +258,10 @@ static int __init at91sam926x_pit_dt_init(struct device_node *node)
254
258
clockevents_register_device (& data -> clkevt );
255
259
256
260
return 0 ;
261
+
262
+ exit :
263
+ kfree (data );
264
+ return ret ;
257
265
}
258
266
TIMER_OF_DECLARE (at91sam926x_pit , "atmel,at91sam9260-pit" ,
259
267
at91sam926x_pit_dt_init );
0 commit comments