All of lore.kernel.org
 help / color / mirror / Atom feed
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

  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.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.