diff options
Diffstat (limited to 'drivers/rtc/rtc-tegra.c')
| -rw-r--r-- | drivers/rtc/rtc-tegra.c | 64 | 
1 files changed, 17 insertions, 47 deletions
diff --git a/drivers/rtc/rtc-tegra.c b/drivers/rtc/rtc-tegra.c index 7c033756d6b..a34315d2547 100644 --- a/drivers/rtc/rtc-tegra.c +++ b/drivers/rtc/rtc-tegra.c @@ -26,6 +26,7 @@  #include <linux/delay.h>  #include <linux/rtc.h>  #include <linux/platform_device.h> +#include <linux/pm.h>  /* set to 1 = busy every eight 32kHz clocks during copy of sec+msec to AHB */  #define TEGRA_RTC_REG_BUSY			0x004 @@ -309,7 +310,7 @@ static const struct of_device_id tegra_rtc_dt_match[] = {  };  MODULE_DEVICE_TABLE(of, tegra_rtc_dt_match); -static int tegra_rtc_probe(struct platform_device *pdev) +static int __init tegra_rtc_probe(struct platform_device *pdev)  {  	struct tegra_rtc_info *info;  	struct resource *res; @@ -348,53 +349,35 @@ static int tegra_rtc_probe(struct platform_device *pdev)  	device_init_wakeup(&pdev->dev, 1); -	info->rtc_dev = rtc_device_register( -		pdev->name, &pdev->dev, &tegra_rtc_ops, THIS_MODULE); +	info->rtc_dev = devm_rtc_device_register(&pdev->dev, +				dev_name(&pdev->dev), &tegra_rtc_ops, +				THIS_MODULE);  	if (IS_ERR(info->rtc_dev)) {  		ret = PTR_ERR(info->rtc_dev); -		info->rtc_dev = NULL; -		dev_err(&pdev->dev, -			"Unable to register device (err=%d).\n", +		dev_err(&pdev->dev, "Unable to register device (err=%d).\n",  			ret);  		return ret;  	}  	ret = devm_request_irq(&pdev->dev, info->tegra_rtc_irq,  			tegra_rtc_irq_handler, IRQF_TRIGGER_HIGH, -			"rtc alarm", &pdev->dev); +			dev_name(&pdev->dev), &pdev->dev);  	if (ret) {  		dev_err(&pdev->dev,  			"Unable to request interrupt for device (err=%d).\n",  			ret); -		goto err_dev_unreg; +		return ret;  	}  	dev_notice(&pdev->dev, "Tegra internal Real Time Clock\n");  	return 0; - -err_dev_unreg: -	rtc_device_unregister(info->rtc_dev); - -	return ret;  } -static int tegra_rtc_remove(struct platform_device *pdev) +#ifdef CONFIG_PM_SLEEP +static int tegra_rtc_suspend(struct device *dev)  { -	struct tegra_rtc_info *info = platform_get_drvdata(pdev); - -	rtc_device_unregister(info->rtc_dev); - -	platform_set_drvdata(pdev, NULL); - -	return 0; -} - -#ifdef CONFIG_PM -static int tegra_rtc_suspend(struct platform_device *pdev, pm_message_t state) -{ -	struct device *dev = &pdev->dev; -	struct tegra_rtc_info *info = platform_get_drvdata(pdev); +	struct tegra_rtc_info *info = dev_get_drvdata(dev);  	tegra_rtc_wait_while_busy(dev); @@ -416,10 +399,9 @@ static int tegra_rtc_suspend(struct platform_device *pdev, pm_message_t state)  	return 0;  } -static int tegra_rtc_resume(struct platform_device *pdev) +static int tegra_rtc_resume(struct device *dev)  { -	struct device *dev = &pdev->dev; -	struct tegra_rtc_info *info = platform_get_drvdata(pdev); +	struct tegra_rtc_info *info = dev_get_drvdata(dev);  	dev_vdbg(dev, "Resume (device_may_wakeup=%d)\n",  		device_may_wakeup(dev)); @@ -431,6 +413,8 @@ static int tegra_rtc_resume(struct platform_device *pdev)  }  #endif +static SIMPLE_DEV_PM_OPS(tegra_rtc_pm_ops, tegra_rtc_suspend, tegra_rtc_resume); +  static void tegra_rtc_shutdown(struct platform_device *pdev)  {  	dev_vdbg(&pdev->dev, "disabling interrupts.\n"); @@ -439,30 +423,16 @@ static void tegra_rtc_shutdown(struct platform_device *pdev)  MODULE_ALIAS("platform:tegra_rtc");  static struct platform_driver tegra_rtc_driver = { -	.remove		= tegra_rtc_remove,  	.shutdown	= tegra_rtc_shutdown,  	.driver		= {  		.name	= "tegra_rtc",  		.owner	= THIS_MODULE,  		.of_match_table = tegra_rtc_dt_match, +		.pm	= &tegra_rtc_pm_ops,  	}, -#ifdef CONFIG_PM -	.suspend	= tegra_rtc_suspend, -	.resume		= tegra_rtc_resume, -#endif  }; -static int __init tegra_rtc_init(void) -{ -	return platform_driver_probe(&tegra_rtc_driver, tegra_rtc_probe); -} -module_init(tegra_rtc_init); - -static void __exit tegra_rtc_exit(void) -{ -	platform_driver_unregister(&tegra_rtc_driver); -} -module_exit(tegra_rtc_exit); +module_platform_driver_probe(tegra_rtc_driver, tegra_rtc_probe);  MODULE_AUTHOR("Jon Mayo <jmayo@nvidia.com>");  MODULE_DESCRIPTION("driver for Tegra internal RTC");  |