diff options
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/Kconfig | 10 | ||||
| -rw-r--r-- | drivers/rtc/Makefile | 2 | ||||
| -rw-r--r-- | drivers/rtc/rtc-generic.c | 84 | ||||
| -rw-r--r-- | drivers/rtc/rtc-parisc.c | 84 | 
4 files changed, 91 insertions, 89 deletions
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 09d5cd33a3f..13df5133020 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -688,12 +688,14 @@ config RTC_DRV_RS5C313  	help  	  If you say yes here you get support for the Ricoh RS5C313 RTC chips. -config RTC_DRV_PARISC -	tristate "PA-RISC firmware RTC support" +config RTC_DRV_GENERIC +	tristate "Generic RTC support" +	# Please consider writing a new RTC driver instead of using the generic +	# RTC abstraction  	depends on PARISC  	help -	  Say Y or M here to enable RTC support on PA-RISC systems using -	  firmware calls. If you do not know what you are doing, you should +	  Say Y or M here to enable RTC support on systems using the generic +	  RTC abstraction. If you do not know what you are doing, you should  	  just say Y.  config RTC_DRV_PPC diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index e7b09986d26..39cdb9799de 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -56,7 +56,7 @@ obj-$(CONFIG_RTC_DRV_PCF8563)	+= rtc-pcf8563.o  obj-$(CONFIG_RTC_DRV_PCF8583)	+= rtc-pcf8583.o  obj-$(CONFIG_RTC_DRV_PL030)	+= rtc-pl030.o  obj-$(CONFIG_RTC_DRV_PL031)	+= rtc-pl031.o -obj-$(CONFIG_RTC_DRV_PARISC)	+= rtc-parisc.o +obj-$(CONFIG_RTC_DRV_GENERIC)	+= rtc-generic.o  obj-$(CONFIG_RTC_DRV_PPC)	+= rtc-ppc.o  obj-$(CONFIG_RTC_DRV_PXA)	+= rtc-pxa.o  obj-$(CONFIG_RTC_DRV_R9701)	+= rtc-r9701.o diff --git a/drivers/rtc/rtc-generic.c b/drivers/rtc/rtc-generic.c new file mode 100644 index 00000000000..98322004ad2 --- /dev/null +++ b/drivers/rtc/rtc-generic.c @@ -0,0 +1,84 @@ +/* rtc-generic: RTC driver using the generic RTC abstraction + * + * Copyright (C) 2008 Kyle McMartin <kyle@mcmartin.ca> + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/time.h> +#include <linux/platform_device.h> +#include <linux/rtc.h> + +#include <asm/rtc.h> + +static int generic_get_time(struct device *dev, struct rtc_time *tm) +{ +	unsigned int ret = get_rtc_time(tm); + +	if (ret & RTC_BATT_BAD) +		return -EOPNOTSUPP; + +	return rtc_valid_tm(tm); +} + +static int generic_set_time(struct device *dev, struct rtc_time *tm) +{ +	if (set_rtc_time(tm) < 0) +		return -EOPNOTSUPP; + +	return 0; +} + +static const struct rtc_class_ops generic_rtc_ops = { +	.read_time = generic_get_time, +	.set_time = generic_set_time, +}; + +static int __init generic_rtc_probe(struct platform_device *dev) +{ +	struct rtc_device *rtc; + +	rtc = rtc_device_register("rtc-generic", &dev->dev, &generic_rtc_ops, +				  THIS_MODULE); +	if (IS_ERR(rtc)) +		return PTR_ERR(rtc); + +	platform_set_drvdata(dev, rtc); + +	return 0; +} + +static int __exit generic_rtc_remove(struct platform_device *dev) +{ +	struct rtc_device *rtc = platform_get_drvdata(dev); + +	rtc_device_unregister(rtc); + +	return 0; +} + +static struct platform_driver generic_rtc_driver = { +	.driver = { +		.name = "rtc-generic", +		.owner = THIS_MODULE, +	}, +	.remove = __exit_p(generic_rtc_remove), +}; + +static int __init generic_rtc_init(void) +{ +	return platform_driver_probe(&generic_rtc_driver, generic_rtc_probe); +} + +static void __exit generic_rtc_fini(void) +{ +	platform_driver_unregister(&generic_rtc_driver); +} + +module_init(generic_rtc_init); +module_exit(generic_rtc_fini); + +MODULE_AUTHOR("Kyle McMartin <kyle@mcmartin.ca>"); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Generic RTC driver"); +MODULE_ALIAS("platform:rtc-generic"); diff --git a/drivers/rtc/rtc-parisc.c b/drivers/rtc/rtc-parisc.c deleted file mode 100644 index 48ef5b4d016..00000000000 --- a/drivers/rtc/rtc-parisc.c +++ /dev/null @@ -1,84 +0,0 @@ -/* rtc-parisc: RTC for HP PA-RISC firmware - * - * Copyright (C) 2008 Kyle McMartin <kyle@mcmartin.ca> - */ - -#include <linux/kernel.h> -#include <linux/module.h> -#include <linux/time.h> -#include <linux/platform_device.h> -#include <linux/rtc.h> - -#include <asm/rtc.h> - -static int parisc_get_time(struct device *dev, struct rtc_time *tm) -{ -	unsigned int ret = get_rtc_time(tm); - -	if (ret & RTC_BATT_BAD) -		return -EOPNOTSUPP; - -	return rtc_valid_tm(tm); -} - -static int parisc_set_time(struct device *dev, struct rtc_time *tm) -{ -	if (set_rtc_time(tm) < 0) -		return -EOPNOTSUPP; - -	return 0; -} - -static const struct rtc_class_ops parisc_rtc_ops = { -	.read_time = parisc_get_time, -	.set_time = parisc_set_time, -}; - -static int __init parisc_rtc_probe(struct platform_device *dev) -{ -	struct rtc_device *rtc; - -	rtc = rtc_device_register("rtc-parisc", &dev->dev, &parisc_rtc_ops, -				  THIS_MODULE); -	if (IS_ERR(rtc)) -		return PTR_ERR(rtc); - -	platform_set_drvdata(dev, rtc); - -	return 0; -} - -static int __exit parisc_rtc_remove(struct platform_device *dev) -{ -	struct rtc_device *rtc = platform_get_drvdata(dev); - -	rtc_device_unregister(rtc); - -	return 0; -} - -static struct platform_driver parisc_rtc_driver = { -	.driver = { -		.name = "rtc-parisc", -		.owner = THIS_MODULE, -	}, -	.remove = __exit_p(parisc_rtc_remove), -}; - -static int __init parisc_rtc_init(void) -{ -	return platform_driver_probe(&parisc_rtc_driver, parisc_rtc_probe); -} - -static void __exit parisc_rtc_fini(void) -{ -	platform_driver_unregister(&parisc_rtc_driver); -} - -module_init(parisc_rtc_init); -module_exit(parisc_rtc_fini); - -MODULE_AUTHOR("Kyle McMartin <kyle@mcmartin.ca>"); -MODULE_LICENSE("GPL"); -MODULE_DESCRIPTION("HP PA-RISC RTC driver"); -MODULE_ALIAS("platform:rtc-parisc");  |