diff options
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-cmos.c | 23 | ||||
| -rw-r--r-- | drivers/rtc/rtc-ds1374.c | 4 | ||||
| -rw-r--r-- | drivers/rtc/rtc-vr41xx.c | 4 | 
3 files changed, 22 insertions, 9 deletions
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index 23e10b6263d..f7a4701bf86 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c @@ -1174,23 +1174,34 @@ static struct platform_driver cmos_platform_driver = {  	}  }; +#ifdef CONFIG_PNP +static bool pnp_driver_registered; +#endif +static bool platform_driver_registered; +  static int __init cmos_init(void)  {  	int retval = 0;  #ifdef	CONFIG_PNP -	pnp_register_driver(&cmos_pnp_driver); +	retval = pnp_register_driver(&cmos_pnp_driver); +	if (retval == 0) +		pnp_driver_registered = true;  #endif -	if (!cmos_rtc.dev) +	if (!cmos_rtc.dev) {  		retval = platform_driver_probe(&cmos_platform_driver,  					       cmos_platform_probe); +		if (retval == 0) +			platform_driver_registered = true; +	}  	if (retval == 0)  		return 0;  #ifdef	CONFIG_PNP -	pnp_unregister_driver(&cmos_pnp_driver); +	if (pnp_driver_registered) +		pnp_unregister_driver(&cmos_pnp_driver);  #endif  	return retval;  } @@ -1199,9 +1210,11 @@ module_init(cmos_init);  static void __exit cmos_exit(void)  {  #ifdef	CONFIG_PNP -	pnp_unregister_driver(&cmos_pnp_driver); +	if (pnp_driver_registered) +		pnp_unregister_driver(&cmos_pnp_driver);  #endif -	platform_driver_unregister(&cmos_platform_driver); +	if (platform_driver_registered) +		platform_driver_unregister(&cmos_platform_driver);  }  module_exit(cmos_exit); diff --git a/drivers/rtc/rtc-ds1374.c b/drivers/rtc/rtc-ds1374.c index 32b27739ec2..713f7bf5afb 100644 --- a/drivers/rtc/rtc-ds1374.c +++ b/drivers/rtc/rtc-ds1374.c @@ -283,7 +283,7 @@ static void ds1374_work(struct work_struct *work)  	stat = i2c_smbus_read_byte_data(client, DS1374_REG_SR);  	if (stat < 0) -		return; +		goto unlock;  	if (stat & DS1374_REG_SR_AF) {  		stat &= ~DS1374_REG_SR_AF; @@ -302,7 +302,7 @@ static void ds1374_work(struct work_struct *work)  out:  	if (!ds1374->exiting)  		enable_irq(client->irq); - +unlock:  	mutex_unlock(&ds1374->mutex);  } diff --git a/drivers/rtc/rtc-vr41xx.c b/drivers/rtc/rtc-vr41xx.c index f11297aff85..2c839d0d21b 100644 --- a/drivers/rtc/rtc-vr41xx.c +++ b/drivers/rtc/rtc-vr41xx.c @@ -1,7 +1,7 @@  /*   *  Driver for NEC VR4100 series Real Time Clock unit.   * - *  Copyright (C) 2003-2008  Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> + *  Copyright (C) 2003-2008  Yoichi Yuasa <yuasa@linux-mips.org>   *   *  This program is free software; you can redistribute it and/or modify   *  it under the terms of the GNU General Public License as published by @@ -33,7 +33,7 @@  #include <asm/io.h>  #include <asm/uaccess.h> -MODULE_AUTHOR("Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>"); +MODULE_AUTHOR("Yoichi Yuasa <yuasa@linux-mips.org>");  MODULE_DESCRIPTION("NEC VR4100 series RTC driver");  MODULE_LICENSE("GPL v2");  |