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

Commit 568e69ee authored by Pratham Pratap's avatar Pratham Pratap
Browse files

dwc3-msm: Add default-bus-vote property to select default USB bus voting



On newer platform USB can operate when system into low power saving mode
like SVS. Currently driver is always voting for NOMINAL bus voting which
would prevent system to go into SVS mode. Hence add default-bus-vote
property to select default bus voting on such platform.

Change-Id: I493a7dd68964fadaada622e68b7b3c62c46ada6b
Signed-off-by: default avatarMayank Rana <mrana@codeaurora.org>
Signed-off-by: default avatarPratham Pratap <prathampratap@codeaurora.org>
parent 6d464a5c
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -296,6 +296,7 @@ struct dwc3_msm {
	unsigned int		max_power;
	bool			charging_disabled;
	enum dwc3_drd_state	drd_state;
	enum bus_vote		default_bus_vote;
	enum bus_vote		override_bus_vote;
	u32			bus_perf_client;
	struct msm_bus_scale_pdata	*bus_scale_table;
@@ -2338,7 +2339,7 @@ static int dwc3_msm_update_bus_bw(struct dwc3_msm *mdwc, enum bus_vote bv)
	 * from userspace.
	 */
	if (bv >= mdwc->bus_scale_table->num_usecases)
		bv_index = BUS_VOTE_NOMINAL;
		bv_index = mdwc->default_bus_vote;
	else if (bv == BUS_VOTE_NONE)
		bv_index = BUS_VOTE_NONE;

@@ -2568,7 +2569,7 @@ static int dwc3_msm_resume(struct dwc3_msm *mdwc)
	if (mdwc->in_host_mode && mdwc->max_rh_port_speed == USB_SPEED_HIGH)
		dwc3_msm_update_bus_bw(mdwc, BUS_VOTE_SVS);
	else
		dwc3_msm_update_bus_bw(mdwc, BUS_VOTE_NOMINAL);
		dwc3_msm_update_bus_bw(mdwc, mdwc->default_bus_vote);

	/* Vote for TCXO while waking up USB HSPHY */
	ret = clk_prepare_enable(mdwc->xo_clk);
@@ -3364,7 +3365,7 @@ static ssize_t bus_vote_store(struct device *dev,
			&& (mdwc->max_rh_port_speed == USB_SPEED_HIGH))
			bv = BUS_VOTE_SVS;
		else
			bv = BUS_VOTE_NOMINAL;
			bv = mdwc->default_bus_vote;

		dwc3_msm_update_bus_bw(mdwc, bv);
	}
@@ -3633,10 +3634,20 @@ static int dwc3_msm_probe(struct platform_device *pdev)
		goto put_dwc3;
	}

	/* use default as nominal bus voting */
	mdwc->default_bus_vote = BUS_VOTE_NOMINAL;
	ret = of_property_read_u32(node, "qcom,default-bus-vote",
			&mdwc->default_bus_vote);

	mdwc->bus_scale_table = msm_bus_cl_get_pdata(pdev);
	if (mdwc->bus_scale_table) {
		mdwc->bus_perf_client =
			msm_bus_scale_register_client(mdwc->bus_scale_table);

		/* default_bus_vote is out of range, use nominal bus voting */
		if (mdwc->default_bus_vote >=
				mdwc->bus_scale_table->num_usecases)
			mdwc->default_bus_vote = BUS_VOTE_NOMINAL;
	}

	dwc = platform_get_drvdata(mdwc->dwc3);
@@ -3881,7 +3892,7 @@ static int dwc3_msm_host_notifier(struct notifier_block *nb,
			dev_dbg(mdwc->dev, "set core clk rate %ld\n",
				mdwc->core_clk_rate);
			mdwc->max_rh_port_speed = USB_SPEED_UNKNOWN;
			dwc3_msm_update_bus_bw(mdwc, BUS_VOTE_NOMINAL);
			dwc3_msm_update_bus_bw(mdwc, mdwc->default_bus_vote);
		}
	}