summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDave Jones <davej@suse.de>2002-05-30 20:46:34 -0700
committerLinus Torvalds <torvalds@penguin.transmeta.com>2002-05-30 20:46:34 -0700
commit8164693d14e919e32cf5eb3c89947bfcb68cbddf (patch)
treea156e713370d1112a3f827748ea8a1e09beb4eab
parent8314242464072f2f713d67dff7a911851705adb0 (diff)
[PATCH] ite_gpio region handling cleanups
-rw-r--r--drivers/char/ite_gpio.c22
1 files 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;