rtc: 88pm80x: add device tree support
authorVaibhav Hiremath <vaibhav.hiremath@linaro.org>
Thu, 9 Jul 2015 06:55:51 +0000 (12:25 +0530)
committerAlexandre Belloni <alexandre.belloni@free-electrons.com>
Sat, 5 Sep 2015 11:19:05 +0000 (13:19 +0200)
Along with DT support, this patch also cleans up the unnecessary
code around 'rtc_wakeup' initialization.

Signed-off-by: Chao Xie <chao.xie@marvell.com>
Signed-off-by: Vaibhav Hiremath <vaibhav.hiremath@linaro.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
drivers/rtc/rtc-88pm80x.c

index 7df0579d9852c03735fe5e9dab118ba141dd8122..466bf7f9a285a5c455a26d199083384d93a4e121 100644 (file)
@@ -251,17 +251,26 @@ static SIMPLE_DEV_PM_OPS(pm80x_rtc_pm_ops, pm80x_rtc_suspend, pm80x_rtc_resume);
 static int pm80x_rtc_probe(struct platform_device *pdev)
 {
        struct pm80x_chip *chip = dev_get_drvdata(pdev->dev.parent);
-       struct pm80x_platform_data *pm80x_pdata =
-                               dev_get_platdata(pdev->dev.parent);
-       struct pm80x_rtc_pdata *pdata = NULL;
+       struct pm80x_rtc_pdata *pdata = dev_get_platdata(&pdev->dev);
        struct pm80x_rtc_info *info;
+       struct device_node *node = pdev->dev.of_node;
        struct rtc_time tm;
        unsigned long ticks = 0;
        int ret;
 
-       pdata = dev_get_platdata(&pdev->dev);
-       if (pdata == NULL)
-               dev_warn(&pdev->dev, "No platform data!\n");
+       if (!pdata && !node) {
+               dev_err(&pdev->dev,
+                       "pm80x-rtc requires platform data or of_node\n");
+               return -EINVAL;
+       }
+
+       if (!pdata) {
+               pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
+               if (!pdata) {
+                       dev_err(&pdev->dev, "failed to allocate memory\n");
+                       return -ENOMEM;
+               }
+       }
 
        info =
            devm_kzalloc(&pdev->dev, sizeof(struct pm80x_rtc_info), GFP_KERNEL);
@@ -327,11 +336,8 @@ static int pm80x_rtc_probe(struct platform_device *pdev)
        regmap_update_bits(info->map, PM800_RTC_CONTROL, PM800_RTC1_USE_XO,
                           PM800_RTC1_USE_XO);
 
-       if (pm80x_pdata) {
-               pdata = pm80x_pdata->rtc;
-               if (pdata)
-                       info->rtc_dev->dev.platform_data = &pdata->rtc_wakeup;
-       }
+       /* remember whether this power up is caused by PMIC RTC or not */
+       info->rtc_dev->dev.platform_data = &pdata->rtc_wakeup;
 
        device_init_wakeup(&pdev->dev, 1);