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

Commit 203a3ea2 authored by Amit Nischal's avatar Amit Nischal Committed by Naveen Yadav
Browse files

clk: qcom: Check for errors during RCG read



There could be instances where the RCG configuration update or readback
could fail. Notify the caller of the failure. Add support to change
scope of mux_div_get_src_div() in order to use it globally.

Change-Id: Ica07c28cede695785db81697effcb40ab6b717d4
Signed-off-by: default avatarAmit Nischal <anischal@codeaurora.org>
Signed-off-by: default avatarTaniya Das <tdas@codeaurora.org>
Signed-off-by: default avatarNaveen Yadav <naveenky@codeaurora.org>
parent 7d2d40a8
Loading
Loading
Loading
Loading
+13 −5
Original line number Diff line number Diff line
@@ -56,20 +56,26 @@ int mux_div_set_src_div(struct clk_regmap_mux_div *md, u32 src, u32 div)
}
EXPORT_SYMBOL_GPL(mux_div_set_src_div);

static void mux_div_get_src_div(struct clk_regmap_mux_div *md, u32 *src,
int mux_div_get_src_div(struct clk_regmap_mux_div *md, u32 *src,
				  u32 *div)
{
	int ret = 0;
	u32 val, d, s;
	const char *name = clk_hw_get_name(&md->clkr.hw);

	regmap_read(md->clkr.regmap, CMD_RCGR + md->reg_offset, &val);
	ret = regmap_read(md->clkr.regmap, CMD_RCGR + md->reg_offset, &val);
	if (ret)
		return ret;

	if (val & CMD_RCGR_DIRTY_CFG) {
		pr_err("%s: RCG configuration is pending\n", name);
		return;
		return -EBUSY;
	}

	regmap_read(md->clkr.regmap, CFG_RCGR + md->reg_offset, &val);
	ret = regmap_read(md->clkr.regmap, CFG_RCGR + md->reg_offset, &val);
	if (ret)
		return ret;

	s = (val >> md->src_shift);
	s &= BIT(md->src_width) - 1;
	*src = s;
@@ -77,6 +83,8 @@ static void mux_div_get_src_div(struct clk_regmap_mux_div *md, u32 *src,
	d = (val >> md->hid_shift);
	d &= BIT(md->hid_width) - 1;
	*div = d;

	return ret;
}

static inline bool is_better_rate(unsigned long req, unsigned long best,
+1 −0
Original line number Diff line number Diff line
@@ -40,5 +40,6 @@ struct clk_regmap_mux_div {

extern const struct clk_ops clk_regmap_mux_div_ops;
extern int mux_div_set_src_div(struct clk_regmap_mux_div *md, u32 src, u32 div);
int mux_div_get_src_div(struct clk_regmap_mux_div *md, u32 *src, u32 *div);

#endif