* [PATCH 0/2] add dt support for mxc rtc @ 2015-05-15 22:35 Philippe Reynes 2015-05-15 22:35 ` [PATCH 1/2] rtc: mxc: add a second clock Philippe Reynes 2015-05-15 22:35 ` [PATCH 2/2] rtc: mxc: add support of device tree Philippe Reynes 0 siblings, 2 replies; 12+ messages in thread From: Philippe Reynes @ 2015-05-15 22:35 UTC (permalink / raw) To: linux-arm-kernel This patch set add the device tree support for the rtc driver on mxc. Philippe Reynes (2): rtc: mxc: add a second clock rtc: mxc: add support of device tree Documentation/devicetree/bindings/rtc/rtc-mxc.txt | 27 ++++++++++++ arch/arm/mach-imx/clk-imx31.c | 3 +- drivers/rtc/rtc-mxc.c | 48 ++++++++++++++++---- 3 files changed, 67 insertions(+), 11 deletions(-) create mode 100644 Documentation/devicetree/bindings/rtc/rtc-mxc.txt -- 1.7.4.4 ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] rtc: mxc: add a second clock 2015-05-15 22:35 [PATCH 0/2] add dt support for mxc rtc Philippe Reynes @ 2015-05-15 22:35 ` Philippe Reynes 2015-05-18 11:27 ` Enrico Weigelt, metux IT consult ` (2 more replies) 2015-05-15 22:35 ` [PATCH 2/2] rtc: mxc: add support of device tree Philippe Reynes 1 sibling, 3 replies; 12+ messages in thread From: Philippe Reynes @ 2015-05-15 22:35 UTC (permalink / raw) To: linux-arm-kernel The mxc RTC needs two clocks, one for the input reference, and one for the IP. But this driver was only using one clock (for the reference). This patch add the second clock (for the IP). Signed-off-by: Philippe Reynes <tremyfr@gmail.com> --- arch/arm/mach-imx/clk-imx31.c | 3 ++- drivers/rtc/rtc-mxc.c | 26 +++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c index 286ef42..480c54f 100644 --- a/arch/arm/mach-imx/clk-imx31.c +++ b/arch/arm/mach-imx/clk-imx31.c @@ -130,7 +130,8 @@ int __init mx31_clocks_init(unsigned long fref) clk_register_clkdev(clk[cspi3_gate], NULL, "imx31-cspi.2"); clk_register_clkdev(clk[pwm_gate], "pwm", NULL); clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); - clk_register_clkdev(clk[rtc_gate], NULL, "imx21-rtc"); + clk_register_clkdev(clk[ckil], "rtc", "imx21-rtc"); + clk_register_clkdev(clk[rtc_gate], "ipg", "imx21-rtc"); clk_register_clkdev(clk[epit1_gate], "epit", NULL); clk_register_clkdev(clk[epit2_gate], "epit", NULL); clk_register_clkdev(clk[nfc], NULL, "imx27-nand.0"); diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c index 09d422b..e916a91 100644 --- a/drivers/rtc/rtc-mxc.c +++ b/drivers/rtc/rtc-mxc.c @@ -79,7 +79,8 @@ struct rtc_plat_data { struct rtc_device *rtc; void __iomem *ioaddr; int irq; - struct clk *clk; + struct clk *clk_rtc; + struct clk *clk_ipg; struct rtc_time g_rtc_alarm; enum imx_rtc_type devtype; }; @@ -373,17 +374,24 @@ static int mxc_rtc_probe(struct platform_device *pdev) if (IS_ERR(pdata->ioaddr)) return PTR_ERR(pdata->ioaddr); - pdata->clk = devm_clk_get(&pdev->dev, NULL); - if (IS_ERR(pdata->clk)) { - dev_err(&pdev->dev, "unable to get clock!\n"); - return PTR_ERR(pdata->clk); + pdata->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); + if (IS_ERR(pdata->clk_ipg)) { + dev_err(&pdev->dev, "unable to get ipg clock!\n"); + return PTR_ERR(pdata->clk_ipg); } - ret = clk_prepare_enable(pdata->clk); + ret = clk_prepare_enable(pdata->clk_ipg); if (ret) return ret; - rate = clk_get_rate(pdata->clk); + pdata->clk_rtc = devm_clk_get(&pdev->dev, "rtc"); + if (IS_ERR(pdata->clk_rtc)) { + dev_err(&pdev->dev, "unable to get rtc clock!\n"); + ret = PTR_ERR(pdata->clk_rtc); + goto exit_put_clk; + } + + rate = clk_get_rate(pdata->clk_rtc); if (rate == 32768) reg = RTC_INPUT_CLK_32768HZ; @@ -432,7 +440,7 @@ static int mxc_rtc_probe(struct platform_device *pdev) return 0; exit_put_clk: - clk_disable_unprepare(pdata->clk); + clk_disable_unprepare(pdata->clk_ipg); return ret; } @@ -441,7 +449,7 @@ static int mxc_rtc_remove(struct platform_device *pdev) { struct rtc_plat_data *pdata = platform_get_drvdata(pdev); - clk_disable_unprepare(pdata->clk); + clk_disable_unprepare(pdata->clk_ipg); return 0; } -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 1/2] rtc: mxc: add a second clock 2015-05-15 22:35 ` [PATCH 1/2] rtc: mxc: add a second clock Philippe Reynes @ 2015-05-18 11:27 ` Enrico Weigelt, metux IT consult 2015-05-18 21:57 ` Philippe Reynes 2015-05-19 5:27 ` Shawn Guo 2015-05-28 11:57 ` Alexandre Belloni 2 siblings, 1 reply; 12+ messages in thread From: Enrico Weigelt, metux IT consult @ 2015-05-18 11:27 UTC (permalink / raw) To: linux-arm-kernel Am 16.05.2015 um 00:35 schrieb Philippe Reynes: > The mxc RTC needs two clocks, one for the input > reference, and one for the IP. But this driver > was only using one clock (for the reference). > This patch add the second clock (for the IP). Does this also apply to MX53, or just MX21 ? greetings, -- Enrico Weigelt, metux IT consult +49-151-27565287 MELAG Medizintechnik oHG Sitz Berlin Registergericht AG Charlottenburg HRA 21333 B Wichtiger Hinweis: Diese Nachricht kann vertrauliche oder nur f?r einen begrenzten Personenkreis bestimmte Informationen enthalten. Sie ist ausschlie?lich f?r denjenigen bestimmt, an den sie gerichtet worden ist. Wenn Sie nicht der Adressat dieser E-Mail sind, d?rfen Sie diese nicht kopieren, weiterleiten, weitergeben oder sie ganz oder teilweise in irgendeiner Weise nutzen. Sollten Sie diese E-Mail irrt?mlich erhalten haben, so benachrichtigen Sie bitte den Absender, indem Sie auf diese Nachricht antworten. Bitte l?schen Sie in diesem Fall diese Nachricht und alle Anh?nge, ohne eine Kopie zu behalten. Important Notice: This message may contain confidential or privileged information. It is intended only for the person it was addressed to. If you are not the intended recipient of this email you may not copy, forward, disclose or otherwise use it or any part of it in any form whatsoever. If you received this email in error please notify the sender by replying and delete this message and any attachments without retaining a copy. ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] rtc: mxc: add a second clock 2015-05-18 11:27 ` Enrico Weigelt, metux IT consult @ 2015-05-18 21:57 ` Philippe Reynes 0 siblings, 0 replies; 12+ messages in thread From: Philippe Reynes @ 2015-05-18 21:57 UTC (permalink / raw) To: linux-arm-kernel Hi Enrico, On 18/05/15 13:27, Enrico Weigelt, metux IT consult wrote: > Am 16.05.2015 um 00:35 schrieb Philippe Reynes: >> The mxc RTC needs two clocks, one for the input >> reference, and one for the IP. But this driver >> was only using one clock (for the reference). >> This patch add the second clock (for the IP). > > > Does this also apply to MX53, or just MX21 ? I don't found this rtc on mx53 manual. The mx53 seems to use rtc-imxdi.c. So, I think it's just for mx21. Regards, Philippe > greetings, > -- > Enrico Weigelt, metux IT consult > +49-151-27565287 > MELAG Medizintechnik oHG Sitz Berlin Registergericht AG Charlottenburg HRA 21333 B > > Wichtiger Hinweis: Diese Nachricht kann vertrauliche oder nur f?r einen begrenzten Personenkreis bestimmte Informationen enthalten. Sie ist ausschlie?lich f?r denjenigen bestimmt, an den sie gerichtet worden ist. Wenn Sie nicht der Adressat dieser E-Mail sind, d?rfen Sie diese nicht kopieren, weiterleiten, weitergeben oder sie ganz oder teilweise in irgendeiner Weise nutzen. Sollten Sie diese E-Mail irrt?mlich erhalten haben, so benachrichtigen Sie bitte den Absender, indem Sie auf diese Nachricht antworten. Bitte l?schen Sie in diesem Fall diese Nachricht und alle Anh?nge, ohne eine Kopie zu behalten. > Important Notice: This message may contain confidential or privileged information. It is intended only for the person it was addressed to. If you are not the intended recipient of this email you may not copy, forward, disclose or otherwise use it or any part of it in any form whatsoever. If you received this email in error please notify the sender by replying and delete this message and any attachments without retaining a copy. s ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] rtc: mxc: add a second clock 2015-05-15 22:35 ` [PATCH 1/2] rtc: mxc: add a second clock Philippe Reynes 2015-05-18 11:27 ` Enrico Weigelt, metux IT consult @ 2015-05-19 5:27 ` Shawn Guo 2015-05-28 11:57 ` Alexandre Belloni 2 siblings, 0 replies; 12+ messages in thread From: Shawn Guo @ 2015-05-19 5:27 UTC (permalink / raw) To: linux-arm-kernel On Sat, May 16, 2015 at 12:35:29AM +0200, Philippe Reynes wrote: > The mxc RTC needs two clocks, one for the input > reference, and one for the IP. But this driver > was only using one clock (for the reference). > This patch add the second clock (for the IP). > > Signed-off-by: Philippe Reynes <tremyfr@gmail.com> > --- > arch/arm/mach-imx/clk-imx31.c | 3 ++- We're moving the clock driver into drivers/clk/imx folder during this development cycle. I suggest you patch the file from there, and update driver code in the next development cycle. Shawn > drivers/rtc/rtc-mxc.c | 26 +++++++++++++++++--------- > 2 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c > index 286ef42..480c54f 100644 > --- a/arch/arm/mach-imx/clk-imx31.c > +++ b/arch/arm/mach-imx/clk-imx31.c > @@ -130,7 +130,8 @@ int __init mx31_clocks_init(unsigned long fref) > clk_register_clkdev(clk[cspi3_gate], NULL, "imx31-cspi.2"); > clk_register_clkdev(clk[pwm_gate], "pwm", NULL); > clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); > - clk_register_clkdev(clk[rtc_gate], NULL, "imx21-rtc"); > + clk_register_clkdev(clk[ckil], "rtc", "imx21-rtc"); > + clk_register_clkdev(clk[rtc_gate], "ipg", "imx21-rtc"); > clk_register_clkdev(clk[epit1_gate], "epit", NULL); > clk_register_clkdev(clk[epit2_gate], "epit", NULL); > clk_register_clkdev(clk[nfc], NULL, "imx27-nand.0"); > diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c > index 09d422b..e916a91 100644 > --- a/drivers/rtc/rtc-mxc.c > +++ b/drivers/rtc/rtc-mxc.c > @@ -79,7 +79,8 @@ struct rtc_plat_data { > struct rtc_device *rtc; > void __iomem *ioaddr; > int irq; > - struct clk *clk; > + struct clk *clk_rtc; > + struct clk *clk_ipg; > struct rtc_time g_rtc_alarm; > enum imx_rtc_type devtype; > }; > @@ -373,17 +374,24 @@ static int mxc_rtc_probe(struct platform_device *pdev) > if (IS_ERR(pdata->ioaddr)) > return PTR_ERR(pdata->ioaddr); > > - pdata->clk = devm_clk_get(&pdev->dev, NULL); > - if (IS_ERR(pdata->clk)) { > - dev_err(&pdev->dev, "unable to get clock!\n"); > - return PTR_ERR(pdata->clk); > + pdata->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); > + if (IS_ERR(pdata->clk_ipg)) { > + dev_err(&pdev->dev, "unable to get ipg clock!\n"); > + return PTR_ERR(pdata->clk_ipg); > } > > - ret = clk_prepare_enable(pdata->clk); > + ret = clk_prepare_enable(pdata->clk_ipg); > if (ret) > return ret; > > - rate = clk_get_rate(pdata->clk); > + pdata->clk_rtc = devm_clk_get(&pdev->dev, "rtc"); > + if (IS_ERR(pdata->clk_rtc)) { > + dev_err(&pdev->dev, "unable to get rtc clock!\n"); > + ret = PTR_ERR(pdata->clk_rtc); > + goto exit_put_clk; > + } > + > + rate = clk_get_rate(pdata->clk_rtc); > > if (rate == 32768) > reg = RTC_INPUT_CLK_32768HZ; > @@ -432,7 +440,7 @@ static int mxc_rtc_probe(struct platform_device *pdev) > return 0; > > exit_put_clk: > - clk_disable_unprepare(pdata->clk); > + clk_disable_unprepare(pdata->clk_ipg); > > return ret; > } > @@ -441,7 +449,7 @@ static int mxc_rtc_remove(struct platform_device *pdev) > { > struct rtc_plat_data *pdata = platform_get_drvdata(pdev); > > - clk_disable_unprepare(pdata->clk); > + clk_disable_unprepare(pdata->clk_ipg); > > return 0; > } > -- > 1.7.4.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to majordomo at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] rtc: mxc: add a second clock 2015-05-15 22:35 ` [PATCH 1/2] rtc: mxc: add a second clock Philippe Reynes 2015-05-18 11:27 ` Enrico Weigelt, metux IT consult 2015-05-19 5:27 ` Shawn Guo @ 2015-05-28 11:57 ` Alexandre Belloni 2015-06-04 21:08 ` Philippe Reynes 2 siblings, 1 reply; 12+ messages in thread From: Alexandre Belloni @ 2015-05-28 11:57 UTC (permalink / raw) To: linux-arm-kernel Hi, On 16/05/2015 at 00:35:29 +0200, Philippe Reynes wrote : > The mxc RTC needs two clocks, one for the input > reference, and one for the IP. But this driver > was only using one clock (for the reference). > This patch add the second clock (for the IP). > > Signed-off-by: Philippe Reynes <tremyfr@gmail.com> > --- > arch/arm/mach-imx/clk-imx31.c | 3 ++- > drivers/rtc/rtc-mxc.c | 26 +++++++++++++++++--------- > 2 files changed, 19 insertions(+), 10 deletions(-) > > diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c > index 286ef42..480c54f 100644 > --- a/arch/arm/mach-imx/clk-imx31.c > +++ b/arch/arm/mach-imx/clk-imx31.c > @@ -130,7 +130,8 @@ int __init mx31_clocks_init(unsigned long fref) > clk_register_clkdev(clk[cspi3_gate], NULL, "imx31-cspi.2"); > clk_register_clkdev(clk[pwm_gate], "pwm", NULL); > clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); > - clk_register_clkdev(clk[rtc_gate], NULL, "imx21-rtc"); > + clk_register_clkdev(clk[ckil], "rtc", "imx21-rtc"); > + clk_register_clkdev(clk[rtc_gate], "ipg", "imx21-rtc"); > clk_register_clkdev(clk[epit1_gate], "epit", NULL); > clk_register_clkdev(clk[epit2_gate], "epit", NULL); > clk_register_clkdev(clk[nfc], NULL, "imx27-nand.0"); This should probably go in a separate patch so that Shawn can apply it. > diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c > index 09d422b..e916a91 100644 > --- a/drivers/rtc/rtc-mxc.c > +++ b/drivers/rtc/rtc-mxc.c > @@ -79,7 +79,8 @@ struct rtc_plat_data { > struct rtc_device *rtc; > void __iomem *ioaddr; > int irq; > - struct clk *clk; > + struct clk *clk_rtc; > + struct clk *clk_ipg; > struct rtc_time g_rtc_alarm; > enum imx_rtc_type devtype; > }; > @@ -373,17 +374,24 @@ static int mxc_rtc_probe(struct platform_device *pdev) > if (IS_ERR(pdata->ioaddr)) > return PTR_ERR(pdata->ioaddr); > > - pdata->clk = devm_clk_get(&pdev->dev, NULL); > - if (IS_ERR(pdata->clk)) { > - dev_err(&pdev->dev, "unable to get clock!\n"); > - return PTR_ERR(pdata->clk); > + pdata->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); > + if (IS_ERR(pdata->clk_ipg)) { > + dev_err(&pdev->dev, "unable to get ipg clock!\n"); > + return PTR_ERR(pdata->clk_ipg); > } > > - ret = clk_prepare_enable(pdata->clk); > + ret = clk_prepare_enable(pdata->clk_ipg); > if (ret) > return ret; > > - rate = clk_get_rate(pdata->clk); > + pdata->clk_rtc = devm_clk_get(&pdev->dev, "rtc"); > + if (IS_ERR(pdata->clk_rtc)) { > + dev_err(&pdev->dev, "unable to get rtc clock!\n"); > + ret = PTR_ERR(pdata->clk_rtc); > + goto exit_put_clk; > + } > + > + rate = clk_get_rate(pdata->clk_rtc); You are getting the rate but don't you need to clk_prepare_enable()? Also, aren't those devm_clk_get now failing on i.mx35? Maybe it was already failing before that patch as I don't see any rtc clock being registeres in clk-imx35.c > > if (rate == 32768) > reg = RTC_INPUT_CLK_32768HZ; > @@ -432,7 +440,7 @@ static int mxc_rtc_probe(struct platform_device *pdev) > return 0; > > exit_put_clk: > - clk_disable_unprepare(pdata->clk); > + clk_disable_unprepare(pdata->clk_ipg); > > return ret; > } > @@ -441,7 +449,7 @@ static int mxc_rtc_remove(struct platform_device *pdev) > { > struct rtc_plat_data *pdata = platform_get_drvdata(pdev); > > - clk_disable_unprepare(pdata->clk); > + clk_disable_unprepare(pdata->clk_ipg); > > return 0; > } > -- > 1.7.4.4 > -- Alexandre Belloni, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] rtc: mxc: add a second clock 2015-05-28 11:57 ` Alexandre Belloni @ 2015-06-04 21:08 ` Philippe Reynes 2015-06-04 22:17 ` Alexandre Belloni 0 siblings, 1 reply; 12+ messages in thread From: Philippe Reynes @ 2015-06-04 21:08 UTC (permalink / raw) To: linux-arm-kernel Hi Alexandre, On 28/05/15 13:57, Alexandre Belloni wrote: > Hi, > > On 16/05/2015 at 00:35:29 +0200, Philippe Reynes wrote : >> The mxc RTC needs two clocks, one for the input >> reference, and one for the IP. But this driver >> was only using one clock (for the reference). >> This patch add the second clock (for the IP). >> >> Signed-off-by: Philippe Reynes<tremyfr@gmail.com> >> --- >> arch/arm/mach-imx/clk-imx31.c | 3 ++- >> drivers/rtc/rtc-mxc.c | 26 +++++++++++++++++--------- >> 2 files changed, 19 insertions(+), 10 deletions(-) >> >> diff --git a/arch/arm/mach-imx/clk-imx31.c b/arch/arm/mach-imx/clk-imx31.c >> index 286ef42..480c54f 100644 >> --- a/arch/arm/mach-imx/clk-imx31.c >> +++ b/arch/arm/mach-imx/clk-imx31.c >> @@ -130,7 +130,8 @@ int __init mx31_clocks_init(unsigned long fref) >> clk_register_clkdev(clk[cspi3_gate], NULL, "imx31-cspi.2"); >> clk_register_clkdev(clk[pwm_gate], "pwm", NULL); >> clk_register_clkdev(clk[wdog_gate], NULL, "imx2-wdt.0"); >> - clk_register_clkdev(clk[rtc_gate], NULL, "imx21-rtc"); >> + clk_register_clkdev(clk[ckil], "rtc", "imx21-rtc"); >> + clk_register_clkdev(clk[rtc_gate], "ipg", "imx21-rtc"); >> clk_register_clkdev(clk[epit1_gate], "epit", NULL); >> clk_register_clkdev(clk[epit2_gate], "epit", NULL); >> clk_register_clkdev(clk[nfc], NULL, "imx27-nand.0"); > > This should probably go in a separate patch so that Shawn can apply it. Yes, I will do a patch and send it on the mailling list. >> diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c >> index 09d422b..e916a91 100644 >> --- a/drivers/rtc/rtc-mxc.c >> +++ b/drivers/rtc/rtc-mxc.c >> @@ -79,7 +79,8 @@ struct rtc_plat_data { >> struct rtc_device *rtc; >> void __iomem *ioaddr; >> int irq; >> - struct clk *clk; >> + struct clk *clk_rtc; >> + struct clk *clk_ipg; >> struct rtc_time g_rtc_alarm; >> enum imx_rtc_type devtype; >> }; >> @@ -373,17 +374,24 @@ static int mxc_rtc_probe(struct platform_device *pdev) >> if (IS_ERR(pdata->ioaddr)) >> return PTR_ERR(pdata->ioaddr); >> >> - pdata->clk = devm_clk_get(&pdev->dev, NULL); >> - if (IS_ERR(pdata->clk)) { >> - dev_err(&pdev->dev, "unable to get clock!\n"); >> - return PTR_ERR(pdata->clk); >> + pdata->clk_ipg = devm_clk_get(&pdev->dev, "ipg"); >> + if (IS_ERR(pdata->clk_ipg)) { >> + dev_err(&pdev->dev, "unable to get ipg clock!\n"); >> + return PTR_ERR(pdata->clk_ipg); >> } >> >> - ret = clk_prepare_enable(pdata->clk); >> + ret = clk_prepare_enable(pdata->clk_ipg); >> if (ret) >> return ret; >> >> - rate = clk_get_rate(pdata->clk); >> + pdata->clk_rtc = devm_clk_get(&pdev->dev, "rtc"); >> + if (IS_ERR(pdata->clk_rtc)) { >> + dev_err(&pdev->dev, "unable to get rtc clock!\n"); >> + ret = PTR_ERR(pdata->clk_rtc); >> + goto exit_put_clk; >> + } >> + >> + rate = clk_get_rate(pdata->clk_rtc); > > You are getting the rate but don't you need to clk_prepare_enable()? This IP needs the clock reference rate for his configuration, so I think that I only need the rate. > Also, aren't those devm_clk_get now failing on i.mx35? Maybe it was > already failing before that patch as I don't see any rtc clock being > registeres in clk-imx35.c Yes, I don't see this clock on clk-imx35.c too.So I don't understand how this driver could work on imx35. The board MX35PDK use this driver, but in my understanding, it should be broken. If someone has this board and have some time to test the rtc, I would be pleased to get the result. >> >> if (rate == 32768) >> reg = RTC_INPUT_CLK_32768HZ; >> @@ -432,7 +440,7 @@ static int mxc_rtc_probe(struct platform_device *pdev) >> return 0; >> >> exit_put_clk: >> - clk_disable_unprepare(pdata->clk); >> + clk_disable_unprepare(pdata->clk_ipg); >> >> return ret; >> } >> @@ -441,7 +449,7 @@ static int mxc_rtc_remove(struct platform_device *pdev) >> { >> struct rtc_plat_data *pdata = platform_get_drvdata(pdev); >> >> - clk_disable_unprepare(pdata->clk); >> + clk_disable_unprepare(pdata->clk_ipg); >> >> return 0; >> } >> -- >> 1.7.4.4 >> > Regards, Philippe ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/2] rtc: mxc: add a second clock 2015-06-04 21:08 ` Philippe Reynes @ 2015-06-04 22:17 ` Alexandre Belloni 0 siblings, 0 replies; 12+ messages in thread From: Alexandre Belloni @ 2015-06-04 22:17 UTC (permalink / raw) To: linux-arm-kernel On 04/06/2015 at 23:08:03 +0200, Philippe Reynes wrote : > >You are getting the rate but don't you need to clk_prepare_enable()? > > This IP needs the clock reference rate for his configuration, > so I think that I only need the rate. > I think we need to check whether we are guaranteed to get a result from get_rate even if the clock is not enabled. -- Alexandre Belloni, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/2] rtc: mxc: add support of device tree 2015-05-15 22:35 [PATCH 0/2] add dt support for mxc rtc Philippe Reynes 2015-05-15 22:35 ` [PATCH 1/2] rtc: mxc: add a second clock Philippe Reynes @ 2015-05-15 22:35 ` Philippe Reynes 2015-05-28 12:06 ` Alexandre Belloni 1 sibling, 1 reply; 12+ messages in thread From: Philippe Reynes @ 2015-05-15 22:35 UTC (permalink / raw) To: linux-arm-kernel Signed-off-by: Philippe Reynes <tremyfr@gmail.com> --- Documentation/devicetree/bindings/rtc/rtc-mxc.txt | 27 +++++++++++++++++++++ drivers/rtc/rtc-mxc.c | 22 ++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletions(-) create mode 100644 Documentation/devicetree/bindings/rtc/rtc-mxc.txt diff --git a/Documentation/devicetree/bindings/rtc/rtc-mxc.txt b/Documentation/devicetree/bindings/rtc/rtc-mxc.txt new file mode 100644 index 0000000..5505493 --- /dev/null +++ b/Documentation/devicetree/bindings/rtc/rtc-mxc.txt @@ -0,0 +1,27 @@ +* Real Time Clock of the i.MX SoCs + +RTC controller for the i.MX SoCs + +Required properties: +- compatible: Should be "fsl,imx1-rtc" or "fsl,imx21-rtc". +- reg: physical base address of the controller and length of memory mapped + region. +- interrupts: IRQ line for the RTC. +- clocks: should contain two entries: + * one for the input reference + * one for the the SoC RTC +- clock-names: should contain: + * "rtc" for the input reference clock + * "ipg" for the SoC RTC clock + +Example: + +rtc at 10007000 { + compatible = "fsl,imx21-rtc"; + reg = <0x10007000 0x1000>; + interrupts = <22>; + clocks = <&clks IMX27_CLK_CKIL>, + <&clks IMX27_CLK_RTC_IPG_GATE>; + clock-names = "rtc, "ipg"; + status = "disabled"; +}; diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c index e916a91..df6483d 100644 --- a/drivers/rtc/rtc-mxc.c +++ b/drivers/rtc/rtc-mxc.c @@ -16,6 +16,8 @@ #include <linux/interrupt.h> #include <linux/platform_device.h> #include <linux/clk.h> +#include <linux/of.h> +#include <linux/of_device.h> #define RTC_INPUT_CLK_32768HZ (0x00 << 5) #define RTC_INPUT_CLK_32000HZ (0x01 << 5) @@ -98,6 +100,15 @@ static struct platform_device_id imx_rtc_devtype[] = { }; MODULE_DEVICE_TABLE(platform, imx_rtc_devtype); +#ifdef CONFIG_OF +static const struct of_device_id imx_rtc_dt_ids[] = { + { .compatible = "fsl,imx1-rtc", .data = &imx_rtc_devtype[IMX1_RTC] }, + { .compatible = "fsl,imx21-rtc", .data = &imx_rtc_devtype[IMX21_RTC] }, + {} +}; +MODULE_DEVICE_TABLE(of, imx_rtc_dt_ids); +#endif + static inline int is_imx1_rtc(struct rtc_plat_data *data) { return data->devtype == IMX1_RTC; @@ -362,12 +373,20 @@ static int mxc_rtc_probe(struct platform_device *pdev) u32 reg; unsigned long rate; int ret; + const struct of_device_id *of_id; pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL); if (!pdata) return -ENOMEM; - pdata->devtype = pdev->id_entry->driver_data; + of_id = of_match_device(imx_rtc_dt_ids, &pdev->dev); + if (of_id) { + struct platform_device_id *id_entry; + + id_entry = (struct platform_device_id *)of_id->data; + pdata->devtype = id_entry->driver_data; + } else + pdata->devtype = pdev->id_entry->driver_data; res = platform_get_resource(pdev, IORESOURCE_MEM, 0); pdata->ioaddr = devm_ioremap_resource(&pdev->dev, res); @@ -481,6 +500,7 @@ static SIMPLE_DEV_PM_OPS(mxc_rtc_pm_ops, mxc_rtc_suspend, mxc_rtc_resume); static struct platform_driver mxc_rtc_driver = { .driver = { .name = "mxc_rtc", + .of_match_table = of_match_ptr(imx_rtc_dt_ids), .pm = &mxc_rtc_pm_ops, }, .id_table = imx_rtc_devtype, -- 1.7.4.4 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/2] rtc: mxc: add support of device tree 2015-05-15 22:35 ` [PATCH 2/2] rtc: mxc: add support of device tree Philippe Reynes @ 2015-05-28 12:06 ` Alexandre Belloni 2015-06-04 21:26 ` Philippe Reynes 0 siblings, 1 reply; 12+ messages in thread From: Alexandre Belloni @ 2015-05-28 12:06 UTC (permalink / raw) To: linux-arm-kernel Hi, On 16/05/2015 at 00:35:30 +0200, Philippe Reynes wrote : > Please always include a commit message. > Signed-off-by: Philippe Reynes <tremyfr@gmail.com> > --- > Documentation/devicetree/bindings/rtc/rtc-mxc.txt | 27 +++++++++++++++++++++ > drivers/rtc/rtc-mxc.c | 22 ++++++++++++++++- > 2 files changed, 48 insertions(+), 1 deletions(-) > create mode 100644 Documentation/devicetree/bindings/rtc/rtc-mxc.txt > > diff --git a/Documentation/devicetree/bindings/rtc/rtc-mxc.txt b/Documentation/devicetree/bindings/rtc/rtc-mxc.txt > new file mode 100644 > index 0000000..5505493 > --- /dev/null > +++ b/Documentation/devicetree/bindings/rtc/rtc-mxc.txt > @@ -0,0 +1,27 @@ > +* Real Time Clock of the i.MX SoCs > + > +RTC controller for the i.MX SoCs > + > +Required properties: > +- compatible: Should be "fsl,imx1-rtc" or "fsl,imx21-rtc". > +- reg: physical base address of the controller and length of memory mapped > + region. > +- interrupts: IRQ line for the RTC. > +- clocks: should contain two entries: > + * one for the input reference > + * one for the the SoC RTC > +- clock-names: should contain: > + * "rtc" for the input reference clock > + * "ipg" for the SoC RTC clock > + > +Example: > + > +rtc at 10007000 { > + compatible = "fsl,imx21-rtc"; > + reg = <0x10007000 0x1000>; > + interrupts = <22>; > + clocks = <&clks IMX27_CLK_CKIL>, > + <&clks IMX27_CLK_RTC_IPG_GATE>; > + clock-names = "rtc, "ipg"; > + status = "disabled"; > +}; > diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c > index e916a91..df6483d 100644 > --- a/drivers/rtc/rtc-mxc.c > +++ b/drivers/rtc/rtc-mxc.c > @@ -16,6 +16,8 @@ > #include <linux/interrupt.h> > #include <linux/platform_device.h> > #include <linux/clk.h> > +#include <linux/of.h> > +#include <linux/of_device.h> > > #define RTC_INPUT_CLK_32768HZ (0x00 << 5) > #define RTC_INPUT_CLK_32000HZ (0x01 << 5) > @@ -98,6 +100,15 @@ static struct platform_device_id imx_rtc_devtype[] = { > }; > MODULE_DEVICE_TABLE(platform, imx_rtc_devtype); > > +#ifdef CONFIG_OF > +static const struct of_device_id imx_rtc_dt_ids[] = { > + { .compatible = "fsl,imx1-rtc", .data = &imx_rtc_devtype[IMX1_RTC] }, > + { .compatible = "fsl,imx21-rtc", .data = &imx_rtc_devtype[IMX21_RTC] }, Maybe you can use directly IMX1_RTC and IMX21_RTC which... > > - pdata->devtype = pdev->id_entry->driver_data; > + of_id = of_match_device(imx_rtc_dt_ids, &pdev->dev); > + if (of_id) { > + struct platform_device_id *id_entry; > + > + id_entry = (struct platform_device_id *)of_id->data; > + pdata->devtype = id_entry->driver_data; ... also simplifies that part. > + } else > + pdata->devtype = pdev->id_entry->driver_data; > -- Alexandre Belloni, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/2] rtc: mxc: add support of device tree 2015-05-28 12:06 ` Alexandre Belloni @ 2015-06-04 21:26 ` Philippe Reynes 2015-06-04 22:22 ` Alexandre Belloni 0 siblings, 1 reply; 12+ messages in thread From: Philippe Reynes @ 2015-06-04 21:26 UTC (permalink / raw) To: linux-arm-kernel Hi Alexandre, On 28/05/15 14:06, Alexandre Belloni wrote: > Hi, > > On 16/05/2015 at 00:35:30 +0200, Philippe Reynes wrote : >> > > Please always include a commit message. Oh yes, sorry about that. >> Signed-off-by: Philippe Reynes<tremyfr@gmail.com> >> --- >> Documentation/devicetree/bindings/rtc/rtc-mxc.txt | 27 +++++++++++++++++++++ >> drivers/rtc/rtc-mxc.c | 22 ++++++++++++++++- >> 2 files changed, 48 insertions(+), 1 deletions(-) >> create mode 100644 Documentation/devicetree/bindings/rtc/rtc-mxc.txt >> >> diff --git a/Documentation/devicetree/bindings/rtc/rtc-mxc.txt b/Documentation/devicetree/bindings/rtc/rtc-mxc.txt >> new file mode 100644 >> index 0000000..5505493 >> --- /dev/null >> +++ b/Documentation/devicetree/bindings/rtc/rtc-mxc.txt >> @@ -0,0 +1,27 @@ >> +* Real Time Clock of the i.MX SoCs >> + >> +RTC controller for the i.MX SoCs >> + >> +Required properties: >> +- compatible: Should be "fsl,imx1-rtc" or "fsl,imx21-rtc". >> +- reg: physical base address of the controller and length of memory mapped >> + region. >> +- interrupts: IRQ line for the RTC. >> +- clocks: should contain two entries: >> + * one for the input reference >> + * one for the the SoC RTC >> +- clock-names: should contain: >> + * "rtc" for the input reference clock >> + * "ipg" for the SoC RTC clock >> + >> +Example: >> + >> +rtc at 10007000 { >> + compatible = "fsl,imx21-rtc"; >> + reg =<0x10007000 0x1000>; >> + interrupts =<22>; >> + clocks =<&clks IMX27_CLK_CKIL>, >> + <&clks IMX27_CLK_RTC_IPG_GATE>; >> + clock-names = "rtc, "ipg"; >> + status = "disabled"; >> +}; >> diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c >> index e916a91..df6483d 100644 >> --- a/drivers/rtc/rtc-mxc.c >> +++ b/drivers/rtc/rtc-mxc.c >> @@ -16,6 +16,8 @@ >> #include<linux/interrupt.h> >> #include<linux/platform_device.h> >> #include<linux/clk.h> >> +#include<linux/of.h> >> +#include<linux/of_device.h> >> >> #define RTC_INPUT_CLK_32768HZ (0x00<< 5) >> #define RTC_INPUT_CLK_32000HZ (0x01<< 5) >> @@ -98,6 +100,15 @@ static struct platform_device_id imx_rtc_devtype[] = { >> }; >> MODULE_DEVICE_TABLE(platform, imx_rtc_devtype); >> >> +#ifdef CONFIG_OF >> +static const struct of_device_id imx_rtc_dt_ids[] = { >> + { .compatible = "fsl,imx1-rtc", .data =&imx_rtc_devtype[IMX1_RTC] }, >> + { .compatible = "fsl,imx21-rtc", .data =&imx_rtc_devtype[IMX21_RTC] }, > > Maybe you can use directly IMX1_RTC and IMX21_RTC which... I've seen both "style" on the code. I may change the code to simply use IMX1_RTC and IMX21_RTC. >> >> - pdata->devtype = pdev->id_entry->driver_data; >> + of_id = of_match_device(imx_rtc_dt_ids,&pdev->dev); >> + if (of_id) { >> + struct platform_device_id *id_entry; >> + >> + id_entry = (struct platform_device_id *)of_id->data; >> + pdata->devtype = id_entry->driver_data; > > ... also simplifies that part. I'll do it in the next version of this patch. >> + } else >> + pdata->devtype = pdev->id_entry->driver_data; >> > Do you prefer that I wait the clock driver has move to drivers/clk/imx (as requested by Shawn) before sending a v2 ? Regards, Philippe ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 2/2] rtc: mxc: add support of device tree 2015-06-04 21:26 ` Philippe Reynes @ 2015-06-04 22:22 ` Alexandre Belloni 0 siblings, 0 replies; 12+ messages in thread From: Alexandre Belloni @ 2015-06-04 22:22 UTC (permalink / raw) To: linux-arm-kernel On 04/06/2015 at 23:26:05 +0200, Philippe Reynes wrote : > I'll do it in the next version of this patch. > >>+ } else > >>+ pdata->devtype = pdev->id_entry->driver_data; > >> > > > > Do you prefer that I wait the clock driver has move to drivers/clk/imx > (as requested by Shawn) before sending a v2 ? > It would have been good to get the clock change in 4.2 but it is already late in the cycle now so I'm not sure it can go in. That would have removed the dependency. The other solution is to merge everything through Shawn's tree. Anyway, you can send the patches, we'll handle that part :) -- Alexandre Belloni, Free Electrons Embedded Linux, Kernel and Android engineering http://free-electrons.com ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2015-06-04 22:22 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2015-05-15 22:35 [PATCH 0/2] add dt support for mxc rtc Philippe Reynes 2015-05-15 22:35 ` [PATCH 1/2] rtc: mxc: add a second clock Philippe Reynes 2015-05-18 11:27 ` Enrico Weigelt, metux IT consult 2015-05-18 21:57 ` Philippe Reynes 2015-05-19 5:27 ` Shawn Guo 2015-05-28 11:57 ` Alexandre Belloni 2015-06-04 21:08 ` Philippe Reynes 2015-06-04 22:17 ` Alexandre Belloni 2015-05-15 22:35 ` [PATCH 2/2] rtc: mxc: add support of device tree Philippe Reynes 2015-05-28 12:06 ` Alexandre Belloni 2015-06-04 21:26 ` Philippe Reynes 2015-06-04 22:22 ` Alexandre Belloni
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).