diff options
Diffstat (limited to 'drivers/rtc/rtc-at91sam9.c')
| -rw-r--r-- | drivers/rtc/rtc-at91sam9.c | 61 | 
1 files changed, 9 insertions, 52 deletions
diff --git a/drivers/rtc/rtc-at91sam9.c b/drivers/rtc/rtc-at91sam9.c index a3ad957507d..65896a3a352 100644 --- a/drivers/rtc/rtc-at91sam9.c +++ b/drivers/rtc/rtc-at91sam9.c @@ -287,7 +287,7 @@ static const struct rtc_class_ops at91_rtc_ops = {  /*   * Initialize and install RTC driver   */ -static int __init at91_rtc_probe(struct platform_device *pdev) +static int __devinit at91_rtc_probe(struct platform_device *pdev)  {  	struct resource	*r;  	struct sam9_rtc	*rtc; @@ -360,7 +360,7 @@ fail:  /*   * Disable and remove the RTC driver   */ -static int __exit at91_rtc_remove(struct platform_device *pdev) +static int __devexit at91_rtc_remove(struct platform_device *pdev)  {  	struct sam9_rtc	*rtc = platform_get_drvdata(pdev);  	u32		mr = rtt_readl(rtc, MR); @@ -433,63 +433,20 @@ static int at91_rtc_resume(struct platform_device *pdev)  #endif  static struct platform_driver at91_rtc_driver = { -	.driver.name	= "rtc-at91sam9", -	.driver.owner	= THIS_MODULE, -	.remove		= __exit_p(at91_rtc_remove), +	.probe		= at91_rtc_probe, +	.remove		= __devexit_p(at91_rtc_remove),  	.shutdown	= at91_rtc_shutdown,  	.suspend	= at91_rtc_suspend,  	.resume		= at91_rtc_resume, +	.driver		= { +		.name	= "rtc-at91sam9", +		.owner	= THIS_MODULE, +	},  }; -/* Chips can have more than one RTT module, and they can be used for more - * than just RTCs.  So we can't just register as "the" RTT driver. - * - * A normal approach in such cases is to create a library to allocate and - * free the modules.  Here we just use bus_find_device() as like such a - * library, binding directly ... no runtime "library" footprint is needed. - */ -static int __init at91_rtc_match(struct device *dev, void *v) -{ -	struct platform_device *pdev = to_platform_device(dev); -	int ret; - -	/* continue searching if this isn't the RTT we need */ -	if (strcmp("at91_rtt", pdev->name) != 0 -			|| pdev->id != CONFIG_RTC_DRV_AT91SAM9_RTT) -		goto fail; - -	/* else we found it ... but fail unless we can bind to the RTC driver */ -	if (dev->driver) { -		dev_dbg(dev, "busy, can't use as RTC!\n"); -		goto fail; -	} -	dev->driver = &at91_rtc_driver.driver; -	if (device_attach(dev) == 0) { -		dev_dbg(dev, "can't attach RTC!\n"); -		goto fail; -	} -	ret = at91_rtc_probe(pdev); -	if (ret == 0) -		return true; - -	dev_dbg(dev, "RTC probe err %d!\n", ret); -fail: -	return false; -} -  static int __init at91_rtc_init(void)  { -	int status; -	struct device *rtc; - -	status = platform_driver_register(&at91_rtc_driver); -	if (status) -		return status; -	rtc = bus_find_device(&platform_bus_type, NULL, -			NULL, at91_rtc_match); -	if (!rtc) -		platform_driver_unregister(&at91_rtc_driver); -	return rtc ? 0 : -ENODEV; +	return platform_driver_register(&at91_rtc_driver);  }  module_init(at91_rtc_init);  |