From: grygorii.strashko@ti•com (Grygorii Strashko)
To: linux-arm-kernel@lists•infradead.org
Subject: Common clock: function clock and bus clock
Date: Thu, 13 Mar 2014 13:30:43 +0200 [thread overview]
Message-ID: <532196E3.1060408@ti.com> (raw)
In-Reply-To: <53212313.9040305@elopez.com.ar>
On 03/13/2014 05:16 AM, Emilio L?pez wrote:
> Hi,
>
> El mi? 12 mar 2014 23:15:20 ART, Chao Xie escribi?:
>> On Wed, Mar 12, 2014 at 6:14 PM, Grygorii Strashko
>> <grygorii.strashko@ti•com> wrote:
>>> On 03/12/2014 04:30 AM, Chao Xie wrote:
>>>>
>>>> On Tue, Mar 11, 2014 at 10:48 AM, Haojian Zhuang
>>>> <haojian.zhuang@gmail•com> wrote:
>>>>>
>>>>> On Tue, Mar 11, 2014 at 10:06 AM, Chao Xie <xiechao.mail@gmail•com>
>>>>> wrote:
>>>>>>
>>>>>> hi
>>>>>>
>>>>>> I can not find any examples for handling function clock and bus clock
>>>>>> in drivers/clk/.
>>>>>>
>>>>>> For a device, it will have a function clock and bus clock. function
>>>>>> clock will control the fucntionality of this device, while bus clock
>>>>>> will control the communication part to the bus.
>>>>>>
>>>>>> For some SOCes, they do not export bus clock, so from the hardware it
>>>>>> seems that function clock is combined with bus clock, while for some
>>>>>> SOCes, they are not.
>>>>>>
>>>>>> For most of the device driver, they will enable/disable function
>>>>>> clock
>>>>>> and bus clock both. While for some devices, they may share bus clock,
>>>>>> and have different function clocks.
>
> You can define two normal clocks and use them like this
>
> * If a device has both bus and module
>
> clocks = <&abc ...>, <&xyz ...>;
> clock-names = "bus", "module";
>
> * If a device only has module clock
>
> clocks = <&xyz ...>;
> clock-names = "module";
>
> Then on the driver to control this specific hardware you can do
> something like
>
> /* mandatory module clock */
> mod = devm_clk_get(dev, "module");
> if (!IS_ERR(mod))
> clk_prepare_enable(mod)
> else
> goto fail;
>
> /* optional bus clock */
> bus = devm_clk_get(dev, "bus");
> if (!IS_ERR(bus))
> clk_prepare_enable(bus)
>
That what exactly Clock PM domain is doing :)
In Davinci it is defined as:
static struct pm_clk_notifier_block platform_bus_notifier = {
.pm_domain = &davinci_pm_domain,
.con_ids = { "fck", "master", "slave", NULL },
};
When device is created the Clk PM domain core (clock_ops.c) recollects all clocks
specified for device (in DT or in clkdev tables) by their names (DT) or con_id (clkdev).
One device can specify clocks: "master", "slave"
and another only "fck".
Then in driver you need only do:
pm_runtime_enable(dev);
error = pm_runtime_get_sync(dev);
^ all clocks assigned to the device will be enabled
...
error = pm_runtime_put_sync(dev);
^ all clocks assigned to the device will be disabled
Regards,
- grygorii
next prev parent reply other threads:[~2014-03-13 11:30 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-03-11 2:06 Common clock: function clock and bus clock Chao Xie
2014-03-11 2:48 ` Haojian Zhuang
2014-03-12 2:30 ` Chao Xie
2014-03-12 10:14 ` Grygorii Strashko
2014-03-13 2:15 ` Chao Xie
2014-03-13 3:16 ` Emilio López
2014-03-13 11:30 ` Grygorii Strashko [this message]
[not found] ` <20140319210428.31449.19420@quantum>
[not found] ` <CAPDyKFqg230Ob5Wxu0tvXqia+B3WG5+YdKTdxTQ0ySbZokb+7Q@mail.gmail.com>
2014-03-20 10:30 ` Grygorii Strashko
2014-03-20 11:42 ` Russell King - ARM Linux
2014-03-20 9:45 ` Ben Dooks
2014-03-20 11:35 ` Russell King - ARM Linux
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=532196E3.1060408@ti.com \
--to=grygorii.strashko@ti$(echo .)com \
--cc=linux-arm-kernel@lists$(echo .)infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox