diff options
Diffstat (limited to 'drivers/rtc/rtc-tx4939.c')
| -rw-r--r-- | drivers/rtc/rtc-tx4939.c | 40 | 
1 files changed, 11 insertions, 29 deletions
diff --git a/drivers/rtc/rtc-tx4939.c b/drivers/rtc/rtc-tx4939.c index ec6313d1535..2e678c681b1 100644 --- a/drivers/rtc/rtc-tx4939.c +++ b/drivers/rtc/rtc-tx4939.c @@ -11,6 +11,7 @@  #include <linux/rtc.h>  #include <linux/platform_device.h>  #include <linux/interrupt.h> +#include <linux/module.h>  #include <linux/io.h>  #include <linux/gfp.h>  #include <asm/txx9/tx4939.h> @@ -175,8 +176,8 @@ static irqreturn_t tx4939_rtc_interrupt(int irq, void *dev_id)  		tx4939_rtc_cmd(rtcreg, TX4939_RTCCTL_COMMAND_NOP);  	}  	spin_unlock(&pdata->lock); -	if (likely(pdata->rtc)) -		rtc_update_irq(pdata->rtc, 1, events); +	rtc_update_irq(pdata->rtc, 1, events); +  	return IRQ_HANDLED;  } @@ -243,9 +244,6 @@ static int __init tx4939_rtc_probe(struct platform_device *pdev)  	struct resource *res;  	int irq, ret; -	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	if (!res) -		return -ENODEV;  	irq = platform_get_irq(pdev, 0);  	if (irq < 0)  		return -ENODEV; @@ -254,27 +252,23 @@ static int __init tx4939_rtc_probe(struct platform_device *pdev)  		return -ENOMEM;  	platform_set_drvdata(pdev, pdata); -	if (!devm_request_mem_region(&pdev->dev, res->start, -				     resource_size(res), pdev->name)) -		return -EBUSY; -	pdata->rtcreg = devm_ioremap(&pdev->dev, res->start, -				     resource_size(res)); -	if (!pdata->rtcreg) -		return -EBUSY; +	res = platform_get_resource(pdev, IORESOURCE_MEM, 0); +	pdata->rtcreg = devm_ioremap_resource(&pdev->dev, res); +	if (IS_ERR(pdata->rtcreg)) +		return PTR_ERR(pdata->rtcreg);  	spin_lock_init(&pdata->lock);  	tx4939_rtc_cmd(pdata->rtcreg, TX4939_RTCCTL_COMMAND_NOP);  	if (devm_request_irq(&pdev->dev, irq, tx4939_rtc_interrupt, -			     IRQF_DISABLED, pdev->name, &pdev->dev) < 0) +			     0, pdev->name, &pdev->dev) < 0)  		return -EBUSY; -	rtc = rtc_device_register(pdev->name, &pdev->dev, +	rtc = devm_rtc_device_register(&pdev->dev, pdev->name,  				  &tx4939_rtc_ops, THIS_MODULE);  	if (IS_ERR(rtc))  		return PTR_ERR(rtc);  	pdata->rtc = rtc;  	ret = sysfs_create_bin_file(&pdev->dev.kobj, &tx4939_rtc_nvram_attr); -	if (ret) -		rtc_device_unregister(rtc); +  	return ret;  } @@ -283,7 +277,6 @@ static int __exit tx4939_rtc_remove(struct platform_device *pdev)  	struct tx4939rtc_plat_data *pdata = platform_get_drvdata(pdev);  	sysfs_remove_bin_file(&pdev->dev.kobj, &tx4939_rtc_nvram_attr); -	rtc_device_unregister(pdata->rtc);  	spin_lock_irq(&pdata->lock);  	tx4939_rtc_cmd(pdata->rtcreg, TX4939_RTCCTL_COMMAND_NOP);  	spin_unlock_irq(&pdata->lock); @@ -298,18 +291,7 @@ static struct platform_driver tx4939_rtc_driver = {  	},  }; -static int __init tx4939rtc_init(void) -{ -	return platform_driver_probe(&tx4939_rtc_driver, tx4939_rtc_probe); -} - -static void __exit tx4939rtc_exit(void) -{ -	platform_driver_unregister(&tx4939_rtc_driver); -} - -module_init(tx4939rtc_init); -module_exit(tx4939rtc_exit); +module_platform_driver_probe(tx4939_rtc_driver, tx4939_rtc_probe);  MODULE_AUTHOR("Atsushi Nemoto <anemo@mba.ocn.ne.jp>");  MODULE_DESCRIPTION("TX4939 internal RTC driver");  | 
