Merge "dwc3-msm: Turn on 1.8V LDO before turning on 3.3V LDO"

This commit is contained in:
Linux Build Service Account 2015-05-19 00:48:32 -07:00 committed by Gerrit - the friendly Code Review server
commit f62f95b715
10 changed files with 57 additions and 1 deletions

View file

@ -17,6 +17,8 @@ Required properties :
'dwc3' sub node for "DWC3-USB3 Core device". 'dwc3' sub node for "DWC3-USB3 Core device".
"vdda33" : 3.3V analog voltage supply is applied to remove Dp & Dm pull "vdda33" : 3.3V analog voltage supply is applied to remove Dp & Dm pull
downs for proper USB charger detection by charger driver. downs for proper USB charger detection by charger driver.
"vdda18" : 1.8V analog voltage supply always required to be turned on
anytime the 3.3V supply is on.
Optional properties : Optional properties :
- Refer to "Documentation/devicetree/bindings/arm/msm/msm_bus.txt" for - Refer to "Documentation/devicetree/bindings/arm/msm/msm_bus.txt" for

View file

@ -4377,6 +4377,7 @@
USB3_GDSC-supply = <&gdsc_usb30>; USB3_GDSC-supply = <&gdsc_usb30>;
vdda33-supply = <&pma8084_l24>; vdda33-supply = <&pma8084_l24>;
vdda18-supply = <&pma8084_l6>;
qcom,dwc-usb3-msm-tx-fifo-size = <29696>; qcom,dwc-usb3-msm-tx-fifo-size = <29696>;
qcom,dwc-usb3-msm-qdss-tx-fifo-size = <8192>; qcom,dwc-usb3-msm-qdss-tx-fifo-size = <8192>;
qcom,misc-ref = <&pma8084_misc>; qcom,misc-ref = <&pma8084_misc>;

View file

@ -568,6 +568,7 @@
USB3_GDSC-supply = <&gdsc_usb30>; USB3_GDSC-supply = <&gdsc_usb30>;
vdda33-supply = <&pmd9635_l10>; vdda33-supply = <&pmd9635_l10>;
vdda18-supply = <&pmd9635_l8>;
qcom,usb-dbm = <&dbm_1p5>; qcom,usb-dbm = <&dbm_1p5>;
qcom,msm-bus,name = "usb3"; qcom,msm-bus,name = "usb3";

View file

@ -880,6 +880,7 @@
"pmic_id_irq"; "pmic_id_irq";
USB3_GDSC-supply = <&gdsc_usb30>; USB3_GDSC-supply = <&gdsc_usb30>;
vdda33-supply = <&pmd9635_l10>; vdda33-supply = <&pmd9635_l10>;
vdda18-supply = <&pmd9635_l8>;
qcom,usb-dbm = <&dbm_1p5>; qcom,usb-dbm = <&dbm_1p5>;
qcom,msm-bus,name = "usb3"; qcom,msm-bus,name = "usb3";

View file

@ -1575,6 +1575,7 @@
vbus_dwc3-supply = <&pm8941_mvs1>; vbus_dwc3-supply = <&pm8941_mvs1>;
vdda33-supply = <&pm8941_l24>; vdda33-supply = <&pm8941_l24>;
vdda18-supply = <&pm8941_l6>;
qcom,misc-ref = <&pm8941_misc>; qcom,misc-ref = <&pm8941_misc>;
dwc_usb3-adc_tm = <&pm8941_adc_tm>; dwc_usb3-adc_tm = <&pm8941_adc_tm>;
qcom,dwc-usb3-msm-tx-fifo-size = <29696>; qcom,dwc-usb3-msm-tx-fifo-size = <29696>;

View file

@ -352,4 +352,5 @@
&usb3 { &usb3 {
vdda33-supply = <&pm8994_l24>; vdda33-supply = <&pm8994_l24>;
vdda18-supply = <&pm8994_l6>;
}; };

View file

@ -235,4 +235,5 @@
&usb3 { &usb3 {
vdda33-supply = <&pma8084_l24>; vdda33-supply = <&pma8084_l24>;
vdda18-supply = <&pma8084_l6>;
}; };

View file

@ -2693,6 +2693,7 @@
USB3_GDSC-supply = <&gdsc_usb30>; USB3_GDSC-supply = <&gdsc_usb30>;
vdda33-supply = <&pm8994_l24>; vdda33-supply = <&pm8994_l24>;
vdda18-supply = <&pm8994_l6>;
vbus_dwc3-supply = <&smbcharger_charger_otg>; vbus_dwc3-supply = <&smbcharger_charger_otg>;
qcom,dwc-usb3-msm-tx-fifo-size = <29696>; qcom,dwc-usb3-msm-tx-fifo-size = <29696>;
qcom,dwc-usb3-msm-qdss-tx-fifo-size = <8192>; qcom,dwc-usb3-msm-qdss-tx-fifo-size = <8192>;

View file

@ -1522,6 +1522,7 @@
USB3_GDSC-supply = <&gdsc_usb30>; USB3_GDSC-supply = <&gdsc_usb30>;
vdda33-supply = <&pm8994_l24>; vdda33-supply = <&pm8994_l24>;
vdda18-supply = <&pm8994_l6>;
vbus_dwc3-supply = <&smbcharger_charger_otg>; vbus_dwc3-supply = <&smbcharger_charger_otg>;
qcom,dwc-usb3-msm-tx-fifo-size = <29696>; qcom,dwc-usb3-msm-tx-fifo-size = <29696>;
qcom,dwc-usb3-msm-qdss-tx-fifo-size = <8192>; qcom,dwc-usb3-msm-qdss-tx-fifo-size = <8192>;

View file

@ -141,6 +141,9 @@ MODULE_PARM_DESC(dcp_max_current, "max current drawn for DCP charger");
#define DWC3_3P3_VOL_MIN 3075000 /* uV */ #define DWC3_3P3_VOL_MIN 3075000 /* uV */
#define DWC3_3P3_VOL_MAX 3200000 /* uV */ #define DWC3_3P3_VOL_MAX 3200000 /* uV */
#define DWC3_3P3_HPM_LOAD 30000 /* uA */ #define DWC3_3P3_HPM_LOAD 30000 /* uA */
#define DWC3_1P8_VOL_MIN 1800000 /* uV */
#define DWC3_1P8_VOL_MAX 1800000 /* uV */
#define DWC3_1P8_HPM_LOAD 30000 /* uA */
/* TZ SCM parameters */ /* TZ SCM parameters */
#define DWC3_MSM_RESTORE_SCM_CFG_CMD 0x2 #define DWC3_MSM_RESTORE_SCM_CFG_CMD 0x2
@ -181,6 +184,7 @@ struct dwc3_msm {
/* VBUS regulator if no OTG and running in host only mode */ /* VBUS regulator if no OTG and running in host only mode */
struct regulator *vbus_otg; struct regulator *vbus_otg;
struct regulator *vdda33; struct regulator *vdda33;
struct regulator *vdda18;
struct dwc3_ext_xceiv ext_xceiv; struct dwc3_ext_xceiv ext_xceiv;
bool resume_pending; bool resume_pending;
atomic_t pm_suspended; atomic_t pm_suspended;
@ -2159,10 +2163,30 @@ static int dwc3_msm_remove_pulldown(struct dwc3_msm *mdwc, bool rm_pulldown)
if (!rm_pulldown) if (!rm_pulldown)
goto disable_vdda33; goto disable_vdda33;
ret = regulator_set_optimum_mode(mdwc->vdda18, DWC3_1P8_HPM_LOAD);
if (ret < 0) {
dev_err(mdwc->dev, "Unable to set HPM of vdda18:%d\n", ret);
return ret;
}
ret = regulator_set_voltage(mdwc->vdda18, DWC3_1P8_VOL_MIN,
DWC3_1P8_VOL_MAX);
if (ret) {
dev_err(mdwc->dev,
"Unable to set voltage for vdda18:%d\n", ret);
goto put_vdda18_lpm;
}
ret = regulator_enable(mdwc->vdda18);
if (ret) {
dev_err(mdwc->dev, "Unable to enable vdda18:%d\n", ret);
goto unset_vdda18;
}
ret = regulator_set_optimum_mode(mdwc->vdda33, DWC3_3P3_HPM_LOAD); ret = regulator_set_optimum_mode(mdwc->vdda33, DWC3_3P3_HPM_LOAD);
if (ret < 0) { if (ret < 0) {
dev_err(mdwc->dev, "Unable to set HPM of vdda33:%d\n", ret); dev_err(mdwc->dev, "Unable to set HPM of vdda33:%d\n", ret);
return ret; goto disable_vdda18;
} }
ret = regulator_set_voltage(mdwc->vdda33, DWC3_3P3_VOL_MIN, ret = regulator_set_voltage(mdwc->vdda33, DWC3_3P3_VOL_MIN,
@ -2197,6 +2221,22 @@ put_vdda33_lpm:
if (ret < 0) if (ret < 0)
dev_err(mdwc->dev, "Unable to set (0) HPM of vdda33\n"); dev_err(mdwc->dev, "Unable to set (0) HPM of vdda33\n");
disable_vdda18:
ret = regulator_disable(mdwc->vdda18);
if (ret)
dev_err(mdwc->dev, "Unable to disable vdda18:%d\n", ret);
unset_vdda18:
ret = regulator_set_voltage(mdwc->vdda18, 0, DWC3_1P8_VOL_MAX);
if (ret)
dev_err(mdwc->dev,
"Unable to set (0) voltage for vdda18:%d\n", ret);
put_vdda18_lpm:
ret = regulator_set_optimum_mode(mdwc->vdda18, 0);
if (ret < 0)
dev_err(mdwc->dev, "Unable to set LPM of vdda18\n");
return ret; return ret;
} }
@ -2869,6 +2909,12 @@ static int dwc3_msm_probe(struct platform_device *pdev)
return PTR_ERR(mdwc->vdda33); return PTR_ERR(mdwc->vdda33);
} }
mdwc->vdda18 = devm_regulator_get(dev, "vdda18");
if (IS_ERR(mdwc->vdda18)) {
dev_err(&pdev->dev, "unable to get vdda18 supply\n");
return PTR_ERR(mdwc->vdda18);
}
ret = dwc3_msm_config_gdsc(mdwc, 1); ret = dwc3_msm_config_gdsc(mdwc, 1);
if (ret) { if (ret) {
dev_err(&pdev->dev, "unable to configure usb3 gdsc\n"); dev_err(&pdev->dev, "unable to configure usb3 gdsc\n");