summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-06-19 16:41:55 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-06-19 16:41:55 -0700
commit7d8e4243d281561dad7422bf92791165bd7b5a56 (patch)
tree79610fd6844bdde0e6fd7746f25611b747ca51ac /drivers
parent9e6f650f193868b2a35da4e5ee1e5e45bc8224bf (diff)
parent1164f8f6ee5ae79fd4a423e75eac9d315f8e7ef4 (diff)
Merge "clk: qcom: Check for errors during RCG read"
Diffstat (limited to 'drivers')
-rw-r--r--drivers/clk/qcom/clk-regmap-mux-div.c22
-rw-r--r--drivers/clk/qcom/clk-regmap-mux-div.h3
2 files changed, 17 insertions, 8 deletions
diff --git a/drivers/clk/qcom/clk-regmap-mux-div.c b/drivers/clk/qcom/clk-regmap-mux-div.c
index 9593aefb0bf6..942a68e2a650 100644
--- a/drivers/clk/qcom/clk-regmap-mux-div.c
+++ b/drivers/clk/qcom/clk-regmap-mux-div.c
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2015, Linaro Limited
- * Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2017, 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
@@ -64,20 +64,26 @@ int __mux_div_set_src_div(struct clk_regmap_mux_div *md, u32 src, u32 div)
return -EBUSY;
}
-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, __div, __src;
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;
+
__src = (val >> md->src_shift);
__src &= BIT(md->src_width) - 1;
*src = __src;
@@ -85,6 +91,8 @@ static void __mux_div_get_src_div(struct clk_regmap_mux_div *md, u32 *src,
__div = (val >> md->hid_shift);
__div &= BIT(md->hid_width) - 1;
*div = __div;
+
+ return ret;
}
static int mux_div_enable(struct clk_hw *hw)
@@ -181,7 +189,7 @@ static u8 mux_div_get_parent(struct clk_hw *hw)
const char *name = clk_hw_get_name(hw);
u32 i, div, src = 0;
- __mux_div_get_src_div(md, &src, &div);
+ mux_div_get_src_div(md, &src, &div);
for (i = 0; i < clk_hw_get_num_parents(hw); i++)
if (src == md->parent_map[i].cfg)
@@ -222,7 +230,7 @@ static unsigned long mux_div_recalc_rate(struct clk_hw *hw, unsigned long prate)
int i, num_parents = clk_hw_get_num_parents(hw);
const char *name = clk_hw_get_name(hw);
- __mux_div_get_src_div(md, &src, &div);
+ mux_div_get_src_div(md, &src, &div);
for (i = 0; i < num_parents; i++)
if (src == md->parent_map[i].cfg) {
struct clk_hw *p = clk_hw_get_parent_by_index(hw, i);
diff --git a/drivers/clk/qcom/clk-regmap-mux-div.h b/drivers/clk/qcom/clk-regmap-mux-div.h
index 6fac5c54a824..63a696a96033 100644
--- a/drivers/clk/qcom/clk-regmap-mux-div.h
+++ b/drivers/clk/qcom/clk-regmap-mux-div.h
@@ -1,6 +1,6 @@
/*
* Copyright (c) 2015, Linaro Limited
- * Copyright (c) 2014, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014, 2017, 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
@@ -61,5 +61,6 @@ struct clk_regmap_mux_div {
extern const struct clk_ops clk_regmap_mux_div_ops;
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