diff options
Diffstat (limited to 'drivers/rtc/rtc-starfire.c')
| -rw-r--r-- | drivers/rtc/rtc-starfire.c | 66 | 
1 files changed, 13 insertions, 53 deletions
diff --git a/drivers/rtc/rtc-starfire.c b/drivers/rtc/rtc-starfire.c index 7ccb0dd700a..5be98bfd7ed 100644 --- a/drivers/rtc/rtc-starfire.c +++ b/drivers/rtc/rtc-starfire.c @@ -6,7 +6,6 @@  #include <linux/kernel.h>  #include <linux/module.h>  #include <linux/init.h> -#include <linux/time.h>  #include <linux/rtc.h>  #include <linux/platform_device.h> @@ -16,11 +15,6 @@ MODULE_AUTHOR("David S. Miller <davem@davemloft.net>");  MODULE_DESCRIPTION("Starfire RTC driver");  MODULE_LICENSE("GPL"); -struct starfire_rtc { -	struct rtc_device	*rtc; -	spinlock_t		lock; -}; -  static u32 starfire_get_time(void)  {  	static char obp_gettod[32]; @@ -35,64 +29,31 @@ static u32 starfire_get_time(void)  static int starfire_read_time(struct device *dev, struct rtc_time *tm)  { -	struct starfire_rtc *p = dev_get_drvdata(dev); -	unsigned long flags, secs; - -	spin_lock_irqsave(&p->lock, flags); -	secs = starfire_get_time(); -	spin_unlock_irqrestore(&p->lock, flags); - -	rtc_time_to_tm(secs, tm); - -	return 0; -} - -static int starfire_set_time(struct device *dev, struct rtc_time *tm) -{ -	unsigned long secs; -	int err; - -	err = rtc_tm_to_time(tm, &secs); -	if (err) -		return err; - -	/* Do nothing, time is set using the service processor -	 * console on this platform. -	 */ -	return 0; +	rtc_time_to_tm(starfire_get_time(), tm); +	return rtc_valid_tm(tm);  }  static const struct rtc_class_ops starfire_rtc_ops = {  	.read_time	= starfire_read_time, -	.set_time	= starfire_set_time,  }; -static int __devinit starfire_rtc_probe(struct platform_device *pdev) +static int __init starfire_rtc_probe(struct platform_device *pdev)  { -	struct starfire_rtc *p = kzalloc(sizeof(*p), GFP_KERNEL); - -	if (!p) -		return -ENOMEM; +	struct rtc_device *rtc = rtc_device_register("starfire", &pdev->dev, +				     &starfire_rtc_ops, THIS_MODULE); +	if (IS_ERR(rtc)) +		return PTR_ERR(rtc); -	spin_lock_init(&p->lock); +	platform_set_drvdata(pdev, rtc); -	p->rtc = rtc_device_register("starfire", &pdev->dev, -				     &starfire_rtc_ops, THIS_MODULE); -	if (IS_ERR(p->rtc)) { -		int err = PTR_ERR(p->rtc); -		kfree(p); -		return err; -	} -	platform_set_drvdata(pdev, p);  	return 0;  } -static int __devexit starfire_rtc_remove(struct platform_device *pdev) +static int __exit starfire_rtc_remove(struct platform_device *pdev)  { -	struct starfire_rtc *p = platform_get_drvdata(pdev); +	struct rtc_device *rtc = platform_get_drvdata(pdev); -	rtc_device_unregister(p->rtc); -	kfree(p); +	rtc_device_unregister(rtc);  	return 0;  } @@ -102,13 +63,12 @@ static struct platform_driver starfire_rtc_driver = {  		.name	= "rtc-starfire",  		.owner	= THIS_MODULE,  	}, -	.probe		= starfire_rtc_probe, -	.remove		= __devexit_p(starfire_rtc_remove), +	.remove		= __exit_p(starfire_rtc_remove),  };  static int __init starfire_rtc_init(void)  { -	return platform_driver_register(&starfire_rtc_driver); +	return platform_driver_probe(&starfire_rtc_driver, starfire_rtc_probe);  }  static void __exit starfire_rtc_exit(void)  |