Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio: 104-dio-48e: Use devm_request_region

By the time request_region is called in the ACCES 104-DIO-48E GPIO
driver, a corresponding device structure has already been allocated. The
devm_request_region function should be used to help simplify the cleanup
code and reduce the possible points of failure.

Signed-off-by: William Breathitt Gray <vilhelm.gray@gmail.com>
Reviewed-by: Alexandre Courbot <acourbot@nvidia.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

authored by

William Breathitt Gray and committed by
Linus Walleij
aa6c3602 22aeddb5

+8 -17
+8 -17
drivers/gpio/gpio-104-dio-48e.c
··· 40 40 * @control: Control registers state 41 41 * @lock: synchronization lock to prevent I/O race conditions 42 42 * @base: base port address of the GPIO device 43 - * @extent: extent of port address region of the GPIO device 44 43 * @irq: Interrupt line number 45 44 * @irq_mask: I/O bits affected by interrupts 46 45 */ ··· 50 51 unsigned char control[2]; 51 52 spinlock_t lock; 52 53 unsigned base; 53 - unsigned extent; 54 54 unsigned irq; 55 55 unsigned char irq_mask; 56 56 }; ··· 308 310 if (!dio48egpio) 309 311 return -ENOMEM; 310 312 311 - if (!request_region(base, extent, name)) { 312 - dev_err(dev, "Unable to lock %s port addresses (0x%X-0x%X)\n", 313 - name, base, base + extent); 314 - err = -EBUSY; 315 - goto err_lock_io_port; 313 + if (!devm_request_region(dev, base, extent, name)) { 314 + dev_err(dev, "Unable to lock port addresses (0x%X-0x%X)\n", 315 + base, base + extent); 316 + return -EBUSY; 316 317 } 317 318 318 319 dio48egpio->chip.label = name; ··· 325 328 dio48egpio->chip.get = dio48e_gpio_get; 326 329 dio48egpio->chip.set = dio48e_gpio_set; 327 330 dio48egpio->base = base; 328 - dio48egpio->extent = extent; 329 331 dio48egpio->irq = irq; 330 332 331 333 spin_lock_init(&dio48egpio->lock); ··· 334 338 err = gpiochip_add_data(&dio48egpio->chip, dio48egpio); 335 339 if (err) { 336 340 dev_err(dev, "GPIO registering failed (%d)\n", err); 337 - goto err_gpio_register; 341 + return err; 338 342 } 339 343 340 344 /* initialize all GPIO as output */ ··· 356 360 handle_edge_irq, IRQ_TYPE_NONE); 357 361 if (err) { 358 362 dev_err(dev, "Could not add irqchip (%d)\n", err); 359 - goto err_gpiochip_irqchip_add; 363 + goto err_gpiochip_remove; 360 364 } 361 365 362 366 err = request_irq(irq, dio48e_irq_handler, 0, name, dio48egpio); 363 367 if (err) { 364 368 dev_err(dev, "IRQ handler registering failed (%d)\n", err); 365 - goto err_request_irq; 369 + goto err_gpiochip_remove; 366 370 } 367 371 368 372 return 0; 369 373 370 - err_request_irq: 371 - err_gpiochip_irqchip_add: 374 + err_gpiochip_remove: 372 375 gpiochip_remove(&dio48egpio->chip); 373 - err_gpio_register: 374 - release_region(base, extent); 375 - err_lock_io_port: 376 376 return err; 377 377 } 378 378 ··· 378 386 379 387 free_irq(dio48egpio->irq, dio48egpio); 380 388 gpiochip_remove(&dio48egpio->chip); 381 - release_region(dio48egpio->base, dio48egpio->extent); 382 389 383 390 return 0; 384 391 }