phy: Add reset callback

The only use for this is for solving a hardware design problem in
usb of Rockchip RK3288.

Signed-off-by: Randy Li <ayaka@soulik.info>
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
This commit is contained in:
Randy Li 2016-09-10 02:59:37 +08:00 committed by Kishon Vijay Abraham I
parent 91d6e3b6bc
commit cac18ecb6f
2 changed files with 18 additions and 0 deletions

View File

@ -357,6 +357,21 @@ int phy_set_mode(struct phy *phy, enum phy_mode mode)
} }
EXPORT_SYMBOL_GPL(phy_set_mode); EXPORT_SYMBOL_GPL(phy_set_mode);
int phy_reset(struct phy *phy)
{
int ret;
if (!phy || !phy->ops->reset)
return 0;
mutex_lock(&phy->mutex);
ret = phy->ops->reset(phy);
mutex_unlock(&phy->mutex);
return ret;
}
EXPORT_SYMBOL_GPL(phy_reset);
/** /**
* _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

View File

@ -36,6 +36,7 @@ enum phy_mode {
* @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 * @set_mode: set the mode of the phy
* @reset: resetting the phy
* @owner: the module owner containing the ops * @owner: the module owner containing the ops
*/ */
struct phy_ops { struct phy_ops {
@ -44,6 +45,7 @@ struct phy_ops {
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); int (*set_mode)(struct phy *phy, enum phy_mode mode);
int (*reset)(struct phy *phy);
struct module *owner; struct module *owner;
}; };
@ -136,6 +138,7 @@ 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); int phy_set_mode(struct phy *phy, enum phy_mode mode);
int phy_reset(struct phy *phy);
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;