diff options
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-bfin.c | 30 | ||||
| -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 | 
4 files changed, 37 insertions, 24 deletions
| diff --git a/drivers/rtc/rtc-bfin.c b/drivers/rtc/rtc-bfin.c index aafd3e6ebb0d..a118eb0f1e67 100644 --- a/drivers/rtc/rtc-bfin.c +++ b/drivers/rtc/rtc-bfin.c | |||
| @@ -1,8 +1,8 @@ | |||
| 1 | /* | 1 | /* | 
| 2 | * Blackfin On-Chip Real Time Clock Driver | 2 | * Blackfin On-Chip Real Time Clock Driver | 
| 3 | * Supports BF52[257]/BF53[123]/BF53[467]/BF54[24789] | 3 | * Supports BF51x/BF52x/BF53[123]/BF53[467]/BF54x | 
| 4 | * | 4 | * | 
| 5 | * Copyright 2004-2008 Analog Devices Inc. | 5 | * Copyright 2004-2009 Analog Devices Inc. | 
| 6 | * | 6 | * | 
| 7 | * Enter bugs at http://blackfin.uclinux.org/ | 7 | * Enter bugs at http://blackfin.uclinux.org/ | 
| 8 | * | 8 | * | 
| @@ -363,7 +363,7 @@ static int __devinit bfin_rtc_probe(struct platform_device *pdev) | |||
| 363 | struct bfin_rtc *rtc; | 363 | struct bfin_rtc *rtc; | 
| 364 | struct device *dev = &pdev->dev; | 364 | struct device *dev = &pdev->dev; | 
| 365 | int ret = 0; | 365 | int ret = 0; | 
| 366 | unsigned long timeout; | 366 | unsigned long timeout = jiffies + HZ; | 
| 367 | 367 | ||
| 368 | dev_dbg_stamp(dev); | 368 | dev_dbg_stamp(dev); | 
| 369 | 369 | ||
| @@ -374,32 +374,32 @@ static int __devinit bfin_rtc_probe(struct platform_device *pdev) | |||
| 374 | platform_set_drvdata(pdev, rtc); | 374 | platform_set_drvdata(pdev, rtc); | 
| 375 | device_init_wakeup(dev, 1); | 375 | device_init_wakeup(dev, 1); | 
| 376 | 376 | ||
| 377 | /* Register our RTC with the RTC framework */ | ||
| 378 | rtc->rtc_dev = rtc_device_register(pdev->name, dev, &bfin_rtc_ops, | ||
| 379 | THIS_MODULE); | ||
| 380 | if (unlikely(IS_ERR(rtc->rtc_dev))) { | ||
| 381 | ret = PTR_ERR(rtc->rtc_dev); | ||
| 382 | goto err; | ||
| 383 | } | ||
| 384 | |||
| 377 | /* Grab the IRQ and init the hardware */ | 385 | /* Grab the IRQ and init the hardware */ | 
| 378 | ret = request_irq(IRQ_RTC, bfin_rtc_interrupt, IRQF_SHARED, pdev->name, dev); | 386 | ret = request_irq(IRQ_RTC, bfin_rtc_interrupt, IRQF_SHARED, pdev->name, dev); | 
| 379 | if (unlikely(ret)) | 387 | if (unlikely(ret)) | 
| 380 | goto err; | 388 | goto err_reg; | 
| 381 | /* sometimes the bootloader touched things, but the write complete was not | 389 | /* sometimes the bootloader touched things, but the write complete was not | 
| 382 | * enabled, so let's just do a quick timeout here since the IRQ will not fire ... | 390 | * enabled, so let's just do a quick timeout here since the IRQ will not fire ... | 
| 383 | */ | 391 | */ | 
| 384 | timeout = jiffies + HZ; | ||
| 385 | while (bfin_read_RTC_ISTAT() & RTC_ISTAT_WRITE_PENDING) | 392 | while (bfin_read_RTC_ISTAT() & RTC_ISTAT_WRITE_PENDING) | 
| 386 | if (time_after(jiffies, timeout)) | 393 | if (time_after(jiffies, timeout)) | 
| 387 | break; | 394 | break; | 
| 388 | bfin_rtc_reset(dev, RTC_ISTAT_WRITE_COMPLETE); | 395 | bfin_rtc_reset(dev, RTC_ISTAT_WRITE_COMPLETE); | 
| 389 | bfin_write_RTC_SWCNT(0); | 396 | bfin_write_RTC_SWCNT(0); | 
| 390 | 397 | ||
| 391 | /* Register our RTC with the RTC framework */ | ||
| 392 | rtc->rtc_dev = rtc_device_register(pdev->name, dev, &bfin_rtc_ops, THIS_MODULE); | ||
| 393 | if (unlikely(IS_ERR(rtc->rtc_dev))) { | ||
| 394 | ret = PTR_ERR(rtc->rtc_dev); | ||
| 395 | goto err_irq; | ||
| 396 | } | ||
| 397 | |||
| 398 | return 0; | 398 | return 0; | 
| 399 | 399 | ||
| 400 | err_irq: | 400 | err_reg: | 
| 401 | free_irq(IRQ_RTC, dev); | 401 | rtc_device_unregister(rtc->rtc_dev); | 
| 402 | err: | 402 | err: | 
| 403 | kfree(rtc); | 403 | kfree(rtc); | 
| 404 | return ret; | 404 | return ret; | 
| 405 | } | 405 | } | 
| diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index 23e10b6263d6..f7a4701bf863 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c | |||
| @@ -1174,23 +1174,34 @@ static struct platform_driver cmos_platform_driver = { | |||
| 1174 | } | 1174 | } | 
| 1175 | }; | 1175 | }; | 
| 1176 | 1176 | ||
| 1177 | #ifdef CONFIG_PNP | ||
| 1178 | static bool pnp_driver_registered; | ||
| 1179 | #endif | ||
| 1180 | static bool platform_driver_registered; | ||
| 1181 | |||
| 1177 | static int __init cmos_init(void) | 1182 | static int __init cmos_init(void) | 
| 1178 | { | 1183 | { | 
| 1179 | int retval = 0; | 1184 | int retval = 0; | 
| 1180 | 1185 | ||
| 1181 | #ifdef CONFIG_PNP | 1186 | #ifdef CONFIG_PNP | 
| 1182 | pnp_register_driver(&cmos_pnp_driver); | 1187 | retval = pnp_register_driver(&cmos_pnp_driver); | 
| 1188 | if (retval == 0) | ||
| 1189 | pnp_driver_registered = true; | ||
| 1183 | #endif | 1190 | #endif | 
| 1184 | 1191 | ||
| 1185 | if (!cmos_rtc.dev) | 1192 | if (!cmos_rtc.dev) { | 
| 1186 | retval = platform_driver_probe(&cmos_platform_driver, | 1193 | retval = platform_driver_probe(&cmos_platform_driver, | 
| 1187 | cmos_platform_probe); | 1194 | cmos_platform_probe); | 
| 1195 | if (retval == 0) | ||
| 1196 | platform_driver_registered = true; | ||
| 1197 | } | ||
| 1188 | 1198 | ||
| 1189 | if (retval == 0) | 1199 | if (retval == 0) | 
| 1190 | return 0; | 1200 | return 0; | 
| 1191 | 1201 | ||
| 1192 | #ifdef CONFIG_PNP | 1202 | #ifdef CONFIG_PNP | 
| 1193 | pnp_unregister_driver(&cmos_pnp_driver); | 1203 | if (pnp_driver_registered) | 
| 1204 | pnp_unregister_driver(&cmos_pnp_driver); | ||
| 1194 | #endif | 1205 | #endif | 
| 1195 | return retval; | 1206 | return retval; | 
| 1196 | } | 1207 | } | 
| @@ -1199,9 +1210,11 @@ module_init(cmos_init); | |||
| 1199 | static void __exit cmos_exit(void) | 1210 | static void __exit cmos_exit(void) | 
| 1200 | { | 1211 | { | 
| 1201 | #ifdef CONFIG_PNP | 1212 | #ifdef CONFIG_PNP | 
| 1202 | pnp_unregister_driver(&cmos_pnp_driver); | 1213 | if (pnp_driver_registered) | 
| 1214 | pnp_unregister_driver(&cmos_pnp_driver); | ||
| 1203 | #endif | 1215 | #endif | 
| 1204 | platform_driver_unregister(&cmos_platform_driver); | 1216 | if (platform_driver_registered) | 
| 1217 | platform_driver_unregister(&cmos_platform_driver); | ||
| 1205 | } | 1218 | } | 
| 1206 | module_exit(cmos_exit); | 1219 | module_exit(cmos_exit); | 
| 1207 | 1220 | ||
| diff --git a/drivers/rtc/rtc-ds1374.c b/drivers/rtc/rtc-ds1374.c index 32b27739ec2a..713f7bf5afb3 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) | |||
| 283 | 283 | ||
| 284 | stat = i2c_smbus_read_byte_data(client, DS1374_REG_SR); | 284 | stat = i2c_smbus_read_byte_data(client, DS1374_REG_SR); | 
| 285 | if (stat < 0) | 285 | if (stat < 0) | 
| 286 | return; | 286 | goto unlock; | 
| 287 | 287 | ||
| 288 | if (stat & DS1374_REG_SR_AF) { | 288 | if (stat & DS1374_REG_SR_AF) { | 
| 289 | stat &= ~DS1374_REG_SR_AF; | 289 | stat &= ~DS1374_REG_SR_AF; | 
| @@ -302,7 +302,7 @@ static void ds1374_work(struct work_struct *work) | |||
| 302 | out: | 302 | out: | 
| 303 | if (!ds1374->exiting) | 303 | if (!ds1374->exiting) | 
| 304 | enable_irq(client->irq); | 304 | enable_irq(client->irq); | 
| 305 | 305 | unlock: | |
| 306 | mutex_unlock(&ds1374->mutex); | 306 | mutex_unlock(&ds1374->mutex); | 
| 307 | } | 307 | } | 
| 308 | 308 | ||
| diff --git a/drivers/rtc/rtc-vr41xx.c b/drivers/rtc/rtc-vr41xx.c index f11297aff854..2c839d0d21bd 100644 --- a/drivers/rtc/rtc-vr41xx.c +++ b/drivers/rtc/rtc-vr41xx.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* | 
| 2 | * Driver for NEC VR4100 series Real Time Clock unit. | 2 | * Driver for NEC VR4100 series Real Time Clock unit. | 
| 3 | * | 3 | * | 
| 4 | * Copyright (C) 2003-2008 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp> | 4 | * Copyright (C) 2003-2008 Yoichi Yuasa <yuasa@linux-mips.org> | 
| 5 | * | 5 | * | 
| 6 | * This program is free software; you can redistribute it and/or modify | 6 | * This program is free software; you can redistribute it and/or modify | 
| 7 | * it under the terms of the GNU General Public License as published by | 7 | * it under the terms of the GNU General Public License as published by | 
| @@ -33,7 +33,7 @@ | |||
| 33 | #include <asm/io.h> | 33 | #include <asm/io.h> | 
| 34 | #include <asm/uaccess.h> | 34 | #include <asm/uaccess.h> | 
| 35 | 35 | ||
| 36 | MODULE_AUTHOR("Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>"); | 36 | MODULE_AUTHOR("Yoichi Yuasa <yuasa@linux-mips.org>"); | 
| 37 | MODULE_DESCRIPTION("NEC VR4100 series RTC driver"); | 37 | MODULE_DESCRIPTION("NEC VR4100 series RTC driver"); | 
| 38 | MODULE_LICENSE("GPL v2"); | 38 | MODULE_LICENSE("GPL v2"); | 
| 39 | 39 | ||
