[SCSI] qla2xxx: Update firmware link in Kconfig file.
[firefly-linux-kernel-4.4.55.git] / drivers / rtc / rtc-tegra.c
index 7c033756d6b53509578a67486ac2be09f473ffe2..a34315d25478131c00ef1b308bb91f4152f25cae 100644 (file)
@@ -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");