mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 07:37:31 -04:00
Merge "usb: dwc3-msm: Avoid access of gsi_reg for non-GSI targets"
This commit is contained in:
commit
11b5bc34f4
3 changed files with 1350 additions and 32 deletions
|
|
@ -2482,12 +2482,14 @@ static void dwc3_msm_notify_event(struct dwc3 *dwc,
|
|||
break;
|
||||
case DWC3_CONTROLLER_NOTIFY_CLEAR_DB:
|
||||
dev_dbg(mdwc->dev, "DWC3_CONTROLLER_NOTIFY_CLEAR_DB\n");
|
||||
dwc3_msm_write_reg_field(mdwc->base,
|
||||
GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
|
||||
BLOCK_GSI_WR_GO_MASK, true);
|
||||
dwc3_msm_write_reg_field(mdwc->base,
|
||||
GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
|
||||
GSI_EN_MASK, 0);
|
||||
if (mdwc->gsi_reg) {
|
||||
dwc3_msm_write_reg_field(mdwc->base,
|
||||
GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
|
||||
BLOCK_GSI_WR_GO_MASK, true);
|
||||
dwc3_msm_write_reg_field(mdwc->base,
|
||||
GSI_GENERAL_CFG_REG(mdwc->gsi_reg),
|
||||
GSI_EN_MASK, 0);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
dev_dbg(mdwc->dev, "unknown dwc3 event\n");
|
||||
|
|
|
|||
|
|
@ -81,6 +81,8 @@
|
|||
#define USB_HSPHY_1P8_VOL_MAX 1800000 /* uV */
|
||||
#define USB_HSPHY_1P8_HPM_LOAD 19000 /* uA */
|
||||
|
||||
#define USB_HSPHY_VDD_HPM_LOAD 30000 /* uA */
|
||||
|
||||
struct msm_hsphy {
|
||||
struct usb_phy phy;
|
||||
void __iomem *base;
|
||||
|
|
@ -146,23 +148,6 @@ static void msm_hsphy_enable_clocks(struct msm_hsphy *phy, bool on)
|
|||
}
|
||||
|
||||
}
|
||||
static int msm_hsphy_config_vdd(struct msm_hsphy *phy, int high)
|
||||
{
|
||||
int min, ret;
|
||||
|
||||
min = high ? 1 : 0; /* low or none? */
|
||||
ret = regulator_set_voltage(phy->vdd, phy->vdd_levels[min],
|
||||
phy->vdd_levels[2]);
|
||||
if (ret) {
|
||||
dev_err(phy->phy.dev, "unable to set voltage for hsusb vdd\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
dev_dbg(phy->phy.dev, "%s: min_vol:%d max_vol:%d\n", __func__,
|
||||
phy->vdd_levels[min], phy->vdd_levels[2]);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int msm_hsphy_enable_power(struct msm_hsphy *phy, bool on)
|
||||
{
|
||||
|
|
@ -179,13 +164,19 @@ static int msm_hsphy_enable_power(struct msm_hsphy *phy, bool on)
|
|||
if (!on)
|
||||
goto disable_vdda33;
|
||||
|
||||
ret = msm_hsphy_config_vdd(phy, true);
|
||||
if (ret) {
|
||||
dev_err(phy->phy.dev, "Unable to config VDD:%d\n",
|
||||
ret);
|
||||
ret = regulator_set_load(phy->vdd, USB_HSPHY_VDD_HPM_LOAD);
|
||||
if (ret < 0) {
|
||||
dev_err(phy->phy.dev, "Unable to set HPM of vdd:%d\n", ret);
|
||||
goto err_vdd;
|
||||
}
|
||||
|
||||
ret = regulator_set_voltage(phy->vdd, phy->vdd_levels[1],
|
||||
phy->vdd_levels[2]);
|
||||
if (ret) {
|
||||
dev_err(phy->phy.dev, "unable to set voltage for hsusb vdd\n");
|
||||
goto put_vdd_lpm;
|
||||
}
|
||||
|
||||
ret = regulator_enable(phy->vdd);
|
||||
if (ret) {
|
||||
dev_err(phy->phy.dev, "Unable to enable VDD\n");
|
||||
|
|
@ -272,14 +263,24 @@ put_vdda18_lpm:
|
|||
disable_vdd:
|
||||
ret = regulator_disable(phy->vdd);
|
||||
if (ret)
|
||||
dev_err(phy->phy.dev, "Unable to disable vdd:%d\n",
|
||||
ret);
|
||||
dev_err(phy->phy.dev, "Unable to disable vdd:%d\n", ret);
|
||||
|
||||
unconfig_vdd:
|
||||
ret = msm_hsphy_config_vdd(phy, false);
|
||||
ret = regulator_set_voltage(phy->vdd, phy->vdd_levels[0],
|
||||
phy->vdd_levels[2]);
|
||||
if (ret)
|
||||
dev_err(phy->phy.dev, "Unable unconfig VDD:%d\n",
|
||||
ret);
|
||||
dev_err(phy->phy.dev, "unable to set voltage for hsusb vdd\n");
|
||||
|
||||
put_vdd_lpm:
|
||||
ret = regulator_set_load(phy->vdd, 0);
|
||||
if (ret < 0)
|
||||
dev_err(phy->phy.dev, "Unable to set LPM of vdd\n");
|
||||
/* Return from here based on power_enabled. If it is not set
|
||||
* then return -EINVAL since either set_voltage or
|
||||
* regulator_enable failed
|
||||
*/
|
||||
if (!phy->power_enabled)
|
||||
return -EINVAL;
|
||||
err_vdd:
|
||||
phy->power_enabled = false;
|
||||
dev_dbg(phy->phy.dev, "HSUSB PHY's regulators are turned OFF.\n");
|
||||
|
|
|
|||
1315
include/dt-bindings/phy/qcom,sm8150-qmp-usb3.h
Normal file
1315
include/dt-bindings/phy/qcom,sm8150-qmp-usb3.h
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue