All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
To: Kishon Vijay Abraham I <kishon@ti.com>
Cc: balbi@ti.com, gregkh@linuxfoundation.org, arnd@arndb.de,
	akpm@linux-foundation.org, rob@landley.net,
	swarren@wwwdotorg.org, davem@davemloft.net, cesarb@cesarb.net,
	linux-usb@vger.kernel.org, linux-omap@vger.kernel.org,
	linux-kernel@vger.kernel.org, tony@atomide.com,
	grant.likely@secretlab.ca, rob.herring@calxeda.com,
	b-cousson@ti.com, linux@arm.linux.org.uk, eballetbo@gmail.com,
	javier@dowhile0.org, 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 v4 1/6] drivers: phy: add generic PHY framework
Date: Mon, 01 Apr 2013 21:34:47 +0200	[thread overview]
Message-ID: <5159E157.6000800@gmail.com> (raw)
In-Reply-To: <1364449408-9510-2-git-send-email-kishon@ti.com>

Just couple minor comments...

On 03/28/2013 06:43 AM, 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
> 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 and the documentation for
> dt binding is can be found at
> Documentation/devicetree/bindings/phy/phy-bindings.txt
>
> Signed-off-by: Kishon Vijay Abraham I<kishon@ti.com>
> ---
[...]
> +/**
> + * phy_put - release the PHY

nit: According to kernel-doc documentation function names should have
parentheses appended to the name. So it would need to be

+ * phy_put() - release the PHY

in this case and it applies to multiple places elsewhere in this patch.

> + * @phy: the phy returned by phy_get()
> + *
> + * Releases a refcount the caller received from phy_get().
> + */
> +void phy_put(struct phy *phy)
> +{
> +	if (phy) {
> +		module_put(phy->ops->owner);
> +		put_device(&phy->dev);
> +	}
> +}
> +EXPORT_SYMBOL_GPL(phy_put);
[...]
> +/**
> + * devm_of_phy_get_byname - lookup and obtain a reference to a phy by name
> + * @dev: device that requests this phy
> + * @string - the phy name as given in the dt data

s/ -/:

> + *
> + * Calls devm_of_phy_get (which associates the device with the phy using devres
> + * on successful phy get) and passes on the return value of devm_of_phy_get.
> + */
> +struct phy *devm_of_phy_get_byname(struct device *dev, const char *string)
> +{
> +	int index;
> +
> +	if (!dev->of_node) {
> +		dev_dbg(dev, "device does not have a device node entry\n");
> +		return ERR_PTR(-EINVAL);
> +	}
> +
> +	index = of_property_match_string(dev->of_node, "phy-names", string);
> +
> +	return devm_of_phy_get(dev, index);
> +}
> +EXPORT_SYMBOL_GPL(devm_of_phy_get_byname);
> +
> +/**
> + * phy_get - lookup and obtain a reference to a phy.
> + * @dev: device that requests this phy
> + * @index: the index of the phy
> + *
> + * Returns the phy driver, after getting a refcount to it; or
> + * -ENODEV if there is no such phy.  The caller is responsible for
> + * calling phy_put() to release that count.
> + */
> +struct phy *phy_get(struct device *dev, int index)
> +{
> +	struct phy *phy = NULL;

Unneeded initialization.

> +	phy = phy_lookup(dev, index);
> +	if (IS_ERR(phy)) {
> +		dev_err(dev, "unable to find phy\n");
> +		goto err0;

Wouldn't it be better to just do:

		return phy;
> +	}
> +
> +	if (!try_module_get(phy->ops->owner)) {
> +		phy = ERR_PTR(-EPROBE_DEFER);

and
		return ERR_PTR(-EPROBE_DEFER);

> +		goto err0;

and to drop this goto and the label below ?

> +	}
> +
> +	get_device(&phy->dev);
> +
> +err0:
> +	return phy;
> +}
> +EXPORT_SYMBOL_GPL(phy_get);

> diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
> new file mode 100644
> index 0000000..0cb2298
> --- /dev/null
> +++ b/include/linux/phy/phy.h
> @@ -0,0 +1,237 @@
> +/*
> + * phy.h -- generic phy header file
[...]
> +#ifndef __DRIVERS_PHY_H
> +#define __DRIVERS_PHY_H
> +
> +#include<linux/err.h>
> +#include<linux/of.h>
> +
> +struct phy

I think you also need to add either

#include <linux/device.h>

or

struct device;

struct device * is used further in this file.

> +/**
> + * struct phy_ops - set of function pointers for performing phy operations
> + * @init: operation to be performed for initializing phy
> + * @exit: operation to be performed while exiting
> + * @suspend: suspending the phy
> + * @resume: resuming the phy

> + * @poweron: powering on the phy
> + * @shutdown: shutting down the phy

Could these be named power_on/power_off ? Looks a bit more symmetric
to me that way.

> + * @owner: the module owner containing the ops
> + */
> +struct phy_ops {
> +	int	(*init)(struct phy *phy);
> +	int	(*exit)(struct phy *phy);
> +	int	(*suspend)(struct phy *phy);
> +	int	(*resume)(struct phy *phy);
> +	int	(*poweron)(struct phy *phy);
> +	int	(*shutdown)(struct phy *phy);
> +	struct module *owner;
> +};

Thanks,
Sylwester

WARNING: multiple messages have this Message-ID (diff)
From: sylvester.nawrocki@gmail.com (Sylwester Nawrocki)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v4 1/6] drivers: phy: add generic PHY framework
Date: Mon, 01 Apr 2013 21:34:47 +0200	[thread overview]
Message-ID: <5159E157.6000800@gmail.com> (raw)
In-Reply-To: <1364449408-9510-2-git-send-email-kishon@ti.com>

Just couple minor comments...

On 03/28/2013 06:43 AM, 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
> 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 and the documentation for
> dt binding is can be found at
> Documentation/devicetree/bindings/phy/phy-bindings.txt
>
> Signed-off-by: Kishon Vijay Abraham I<kishon@ti.com>
> ---
[...]
> +/**
> + * phy_put - release the PHY

nit: According to kernel-doc documentation function names should have
parentheses appended to the name. So it would need to be

+ * phy_put() - release the PHY

in this case and it applies to multiple places elsewhere in this patch.

> + * @phy: the phy returned by phy_get()
> + *
> + * Releases a refcount the caller received from phy_get().
> + */
> +void phy_put(struct phy *phy)
> +{
> +	if (phy) {
> +		module_put(phy->ops->owner);
> +		put_device(&phy->dev);
> +	}
> +}
> +EXPORT_SYMBOL_GPL(phy_put);
[...]
> +/**
> + * devm_of_phy_get_byname - lookup and obtain a reference to a phy by name
> + * @dev: device that requests this phy
> + * @string - the phy name as given in the dt data

s/ -/:

> + *
> + * Calls devm_of_phy_get (which associates the device with the phy using devres
> + * on successful phy get) and passes on the return value of devm_of_phy_get.
> + */
> +struct phy *devm_of_phy_get_byname(struct device *dev, const char *string)
> +{
> +	int index;
> +
> +	if (!dev->of_node) {
> +		dev_dbg(dev, "device does not have a device node entry\n");
> +		return ERR_PTR(-EINVAL);
> +	}
> +
> +	index = of_property_match_string(dev->of_node, "phy-names", string);
> +
> +	return devm_of_phy_get(dev, index);
> +}
> +EXPORT_SYMBOL_GPL(devm_of_phy_get_byname);
> +
> +/**
> + * phy_get - lookup and obtain a reference to a phy.
> + * @dev: device that requests this phy
> + * @index: the index of the phy
> + *
> + * Returns the phy driver, after getting a refcount to it; or
> + * -ENODEV if there is no such phy.  The caller is responsible for
> + * calling phy_put() to release that count.
> + */
> +struct phy *phy_get(struct device *dev, int index)
> +{
> +	struct phy *phy = NULL;

Unneeded initialization.

> +	phy = phy_lookup(dev, index);
> +	if (IS_ERR(phy)) {
> +		dev_err(dev, "unable to find phy\n");
> +		goto err0;

Wouldn't it be better to just do:

		return phy;
> +	}
> +
> +	if (!try_module_get(phy->ops->owner)) {
> +		phy = ERR_PTR(-EPROBE_DEFER);

and
		return ERR_PTR(-EPROBE_DEFER);

> +		goto err0;

and to drop this goto and the label below ?

> +	}
> +
> +	get_device(&phy->dev);
> +
> +err0:
> +	return phy;
> +}
> +EXPORT_SYMBOL_GPL(phy_get);

> diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
> new file mode 100644
> index 0000000..0cb2298
> --- /dev/null
> +++ b/include/linux/phy/phy.h
> @@ -0,0 +1,237 @@
> +/*
> + * phy.h -- generic phy header file
[...]
> +#ifndef __DRIVERS_PHY_H
> +#define __DRIVERS_PHY_H
> +
> +#include<linux/err.h>
> +#include<linux/of.h>
> +
> +struct phy

I think you also need to add either

#include <linux/device.h>

or

struct device;

struct device * is used further in this file.

> +/**
> + * struct phy_ops - set of function pointers for performing phy operations
> + * @init: operation to be performed for initializing phy
> + * @exit: operation to be performed while exiting
> + * @suspend: suspending the phy
> + * @resume: resuming the phy

> + * @poweron: powering on the phy
> + * @shutdown: shutting down the phy

Could these be named power_on/power_off ? Looks a bit more symmetric
to me that way.

> + * @owner: the module owner containing the ops
> + */
> +struct phy_ops {
> +	int	(*init)(struct phy *phy);
> +	int	(*exit)(struct phy *phy);
> +	int	(*suspend)(struct phy *phy);
> +	int	(*resume)(struct phy *phy);
> +	int	(*poweron)(struct phy *phy);
> +	int	(*shutdown)(struct phy *phy);
> +	struct module *owner;
> +};

Thanks,
Sylwester

  parent reply	other threads:[~2013-04-01 19:34 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
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 [this message]
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=5159E157.6000800@gmail.com \
    --to=sylvester.nawrocki@gmail.com \
    --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=swarren@wwwdotorg.org \
    --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.