diff mbox

[RFC,1/4] phy: Add provision for tuning phy.

Message ID 1386672926-26885-2-git-send-email-gautam.vivek@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

Vivek Gautam Dec. 10, 2013, 10:55 a.m. UTC
Some PHY controllers may need to tune PHY post-initialization,
so that the PHY consumers can call phy-tuning at appropriate
point of time.

Signed-off-by: vivek Gautam <gautam.vivek@samsung.com>
---
 drivers/phy/phy-core.c  |   20 ++++++++++++++++++++
 include/linux/phy/phy.h |    7 +++++++
 2 files changed, 27 insertions(+), 0 deletions(-)

Comments

Heikki Krogerus Dec. 10, 2013, 2:01 p.m. UTC | #1
Hi,

On Tue, Dec 10, 2013 at 04:25:23PM +0530, Vivek Gautam wrote:
> Some PHY controllers may need to tune PHY post-initialization,
> so that the PHY consumers can call phy-tuning at appropriate
> point of time.
> 
> Signed-off-by: vivek Gautam <gautam.vivek@samsung.com>
> ---
>  drivers/phy/phy-core.c  |   20 ++++++++++++++++++++
>  include/linux/phy/phy.h |    7 +++++++
>  2 files changed, 27 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
> index 03cf8fb..68dbb90 100644
> --- a/drivers/phy/phy-core.c
> +++ b/drivers/phy/phy-core.c
> @@ -239,6 +239,26 @@ out:
>  }
>  EXPORT_SYMBOL_GPL(phy_power_off);
>  
> +int phy_tune(struct phy *phy)
> +{
> +	int ret = -ENOTSUPP;
> +
> +	mutex_lock(&phy->mutex);
> +	if (phy->ops->tune) {
> +		ret =  phy->ops->tune(phy);
> +		if (ret < 0) {
> +			dev_err(&phy->dev, "phy tuning failed --> %d\n", ret);
> +			goto out;
> +		}
> +	}
> +
> +out:
> +	mutex_unlock(&phy->mutex);
> +
> +	return ret;
> +}
> +EXPORT_SYMBOL_GPL(phy_tune);

I think "setup" instead of "tune" is much more clear and reusable.

Thanks,
Vivek Gautam Dec. 11, 2013, 6:38 a.m. UTC | #2
Hi,


On Tue, Dec 10, 2013 at 7:31 PM, Heikki Krogerus
<heikki.krogerus@linux.intel.com> wrote:
> Hi,

Thanks for reviewing this.

>
> On Tue, Dec 10, 2013 at 04:25:23PM +0530, Vivek Gautam wrote:
>> Some PHY controllers may need to tune PHY post-initialization,
>> so that the PHY consumers can call phy-tuning at appropriate
>> point of time.
>>
>> Signed-off-by: vivek Gautam <gautam.vivek@samsung.com>
>> ---
>>  drivers/phy/phy-core.c  |   20 ++++++++++++++++++++
>>  include/linux/phy/phy.h |    7 +++++++
>>  2 files changed, 27 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
>> index 03cf8fb..68dbb90 100644
>> --- a/drivers/phy/phy-core.c
>> +++ b/drivers/phy/phy-core.c
>> @@ -239,6 +239,26 @@ out:
>>  }
>>  EXPORT_SYMBOL_GPL(phy_power_off);
>>
>> +int phy_tune(struct phy *phy)
>> +{
>> +     int ret = -ENOTSUPP;
>> +
>> +     mutex_lock(&phy->mutex);
>> +     if (phy->ops->tune) {
>> +             ret =  phy->ops->tune(phy);
>> +             if (ret < 0) {
>> +                     dev_err(&phy->dev, "phy tuning failed --> %d\n", ret);
>> +                     goto out;
>> +             }
>> +     }
>> +
>> +out:
>> +     mutex_unlock(&phy->mutex);
>> +
>> +     return ret;
>> +}
>> +EXPORT_SYMBOL_GPL(phy_tune);
>
> I think "setup" instead of "tune" is much more clear and reusable.

I think "setup" will look more like first time setting up the phy,
which is rather served by "init" callback.
This i thought would serve the purpose of over-riding certain PHY
parameters, which would not have been
possible at "init" time.
Please correct my thinking if i am unable to understand your point here.

>
> Thanks,
>
> --
> heikki
> --
> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
Heikki Krogerus Dec. 11, 2013, 8:09 a.m. UTC | #3
Hi,

On Wed, Dec 11, 2013 at 12:08:04PM +0530, Vivek Gautam wrote:
> On Tue, Dec 10, 2013 at 7:31 PM, Heikki Krogerus
> > I think "setup" instead of "tune" is much more clear and reusable.
> 
> I think "setup" will look more like first time setting up the phy,
> which is rather served by "init" callback.
> This i thought would serve the purpose of over-riding certain PHY
> parameters, which would not have been
> possible at "init" time.
> Please correct my thinking if i am unable to understand your point here.

OK, sorry I was not clear on this. I'm thinking the same, that this is
something that is called later, for example when the controller is
ready. Some ULPI phys need to be initialized, but since the controller
provides the interface, it's usually not possible during init time.
This hook could be used in that case as well.

All I'm saying is that "tune" is a poor expression. You will need to
add a comment explaining what the hook does in any case, so you'll
have something like "this is something that is called when the
controller is ready" or something similar. That will make it clear
what it's meant for.

Thanks,
Kishon Vijay Abraham I Dec. 11, 2013, 8:17 a.m. UTC | #4
On Wednesday 11 December 2013 12:08 PM, Vivek Gautam wrote:
> Hi,
> 
> 
> On Tue, Dec 10, 2013 at 7:31 PM, Heikki Krogerus
> <heikki.krogerus@linux.intel.com> wrote:
>> Hi,
> 
> Thanks for reviewing this.
> 
>>
>> On Tue, Dec 10, 2013 at 04:25:23PM +0530, Vivek Gautam wrote:
>>> Some PHY controllers may need to tune PHY post-initialization,
>>> so that the PHY consumers can call phy-tuning at appropriate
>>> point of time.
>>>
>>> Signed-off-by: vivek Gautam <gautam.vivek@samsung.com>
>>> ---
>>>  drivers/phy/phy-core.c  |   20 ++++++++++++++++++++
>>>  include/linux/phy/phy.h |    7 +++++++
>>>  2 files changed, 27 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
>>> index 03cf8fb..68dbb90 100644
>>> --- a/drivers/phy/phy-core.c
>>> +++ b/drivers/phy/phy-core.c
>>> @@ -239,6 +239,26 @@ out:
>>>  }
>>>  EXPORT_SYMBOL_GPL(phy_power_off);
>>>
>>> +int phy_tune(struct phy *phy)
>>> +{
>>> +     int ret = -ENOTSUPP;
>>> +
>>> +     mutex_lock(&phy->mutex);
>>> +     if (phy->ops->tune) {
>>> +             ret =  phy->ops->tune(phy);
>>> +             if (ret < 0) {
>>> +                     dev_err(&phy->dev, "phy tuning failed --> %d\n", ret);
>>> +                     goto out;
>>> +             }
>>> +     }
>>> +
>>> +out:
>>> +     mutex_unlock(&phy->mutex);
>>> +
>>> +     return ret;
>>> +}
>>> +EXPORT_SYMBOL_GPL(phy_tune);
>>
>> I think "setup" instead of "tune" is much more clear and reusable.
> 
> I think "setup" will look more like first time setting up the phy,
> which is rather served by "init" callback.
> This i thought would serve the purpose of over-riding certain PHY
> parameters, which would not have been
> possible at "init" time.
> Please correct my thinking if i am unable to understand your point here.

how about 'calibrate'?

Thanks
Kishon
> 
>>
>> Thanks,
>>
>> --
>> heikki
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Vivek Gautam Dec. 11, 2013, 8:32 a.m. UTC | #5
Hi,


On Wed, Dec 11, 2013 at 1:39 PM, Heikki Krogerus
<heikki.krogerus@linux.intel.com> wrote:
> Hi,
>
> On Wed, Dec 11, 2013 at 12:08:04PM +0530, Vivek Gautam wrote:
>> On Tue, Dec 10, 2013 at 7:31 PM, Heikki Krogerus
>> > I think "setup" instead of "tune" is much more clear and reusable.
>>
>> I think "setup" will look more like first time setting up the phy,
>> which is rather served by "init" callback.
>> This i thought would serve the purpose of over-riding certain PHY
>> parameters, which would not have been
>> possible at "init" time.
>> Please correct my thinking if i am unable to understand your point here.
>
> OK, sorry I was not clear on this. I'm thinking the same, that this is
> something that is called later, for example when the controller is
> ready. Some ULPI phys need to be initialized, but since the controller
> provides the interface, it's usually not possible during init time.
> This hook could be used in that case as well.
>
> All I'm saying is that "tune" is a poor expression. You will need to
> add a comment explaining what the hook does in any case, so you'll
> have something like "this is something that is called when the
> controller is ready" or something similar. That will make it clear
> what it's meant for.

Ok, i think i should have kept a comment atleast :-(
I will add proper comments above, and as suggested in the mail by
Kishon, may be name it calibrate ?
What do you think ?

>
> Thanks,
>
> --
> heikki
Vivek Gautam Dec. 11, 2013, 8:33 a.m. UTC | #6
Hi Kishon,


On Wed, Dec 11, 2013 at 1:47 PM, Kishon Vijay Abraham I <kishon@ti.com> wrote:
> On Wednesday 11 December 2013 12:08 PM, Vivek Gautam wrote:
>> Hi,
>>
>>
>> On Tue, Dec 10, 2013 at 7:31 PM, Heikki Krogerus
>> <heikki.krogerus@linux.intel.com> wrote:
>>> Hi,
>>
>> Thanks for reviewing this.
>>
>>>
>>> On Tue, Dec 10, 2013 at 04:25:23PM +0530, Vivek Gautam wrote:
>>>> Some PHY controllers may need to tune PHY post-initialization,
>>>> so that the PHY consumers can call phy-tuning at appropriate
>>>> point of time.
>>>>
>>>> Signed-off-by: vivek Gautam <gautam.vivek@samsung.com>
>>>> ---
>>>>  drivers/phy/phy-core.c  |   20 ++++++++++++++++++++
>>>>  include/linux/phy/phy.h |    7 +++++++
>>>>  2 files changed, 27 insertions(+), 0 deletions(-)
>>>>
>>>> diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
>>>> index 03cf8fb..68dbb90 100644
>>>> --- a/drivers/phy/phy-core.c
>>>> +++ b/drivers/phy/phy-core.c
>>>> @@ -239,6 +239,26 @@ out:
>>>>  }
>>>>  EXPORT_SYMBOL_GPL(phy_power_off);
>>>>
>>>> +int phy_tune(struct phy *phy)
>>>> +{
>>>> +     int ret = -ENOTSUPP;
>>>> +
>>>> +     mutex_lock(&phy->mutex);
>>>> +     if (phy->ops->tune) {
>>>> +             ret =  phy->ops->tune(phy);
>>>> +             if (ret < 0) {
>>>> +                     dev_err(&phy->dev, "phy tuning failed --> %d\n", ret);
>>>> +                     goto out;
>>>> +             }
>>>> +     }
>>>> +
>>>> +out:
>>>> +     mutex_unlock(&phy->mutex);
>>>> +
>>>> +     return ret;
>>>> +}
>>>> +EXPORT_SYMBOL_GPL(phy_tune);
>>>
>>> I think "setup" instead of "tune" is much more clear and reusable.
>>
>> I think "setup" will look more like first time setting up the phy,
>> which is rather served by "init" callback.
>> This i thought would serve the purpose of over-riding certain PHY
>> parameters, which would not have been
>> possible at "init" time.
>> Please correct my thinking if i am unable to understand your point here.
>
> how about 'calibrate'?

Hmm, seems like a better name :-)

>
> Thanks
> Kishon
>>
>>>
>>> Thanks,
>>>
>>> --
>>> heikki
>>> --
>>> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in
>>> the body of a message to majordomo@vger.kernel.org
>>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>>
>>
>>
>
Heikki Krogerus Dec. 11, 2013, 8:54 a.m. UTC | #7
Hi again,

On Wed, Dec 11, 2013 at 02:02:43PM +0530, Vivek Gautam wrote:
> On Wed, Dec 11, 2013 at 1:39 PM, Heikki Krogerus
> <heikki.krogerus@linux.intel.com> wrote:
> > On Wed, Dec 11, 2013 at 12:08:04PM +0530, Vivek Gautam wrote:
> >> On Tue, Dec 10, 2013 at 7:31 PM, Heikki Krogerus
> >> > I think "setup" instead of "tune" is much more clear and reusable.
> >>
> >> I think "setup" will look more like first time setting up the phy,
> >> which is rather served by "init" callback.
> >> This i thought would serve the purpose of over-riding certain PHY
> >> parameters, which would not have been
> >> possible at "init" time.
> >> Please correct my thinking if i am unable to understand your point here.
> >
> > OK, sorry I was not clear on this. I'm thinking the same, that this is
> > something that is called later, for example when the controller is
> > ready. Some ULPI phys need to be initialized, but since the controller
> > provides the interface, it's usually not possible during init time.
> > This hook could be used in that case as well.
> >
> > All I'm saying is that "tune" is a poor expression. You will need to
> > add a comment explaining what the hook does in any case, so you'll
> > have something like "this is something that is called when the
> > controller is ready" or something similar. That will make it clear
> > what it's meant for.
> 
> Ok, i think i should have kept a comment atleast :-(
> I will add proper comments above, and as suggested in the mail by
> Kishon, may be name it calibrate ?
> What do you think ?

Sure, I'm fine with that.

Thanks,
diff mbox

Patch

diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 03cf8fb..68dbb90 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -239,6 +239,26 @@  out:
 }
 EXPORT_SYMBOL_GPL(phy_power_off);
 
+int phy_tune(struct phy *phy)
+{
+	int ret = -ENOTSUPP;
+
+	mutex_lock(&phy->mutex);
+	if (phy->ops->tune) {
+		ret =  phy->ops->tune(phy);
+		if (ret < 0) {
+			dev_err(&phy->dev, "phy tuning failed --> %d\n", ret);
+			goto out;
+		}
+	}
+
+out:
+	mutex_unlock(&phy->mutex);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(phy_tune);
+
 /**
  * of_phy_get() - lookup and obtain a reference to a phy by phandle
  * @dev: device that requests this phy
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index 6d72269..d3b32b0 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -34,6 +34,7 @@  struct phy_ops {
 	int	(*exit)(struct phy *phy);
 	int	(*power_on)(struct phy *phy);
 	int	(*power_off)(struct phy *phy);
+	int	(*tune)(struct phy *phy);
 	struct module *owner;
 };
 
@@ -127,6 +128,7 @@  int phy_init(struct phy *phy);
 int phy_exit(struct phy *phy);
 int phy_power_on(struct phy *phy);
 int phy_power_off(struct phy *phy);
+int phy_tune(struct phy *phy);
 struct phy *phy_get(struct device *dev, const char *string);
 struct phy *devm_phy_get(struct device *dev, const char *string);
 void phy_put(struct phy *phy);
@@ -199,6 +201,11 @@  static inline int phy_power_off(struct phy *phy)
 	return -ENOSYS;
 }
 
+static inline int phy_tune(struct phy *phy)
+{
+	return -ENOSYS;
+}
+
 static inline struct phy *phy_get(struct device *dev, const char *string)
 {
 	return ERR_PTR(-ENOSYS);