linux-fbdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kishon Vijay Abraham I <kishon@ti.com>
To: linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 01/15] drivers: phy: add generic PHY framework
Date: Thu, 18 Jul 2013 09:11:52 +0000	[thread overview]
Message-ID: <51E7AE88.3050007@ti.com> (raw)
In-Reply-To: <20130718072004.GA16720@kroah.com>

Hi,

On Thursday 18 July 2013 12:50 PM, Greg KH wrote:
> On Thu, Jul 18, 2013 at 12:16:10PM +0530, Kishon Vijay Abraham I wrote:
>> +struct phy_provider *__of_phy_provider_register(struct device *dev,
>> +	struct module *owner, struct phy * (*of_xlate)(struct device *dev,
>> +	struct of_phandle_args *args));
>> +struct phy_provider *__devm_of_phy_provider_register(struct device *dev,
>> +	struct module *owner, struct phy * (*of_xlate)(struct device *dev,
>> +	struct of_phandle_args *args))
>> +
>> +__of_phy_provider_register and __devm_of_phy_provider_register can be used to
>> +register the phy_provider and it takes device, owner and of_xlate as
>> +arguments. For the dt boot case, all PHY providers should use one of the above
>> +2 APIs to register the PHY provider.
> 
> Why do you have __ for the prefix of a public function?  Is that really
> the way that OF handles this type of thing?

I have a macro of_phy_provider_register/devm_of_phy_provider_register that
calls these functions and should be used by the PHY drivers. Probably I should
make a mention of it in the Documentation.
> 
>> --- /dev/null
>> +++ b/drivers/phy/Kconfig
>> @@ -0,0 +1,13 @@
>> +#
>> +# PHY
>> +#
>> +
>> +menuconfig GENERIC_PHY
>> +	tristate "PHY Subsystem"
>> +	help
>> +	  Generic PHY support.
>> +
>> +	  This framework is designed to provide a generic interface for PHY
>> +	  devices present in the kernel. This layer will have the generic
>> +	  API by which phy drivers can create PHY using the phy framework and
>> +	  phy users can obtain reference to the PHY.
> 
> Again, please reverse this.  The drivers that use it should select it,
> not depend on it, which will then enable this option.  I will never know
> if I need to enable it, and based on your follow-on patches, if I don't,
> drivers that were working just fine, now disappeared from my build,
> which isn't nice, and a pain to notice and fix up.

ok.
> 
>> +/**
>> + * phy_create() - create a new phy
>> + * @dev: device that is creating the new phy
>> + * @id: id of the phy
>> + * @ops: function pointers for performing phy operations
>> + * @label: label given to the phy
>> + *
>> + * Called to create a phy using phy framework.
>> + */
>> +struct phy *phy_create(struct device *dev, u8 id, const struct phy_ops *ops,
>> +	const char *label)
>> +{
>> +	int ret;
>> +	struct phy *phy;
>> +
>> +	if (!dev) {
>> +		dev_WARN(dev, "no device provided for PHY\n");
>> +		ret = -EINVAL;
>> +		goto err0;
>> +	}
>> +
>> +	phy = kzalloc(sizeof(*phy), GFP_KERNEL);
>> +	if (!phy) {
>> +		ret = -ENOMEM;
>> +		goto err0;
>> +	}
>> +
>> +	device_initialize(&phy->dev);
>> +	mutex_init(&phy->mutex);
>> +
>> +	phy->dev.class = phy_class;
>> +	phy->dev.parent = dev;
>> +	phy->dev.of_node = dev->of_node;
>> +	phy->id = id;
>> +	phy->ops = ops;
>> +	phy->label = kstrdup(label, GFP_KERNEL);
>> +
>> +	ret = dev_set_name(&phy->dev, "%s.%d", dev_name(dev), id);
> 
> Your naming is odd, no "phy" anywhere in it?  You rely on the sender to
> never send a duplicate name.id pair?  Why not create your own ids based
> on the number of phys in the system, like almost all other classes and
> subsystems do?

hmm.. some PHY drivers use the id they provide to perform some of their
internal operation as in [1] (This is used only if a single PHY provider
implements multiple PHYS). Probably I'll add an option like PLATFORM_DEVID_AUTO
to give the PHY drivers an option to use auto id.

[1] ->
http://archive.arm.linux.org.uk/lurker/message/20130628.134308.4a8f7668.ca.html
> 
>> +static inline int phy_pm_runtime_get(struct phy *phy)
>> +{
>> +	if (WARN(IS_ERR(phy), "Invalid PHY reference\n"))
>> +		return -EINVAL;
> 
> Why would phy ever not be valid and a error pointer?  And why dump the
> stack if that happens, that seems really extreme.

hmm.. there might be cases where the same controller in one soc needs PHY
control and in some other soc does not need PHY control. In such cases, we
might get error pointer here.
I'll change WARN to dev_err.
> 
>> +
>> +	if (!pm_runtime_enabled(&phy->dev))
>> +		return -ENOTSUPP;
>> +
>> +	return pm_runtime_get(&phy->dev);
>> +}
> 
> This, and the other inline functions in this .h file seem huge, why are
> they inline and not in the .c file?  There's no speed issues, and it
> should save space overall in the .c file.  Please move them.

ok
> 
> 
>> +static inline int phy_init(struct phy *phy)
>> +{
>> +	int ret;
>> +
>> +	ret = phy_pm_runtime_get_sync(phy);
>> +	if (ret < 0 && ret != -ENOTSUPP)
>> +		return ret;
>> +
>> +	mutex_lock(&phy->mutex);
>> +	if (phy->init_count++ = 0 && phy->ops->init) {
>> +		ret = phy->ops->init(phy);
>> +		if (ret < 0) {
>> +			dev_err(&phy->dev, "phy init failed --> %d\n", ret);
>> +			goto out;
>> +		}
>> +	}
>> +
>> +out:
>> +	mutex_unlock(&phy->mutex);
>> +	phy_pm_runtime_put(phy);
>> +	return ret;
>> +}
>> +
>> +static inline int phy_exit(struct phy *phy)
>> +{
>> +	int ret;
>> +
>> +	ret = phy_pm_runtime_get_sync(phy);
>> +	if (ret < 0 && ret != -ENOTSUPP)
>> +		return ret;
>> +
>> +	mutex_lock(&phy->mutex);
>> +	if (--phy->init_count = 0 && phy->ops->exit) {
>> +		ret = phy->ops->exit(phy);
>> +		if (ret < 0) {
>> +			dev_err(&phy->dev, "phy exit failed --> %d\n", ret);
>> +			goto out;
>> +		}
>> +	}
>> +
>> +out:
>> +	mutex_unlock(&phy->mutex);
>> +	phy_pm_runtime_put(phy);
>> +	return ret;
>> +}
>> +
>> +static inline int phy_power_on(struct phy *phy)
>> +{
>> +	int ret = -ENOTSUPP;
>> +
>> +	ret = phy_pm_runtime_get_sync(phy);
>> +	if (ret < 0 && ret != -ENOTSUPP)
>> +		return ret;
>> +
>> +	mutex_lock(&phy->mutex);
>> +	if (phy->power_count++ = 0 && phy->ops->power_on) {
>> +		ret = phy->ops->power_on(phy);
>> +		if (ret < 0) {
>> +			dev_err(&phy->dev, "phy poweron failed --> %d\n", ret);
>> +			goto out;
>> +		}
>> +	}
>> +
>> +out:
>> +	mutex_unlock(&phy->mutex);
>> +
>> +	return ret;
>> +}
>> +
>> +static inline int phy_power_off(struct phy *phy)
>> +{
>> +	int ret = -ENOTSUPP;
>> +
>> +	mutex_lock(&phy->mutex);
>> +	if (--phy->power_count = 0 && phy->ops->power_off) {
>> +		ret =  phy->ops->power_off(phy);
>> +		if (ret < 0) {
>> +			dev_err(&phy->dev, "phy poweroff failed --> %d\n", ret);
>> +			goto out;
>> +		}
>> +	}
>> +
>> +out:
>> +	mutex_unlock(&phy->mutex);
>> +	phy_pm_runtime_put(phy);
>> +
>> +	return ret;
>> +}
> 
> Look at those 3 functions, they are all "real" and not an inline
> function at all, please move them.

Alright.

Thanks
Kishon

  reply	other threads:[~2013-07-18  9:11 UTC|newest]

Thread overview: 96+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-07-18  6:58 [PATCH 00/15] PHY framework Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 01/15] drivers: phy: add generic " Kishon Vijay Abraham I
2013-07-18  7:20   ` Greg KH
2013-07-18  9:11     ` Kishon Vijay Abraham I [this message]
2013-07-18 15:49       ` Greg KH
2013-07-19  5:49         ` Kishon Vijay Abraham I
2013-07-19  5:43           ` Greg KH
2013-07-19  5:56             ` Kishon Vijay Abraham I
2013-07-19  6:29               ` Greg KH
2013-07-19  6:48                 ` Kishon Vijay Abraham I
2013-07-19 15:54                   ` Stephen Warren
2013-07-20  3:27                     ` Kishon Vijay Abraham I
2013-07-19 23:50                   ` Greg KH
2013-07-20  3:31                     ` Kishon Vijay Abraham I
2013-07-20 22:00                       ` Greg KH
2013-07-21  2:32                         ` Alan Stern
2013-07-21  2:59                           ` Greg KH
2013-07-21 10:22                             ` Sascha Hauer
2013-07-21 15:48                               ` Greg KH
2013-07-21 17:14                                 ` Sylwester Nawrocki
2013-07-21 19:22                                   ` Alan Stern
2013-07-22  7:37                                     ` Kishon Vijay Abraham I
2013-07-22 14:44                                       ` Alan Stern
2013-07-23  5:59                                         ` Kishon Vijay Abraham I
2013-07-23  7:29                                         ` Tomasz Figa
2013-07-23  7:55                                           ` Tomasz Figa
2013-07-23 14:37                                             ` Alan Stern
2013-07-23 14:50                                               ` Tomasz Figa
2013-07-23 15:30                                               ` Kishon Vijay Abraham I
2013-07-23 16:18                                                 ` Greg KH
2013-07-23 16:40                                                   ` Kishon Vijay Abraham I
2013-07-23 16:35                                                     ` Greg KH
2013-07-23 16:50                                                   ` Tomasz Figa
2013-07-23 17:37                                                     ` Greg KH
2013-07-23 17:44                                                       ` Mark Brown
2013-07-23 18:01                                                         ` Greg KH
2013-07-23 19:31                                                           ` Mark Brown
2013-07-23 19:44                                                             ` Greg KH
2013-07-23 20:07                                                               ` Tomasz Figa
2013-07-23 20:50                                                                 ` Greg KH
2013-07-23 21:05                                                                   ` Tomasz Figa
2013-07-23 21:23                                                                     ` Greg KH
2013-07-23 23:48                                                               ` Mark Brown
2013-07-23 17:48                                                       ` Tomasz Figa
2013-07-23 18:04                                                         ` Greg KH
2013-07-23 20:46                                                           ` Tomasz Figa
2013-07-23 19:36                                                     ` Alan Stern
2013-07-23 20:20                                                       ` Tomasz Figa
2013-07-23 20:53                                                         ` Alan Stern
2013-07-23 21:02                                                           ` Tomasz Figa
2013-07-23 21:14                                                             ` Alan Stern
2013-07-23 21:31                                                               ` Tomasz Figa
2013-07-24 18:32                                                                 ` Arnd Bergmann
     [not found]                                                                   ` <51F0B373.5050907@ti.com>
2013-07-25  7:54                                                                     ` Arnd Bergmann
2013-07-25  9:29                                                                   ` Sylwester Nawrocki
2013-07-25  9:29                                                                   ` Mark Brown
2013-07-25 10:16                                                                   ` Laurent Pinchart
2013-07-25 11:00                                                                     ` Arnd Bergmann
2013-07-25 11:10                                                                       ` Laurent Pinchart
2013-07-25 12:09                                                                       ` Mark Brown
2013-07-23 17:34                                               ` Mark Brown
2013-07-22 15:04                                       ` Greg KH
2013-07-23  5:46                                         ` Kishon Vijay Abraham I
2013-07-21 10:31                             ` Tomasz Figa
2013-07-21 11:19                               ` Kishon Vijay Abraham I
2013-07-21 11:12                                 ` Tomasz Figa
2013-07-21 15:46                                   ` Greg KH
2013-07-30  7:11                                     ` Felipe Balbi
2013-07-31  5:56                                       ` Kishon Vijay Abraham I
2013-07-31  6:15                                         ` Felipe Balbi
2013-08-13 10:56                                           ` Kishon Vijay Abraham I
2013-08-13 11:37                                             ` Tomasz Figa
2013-08-13 12:17                                               ` Kishon Vijay Abraham I
2013-08-13 22:19                                                 ` Sylwester Nawrocki
2013-08-13 23:04                                                   ` Tomasz Figa
2013-08-14 15:17                                                     ` Kishon Vijay Abraham I
2013-08-19  5:40                                                       ` Kishon Vijay Abraham I
2013-08-20 12:26                                                         ` Felipe Balbi
2013-07-18  6:58 ` [PATCH 02/15] usb: phy: omap-usb2: use the new " Kishon Vijay Abraham I
2013-07-18  7:21   ` Greg KH
2013-07-18  9:12     ` Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 03/15] usb: phy: twl4030: " Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 04/15] ARM: OMAP: USB: Add phy binding information Kishon Vijay Abraham I
2013-07-18  7:02   ` Tony Lindgren
2013-07-18  6:58 ` [PATCH 05/15] ARM: dts: omap: update usb_otg_hs data Kishon Vijay Abraham I
2013-07-18  7:05   ` Tony Lindgren
2013-07-18  6:58 ` [PATCH 06/15] usb: musb: omap2430: use the new generic PHY framework Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 07/15] usb: phy: omap-usb2: remove *set_suspend* callback from omap-usb2 Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 08/15] usb: phy: twl4030-usb: remove *set_suspend* and *phy_init* ops Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 09/15] phy: Add driver for Exynos MIPI CSIS/DSIM DPHYs Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 10/15] video: exynos_mipi_dsim: Use the generic PHY driver Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 11/15] exynos4-is: Use the generic MIPI CSIS " Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 12/15] ARM: Samsung: Remove the MIPI PHY setup code Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 13/15] phy: Add driver for Exynos DP PHY Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 14/15] video: exynos_dp: remove non-DT support for Exynos Display Port Kishon Vijay Abraham I
2013-07-18  6:58 ` [PATCH 15/15] video: exynos_dp: Use the generic PHY driver Kishon Vijay Abraham I

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=51E7AE88.3050007@ti.com \
    --to=kishon@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).