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

Commit da3967d9 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mink: Fix clock refcounting"

parents 9eeb88bc 41aac78d
Loading
Loading
Loading
Loading
+26 −28
Original line number Diff line number Diff line
@@ -140,13 +140,19 @@ static void disable_clocks(void)
{
	int i;

	if (g_clk.clk_access_cnt == 0 || --g_clk.clk_access_cnt > 0)
		return;

	for (i = CE_MAX_CLK; i > 0; i--)
		SMCINVOKE_DISABLE_CLK(g_clk.clks[i-1]);
}

static int enable_clocks(void)
{
	int rc = 0, i;
	int rc = 0, i, j;

	if (g_clk.clk_access_cnt > 0)
		goto out;

	for (i = 0; i < CE_MAX_CLK; i++) {
		if (g_clk.clks[i]) {
@@ -158,9 +164,12 @@ static int enable_clocks(void)
		}
	}
	if (rc) {
		for ( ; i >= 0; i--)
			SMCINVOKE_DISABLE_CLK(g_clk.clks[i]);
		for (j = i-1; j >= 0; j--)
			SMCINVOKE_DISABLE_CLK(g_clk.clks[j]);
		return rc;
	}
out:
	g_clk.clk_access_cnt++;
	return rc;
}

@@ -176,16 +185,6 @@ static int set_msm_bus_request_locked(enum bandwidth_request_mode mode)
		return ret;
	}

	if (current_mode == mode) {
		if (mode == BW_INACTIVE) {
			if (g_clk.clk_access_cnt)
				g_clk.clk_access_cnt--;
		} else {
			g_clk.clk_access_cnt++;
		}
		return ret;
	}

	if (mode == BW_INACTIVE) {
		disable_clocks();
	} else {
@@ -194,7 +193,9 @@ static int set_msm_bus_request_locked(enum bandwidth_request_mode mode)
			goto out;
	}

	ret = msm_bus_scale_client_update_request(qsee_perf_client, mode);
	if (current_mode != mode) {
		ret = msm_bus_scale_client_update_request(
					qsee_perf_client, mode);
		if (ret) {
			pr_err("BW req failed(%d) MODE (%d)\n", ret, mode);
			if (mode == BW_INACTIVE)
@@ -204,11 +205,6 @@ static int set_msm_bus_request_locked(enum bandwidth_request_mode mode)
			goto out;
		}
		current_mode = mode;
	if (mode == BW_INACTIVE) {
		if (g_clk.clk_access_cnt)
			g_clk.clk_access_cnt--;
	} else {
		g_clk.clk_access_cnt++;
	}
out:
	return ret;
@@ -220,6 +216,8 @@ static void deinit_clocks(void)

	for (i = CE_MAX_CLK; i > 0; i--)
		SMCINVOKE_DEINIT_CLK(g_clk.clks[i-1])

	g_clk.clk_access_cnt = 0;
}

static struct clk *get_clk(const char *clk_name)