Commit 6f7d2346 authored by Kishon Vijay Abraham I's avatar Kishon Vijay Abraham I

Merge tag 'phy-set-mode-v2' of...

Merge tag 'phy-set-mode-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/kishon/linux-phy into next

Add new set_mode phy ops
Signed-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
parents 04e59a02 300eb013
...@@ -342,6 +342,21 @@ int phy_power_off(struct phy *phy) ...@@ -342,6 +342,21 @@ int phy_power_off(struct phy *phy)
} }
EXPORT_SYMBOL_GPL(phy_power_off); EXPORT_SYMBOL_GPL(phy_power_off);
int phy_set_mode(struct phy *phy, enum phy_mode mode)
{
int ret;
if (!phy || !phy->ops->set_mode)
return 0;
mutex_lock(&phy->mutex);
ret = phy->ops->set_mode(phy, mode);
mutex_unlock(&phy->mutex);
return ret;
}
EXPORT_SYMBOL_GPL(phy_set_mode);
/** /**
* _of_phy_get() - lookup and obtain a reference to a phy by phandle * _of_phy_get() - lookup and obtain a reference to a phy by phandle
* @np: device_node for which to get the phy * @np: device_node for which to get the phy
......
...@@ -518,7 +518,7 @@ enum clk_type_t { ...@@ -518,7 +518,7 @@ enum clk_type_t {
CLK_INT_SING = 2, /* Internal single ended */ CLK_INT_SING = 2, /* Internal single ended */
}; };
enum phy_mode { enum xgene_phy_mode {
MODE_SATA = 0, /* List them for simple reference */ MODE_SATA = 0, /* List them for simple reference */
MODE_SGMII = 1, MODE_SGMII = 1,
MODE_PCIE = 2, MODE_PCIE = 2,
...@@ -542,7 +542,7 @@ struct xgene_sata_override_param { ...@@ -542,7 +542,7 @@ struct xgene_sata_override_param {
struct xgene_phy_ctx { struct xgene_phy_ctx {
struct device *dev; struct device *dev;
struct phy *phy; struct phy *phy;
enum phy_mode mode; /* Mode of operation */ enum xgene_phy_mode mode; /* Mode of operation */
enum clk_type_t clk_type; /* Input clock selection */ enum clk_type_t clk_type; /* Input clock selection */
void __iomem *sds_base; /* PHY CSR base addr */ void __iomem *sds_base; /* PHY CSR base addr */
struct clk *clk; /* Optional clock */ struct clk *clk; /* Optional clock */
......
...@@ -22,12 +22,20 @@ ...@@ -22,12 +22,20 @@
struct phy; struct phy;
enum phy_mode {
PHY_MODE_INVALID,
PHY_MODE_USB_HOST,
PHY_MODE_USB_DEVICE,
PHY_MODE_USB_OTG,
};
/** /**
* struct phy_ops - set of function pointers for performing phy operations * struct phy_ops - set of function pointers for performing phy operations
* @init: operation to be performed for initializing phy * @init: operation to be performed for initializing phy
* @exit: operation to be performed while exiting * @exit: operation to be performed while exiting
* @power_on: powering on the phy * @power_on: powering on the phy
* @power_off: powering off the phy * @power_off: powering off the phy
* @set_mode: set the mode of the phy
* @owner: the module owner containing the ops * @owner: the module owner containing the ops
*/ */
struct phy_ops { struct phy_ops {
...@@ -35,6 +43,7 @@ struct phy_ops { ...@@ -35,6 +43,7 @@ struct phy_ops {
int (*exit)(struct phy *phy); int (*exit)(struct phy *phy);
int (*power_on)(struct phy *phy); int (*power_on)(struct phy *phy);
int (*power_off)(struct phy *phy); int (*power_off)(struct phy *phy);
int (*set_mode)(struct phy *phy, enum phy_mode mode);
struct module *owner; struct module *owner;
}; };
...@@ -126,6 +135,7 @@ int phy_init(struct phy *phy); ...@@ -126,6 +135,7 @@ int phy_init(struct phy *phy);
int phy_exit(struct phy *phy); int phy_exit(struct phy *phy);
int phy_power_on(struct phy *phy); int phy_power_on(struct phy *phy);
int phy_power_off(struct phy *phy); int phy_power_off(struct phy *phy);
int phy_set_mode(struct phy *phy, enum phy_mode mode);
static inline int phy_get_bus_width(struct phy *phy) static inline int phy_get_bus_width(struct phy *phy)
{ {
return phy->attrs.bus_width; return phy->attrs.bus_width;
...@@ -233,6 +243,13 @@ static inline int phy_power_off(struct phy *phy) ...@@ -233,6 +243,13 @@ static inline int phy_power_off(struct phy *phy)
return -ENOSYS; return -ENOSYS;
} }
static inline int phy_set_mode(struct phy *phy, enum phy_mode mode)
{
if (!phy)
return 0;
return -ENOSYS;
}
static inline int phy_get_bus_width(struct phy *phy) static inline int phy_get_bus_width(struct phy *phy)
{ {
return -ENOSYS; return -ENOSYS;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment