@@ -249,20 +249,11 @@ static int gb_pwm_probe(struct gbphy_device *gbphy_dev,
249
249
struct pwm_chip * chip ;
250
250
int ret , npwm ;
251
251
252
- pwmc = kzalloc (sizeof (* pwmc ), GFP_KERNEL );
253
- if (!pwmc )
254
- return - ENOMEM ;
255
-
256
252
connection = gb_connection_create (gbphy_dev -> bundle ,
257
253
le16_to_cpu (gbphy_dev -> cport_desc -> id ),
258
254
NULL );
259
- if (IS_ERR (connection )) {
260
- ret = PTR_ERR (connection );
261
- goto exit_pwmc_free ;
262
- }
263
-
264
- pwmc -> connection = connection ;
265
- gb_gbphy_set_data (gbphy_dev , chip );
255
+ if (IS_ERR (connection ))
256
+ return PTR_ERR (connection );
266
257
267
258
ret = gb_connection_enable (connection );
268
259
if (ret )
@@ -274,28 +265,34 @@ static int gb_pwm_probe(struct gbphy_device *gbphy_dev,
274
265
goto exit_connection_disable ;
275
266
npwm = ret ;
276
267
277
- chip = & pwmc -> chip ;
268
+ chip = pwmchip_alloc (& gbphy_dev -> dev , npwm , sizeof (* pwmc ));
269
+ if (IS_ERR (chip )) {
270
+ ret = PTR_ERR (chip );
271
+ goto exit_connection_disable ;
272
+ }
273
+ gb_gbphy_set_data (gbphy_dev , chip );
274
+
275
+ pwmc = pwm_chip_to_gb_pwm_chip (chip );
276
+ pwmc -> connection = connection ;
278
277
279
- chip -> dev = & gbphy_dev -> dev ;
280
278
chip -> ops = & gb_pwm_ops ;
281
- chip -> npwm = npwm ;
282
279
283
280
ret = pwmchip_add (chip );
284
281
if (ret ) {
285
282
dev_err (& gbphy_dev -> dev ,
286
283
"failed to register PWM: %d\n" , ret );
287
- goto exit_connection_disable ;
284
+ goto exit_pwmchip_put ;
288
285
}
289
286
290
287
gbphy_runtime_put_autosuspend (gbphy_dev );
291
288
return 0 ;
292
289
290
+ exit_pwmchip_put :
291
+ pwmchip_put (chip );
293
292
exit_connection_disable :
294
293
gb_connection_disable (connection );
295
294
exit_connection_destroy :
296
295
gb_connection_destroy (connection );
297
- exit_pwmc_free :
298
- kfree (pwmc );
299
296
return ret ;
300
297
}
301
298
@@ -311,9 +308,9 @@ static void gb_pwm_remove(struct gbphy_device *gbphy_dev)
311
308
gbphy_runtime_get_noresume (gbphy_dev );
312
309
313
310
pwmchip_remove (chip );
311
+ pwmchip_put (chip );
314
312
gb_connection_disable (connection );
315
313
gb_connection_destroy (connection );
316
- kfree (pwmc );
317
314
}
318
315
319
316
static const struct gbphy_device_id gb_pwm_id_table [] = {
0 commit comments