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

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

Merge "clk: qcom: Retrieve pre_div from freq_tbl for shared RCG"

parents 6e6f0306 4455d289
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013, 2016-2017, The Linux Foundation. All rights reserved.
 * Copyright (c) 2013, 2016-2018, The Linux Foundation. All rights reserved.
 *
 * This software is licensed under the terms of the GNU General Public
 * License version 2, as published by the Free Software Foundation, and
@@ -246,12 +246,14 @@ static unsigned long
clk_rcg2_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
{
	struct clk_rcg2 *rcg = to_clk_rcg2(hw);
	const struct freq_tbl *f_curr;
	u32 cfg, hid_div, m = 0, n = 0, mode = 0, mask;

	if (rcg->flags & DFS_ENABLE_RCG)
		return rcg->current_freq;

	if (rcg->enable_safe_config && !clk_hw_is_prepared(hw)) {
	if (rcg->enable_safe_config && (!clk_hw_is_prepared(hw)
				|| !clk_hw_is_enabled(hw))) {
		if (!rcg->current_freq)
			rcg->current_freq = cxo_f.freq;
		return rcg->current_freq;
@@ -271,9 +273,17 @@ clk_rcg2_recalc_rate(struct clk_hw *hw, unsigned long parent_rate)
		mode >>= CFG_MODE_SHIFT;
	}

	if (rcg->enable_safe_config) {
		f_curr = qcom_find_freq(rcg->freq_tbl, rcg->current_freq);
		if (!f_curr)
			return -EINVAL;

		hid_div = f_curr->pre_div;
	} else {
		mask = BIT(rcg->hid_width) - 1;
		hid_div = cfg >> CFG_SRC_DIV_SHIFT;
		hid_div &= mask;
	}

	return clk_rcg2_calc_rate(parent_rate, m, n, mode, hid_div);
}