diff mbox

[v2,1/4] PHY: Add function set_speed to generic PHY framework

Message ID 1384905197-3566-2-git-send-email-lho@apm.com
State Not Applicable
Delegated to: David Miller
Headers show

Commit Message

Loc Ho Nov. 19, 2013, 11:53 p.m. UTC
PHY: Add function set_speed to generic PHY framework

This patch adds function set_speed to the generic PHY
framework operation structure. This function can be
called to instruct the PHY underlying layer at specified
lane to configure for specified speed in hertz.

Signed-off-by: Loc Ho <lho@apm.com>
---
 include/linux/phy/phy.h |   22 ++++++++++++++++++++++
 1 files changed, 22 insertions(+), 0 deletions(-)

Comments

Sergei Shtylyov Nov. 20, 2013, 6:06 p.m. UTC | #1
Hello.

On 20=11-2013 3:53, Loc Ho wrote:

> PHY: Add function set_speed to generic PHY framework

    There's no need to duplicate the subject in the changelog verbatim.

> This patch adds function set_speed to the generic PHY
> framework operation structure. This function can be
> called to instruct the PHY underlying layer at specified
> lane to configure for specified speed in hertz.

> Signed-off-by: Loc Ho <lho@apm.com>

WBR, Sergei

--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index 9351a16..df9b1d1 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -32,6 +32,7 @@  struct phy;
  * @exit: operation to be performed while exiting
  * @power_on: powering on the phy
  * @power_off: powering off the phy
+ * @set_speed: set operation speed in hz
  * @owner: the module owner containing the ops
  */
 struct phy_ops {
@@ -39,6 +40,7 @@  struct phy_ops {
 	int	(*exit)(struct phy *phy);
 	int	(*power_on)(struct phy *phy);
 	int	(*power_off)(struct phy *phy);
+	int	(*set_speed)(struct phy *phy, int lane, u64 speed);
 	struct module *owner;
 };
 
@@ -341,4 +343,24 @@  out:
 	return ret;
 }
 
+static inline int phy_set_speed(struct phy *phy, int lane, u64 speed)
+{
+	int ret = -ENOTSUPP;
+
+	mutex_lock(&phy->mutex);
+	if (phy->ops->set_speed) {
+		ret =  phy->ops->set_speed(phy, lane, speed);
+		if (ret < 0) {
+			dev_err(&phy->dev, "phy set speed failed --> %d\n",
+				ret);
+			goto out;
+		}
+	}
+
+out:
+	mutex_unlock(&phy->mutex);
+
+	return ret;
+}
+
 #endif /* __DRIVERS_PHY_H */