public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Grant Likely <grant.likely@secretlab.ca>
To: Kishon Vijay Abraham I <kishon@ti.com>,
	balbi@ti.com, gregkh@linuxfoundation.org, arnd@arndb.de,
	akpm@linux-foundation.org, rob@landley.net
Cc: davem@davemloft.net, cesarb@cesarb.net,
	linux-usb@vger.kernel.org, linux-omap@vger.kernel.org,
	linux-kernel@vger.kernel.org, tony@atomide.com,
	rob.herring@calxeda.com, b-cousson@ti.com,
	linux@arm.linux.org.uk, eballetbo@gmail.com, javier@dowhile0.org,
	kishon@ti.com, mchehab@redhat.com, santosh.shilimkar@ti.com,
	broonie@opensource.wolfsonmicro.com, swarren@nvidia.com,
	linux-doc@vger.kernel.org, devicetree-discuss@lists.ozlabs.org,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v3 1/6] drivers: phy: add generic PHY framework
Date: Mon, 15 Apr 2013 12:34:16 +0100	[thread overview]
Message-ID: <20130415113416.7C3943E0AA8@localhost> (raw)
In-Reply-To: <1363770725-13717-2-git-send-email-kishon@ti.com>

On Wed, 20 Mar 2013 14:42:00 +0530, Kishon Vijay Abraham I <kishon@ti.com> 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
> PHY with or without using phandle. To obtain a reference to the PHY without
> using phandle, the platform specfic intialization code (say from board file)
> should have already called phy_bind with the binding information. The binding
> information consists of phy's device name, phy user device name and an index.
> The index is used when the same phy user binds to mulitple phys.
> 
> PHY drivers should create the PHY by passing phy_descriptor that has
> describes the PHY (label, type etc..) and ops like init, exit, suspend, resume,
> poweron, shutdown.
> 
> The documentation for the generic PHY framework is added in
> Documentation/phy.txt and the documentation for the sysfs entry is added
> in Documentation/ABI/testing/sysfs-class-phy.
> 
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>

Hi Kishon,

For review purposes, I'll skip most of the implementation and focus on
the data structures. I think you need to take another look at the
approach your using. The kernel already provides a lot of support for
implementing devices and binding them to drivers that you should be
able to use...


[...]
> +/**
> + * struct phy - represent the phy device
> + * @dev: phy device
> + * @label: label given to phy
> + * @type: specifies the phy type
> + * @of_node: device node of the phy
> + * @ops: function pointers for performing phy operations
> + */
> +struct phy {
> +	struct device		dev;
> +	const char		*label;
> +	int			type;
> +	struct bus_type		*bus;
> +	struct device_node	*of_node;
> +	struct phy_ops		*ops;
> +};

Alright, so the core of the functionality is this 'struct phy' which
tracks all the instances of PHY devices. As I understand it each
physical phy will have a 'struct phy' instance tracking it. That makes
sense.

struct phy embeds a struct device. Also good. The linux driver model
knows all about devices and how to handle them. However, most of the
rest of this structure looks to be reinventing stuff the driver model
already does.

'label' seems unnecessary. struct device embeds a struct kobject, which
means it has a name and shows up in sysfs. Is there a reason that the
device name cannot be used directly?

'type' I just don't understand. I don't see any users of it in this
patch. I only see where it is set.

'bus' absolutely should not be here. The bus type should be set in the
struct device by this subsystem when the device gets registered. There
is no reason to have a pointer to it here.

'of_node' is already in struct device

Finally, it really doesn't look right for a device object to have an
'ops' structure. The whole point of the driver model is that a struct
device doesn't encapsulate any behaviour. A device gets registers to a
bus type, and then the driver core will associate a struct device_driver
to a device that it is able to drive, and the struct device_driver is
supposed to contain any ops structure used to control the device.

> +
> +/**
> + * struct phy_bind - represent the binding for the phy
> + * @dev_name: the device name of the device that will bind to the phy
> + * @phy_dev_name: the device name of the phy
> + * @index: used if a single controller uses multiple phys
> + * @auto_bind: tells if the binding is done explicitly from board file or not
> + * @phy: reference to the phy
> + * @list: to maintain a linked list of the binding information
> + */
> +struct phy_bind {
> +	const char	*dev_name;
> +	const char	*phy_dev_name;
> +	int		index;
> +	int		auto_bind:1;
> +	struct phy	*phy;
> +	struct list_head list;
> +};

How are PHYs attached to the system. Would the PHY be a direct child of
the host controller device, or would a PHY hang off another bus (like
i2c) for control? (this is how Ethernet phys work; they hang off the
MDIO bus, but may be attached to any Ethernet controller).

Since there is at most a 1:N relationship between host controllers and
PHYs, there shouldn't be any need for a separate structure to describe
binding. Put the inding data into the struct phy itself. Each host
controller can have a list of phys that it is bound to.

Tring to maintain a separate global list of PHY bindings isn't a good
idea. Keep it local to the host controller and the specific phys
instead.

g.

  parent reply	other threads:[~2013-04-15 11:34 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-20  9:11 [PATCH v3 0/6] Generic PHY Framework Kishon Vijay Abraham I
2013-03-20  9:12 ` [PATCH v3 1/6] drivers: phy: add generic PHY framework Kishon Vijay Abraham I
2013-03-20 22:36   ` Sylwester Nawrocki
2013-03-21  5:46     ` kishon
2013-04-15 11:34   ` Grant Likely [this message]
2013-04-15 12:26     ` Kishon Vijay Abraham I
2013-04-15 19:50       ` Grant Likely
2013-04-16 10:18         ` Kishon Vijay Abraham I
2013-04-19  9:09           ` Grant Likely
2013-04-22  6:09             ` Kishon Vijay Abraham I
2013-03-20  9:12 ` [PATCH v3 2/6] usb: phy: omap-usb2: use the new " Kishon Vijay Abraham I
2013-03-20  9:12 ` [PATCH v3 3/6] usb: otg: twl4030: " Kishon Vijay Abraham I
2013-03-20  9:12 ` [PATCH v3 4/6] ARM: OMAP: USB: Add phy binding information Kishon Vijay Abraham I
2013-03-20 16:51   ` Tony Lindgren
2013-03-21  5:48     ` kishon
2013-03-20  9:12 ` [PATCH v3 5/6] ARM: dts: omap: update usb_otg_hs data Kishon Vijay Abraham I
2013-03-20 20:59   ` Stephen Warren
2013-03-21  6:23     ` kishon
2013-03-21 17:10       ` Stephen Warren
2013-03-22  9:20         ` Kishon Vijay Abraham I
2013-03-20  9:12 ` [PATCH v3 6/6] usb: musb: omap2430: use the new generic PHY framework Kishon Vijay Abraham I
2013-04-15 10:20 ` [PATCH v3 0/6] Generic PHY Framework Grant Likely
2013-04-15 10:36   ` Kishon Vijay Abraham I
2013-04-15 11:27     ` Sylwester Nawrocki
2013-04-15 12:26     ` Grant Likely
2013-04-15 12:33       ` Kishon Vijay Abraham I
2013-04-19 10:52 ` Sekhar Nori

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=20130415113416.7C3943E0AA8@localhost \
    --to=grant.likely@secretlab.ca \
    --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=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=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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox