diff options
Diffstat (limited to 'drivers/usb/pd/qpnp-pdphy.c')
| -rw-r--r-- | drivers/usb/pd/qpnp-pdphy.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/usb/pd/qpnp-pdphy.c b/drivers/usb/pd/qpnp-pdphy.c index 4ecc24c6be11..63fad28fa721 100644 --- a/drivers/usb/pd/qpnp-pdphy.c +++ b/drivers/usb/pd/qpnp-pdphy.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2016, Linux Foundation. All rights reserved. +/* Copyright (c) 2016-2017, Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -34,6 +34,7 @@ #define USB_PDPHY_MSG_CONFIG 0x40 #define MSG_CONFIG_PORT_DATA_ROLE BIT(3) #define MSG_CONFIG_PORT_POWER_ROLE BIT(2) +#define MSG_CONFIG_SPEC_REV_MASK (BIT(1) | BIT(0)) #define USB_PDPHY_EN_CONTROL 0x46 #define CONTROL_ENABLE BIT(0) @@ -331,6 +332,16 @@ int pd_phy_update_roles(enum data_role dr, enum power_role pr) ((dr == DR_DFP ? MSG_CONFIG_PORT_DATA_ROLE : 0) | (pr == PR_SRC ? MSG_CONFIG_PORT_POWER_ROLE : 0))); } +EXPORT_SYMBOL(pd_phy_update_roles); + +int pd_phy_update_spec_rev(enum pd_spec_rev rev) +{ + struct usb_pdphy *pdphy = __pdphy; + + return pdphy_masked_write(pdphy, USB_PDPHY_MSG_CONFIG, + MSG_CONFIG_SPEC_REV_MASK, rev); +} +EXPORT_SYMBOL(pd_phy_update_spec_rev); int pd_phy_open(struct pd_phy_params *params) { @@ -366,6 +377,10 @@ int pd_phy_open(struct pd_phy_params *params) if (ret) return ret; + ret = pd_phy_update_spec_rev(params->spec_rev); + if (ret) + return ret; + ret = pdphy_reg_write(pdphy, USB_PDPHY_EN_CONTROL, 0); if (ret) return ret; |
