Message ID | 1434567488-6477-3-git-send-email-vaibhav.hiremath@linaro.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi, On 18/06/2015 at 00:28:06 +0530, Vaibhav Hiremath wrote : > - 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); I had troubles to follow the rtc_wakeup initialization cleanup but it seems OK. However, I'm wondering why you are adding DT support as this will always be probed from the MFD driver which pass the platform_data and avoids that allocation. > + 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; > - } > + /* remeber whether this power up is caused by PMIC RTC or not */ remember -^
On Saturday 20 June 2015 06:13 AM, Alexandre Belloni wrote: > Hi, > Sorry I missed this email. Just wanted to send reminder email and saw this :) > On 18/06/2015 at 00:28:06 +0530, Vaibhav Hiremath wrote : >> - 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); > > I had troubles to follow the rtc_wakeup initialization cleanup but it > seems OK. Probably, once we have complete PM support ready then it would be easier to understand. I think as of now lets have this minimal code for rtc_wakeup. > However, I'm wondering why you are adding DT support as this > will always be probed from the MFD driver which pass the platform_data > and avoids that allocation. > You are right. Originally, it was cleanup patch, - remove pm80x_pdata - Add check for pdata and np - and around rtc_wakeup While doing that I added this nice to have allocation. Thanks, Vaibhav
On Thursday 25 June 2015 01:16 PM, Vaibhav Hiremath wrote: > > > On Saturday 20 June 2015 06:13 AM, Alexandre Belloni wrote: >> Hi, >> > > Sorry I missed this email. > Just wanted to send reminder email and saw this :) > >> On 18/06/2015 at 00:28:06 +0530, Vaibhav Hiremath wrote : >>> - 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); >> >> I had troubles to follow the rtc_wakeup initialization cleanup but it >> seems OK. > > Probably, once we have complete PM support ready then it would be > easier to understand. I think as of now lets have this minimal code for > rtc_wakeup. > >> However, I'm wondering why you are adding DT support as this >> will always be probed from the MFD driver which pass the platform_data >> and avoids that allocation. >> > > You are right. > > Originally, it was cleanup patch, > > - remove pm80x_pdata > - Add check for pdata and np > - and around rtc_wakeup > > While doing that I added this nice to have allocation. > Any update/feedback on this? Thanks, Vaibhav
diff --git a/drivers/rtc/rtc-88pm80x.c b/drivers/rtc/rtc-88pm80x.c index 7df0579..8f66519 100644 --- a/drivers/rtc/rtc-88pm80x.c +++ b/drivers/rtc/rtc-88pm80x.c @@ -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; - } + /* remeber 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);