Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18cd8089 authored by Jack Pham's avatar Jack Pham
Browse files

usb: dwc3-msm: Make power collapse and power-on-reset mandatory



Upon cable disconnect, the controller is allowed to enter the
lowest possible power state, which may involve power collapse
via GDSC. Even if GDSC is unavailable on some configurations,
when powering back up the controller it is wise to perform the
full power-on-reset sequence.

Currently these behaviors are optional and enabled via device
tree properties. There is no reason not to perform this sequence
always so make them mandatory and remove the DT properties.

Change-Id: I9b233402c90383782c53732d54e76360f4ea1b55
Signed-off-by: default avatarJack Pham <jackp@codeaurora.org>
parent 703f9e32
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -35,10 +35,6 @@ Optional properties :
- qcom,dwc-usb3-msm-tx-fifo-size: If present, represents RAM size available for
		TX fifo allocation in bytes
- qcom,usb-dbm : phandle for the DBM device
- qcom,power-collapse-on-cable-disconnect: If present, USB core will perform
	power collapse when cable is disconencted.
- qcom,por-after-power-collapse: If present, a partial POR sequence will be performed
  when recovering from power collapse.
- qcom,lpm-to-suspend-delay-ms: Indicates timeout (in milliseconds) to release wakeup source
  after USB is kept into LPM.
- qcom,vbus-present: Indicates that there is no VBUS indication from PMIC. Assume VBUS is
+3 −17
Original line number Diff line number Diff line
@@ -234,9 +234,6 @@ struct dwc3_msm {
#define MDWC3_ASYNC_IRQ_WAKE_CAPABILITY	BIT(1)
#define MDWC3_POWER_COLLAPSE		BIT(2)

	bool power_collapse; /* power collapse on cable disconnect */
	bool power_collapse_por; /* perform POR sequence after power collapse */

	unsigned int		irq_to_affin;
	struct notifier_block	dwc3_cpu_notifier;

@@ -1978,7 +1975,7 @@ static int dwc3_msm_suspend(struct dwc3_msm *mdwc)
	clk_disable_unprepare(mdwc->xo_clk);

	/* Perform controller power collapse */
	if (!mdwc->in_host_mode && !mdwc->vbus_active && mdwc->power_collapse) {
	if (!mdwc->in_host_mode && !mdwc->vbus_active) {
		mdwc->lpm_flags |= MDWC3_POWER_COLLAPSE;
		dev_dbg(mdwc->dev, "%s: power collapse\n", __func__);
		dwc3_msm_config_gdsc(mdwc, 0);
@@ -2086,10 +2083,8 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc)

	/* Recover from controller power collapse */
	if (mdwc->lpm_flags & MDWC3_POWER_COLLAPSE) {
		dev_dbg(mdwc->dev, "%s: exit power collapse (POR=%d)\n",
			__func__, mdwc->power_collapse_por);
		dev_dbg(mdwc->dev, "%s: exit power collapse\n", __func__);

		if (mdwc->power_collapse_por)
		dwc3_msm_power_collapse_por(mdwc);

		/* Re-enable IN_P3 event */
@@ -2730,15 +2725,6 @@ static int dwc3_msm_probe(struct platform_device *pdev)
	mdwc->charging_disabled = of_property_read_bool(node,
				"qcom,charging-disabled");

	mdwc->power_collapse_por = of_property_read_bool(node,
		"qcom,por-after-power-collapse");

	mdwc->power_collapse = of_property_read_bool(node,
		"qcom,power-collapse-on-cable-disconnect");

	dev_dbg(&pdev->dev, "power collapse=%d, POR=%d\n",
		mdwc->power_collapse, mdwc->power_collapse_por);

	ret = of_property_read_u32(node, "qcom,lpm-to-suspend-delay-ms",
				&mdwc->lpm_to_suspend_delay);
	if (ret) {