Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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
+2 −2
Original line number Diff line number Diff line
@@ -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 */
+17 −0
Original line number Diff line number Diff line
@@ -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;