From: Stephen Warren <swarren@wwwdotorg.org>
To: Kishon Vijay Abraham I <kishon@ti.com>
Cc: linux-usb@vger.kernel.org, mchehab@redhat.com,
linux-doc@vger.kernel.org, tony@atomide.com,
grant.likely@secretlab.ca, linux@arm.linux.org.uk,
javier@dowhile0.org, cesarb@cesarb.net, arnd@arndb.de,
eballetbo@gmail.com, devicetree-discuss@lists.ozlabs.org,
rob.herring@calxeda.com, swarren@nvidia.com,
sylvester.nawrocki@gmail.com, linux-omap@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, b-cousson@ti.com,
gregkh@linuxfoundation.org, broonie@opensource.wolfsonmicro.com,
linux-kernel@vger.kernel.org, balbi@ti.com,
santosh.shilimkar@ti.com, rob@landley.net,
akpm@linux-foundation.org, davem@davemloft.net
Subject: Re: [PATCH v4 1/6] drivers: phy: add generic PHY framework
Date: Tue, 02 Apr 2013 09:40:54 -0600 [thread overview]
Message-ID: <515AFC06.8000502@wwwdotorg.org> (raw)
In-Reply-To: <515A98B3.7090405@ti.com>
On 04/02/2013 02:37 AM, Kishon Vijay Abraham I wrote:
> Hi,
>
> On Thursday 28 March 2013 09:15 PM, Stephen Warren wrote:
>> On 03/27/2013 11:43 PM, Kishon Vijay Abraham I wrote:
>>> The PHY framework provides a set of APIs for the PHY drivers to
>>> create/destroy a PHY and APIs for the PHY users to obtain a reference
>>> to the
>>
>>> diff --git a/Documentation/devicetree/bindings/phy/phy-bindings.txt
>>> +PHY subsystem refer Documentation/phy.txt
>>> +
>>> +PHY device node
>>> +===============
>>> +
>>> +Optional Properties:
>>> +#phy-cells: Number of cells in a PHY specifier; The meaning of all those
>>> + cells is defined by the binding for the phy node. However
>>> + in-order to return the correct PHY, the PHY susbsystem
>>> + requires the first cell always refers to the port.
>>
>> Why impose that restriction? Other DT bindings do not.
>>
>> This is typically implemented by having each provider driver implement a
>> .of_xlate() operation, which parses all of the specifier cells, and
>> returns the ID of the object it represents. This allows bindings to use
>> whatever arbitrary representation they want.
>
> Do you mean something like this
>
> struct phy *of_phy_get(struct device *dev, int index)
> {
> struct phy *phy = NULL;
> struct phy_bind *phy_map = NULL;
> struct of_phandle_args args;
> struct device_node *node;
>
> if (!dev->of_node) {
> dev_dbg(dev, "device does not have a device node entry\n");
> return ERR_PTR(-EINVAL);
> }
>
> ret = of_parse_phandle_with_args(dev->of_node, "phys", "#phy-cells",
> index, &args);
> if (ret) {
> dev_dbg(dev, "failed to get phy in %s node\n",
> dev->of_node->full_name);
> return ERR_PTR(-ENODEV);
> }
Looks good.
> //Here we have to get a reference to the phy in order to call of_xlate
> which seems a little hacky to me. I'm not sure how else can we call the
> provider driver :-(
> phy = of_phy_lookup(dev, node);
> if (IS_ERR(phy) || !try_module_get(phy->ops->owner)) {
> phy = ERR_PTR(-EPROBE_DEFER);
> goto err0;
> }
I think the concept of a "PHY provider" and a "PHY instance" are different.
of_xlate should be called on a "PHY provider", and return a "PHY
instance". Hence, above you want to only look up a "PHY provider", so
there's no hackiness involved.
> //here we are checking if the phy has additional specifiers and if so
> call of_xlate using the phy we just obtained. The provider driver should
> check the args and return the appropriate *phy in this case.
> if (args.args_count > 0) {
It's probably simplest to always call of_xlate; that way, you're always
calling it on a "PHY provider" and getting back a "PHY instance". For
providers that only provide 1 instance, the implementation should be
simple:-)
> phy = phy->of_xlate(&args);
> if (IS_ERR(phy))
> goto err0;
> }
>
> phy_map = phy_bind(dev_name(dev), index, dev_name(&phy->dev));
> if (!IS_ERR(phy_map)) {
> phy_map->phy = phy;
> phy_map->auto_bind = true;
> }
>
> get_device(&phy->dev);
>
> err0:
> of_node_put(node);
>
> return phy;
> }
> EXPORT_SYMBOL_GPL(of_phy_get);
WARNING: multiple messages have this Message-ID (diff)
From: swarren@wwwdotorg.org (Stephen Warren)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 1/6] drivers: phy: add generic PHY framework
Date: Tue, 02 Apr 2013 09:40:54 -0600 [thread overview]
Message-ID: <515AFC06.8000502@wwwdotorg.org> (raw)
In-Reply-To: <515A98B3.7090405@ti.com>
On 04/02/2013 02:37 AM, Kishon Vijay Abraham I wrote:
> Hi,
>
> On Thursday 28 March 2013 09:15 PM, Stephen Warren wrote:
>> On 03/27/2013 11:43 PM, Kishon Vijay Abraham I wrote:
>>> The PHY framework provides a set of APIs for the PHY drivers to
>>> create/destroy a PHY and APIs for the PHY users to obtain a reference
>>> to the
>>
>>> diff --git a/Documentation/devicetree/bindings/phy/phy-bindings.txt
>>> +PHY subsystem refer Documentation/phy.txt
>>> +
>>> +PHY device node
>>> +===============
>>> +
>>> +Optional Properties:
>>> +#phy-cells: Number of cells in a PHY specifier; The meaning of all those
>>> + cells is defined by the binding for the phy node. However
>>> + in-order to return the correct PHY, the PHY susbsystem
>>> + requires the first cell always refers to the port.
>>
>> Why impose that restriction? Other DT bindings do not.
>>
>> This is typically implemented by having each provider driver implement a
>> .of_xlate() operation, which parses all of the specifier cells, and
>> returns the ID of the object it represents. This allows bindings to use
>> whatever arbitrary representation they want.
>
> Do you mean something like this
>
> struct phy *of_phy_get(struct device *dev, int index)
> {
> struct phy *phy = NULL;
> struct phy_bind *phy_map = NULL;
> struct of_phandle_args args;
> struct device_node *node;
>
> if (!dev->of_node) {
> dev_dbg(dev, "device does not have a device node entry\n");
> return ERR_PTR(-EINVAL);
> }
>
> ret = of_parse_phandle_with_args(dev->of_node, "phys", "#phy-cells",
> index, &args);
> if (ret) {
> dev_dbg(dev, "failed to get phy in %s node\n",
> dev->of_node->full_name);
> return ERR_PTR(-ENODEV);
> }
Looks good.
> //Here we have to get a reference to the phy in order to call of_xlate
> which seems a little hacky to me. I'm not sure how else can we call the
> provider driver :-(
> phy = of_phy_lookup(dev, node);
> if (IS_ERR(phy) || !try_module_get(phy->ops->owner)) {
> phy = ERR_PTR(-EPROBE_DEFER);
> goto err0;
> }
I think the concept of a "PHY provider" and a "PHY instance" are different.
of_xlate should be called on a "PHY provider", and return a "PHY
instance". Hence, above you want to only look up a "PHY provider", so
there's no hackiness involved.
> //here we are checking if the phy has additional specifiers and if so
> call of_xlate using the phy we just obtained. The provider driver should
> check the args and return the appropriate *phy in this case.
> if (args.args_count > 0) {
It's probably simplest to always call of_xlate; that way, you're always
calling it on a "PHY provider" and getting back a "PHY instance". For
providers that only provide 1 instance, the implementation should be
simple:-)
> phy = phy->of_xlate(&args);
> if (IS_ERR(phy))
> goto err0;
> }
>
> phy_map = phy_bind(dev_name(dev), index, dev_name(&phy->dev));
> if (!IS_ERR(phy_map)) {
> phy_map->phy = phy;
> phy_map->auto_bind = true;
> }
>
> get_device(&phy->dev);
>
> err0:
> of_node_put(node);
>
> return phy;
> }
> EXPORT_SYMBOL_GPL(of_phy_get);
next prev parent reply other threads:[~2013-04-02 15:41 UTC|newest]
Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-28 5:43 [PATCH v4 0/6] Generic PHY Framework Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` [PATCH v4 1/6] drivers: phy: add generic PHY framework Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
[not found] ` <1364449408-9510-2-git-send-email-kishon-l0cyMroinI0@public.gmane.org>
2013-03-28 15:45 ` Stephen Warren
2013-03-28 15:45 ` Stephen Warren
2013-03-28 15:45 ` Stephen Warren
[not found] ` <5154658A.3080209-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-04-02 8:37 ` Kishon Vijay Abraham I
2013-04-02 8:37 ` Kishon Vijay Abraham I
2013-04-02 8:37 ` Kishon Vijay Abraham I
2013-04-02 15:40 ` Stephen Warren [this message]
2013-04-02 15:40 ` Stephen Warren
[not found] ` <515AFC06.8000502-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-04-03 5:32 ` Kishon Vijay Abraham I
2013-04-03 5:32 ` Kishon Vijay Abraham I
2013-04-03 5:32 ` Kishon Vijay Abraham I
2013-04-01 19:34 ` Sylwester Nawrocki
2013-04-01 19:34 ` Sylwester Nawrocki
[not found] ` <5159E157.6000800-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-04-02 8:39 ` Kishon Vijay Abraham I
2013-04-02 8:39 ` Kishon Vijay Abraham I
2013-04-02 8:39 ` Kishon Vijay Abraham I
2013-04-01 22:27 ` Sylwester Nawrocki
2013-04-01 22:27 ` Sylwester Nawrocki
[not found] ` <515A09D8.7040703-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2013-04-01 22:38 ` Stephen Warren
2013-04-01 22:38 ` Stephen Warren
2013-04-01 22:38 ` Stephen Warren
2013-04-02 21:51 ` Sylwester Nawrocki
2013-04-02 21:51 ` Sylwester Nawrocki
2013-03-28 5:43 ` [PATCH v4 2/6] usb: phy: omap-usb2: use the new " Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
[not found] ` <1364449408-9510-1-git-send-email-kishon-l0cyMroinI0@public.gmane.org>
2013-03-28 5:43 ` [PATCH v4 3/6] usb: otg: twl4030: " Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` [PATCH v4 4/6] ARM: OMAP: USB: Add phy binding information Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` [PATCH v4 5/6] ARM: dts: omap: update usb_otg_hs data Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` [PATCH v4 6/6] usb: musb: omap2430: use the new generic PHY framework Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 5:43 ` Kishon Vijay Abraham I
2013-03-28 18:31 ` [PATCH v4 0/6] Generic PHY Framework David Miller
2013-03-28 18:31 ` David Miller
[not found] ` <20130328.143142.2080627792603647441.davem-fT/PcQaiUtIeIZ0/mPfg9Q@public.gmane.org>
2013-04-03 5:59 ` Kishon Vijay Abraham I
2013-04-03 5:59 ` Kishon Vijay Abraham I
2013-04-03 5:59 ` Kishon Vijay Abraham I
2013-04-03 6:31 ` David Miller
2013-04-03 6:31 ` David Miller
2013-04-03 6:35 ` Kishon Vijay Abraham I
2013-04-03 6:35 ` Kishon Vijay Abraham I
2013-04-03 6:35 ` Kishon Vijay Abraham I
2013-04-03 16:33 ` David Miller
2013-04-03 16:33 ` David Miller
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=515AFC06.8000502@wwwdotorg.org \
--to=swarren@wwwdotorg.org \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=b-cousson@ti.com \
--cc=balbi@ti.com \
--cc=broonie@opensource.wolfsonmicro.com \
--cc=cesarb@cesarb.net \
--cc=davem@davemloft.net \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=eballetbo@gmail.com \
--cc=grant.likely@secretlab.ca \
--cc=gregkh@linuxfoundation.org \
--cc=javier@dowhile0.org \
--cc=kishon@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mchehab@redhat.com \
--cc=rob.herring@calxeda.com \
--cc=rob@landley.net \
--cc=santosh.shilimkar@ti.com \
--cc=swarren@nvidia.com \
--cc=sylvester.nawrocki@gmail.com \
--cc=tony@atomide.com \
/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.