Add new set_mode phy ops

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1.4.11 (GNU/Linux)
 
 iQIcBAABAgAGBQJXelfSAAoJEA5ceFyATYLZNZ4QAIyGsCDp9OyWFbstr+iR7+JG
 TFIlrRvtCX2AdG0C0/cX5XWDWji4vmWlnjmyKtjQqCwe+LmRXUOzbHgayhmzm2XK
 8HgDbj0YUHUZLAK4yoZ3S5un+kG/tyPJSKnLfZj3yfzPjslQQzPSDCcqdULtPMi1
 bgsvCM8plEgP7Bl6STMShR6WJCHTXP6/p1RsBgnmEZ74yMkSri5Usxlrd3oOmql6
 2rREqWhrmVCQaGcQfLLNmFjU8vjI2ow54VPBRxnI/ZbNsmu/c5b0EpQ6SQVOiX1q
 QAsf+YiaR+sL4/orHeEXTWO/J3qtSoIGHSo6ypnlKN7A/29taXqHm7G6AqYmchN2
 zbWXCnNAcL8r7z4xHMovjks5FLRMTsN1IQSX3X6cvp9x/RDdhmEXjDyxoJdQHVh5
 cT0R2oDQ6qdAemT34HW4/F7oE6ft2v6amQPY1HChIi2KGT5mnf7qc79Ma5++aEq5
 +qPmAXBTkhz0uowZ1MH996XfuYzIoU37qRsB4IQX3zLEM4SFt5De/7QX+BrpiyY9
 /V3tUA/aaHBqoGvIJmggty71V0HDzmjIqtmR+z2ALS2IEavnv7lrfsURh0Wi7uKb
 Wq8U0l6j/LKMrMqmGIGSl/POYrn7i/DVzAAQnxFA2AHQHKOqC8noOn3jQJeWHByC
 xuRjNTQUfynjx0IXenk0
 =lBOF
 -----END PGP SIGNATURE-----

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:
Kishon Vijay Abraham I 2016-07-04 18:07:25 +05:30
commit 6f7d2346cb
3 changed files with 34 additions and 2 deletions

View File

@ -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

View File

@ -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 */

View File

@ -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;