On Mon, Apr 7, 2014 at 9:00 PM, Sören Brinkmann <soren.brinkmann@xxxxxxxxxx> wrote: > On Mon, 2014-03-31 at 11:23AM +0200, Ulf Hansson wrote: >> On 27 March 2014 16:25, Harini Katakam <harinik@xxxxxxxxxx> wrote: > [...] >> > +static int __maybe_unused zynq_gpio_runtime_suspend(struct device *dev) >> > +{ >> > + struct platform_device *pdev = to_platform_device(dev); >> > + struct zynq_gpio *gpio = platform_get_drvdata(pdev); >> > + >> > + clk_disable(gpio->clk); >> >> You should be able can use clk_disable_unprepare() here. >> >> > + >> > + return 0; >> > +} >> > + >> > +static int __maybe_unused zynq_gpio_runtime_resume(struct device *dev) >> > +{ >> > + struct platform_device *pdev = to_platform_device(dev); >> > + struct zynq_gpio *gpio = platform_get_drvdata(pdev); >> > + >> > + return clk_enable(gpio->clk); >> >> You should be able can use clk_prepare_enable() here. > > Is there some common practice regarding this? As I understand it, we > want to ensure the clock to be gated during suspend, which should happen > with clk_disable(). Why would we also unprepare the clock? We are highly > likely to use it again once we resume. enable() is fastpath (e.g. in IRQs disabled context) whereas prepare() is slowpath() in normal, threaded context. As [runtime]_suspend/resume happens in normal context you want to make sure clocks are both disabled/unprepared and prepared/enabled to make sure any clocks that can only be accessed in slowpath are also turned off/on. Yours, Linus Walleij -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html