mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-10 20:02:10 -04:00
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: Kishon Vijay Abraham I <kishon@ti.com>
This commit is contained in:
@@ -342,6 +342,21 @@ int phy_power_off(struct phy *phy)
|
||||
}
|
||||
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
|
||||
* @np: device_node for which to get the phy
|
||||
|
||||
@@ -518,7 +518,7 @@ enum clk_type_t {
|
||||
CLK_INT_SING = 2, /* Internal single ended */
|
||||
};
|
||||
|
||||
enum phy_mode {
|
||||
enum xgene_phy_mode {
|
||||
MODE_SATA = 0, /* List them for simple reference */
|
||||
MODE_SGMII = 1,
|
||||
MODE_PCIE = 2,
|
||||
@@ -542,7 +542,7 @@ struct xgene_sata_override_param {
|
||||
struct xgene_phy_ctx {
|
||||
struct device *dev;
|
||||
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 */
|
||||
void __iomem *sds_base; /* PHY CSR base addr */
|
||||
struct clk *clk; /* Optional clock */
|
||||
|
||||
@@ -22,12 +22,20 @@
|
||||
|
||||
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
|
||||
* @init: operation to be performed for initializing phy
|
||||
* @exit: operation to be performed while exiting
|
||||
* @power_on: powering on the phy
|
||||
* @power_off: powering off the phy
|
||||
* @set_mode: set the mode of the phy
|
||||
* @owner: the module owner containing the ops
|
||||
*/
|
||||
struct phy_ops {
|
||||
@@ -35,6 +43,7 @@ struct phy_ops {
|
||||
int (*exit)(struct phy *phy);
|
||||
int (*power_on)(struct phy *phy);
|
||||
int (*power_off)(struct phy *phy);
|
||||
int (*set_mode)(struct phy *phy, enum phy_mode mode);
|
||||
struct module *owner;
|
||||
};
|
||||
|
||||
@@ -126,6 +135,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_set_mode(struct phy *phy, enum phy_mode mode);
|
||||
static inline int phy_get_bus_width(struct phy *phy)
|
||||
{
|
||||
return phy->attrs.bus_width;
|
||||
@@ -233,6 +243,13 @@ static inline int phy_power_off(struct phy *phy)
|
||||
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)
|
||||
{
|
||||
return -ENOSYS;
|
||||
|
||||
Reference in New Issue
Block a user