Re: [PATCH v4 1/6] drivers: phy: add generic PHY framework

From: Kishon Vijay Abraham I
Date: Wed Apr 03 2013 - 01:34:01 EST


On Tuesday 02 April 2013 09:10 PM, Stephen Warren wrote:
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.

Cool. That makes it a lot clearer.

Thanks
Kishon
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/