Commit 6c7dd64abdd0d07bab3c1cc4327dc328cb70005a
Committed by
Greg Kroah-Hartman
1 parent
01fe7b43e7
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
misc/ep93xx_pwm: use managed device resources
Use managed device resources to clean up the probe/remove. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Acked-by: Arnd Bergmann <arnd@arndb.de> Reviewed-by: Ryan Mallon <rmallon@gmail.com> Cc: Matthieu Crapet <mcrapet@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Showing 1 changed file with 20 additions and 53 deletions Side-by-side Diff
drivers/misc/ep93xx_pwm.c
... | ... | @@ -273,50 +273,33 @@ |
273 | 273 | { |
274 | 274 | struct ep93xx_pwm *pwm; |
275 | 275 | struct resource *res; |
276 | - int err; | |
276 | + int ret; | |
277 | 277 | |
278 | - err = ep93xx_pwm_acquire_gpio(pdev); | |
279 | - if (err) | |
280 | - return err; | |
278 | + pwm = devm_kzalloc(&pdev->dev, sizeof(*pwm), GFP_KERNEL); | |
279 | + if (!pwm) | |
280 | + return -ENOMEM; | |
281 | 281 | |
282 | - pwm = kzalloc(sizeof(struct ep93xx_pwm), GFP_KERNEL); | |
283 | - if (!pwm) { | |
284 | - err = -ENOMEM; | |
285 | - goto fail_no_mem; | |
286 | - } | |
282 | + pwm->clk = devm_clk_get(&pdev->dev, "pwm_clk"); | |
283 | + if (IS_ERR(pwm->clk)) | |
284 | + return PTR_ERR(pwm->clk); | |
287 | 285 | |
288 | 286 | res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
289 | - if (res == NULL) { | |
290 | - err = -ENXIO; | |
291 | - goto fail_no_mem_resource; | |
292 | - } | |
287 | + pwm->mmio_base = devm_ioremap_resource(&pdev->dev, res); | |
288 | + if (IS_ERR(pwm->mmio_base)) | |
289 | + return PTR_ERR(pwm->mmio_base); | |
293 | 290 | |
294 | - res = request_mem_region(res->start, resource_size(res), pdev->name); | |
295 | - if (res == NULL) { | |
296 | - err = -EBUSY; | |
297 | - goto fail_no_mem_resource; | |
298 | - } | |
291 | + ret = ep93xx_pwm_acquire_gpio(pdev); | |
292 | + if (ret) | |
293 | + return ret; | |
299 | 294 | |
300 | - pwm->mmio_base = ioremap(res->start, resource_size(res)); | |
301 | - if (pwm->mmio_base == NULL) { | |
302 | - err = -ENXIO; | |
303 | - goto fail_no_ioremap; | |
295 | + ret = sysfs_create_group(&pdev->dev.kobj, &ep93xx_pwm_sysfs_files); | |
296 | + if (ret) { | |
297 | + ep93xx_pwm_release_gpio(pdev); | |
298 | + return ret; | |
304 | 299 | } |
305 | 300 | |
306 | - err = sysfs_create_group(&pdev->dev.kobj, &ep93xx_pwm_sysfs_files); | |
307 | - if (err) | |
308 | - goto fail_no_sysfs; | |
309 | - | |
310 | - pwm->clk = clk_get(&pdev->dev, "pwm_clk"); | |
311 | - if (IS_ERR(pwm->clk)) { | |
312 | - err = PTR_ERR(pwm->clk); | |
313 | - goto fail_no_clk; | |
314 | - } | |
315 | - | |
316 | 301 | pwm->duty_percent = 50; |
317 | 302 | |
318 | - platform_set_drvdata(pdev, pwm); | |
319 | - | |
320 | 303 | /* disable pwm at startup. Avoids zero value. */ |
321 | 304 | ep93xx_pwm_disable(pwm); |
322 | 305 | ep93xx_pwm_write_tc(pwm, EP93XX_PWM_MAX_COUNT); |
323 | 306 | |
324 | 307 | |
325 | 308 | |
326 | 309 | |
... | ... | @@ -324,33 +307,17 @@ |
324 | 307 | |
325 | 308 | clk_enable(pwm->clk); |
326 | 309 | |
310 | + platform_set_drvdata(pdev, pwm); | |
327 | 311 | return 0; |
328 | - | |
329 | -fail_no_clk: | |
330 | - sysfs_remove_group(&pdev->dev.kobj, &ep93xx_pwm_sysfs_files); | |
331 | -fail_no_sysfs: | |
332 | - iounmap(pwm->mmio_base); | |
333 | -fail_no_ioremap: | |
334 | - release_mem_region(res->start, resource_size(res)); | |
335 | -fail_no_mem_resource: | |
336 | - kfree(pwm); | |
337 | -fail_no_mem: | |
338 | - ep93xx_pwm_release_gpio(pdev); | |
339 | - return err; | |
340 | 312 | } |
341 | 313 | |
342 | 314 | static int __exit ep93xx_pwm_remove(struct platform_device *pdev) |
343 | 315 | { |
344 | 316 | struct ep93xx_pwm *pwm = platform_get_drvdata(pdev); |
345 | - struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | |
346 | 317 | |
347 | 318 | ep93xx_pwm_disable(pwm); |
348 | 319 | clk_disable(pwm->clk); |
349 | - clk_put(pwm->clk); | |
350 | 320 | sysfs_remove_group(&pdev->dev.kobj, &ep93xx_pwm_sysfs_files); |
351 | - iounmap(pwm->mmio_base); | |
352 | - release_mem_region(res->start, resource_size(res)); | |
353 | - kfree(pwm); | |
354 | 321 | ep93xx_pwm_release_gpio(pdev); |
355 | 322 | |
356 | 323 | return 0; |