Commit 6c7dd64abdd0d07bab3c1cc4327dc328cb70005a

Authored by H Hartley Sweeten
Committed by Greg Kroah-Hartman
1 parent 01fe7b43e7

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;