From 8164693d14e919e32cf5eb3c89947bfcb68cbddf Mon Sep 17 00:00:00 2001 From: Dave Jones Date: Thu, 30 May 2002 20:46:34 -0700 Subject: [PATCH] ite_gpio region handling cleanups --- drivers/char/ite_gpio.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/drivers/char/ite_gpio.c b/drivers/char/ite_gpio.c index a886720db9ff..73104775e7e0 100644 --- a/drivers/char/ite_gpio.c +++ b/drivers/char/ite_gpio.c @@ -391,13 +391,14 @@ int __init ite_gpio_init(void) { int i; - misc_register(&ite_gpio_miscdev); + if (misc_register(&ite_gpio_miscdev)) + return -ENODEV; - if (check_region(ite_gpio_base, 0x1c) < 0 ) { - return -ENODEV; - } else { - request_region(ite_gpio_base, 0x1c, "ITE GPIO"); - } + if (!request_region(ite_gpio_base, 0x1c, "ITE GPIO")) + { + misc_deregister(&ite_gpio_miscdev); + return -EIO; + } /* initialize registers */ ITE_GPACR = 0xffff; @@ -407,13 +408,18 @@ int __init ite_gpio_init(void) ITE_GPBICR = 0x00ff; ITE_GPCICR = 0x00ff; ITE_GCR = 0; - + for (i = 0; i < MAX_GPIO_LINE; i++) { ite_gpio_irq_pending[i]=0; init_waitqueue_head(&ite_gpio_wait[i]); } - if (request_irq(ite_gpio_irq, ite_gpio_irq_handler, SA_SHIRQ, "gpio", 0) < 0) + + if (request_irq(ite_gpio_irq, ite_gpio_irq_handler, SA_SHIRQ, "gpio", 0) < 0) { + misc_deregister(&ite_gpio_miscdev); + release_region(ite_gpio_base, 0x1c); return 0; + } + printk("GPIO at 0x%x (irq = %d)\n", ite_gpio_base, ite_gpio_irq); return 0; -- cgit v1.2.3